在Linux 下 訪 問(wèn)MS SQL Server 數(shù) 據(jù) 庫(kù)(轉(zhuǎn)載)
2024-08-28 00:23:35
供稿:網(wǎng)友
寧 波 保 稅 區(qū) 官 委 會(huì) 計(jì) 算 中 心 董 保 華
---- linux 作 為 一 個(gè) 免 費(fèi) 的unix 類(lèi) 操 作 系 統(tǒng), 以 其 開(kāi) 放 性 源 代 碼、 多 任 務(wù)、x window 等 特 點(diǎn) 為 眾 多 的 用 戶 所 采 用, 并 有 很 多 企 業(yè) 采 用linux 來(lái) 作 為 其 內(nèi) 部 網(wǎng) 的 全 功 能 服 務(wù) 器(www,ftp,email、dns)。 企 業(yè) 的 內(nèi) 部 網(wǎng) 不 僅 要 提 供 文 本 信 息 的 訪 問(wèn), 還 要 能 提 供 對(duì) 企 業(yè) 關(guān) 系 數(shù) 據(jù) 庫(kù) 中 的 信 息 的 訪 問(wèn)。sql server 以 其 低 成 本、 性 能 高 以 及 與nt 的 有 效 集 成 等 特 性 為 許 多 企 業(yè) 所 采 用, 但microsoft 不 提 供 其unix 下 的 客 戶 端, 為 這 類(lèi) 應(yīng) 用 帶 來(lái) 了 困 難。 本 文 則 提 出 了 這 一 問(wèn) 題 的 解 決 方 案。
安 裝sybase 客 戶 端
---- 首 先 從microsoft sql server 和sybase sql server 的 關(guān) 系 說(shuō) 起。 兩 公 司 曾 共 同 開(kāi) 發(fā)os/2 上 的 數(shù) 據(jù) 庫(kù) sql server for os/2, 此 后 兩 公 司 又 獨(dú) 立 開(kāi) 發(fā) 升 級(jí) 系 統(tǒng),sybase 的 客 戶 端 可 以 訪 問(wèn)microsoft sql server。
---- 和 其 他 數(shù) 據(jù) 庫(kù) 公 司 相 比, 可 以 說(shuō)sybase 公 司 對(duì)linux 是 最 有 善 意 的, 它 雖 不 提 供linux 下 的sql server, 但 提 供 了 免 費(fèi) 的ct -lib 的 客 戶 端, 這 也 可 能 是 許 多it 管 理 人 員 在 為 公 司 數(shù) 據(jù) 庫(kù) 選 型 時(shí) 不 再 考 慮oracle 或informix 的 理 由 之 一。 當(dāng) 然 現(xiàn) 在 情 況 有 所 改 變。
----sybase 公 司 發(fā) 布 的openclient for linux 是a.out 格 式 的, 在 互 聯(lián) 網(wǎng) 上 有 人 將 其 轉(zhuǎn) 化 為elf 和 動(dòng) 態(tài) 鏈 接 的elf 格 式, 可 從 下 列 地 址 上 尋 找 下 載:http://www.mbay.net/ ~mpeppler。 最 好 同 時(shí) 下 載 兩 個(gè) 版 本, 正 常 使 用 時(shí) 采 用 動(dòng) 態(tài) 鏈 接 的 版 本, 但 有 的 程 序 在 編 譯 時(shí) 可 能 需 要 一 個(gè) 庫(kù)(libblk.a), 只 在elf 里 面 包 含。
---- 下 載 以 后, 鍵 入 如 下 命 令 展 開(kāi)( 假 設(shè) 當(dāng) 前 目 錄 是/usr/tmp):
----tar zxvf linux elf dynamic tar.gz
---- 然 后 將 其 移 至/usr/local 目 錄:
----mv sybase /usr/local
---- 編 譯 和 使 用sybase 客 戶 端 需 要 進(jìn) 行 如 下 的 設(shè) 置:
----1 . interface 文 件 舉 例 如 下:
----mssql
----query tcp ether mysql 1433
---- 其 中:
mssql 是 客 戶 端 使 用 的 服 務(wù) 器 名, 以 后 引 用mssql 即 可;
mysql 是 服 務(wù) 器 的 地 址 或 名 字, 如 果 是 名 字, 則 系 統(tǒng) 能 夠 查 到 其ip 地 址;
1433 是sql server 的 端 口 號(hào),microsoft sql server 的 缺 省 值 是1433,sybase 是5000。
----2 . sybase 環(huán) 境 變 量, 內(nèi) 容 是sybase 客 戶 端 所 在 的 目 錄:
----export sybase=/usr/local/sybase
----3 . 如 果 編 譯sybase 客 戶 端 中 的 例 子, 則 還 要 設(shè) 置 環(huán) 境 變 量sybplatform:
----export sybplatform=linux
---- 并 且 修 改 其 頭 文 件 中 關(guān) 于 服 務(wù) 器 名 稱 及 用 戶 名 和 口 令 的 描 述。
使 用sqsh 界 面 訪 問(wèn)sql server
----sybase 客 戶 端 提 供 了xisql 工 具, 但 更 多 的 人 使 用 的 是sqsh,sqsh 是sqshell 的 縮 寫(xiě), 是 改 進(jìn) 了 的isql, 可 從 下 列 地 址 下 載:http://www.voicenet.com/ ~gray/。 當(dāng) 前 的 最 新 版 本 是1.6.0。 假 設(shè) 下 載 后 的 文 件 放 在/usr/tmp 目 錄 下:
----tar zxvf sqsq 1.6.0 tar.gz
----cd sqsh 1.6.0
----./configure
----make;make install
---- 然 后, 將 生 成 的 可 執(zhí) 行 文 件sqsh 安 裝 到/usr/local/bin/ 目 錄 下。
----sqsh 的 使 用 如 下:
---- # sqsh - -uusername - -ppassword - -sservername
---- 其 中username 和password 是 用 戶 名 和 口 令,servername 是 在interface 文 件 中 定 義 的 服 務(wù) 器 名( 如 例 子 中 的mssql)。
----sqsh 是 交 互 式 的 命 令 行 界 面, 命 令 用 輸 入go 來(lái) 執(zhí) 行, 命 令 如 果 較 長(zhǎng) 可 直 接 分 成 幾 行 書(shū) 寫(xiě), 以 回 車(chē) 換 行 即 可。
---- 如 下 是 一 個(gè) 例 子:
----1> use pubs
----2> go
----1> select * from authors
----2> go 采 用ct -lib 編 寫(xiě) 應(yīng) 用 程 序
---- 由 于sybase 的linux 客 戶 端 不 提 供db -library, 所 以 應(yīng) 采 用ct -library 來(lái) 編 寫(xiě) 應(yīng) 用 程 序, 采 用ct -library 編 寫(xiě) 應(yīng) 用 程 序 可 參 考 例 子, 詳 細(xì) 的 編 程 說(shuō) 明 可 以 參 考sybase 的 說(shuō) 明。 利 用sybperl 編 寫(xiě) 應(yīng) 用 程 序
----sybperl 是sybase 的perl 擴(kuò) 展, 可 利 用perl 語(yǔ) 言 來(lái) 訪 問(wèn)sql server, 或 者 編 寫(xiě)cgi 程 序。
----sybperl 可 從 下 列 地 址 取 得http://www.mbay.net/ ~mpeppler。 當(dāng) 前 的 最 新 版 本 是2.9.5。
---- 取 得sybperl 的 源 代 碼 展 開(kāi) 以 后, 需 要 修 改 一 下config 文 件, 以 下 是 幾 個(gè) 參 數(shù):
---- 下 一 個(gè) 要 修 改 的 文 件 是pwd, 這 是 用 來(lái) 進(jìn) 行 測(cè) 試 的, 將 其 中 的 服 務(wù) 器 名、 用 戶 名、 用 戶 口 令 設(shè) 置 成 自 己 的 配 置 即 可。 然 后 進(jìn) 行 編 譯:
----perl makefile.pl
----make; make test; make install
---- 安 裝 成 功 以 后, 即 可 使 用sybperl 進(jìn) 行 編 程。 下 面 是 一 個(gè) 簡(jiǎn) 單 的 例 子。
#!/usr/bin/perl
use sybase::ctlib;
$dbh=new sybase::ctlib 'sa','','mssql';
$dbh ->ct_execute("select au_id, au_lname,
au_fname from pubs.dbo.authors");
while( $dbh ->ct_results( $restype) == cs_succeed) {
next unless $dbh ->ct_fetchable( $restype);
while(( $au_id, $au_lname, $au_fname) = $dbh ->ct_fetch){
print " $au_id - $au_lname au_fname/n";
}
}
----可 以 看 出, 短 短 幾 行 語(yǔ) 句, 就 可 以 完 成 對(duì) 數(shù) 據(jù) 庫(kù) 的 操 作。
----以 上 從 幾 個(gè) 方 面 對(duì) 在linux 下 訪 問(wèn)ms sql server 數(shù) 據(jù) 庫(kù) 進(jìn) 行 了 說(shuō) 明, 介 紹 了 基 本 的api 編 程、sqsh 命 令 行 訪 問(wèn)、perl 訪 問(wèn)。 其 實(shí), 在linux 下 還 可 采 用 其 他 方 式 進(jìn) 行 訪 問(wèn), 如 采 用 第 四 級(jí) 的jdbc 進(jìn) 行 訪 問(wèn), 這 時(shí) 除 了java 和jdbc 外, 并 不 需 要 其 他 軟 件( 具 體 信 息 可 訪 問(wèn)http://www.connectsw.com)。