Sybase ASE 11.9.2 for Linux 安裝
RPM 套件下載
- 官網:Sybase Linux 下載頁
- 三個必要套件:
sybase-common-11.9.2-1.i386.rpm
sybase-ase-11.9.2-1.i386.rpm
sybase-openclient-11.1.1-1.i386.rpm
標準安裝 (預設路徑 /opt/sybase-11.9.2)
rpm -hiv sybase-common-11.9.2-1.i386.rpm
rpm -hiv sybase-ase-11.9.2-1.i386.rpm
rpm -hiv sybase-openclient-11.1.1-1.i386.rpm
自訂安裝路徑 (例:/home/sybase)
rpm --relocate "/opt/sybase-11.9.2"="/home/sybase" -hiv sybase-common-11.9.2-1.i386.rpm
rpm --relocate "/opt/sybase-11.9.2"="/home/sybase" -hiv sybase-ase-11.9.2-1.i386.rpm
rpm --relocate "/opt/sybase-11.9.2"="/home/sybase" -hiv sybase-openclient-11.1.1-1.i386.rpm
安裝後設定
# 切換到 sybase 用戶 (或安裝用戶)
su - sybase
# 執行安裝腳本
$HOME/install/sybinstall.sh
# 載入環境變數
source $HOME/.profile
# 環境變數內容 (已在 .profile 設定)
export SYBASE=/home/sybase
export DSQUERY=sybase # 伺服器名稱
# 建立資料庫裝置 (需 X Window)
$HOME/bin/srvbuild
Perl DBI + DBD::Sybase 安裝與連線
套件下載
編譯安裝步驟
# 1. 安裝 DBI 核心
gunzip DBI-1.xx.tar.gz
tar xvf DBI-1.xx.tar
cd DBI-1.xx
perl Makefile.PL
make
make test
make install
# 2. 安裝 DBD::Sybase
gunzip DBD-Sybase-0.xx.tar.gz
tar xvf DBD-Sybase-0.xx.tar
cd DBD-Sybase-0.xx
perl Makefile.PL
make
make test
make install
編譯常見問題排解
| 錯誤 | 原因 | 解決 |
| 找不到 sybase.h | OpenClient SDK 未安裝或路徑錯誤 | 確認 $SYBASE/$SYBASE_OCS/include 存在 |
| 找不到 libsybdb.so | 庫路徑未加入 | export LD_LIBRARY_PATH=$SYBASE/$SYBASE_OCS/lib:$LD_LIBRARY_PATH |
| Makefile.PL 失敗 | Perl 版本不相容 | 檢查 Perl 5.8+,Sybase 版本對應 |
Perl 連線程式範例
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
# 連線參數
my $server = 'SYBASE'; # interfaces 檔中定義的伺服器名稱
my $database = 'mydb';
my $username = 'sa';
my $password = 'secret';
# DSN 格式:dbi:Sybase:server=SERVER;database=DB
my $dsn = "dbi:Sybase:server=$server;database=$database";
# 建立連線
my $dbh = DBI->connect($dsn, $username, $password, {
RaiseError => 1,
PrintError => 0,
AutoCommit => 1,
syb_dbd_server => $server, # 兼容舊版參數
});
print "連線成功: $dsn\n";
# 執行預存程序
my $sth = $dbh->prepare("sp_help");
$sth->execute();
# 逐行處理結果
while (my @row = $sth->fetchrow_array()) {
print join(" | ", @row) . "\n";
}
# 或使用 fetchrow_hashref
$sth = $dbh->prepare("SELECT name, id FROM sysobjects WHERE type = 'U'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref()) {
printf "Table: %-30s ID: %s\n", $row->{name}, $row->{id};
}
# 斷開連線
$dbh->disconnect();
print "連線已關閉\n";
exit 0;
進階應用:錯誤處理與交易控制
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect($dsn, $user, $pass, {
RaiseError => 1, # 例外模式
AutoCommit => 0, # 手動交易控制
});
eval {
# 開始交易
$dbh->do("BEGIN TRANSACTION");
# 批次操作
$sth = $dbh->prepare("INSERT INTO logs (msg, created) VALUES (?, GETDATE())");
for my $msg (@messages) {
$sth->execute($msg);
}
# 提交
$dbh->commit();
print "交易提交成功\n";
};
if ($@) {
# 回滾
eval { $dbh->rollback(); };
warn "交易失敗回滾: $@";
}
$dbh->disconnect();
現代替代方案建議
Sybase ASE 11.9.2 極度老舊 (2000 年代產品),已停止支援。現代專案建議:
- 遷移至 SAP ASE 16+:Sybase 被 SAP 收購,新版支援現代 OS、驅動
- 改用 FreeTDS + DBD::Sybase:開源 TDS 協定實作,支援 Linux/macOS/Windows
- 考慮遷移至 PostgreSQL/MySQL:開源、社群活躍、雲端原生支援
- Perl 現代資料庫存取:
DBIx::Class (ORM)、SQL::Abstract、DBI::db 直接使用
FreeTDS 設定範例 (freetds.conf)
[SYBASE]
host = 192.168.1.100
port = 5000
tds version = 5.0
client charset = UTF-8
環境變數設定
export SYBASE=/usr/local/freetds
export LD_LIBRARY_PATH=$SYBASE/lib:$LD_LIBRARY_PATH
export FREETDSCONF=$SYBASE/etc/freetds.conf
Sybase ASE 曾是金融電信業主流資料庫,但 11.9.2 版本已超過 20 年歷史。維護舊系統時請務必評估安全性風險 (無安全更新)、相容性問題 (現代 OS/Perl 版本)、人才斷層。新專案強烈建議採用現代開源資料庫或雲端託管方案。
- 上一篇文章: PHP 4.2+ 版本 register_globals 關閉後的變數存取正確姿勢
- 下一篇文章: PHP MySQL 登入驗證機制實作:檢查腳本與受保護頁面範例
Copyright ©
程式碼之家 All Rights Reserved