端免安裝部署與連接指南)
簡(jiǎn)介這是一份面向Sybase/SAP SQLAnywhere開(kāi)發(fā)與運(yùn)維人員的解壓縮版ASA12.0客戶(hù)端資源包含完整Sybase Central圖形管理工具及scjview主程序。與常規(guī)安裝包不同它采用免安裝綠色設(shè)計(jì)并內(nèi)置JRE運(yùn)行環(huán)境省去單獨(dú)配置Java與注冊(cè)組件的麻煩解壓后即可直接使用特別適合需要快速搭建數(shù)據(jù)庫(kù)管理環(huán)境、避免繁瑣安裝流程的讀者。整個(gè)zip壓縮包共750個(gè)文件大小約73.93MB以dll運(yùn)行庫(kù)、jar組件、exe可執(zhí)行程序?yàn)橹魍瑫r(shí)包含properties、xml、txt等配置與說(shuō)明文件時(shí)區(qū)映射等輔助數(shù)據(jù)也一應(yīng)俱全目錄結(jié)構(gòu)清晰兼顧工具運(yùn)行與基礎(chǔ)環(huán)境配置。資源已經(jīng)過(guò)嚴(yán)格測(cè)試可直接調(diào)用scjview.exe完成ASA數(shù)據(jù)庫(kù)的日常連接、管理和維護(hù)功能完整可靠目前已吸引784人學(xué)習(xí)下載對(duì)于希望省去安裝成本、快速獲得可用Sybase Central客戶(hù)端的用戶(hù)而言是一套即取即用的實(shí)用工具。1. 解壓縮版 Sybase ASA 12.0 客戶(hù)端工具免安裝工具包到底香在哪很多團(tuán)隊(duì)手里還跑著一批 Sybase ASAAdaptive Server Anywhere12.0 的舊庫(kù)連接客戶(hù)端卻早就找不到了。重新找完整安裝包裝一遍少說(shuō)半小時(shí)起步還要處理安裝器兼容性問(wèn)題。解壓縮版 Sybase ASA 12.0 客戶(hù)端工具的價(jià)值就在這解壓、配置一下路徑、直接連庫(kù)不用碰安裝向?qū)?。我剛?cè)胄袝r(shí)第一次接觸這包也覺(jué)得“綠色版”不過(guò)是省幾步點(diǎn)擊直到在一臺(tái)沒(méi)有安裝權(quán)限的辦公機(jī)上用它救回一個(gè)下不了線的業(yè)務(wù)庫(kù)才意識(shí)到免安裝意味著什么——臨時(shí)環(huán)境、客戶(hù)現(xiàn)場(chǎng)、批量排查都能靠一個(gè)目錄解決。這篇文章面向三類(lèi)人要連舊庫(kù)但不想裝完整客戶(hù)端的人要批量跑腳本、導(dǎo)數(shù)據(jù)、做庫(kù)體檢的人以及被舊庫(kù)兼容問(wèn)題磨過(guò)、想找個(gè)穩(wěn)妥工具兜底的人。2. 解壓即用不等于零配置先搞清楚這套工具包里有什么拿到解壓包先別急著雙擊先看清目錄結(jié)構(gòu)。很多人踩的第一個(gè)坑就是把核心程序單獨(dú)拷走忽略了周邊的依賴(lài)文件結(jié)果 isql 一啟動(dòng)就報(bào)錯(cuò)。解壓版和安裝版的差別在于安裝版會(huì)把程序和依賴(lài)寫(xiě)進(jìn)系統(tǒng)目錄解壓版的所有文件都堆在一個(gè)目錄里缺一個(gè)都不行。2.1 工具包里的主要可執(zhí)行文件isql、dbisql、dbeng12 各管什么ASA 12.0 的客戶(hù)端工具包通常按平臺(tái)分成 bin32、bin64 或 bin 目錄里面大部分是 DLL、INI 配置文件和小部分可執(zhí)行程序。真正日常要用的一般就下面這幾個(gè)??蓤?zhí)行文件職責(zé)什么時(shí)候用dbeng12數(shù)據(jù)庫(kù)引擎用來(lái)啟動(dòng)一個(gè) ASA 數(shù)據(jù)庫(kù)實(shí)例本地起庫(kù)、給其他程序提供連接服務(wù)dbisql圖形界面的交互式 SQL 工具建表、調(diào)試 SQL、看執(zhí)行計(jì)劃isql命令行交互式 SQL 工具批量腳本、無(wú)人值守、自動(dòng)化運(yùn)維dbtool數(shù)據(jù)庫(kù)管理工具新建庫(kù)、備份、校驗(yàn)、修復(fù)受損庫(kù)dbunload數(shù)據(jù)卸載工具把整庫(kù)或單表導(dǎo)成 SQL / XML 文件dbvalid校驗(yàn)工具檢查庫(kù)文件是否損壞我一般把 dbeng12 看成“庫(kù)的守護(hù)進(jìn)程”把 isql 和 dbisql 看成“進(jìn)庫(kù)的門(mén)”。兩個(gè)門(mén)進(jìn)的是同一個(gè)庫(kù)只是操作方式不同dbisql 是窗口點(diǎn)擊isql 是敲命令。真正干活時(shí) isql 更可靠輸出能重定向、能進(jìn)循環(huán)、能留檔dbisql 則適合你還沒(méi)想清楚要查什么、需要邊看邊試的場(chǎng)景。解壓包里的別的東西比如 sample 示例庫(kù)、文檔目錄、插件目錄日??梢圆粍?dòng)。但有幾個(gè)同名不同平臺(tái)的文件要留意Windows 下是 .exe 和 .dllLinux 下是同名無(wú)后綴二進(jìn)制加 .so。這解釋了為什么有人把 Windows 的解壓包整個(gè)拷到 Linux 上跑不動(dòng)——文件體系都不一樣不是“綠色”就能跨系統(tǒng)。2.2 最小可用驗(yàn)證第一件事是確認(rèn)工具鏈完整解壓完不要急著連生產(chǎn)庫(kù)先做一個(gè)最小驗(yàn)證。Windows 下在命令行進(jìn)到解壓目錄確認(rèn)核心程序都在cd /d D:\asa12 dir /b *.exe *.dll | findstr /i isql dbisql dbeng12 dbodbc這一步是確認(rèn) bin 目錄里不缺核心文件。尤其要關(guān)注帶 ODBC 字樣的文件后面通過(guò) ODBC 接第三方工具時(shí)它就是關(guān)鍵。如果輸出里缺了 dbodbc 相關(guān)文件說(shuō)明這個(gè)解壓包不完整趁早換。接著驗(yàn)證命令行工具本身能跑起來(lái)isql -v正常會(huì)輸出一段版本信息能看到 12.0 的字樣和具體的 build 號(hào)。這一步的意義是確認(rèn) isql 能加載它依賴(lài)的 DLL如果這里就報(bào)“找不到指定模塊”說(shuō)明依賴(lài)缺失下面所有步驟都白搭。提示版本號(hào)的尾段能看出是不是打了補(bǔ)丁。12.0 開(kāi)頭的 build 號(hào)數(shù)字越大越新。給舊庫(kù)連客戶(hù)端時(shí)盡量選補(bǔ)丁號(hào)高的版本少碰字符集和加密協(xié)議的老毛病。3. 從命令行到圖形界面的三條連接路徑isql、dbisql、ODBCASA 12.0 連接數(shù)據(jù)庫(kù)的核心概念就一個(gè)連接字符串。無(wú)論走命令行、圖形界面還是 ODBC底層都是拼一段連接參數(shù)。理解了連接字符串三條路徑一通百通。3.1 isql 命令行連接的最小寫(xiě)法與常用開(kāi)關(guān)連一臺(tái)本地已經(jīng)啟動(dòng)的引擎最常見(jiàn)的最短寫(xiě)法isql -c ENG模擬項(xiàng)目X;UIDdba;PWDsql;CHARSETUTF-8這里的 ENG 指引擎名也就是啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例時(shí)給服務(wù)起的名字UID 和 PWD 是登錄賬號(hào)CHARSET 指客戶(hù)端字符集。如果是直接連磁盤(pán)上的庫(kù)文件不經(jīng)過(guò)引擎也可以換成 DBF 參數(shù)isql -c DBFD:\data\模擬項(xiàng)目X.db;UIDdba;PWDsql用 DBF 直連文件的好處是省去啟動(dòng)引擎的步驟適合快速看一眼庫(kù)里有什么壞處是同一時(shí)間只能有一個(gè)程序連進(jìn)這個(gè)庫(kù)文件不自帶并發(fā)處理。日常更推薦走引擎方式先啟動(dòng) dbeng12再用 ENG 去連這樣多個(gè)客戶(hù)端都能訪問(wèn)同一個(gè)庫(kù)。isql 常用開(kāi)關(guān)我整理一下參數(shù)作用-c指定連接字符串優(yōu)先使用-u / -p指定用戶(hù)名和密碼老寫(xiě)法-q靜默模式不打印交互提示-o把查詢(xún)結(jié)果輸出到文件-nogui強(qiáng)制走命令行不彈圖形界面-log記錄連接和錯(cuò)誤日志跑一條批量 SQL 文件時(shí)我一般這么寫(xiě)isql -c ENG模擬項(xiàng)目X;UIDdba;PWDsql;CHARSETUTF-8 -q -o query_result.txt batch.sql這條命令把 batch.sql 里的每一條 SQL 順序執(zhí)行輸出全部寫(xiě)進(jìn) query_result.txt全程不彈任何窗口適合深夜跑批或者無(wú)人值守的場(chǎng)景。參數(shù)說(shuō)明就一條主線-c 管連接- 和 -o 管輸入輸出-q 管行為模式。3.2 dbisql 圖形界面適合建表與調(diào)試 SQL 的交互式會(huì)話dbisql 是圖形化工具同樣接受連接字符串dbisql -c ENG模擬項(xiàng)目X;UIDdba;PWDsql;CHARSETUTF-8啟動(dòng)后能直接執(zhí)行 SQL、看結(jié)果集、看執(zhí)行計(jì)劃還能圖形化建表、導(dǎo)入導(dǎo)出數(shù)據(jù)。我做判斷時(shí)一般是這樣的凡是需要反復(fù)調(diào)整的 SELECT、要確認(rèn)索引有沒(méi)有走對(duì)、要看執(zhí)行計(jì)劃的用 dbisql凡是不需要人看的用 isql。dbisql 在 ASA 12.0 這一代有個(gè)小脾氣它啟動(dòng)時(shí)會(huì)加載自己的界面庫(kù)如果解壓目錄里有中文字符路徑個(gè)別版本會(huì)直接閃退。遇到這種情況就去確認(rèn)目錄是不是純英文別跟界面設(shè)置較勁。dbisql 里跑過(guò)的腳本也能保存成 .sql 文件反過(guò)來(lái)交給 isql 跑批這個(gè)銜接在團(tuán)隊(duì)協(xié)作里非常實(shí)用——開(kāi)發(fā)在界面里調(diào)好一條查詢(xún)運(yùn)維拿同一份文件去批量執(zhí)行。3.3 用 ASA 自帶的 ODBC 驅(qū)動(dòng)把 Excel、Python 接進(jìn)來(lái)連接第三方工具靠 ODBC。ASA 12.0 解壓包里自帶 ODBC 驅(qū)動(dòng)Windows 下需要在 ODBC 管理器里手動(dòng)注冊(cè)一個(gè)數(shù)據(jù)源。步驟不復(fù)雜打開(kāi) ODBC 數(shù)據(jù)源管理器添加數(shù)據(jù)源選驅(qū)動(dòng)列表里的 ASA 12.0 驅(qū)動(dòng)填上 Server Name、端口、用戶(hù)名和密碼。注意 32 位和 64 位的 ODBC 管理器是兩個(gè)不同的入口用哪個(gè)取決于你的下游程序是多少位。常見(jiàn)的坑是把 64 位數(shù)據(jù)源配好了Excel 卻因?yàn)槭?32 位而找不到這個(gè) DSN反過(guò)來(lái)也一樣。配好 DSN 之后用 Python 的 pyodbc 連接就很簡(jiǎn)單import pyodbc conn pyodbc.connect(DSNasa_demo;UIDdba;PWDsql) cursor conn.cursor() cursor.execute(SELECT COUNT(*) FROM systable) print(cursor.fetchone())這里 DSN 指向在 ODBC 管理器里配置好的數(shù)據(jù)源賬號(hào)和密碼放在連接串里避免每次把引擎名、端口都寫(xiě)進(jìn)代碼。參數(shù)說(shuō)明一句DSN 管的是“去哪連”UID 和 PWD 管的是“以誰(shuí)的身份進(jìn)”兩者分開(kāi)維護(hù)改數(shù)據(jù)庫(kù)位置時(shí)不用動(dòng)代碼。4. 解壓版在 Windows 與 Linux 下的部署姿勢(shì)路徑、環(huán)境變量與權(quán)限解壓版不是解壓完就萬(wàn)事大吉系統(tǒng)和權(quán)限層面的準(zhǔn)備工作才是決定能不能穩(wěn)定跑起來(lái)的關(guān)鍵。這一章把 Windows 和 Linux 兩邊各自的部署要點(diǎn)分開(kāi)講免得混在一起繞暈。4.1 Windows 下的環(huán)境變量與 DSN 管理Windows 下第一個(gè)要處理的是 PATH。解壓完 isql 就在那個(gè)目錄里不配置 PATH 的話每次都得寫(xiě)全路徑。常見(jiàn)做法是把 bin 目錄加進(jìn)系統(tǒng) PATHsetx PATH D:\asa12\win64;%PATH%setx 是持久化寫(xiě)入下次開(kāi)新窗口就生效。這里我提醒一句setx 會(huì)把原 PATH 截?cái)嘧詈孟劝旬?dāng)前 PATH 備份出來(lái)再拼我見(jiàn)過(guò)有人手滑把整條環(huán)境變量寫(xiě)亂最后只能系統(tǒng)還原。把 bin 加進(jìn) PATH 后命令行任意目錄直接敲 isql 就能用這是解壓版投入日常工作的基礎(chǔ)。DSN 管理上Windows 的 32 位和 64 位 ODBC 管理器入口不同。32 位在 C:\Windows\SysWOW64\odbcad32.exe64 位在 C:\Windows\System32\odbcad32.exe。你配了一個(gè)卻找不到多半就是打開(kāi)的是另一個(gè)位數(shù)。我常用的檢查方法是看下游接數(shù)據(jù)的程序位數(shù)程序 32 位就配 32 位 DSN程序 64 位就配 64 位 DSN兩邊都配也行名字別重復(fù)。還有一層要注意解壓版的 ODBC 驅(qū)動(dòng)不一定被系統(tǒng)自動(dòng)注冊(cè)。如果 ODBC 管理器里看不到 ASA 12.0 驅(qū)動(dòng)就在命令行里手動(dòng)注冊(cè)驅(qū)動(dòng)文件。regsvr32 D:\asa12\win64\dbodbc12.dll注冊(cè)成功會(huì)彈確認(rèn)框。遇到殺毒軟件攔截目標(biāo)是解壓目錄和 ODBC 驅(qū)動(dòng)文件加入白名單再注冊(cè)一遍。4.2 Linux 下的目錄規(guī)劃、LD_LIBRARY_PATH 與權(quán)限Linux 下解壓版一般放在 /opt 或 /usr/local 下目錄結(jié)構(gòu)會(huì)比 Windows 更精簡(jiǎn)。我先規(guī)劃目錄再給權(quán)限再設(shè)環(huán)境變量sudo mkdir -p /opt/asa12 sudo tar -xzf asa12-client.tar.gz -C /opt/asa12 sudo chmod -R x /opt/asa12/bin export PATH/opt/asa12/bin:$PATH export LD_LIBRARY_PATH/opt/asa12/lib:$LD_LIBRARY_PATHchmod 是給二進(jìn)制加可執(zhí)行權(quán)限PATH 讓 isql 直接在命令行可用LD_LIBRARY_PATH 是讓程序運(yùn)行時(shí)能找到依賴(lài)的 .so 共享庫(kù)。第三個(gè)最容易忘忘了就報(bào)錯(cuò)“cannot open shared object file”問(wèn)題是解壓包本身沒(méi)壞純粹是庫(kù)找不到。這里有件值得單獨(dú)說(shuō)的事Linux 下別圖省事拿 Wine 跑 Windows 版客戶(hù)端。Wine 那套對(duì) ASA 12.0 支持得不干凈連庫(kù)、輸出重定向都可能出玄學(xué)問(wèn)題。直接找 Linux 平臺(tái)的解壓包哪怕版本老一點(diǎn)也比勉強(qiáng)跑 Windows 版省心。Linux 下另一個(gè)高頻問(wèn)題是 32 位和 64 位庫(kù)混裝。老版本 ASA 客戶(hù)端可能包含 32 位組件64 位系統(tǒng)缺 32 位兼容庫(kù)時(shí)isql 會(huì)報(bào)錯(cuò)。可以用 ldd 檢查依賴(lài)ldd /opt/asa12/bin/isql輸出里如果出現(xiàn)“not found”就去安裝對(duì)應(yīng)發(fā)行版提供的兼容庫(kù)。缺什么補(bǔ)什么比整個(gè)重裝快。5. 解壓版 ASA 12.0 客戶(hù)端避坑指南三個(gè)能讓你當(dāng)場(chǎng)翻車(chē)的細(xì)節(jié)這一章是血淚經(jīng)驗(yàn)的集中區(qū)。前面章節(jié)把正常路徑走通了這里專(zhuān)門(mén)講路徑上容易踩的坑。每一條我都按“現(xiàn)象 → 原因 → 解決”的順序?qū)懛奖阌龅絾?wèn)題時(shí)對(duì)著排查。5.1 現(xiàn)象一isql 一啟動(dòng)就提示找不到 DLL / 共享庫(kù)現(xiàn)象在 Windows 下運(yùn)行 isql馬上彈“The specified module could not be found”或者在 Linux 下報(bào)“error while loading shared libraries”。命令行工具本身起不來(lái)后面什么都免談。原因大多數(shù)情況是解壓包不全。網(wǎng)上流傳的解壓包有的只保留了主程序依賴(lài)的 DLL 和 .so 被精簡(jiǎn)掉了還有情況是解壓路徑里有中文或空格某些老版本對(duì)這些路徑處理得不夠穩(wěn)。如果是從 U 盤(pán)、共享目錄直接運(yùn)行也可能被系統(tǒng)安全策略攔住動(dòng)態(tài)庫(kù)。解決先確認(rèn)文件完整性。排查命令是ldd isqlWindows 下則直接看 bin 目錄里有多少個(gè) .dll 文件和原壓縮包對(duì)比文件數(shù)。最穩(wěn)妥的辦法是重新完整解壓把整個(gè)包的目錄結(jié)構(gòu)原樣保留路徑換成純英文。有人只拷一個(gè) isql.exe 去別的機(jī)器用這種省事方式十有七八要翻車(chē)因?yàn)?isql 不是單個(gè)可執(zhí)行文件它依賴(lài) libsybtcl 這類(lèi)公共庫(kù)。正確做法是把整個(gè)解壓目錄帶著走。5.2 現(xiàn)象二dbisql 能連上isql 卻報(bào)“無(wú)法連接到服務(wù)器”現(xiàn)象同一臺(tái)機(jī)器上dbisql 圖形界面輸個(gè)密碼就連上庫(kù)了換到命令行用 isql同樣的賬號(hào)密碼卻報(bào)“無(wú)法連接到服務(wù)器”。原因dbisql 和 isql 對(duì)連接字符串的解析默認(rèn)值不一樣服務(wù)名大小寫(xiě)也可能導(dǎo)致匹配失敗。另一個(gè)更隱蔽的原因是端口沖突ASA 12.0 默認(rèn)端口是 2638如果本機(jī)已有其他實(shí)例占用了這個(gè)端口新啟動(dòng)的引擎會(huì)自動(dòng)換端口但你的 isql 連接串還指向 2638自然連不上。解決把引擎名和端口顯式釘死。啟動(dòng)引擎的時(shí)候指定dbeng12 -n demo001 -x tcpip -p 2639 D:\data\demo001.db-n 指定引擎名為 demo001-p 指定端口為 2639-x tcpip 指定走 TCP 協(xié)議??蛻?hù)端連接串跟著寫(xiě)isql -c ENGdemo001;PORT2639;UIDdba;PWDsql這樣引擎名和端口在兩個(gè)端都寫(xiě)死不再依賴(lài)默認(rèn)值。我一般會(huì)把端口和引擎名記在庫(kù)的啟動(dòng)腳本里作為固定配置交給運(yùn)維避免每次手敲產(chǎn)生歧義。5.3 現(xiàn)象三查出來(lái)的中文全部亂碼現(xiàn)象SELECT 出的中文顯示成 ?????? 或者一類(lèi)亂碼符號(hào)英文數(shù)字都正常只有中文不行。原因客戶(hù)端連接字符集和數(shù)據(jù)庫(kù)實(shí)際字符集不一致。ASA 12.0 時(shí)代的庫(kù)有的建庫(kù)時(shí)用 UTF-8有的用 GBK還有老庫(kù)用 cp1252。isql 默認(rèn)不指定字符集時(shí)就按本地區(qū)域設(shè)置走兩邊對(duì)不上就亂碼。這個(gè)問(wèn)題在批量導(dǎo)出時(shí)危害尤其大——肉眼看著是一個(gè)問(wèn)號(hào)寫(xiě)進(jìn)文件里就是不可逆的壞數(shù)據(jù)。解決連接字符串里顯式指定字符集和建庫(kù)時(shí)一致isql -c ENGdemo001;UIDdba;PWDsql;CHARSETUTF-8庫(kù)是 GBK 就把 CHARSET 換成 GBK。字符集參數(shù)對(duì) isql、dbisql、ODBC DSN 都有效建議在所有入口統(tǒng)一。改完連接串后先查一條帶中文的記錄確認(rèn)恢復(fù)再跑正式批量任務(wù)。還有一點(diǎn)容易被忽略SQL 腳本文件本身的編碼也要和 CHARSET 對(duì)齊腳本文件是 UTF-8連接串就寫(xiě) UTF-8否則中文條件查不到數(shù)據(jù)不是庫(kù)的問(wèn)題是腳本文件編碼的問(wèn)題。6. 讓解壓包物盡其用的一個(gè)習(xí)慣把 isql 封裝成連接排查腳本解壓版的最高階用法不是人多的時(shí)候多點(diǎn)幾次圖形界面而是把所有連接動(dòng)作收斂成一段可以被循環(huán)執(zhí)行的腳本。這里分享一個(gè)我長(zhǎng)期在用的技巧維護(hù)一個(gè)服務(wù)器清單文件用 isql 批量檢查所有庫(kù)的連接狀態(tài)。舊庫(kù)數(shù)量一多這種方法比手動(dòng)一個(gè)個(gè)連高效得多。先準(zhǔn)備一個(gè)清單文件 servers.list每行一臺(tái)庫(kù)管道符分隔demo001|2639|dba|sql demo002|2640|dba|sql demo003|2641|dba|sql再準(zhǔn)備統(tǒng)一的檢查腳本 check.sql內(nèi)容是每次都要執(zhí)行的固定查詢(xún)SELECT DB_NAME(), version; SELECT 連接正常;最后用一個(gè)批處理循環(huán)執(zhí)行echo off setlocal enabledelayedexpansion for /f tokens1-4 delims| %%a in (servers.list) do ( echo [檢查] %%a:%%b isql -c ENG%%a;PORT%%b;UID%%c;PWD%%d;CHARSETUTF-8 -q -o out_%%a.txt check.sql )這里 for /f 按管道符切分清單的每一行把引擎名、端口、賬號(hào)、密碼分別放到 %%a 到 %%d逐個(gè)調(diào) isql 執(zhí)行 check.sql結(jié)果寫(xiě)到以引擎名命名的文件里。寫(xiě)好這個(gè)腳本后幾十臺(tái)庫(kù)一分鐘全查完輸出文件按名字分開(kāi)哪臺(tái)有問(wèn)題一看便知。我還會(huì)在腳本里順手追加一行把每臺(tái)庫(kù)的版本和數(shù)據(jù)庫(kù)名重定向到一個(gè)匯總文件這樣每次檢查完留一份快照。以前手動(dòng)連庫(kù)時(shí)遇到過(guò)一臺(tái)庫(kù)連不上但當(dāng)時(shí)沒(méi)記錄事后核對(duì)才發(fā)現(xiàn)漏檢白跑一趟現(xiàn)場(chǎng)。后來(lái)所有連接都走腳本、輸出留檔再?zèng)]出過(guò)這種漏網(wǎng)問(wèn)題。一個(gè)解壓版客戶(hù)端能發(fā)揮多大作用往往取決于你愿不愿意在它外面多包這一層腳本。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取