首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Linux 下 Sybase ASE 安裝與 Perl DBD::Sybase 連線完整指南

     編輯:PHP 相關知識

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

編譯常見問題排解

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 年代產品),已停止支援。現代專案建議:

  1. 遷移至 SAP ASE 16+:Sybase 被 SAP 收購,新版支援現代 OS、驅動
  2. 改用 FreeTDS + DBD::Sybase:開源 TDS 協定實作,支援 Linux/macOS/Windows
  3. 考慮遷移至 PostgreSQL/MySQL:開源、社群活躍、雲端原生支援
  4. 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 版本)、人才斷層。新專案強烈建議採用現代開源資料庫或雲端託管方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤原因解決
找不到 sybase.hOpenClient 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 版本對應