DBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。
access連接數(shù)據(jù)庫,都設(shè)置數(shù)據(jù)源ODBC來訪問各種數(shù)據(jù)庫。下面以連接oracle數(shù)據(jù)庫。那應(yīng)該是怎樣連接呢?
一、點擊開始-管理工具-數(shù)據(jù)源。(若不能找到就去控制面板找到管理工具就可以發(fā)現(xiàn)數(shù)據(jù)源)
二、出現(xiàn)ODBC管理器,里面有用戶系統(tǒng)還有文件DSN.
這三者區(qū)別是:
1.用戶DSN允許單個用戶在單個計算機(jī)上訪問數(shù)據(jù)庫(一對一);
2.系統(tǒng)DSN允許在某個計算機(jī)上的多個用戶訪問數(shù)據(jù)庫(一機(jī)多用);
3.文件DSN在一個以.DSN擴(kuò)展名結(jié)尾的文本文件中存儲相關(guān)信息,并且可以被安裝了相同驅(qū)動器的不同計算機(jī)上的多個用戶共享。(多機(jī)多用)
(我們開發(fā)程序時候都是采用文件DNS模式)
三、找到安裝oracle驅(qū)動程序。
四、填寫數(shù)據(jù)源名稱。這名稱你自己定。但服務(wù)器填寫就要根據(jù)你oracle配置服務(wù)名(我的經(jīng)驗另外一篇有講解如何配置oracle客戶端,不懂可以翻開我的經(jīng)驗有個oracle10g客戶端配置)。
五、打開ACCESS,在對象-表-點擊新建鏈接表。
六、在彈出文件框,在文件類型里選擇ODBC數(shù)據(jù)庫。
七、點擊機(jī)器數(shù)據(jù)源-選擇你剛才設(shè)的數(shù)據(jù)源oracle。
八、就會彈出odbc登錄對話框。輸入你的登錄賬戶密碼。確認(rèn)即可。
九、選擇你想鏈接表。你可以一次性選多個表。
十、在Access就可以看到你所要鏈接的表。
oracle會產(chǎn)生不同oracle驅(qū)動程序,odbc選擇oracle時候建議選擇還是microsoft for oracle。
access鏈接某些表時候提示幾個用戶共用該表,確認(rèn)就可以了
更多信息關(guān)注【電腦幫幫手】,期待您的關(guān)注和支持!
張 宇|Zabbix高級認(rèn)證專家ZCP
你是否知道 Zabbix 有一個用于收集 Oracle 數(shù)據(jù)庫指標(biāo)的開箱即用模板?
使用此模板,我們可以使用 ODBC 無代理地收集數(shù)據(jù)庫、表空間、ASM 和許多其他指標(biāo)等數(shù)據(jù)。本文將指導(dǎo)如何為 Oracle 11.2、12.1、18.5 或 19.2 數(shù)據(jù)庫服務(wù)器設(shè)置 ODBC 監(jiān)控,將是部署 Oracle 數(shù)據(jù)庫監(jiān)控的完美指南。
提供的命令適用于以下操作系統(tǒng):CentOS 8、Oracle Linux 8 或 Rocky Linux。
首先我們要下載以下包:
oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
我們在這里下載
Oracle 即時客戶端——需要,建立與 Oracle 數(shù)據(jù)庫的連接 SQLPlus——我們可以用來測試與 Oracle 數(shù)據(jù)庫的連接的工具 Oracle ODBC 包——包含所需的 ODBC 驅(qū)動程序和配置腳本,以啟用與 Oracle 數(shù)據(jù)庫的 ODBC 連接
將包上傳到 Zabbix 服務(wù)器(或代理,如果您希望在代理上監(jiān)控您的 Oracle DB)并將其放置在:
/tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
/tmp/oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
/tmp/oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
安裝“l(fā)ibaio”和“l(fā)ibnsl”庫:
dnf -y install libaio-devel libnsl
否則,我們會收到錯誤:
# rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
error: Failed dependencies:
libaio is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
libnsl.so.1()(64bit) is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
# rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
error: Failed dependencies:
libnsl.so.1()(64bit) is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
檢查之前是否已在系統(tǒng)上部署了 Oracle 組件。下面的命令應(yīng)該提供一個空的輸出:
rpm -qa | grep oracle
ldconfig -p | grep oracle
rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
確保安裝了包“oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64”:
rpm -qa | grep oracle
git.zabbix.com 上的官方 Oracle 模板頁面討論了為服務(wù)配置 Oracle ENV Usage 的方法。對于這種即時客戶端的版本19.12,這是不REQUIRED營造“的/ etc / SYSCONFIG / ZABBIX服務(wù)器”的內(nèi)容文件:
export ORACLE_HOME=/usr/lib/oracle/19.12/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
雖然我們確實安裝了 rpm 包,但 Oracle 19.12 客戶端包確實在全局級別自動配置了 LD 路徑——這意味著系統(tǒng)上的每個用戶都可以使用 Oracle 即時客戶端。我們可以看到 LD 路徑已經(jīng)配置在:
cat /etc/ld.so.conf.d/oracle-instantclient.conf
顯示結(jié)果:
/usr/lib/oracle/19.12/client64/lib
為確保操作系統(tǒng)識別所需的 Oracle 庫,我們可以運(yùn)行:
ldconfig -p | grep oracle
正確的顯示:
liboramysql19.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/liboramysql19.so
libocijdbc19.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libocijdbc19.so
libociei.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libociei.so
libocci.so.19.1 (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libocci.so.19.1
libnnz19.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libnnz19.so
libmql1.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libmql1.so
libipc1.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libipc1.so
libclntshcore.so.19.1 (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libclntshcore.so.19.1
libclntshcore.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libclntshcore.so
libclntsh.so.19.1 (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libclntsh.so.19.1
libclntsh.so (libc6,x86-64)=> /usr/lib/oracle/19.12/client64/lib/libclntsh.so
**注意:**如果由于某種原因 ldconfig 命令顯示到其他動態(tài)庫的鏈接 - 那是我們可能必須為 Zabbix 服務(wù)器/代理創(chuàng)建單獨的 ENV 文件,它將 Zabbix 應(yīng)用程序鏈接到正確的動態(tài)庫,如示例所示本節(jié)的開始。
為我們以后省掉一些麻煩,首先檢查與 Oracle 數(shù)據(jù)庫主機(jī)的網(wǎng)絡(luò)連接。檢查是否可以在網(wǎng)絡(luò)級別訪問默認(rèn)的 Oracle 端口。在本例中,我們將嘗試連接到默認(rèn)的 Oracle 數(shù)據(jù)庫端口 1521。根據(jù)您的 Oracle 數(shù)據(jù)庫正在偵聽連接的端口,進(jìn)行相應(yīng)的調(diào)整。確保輸出顯示“已連接到 10.1.10.15:1521”:
nc -zv 10.1.10.15 1521
在繼續(xù)進(jìn)行 ODBC 配置之前,我們可以模擬與 Oracle 數(shù)據(jù)庫的連接。確保命令中使用的 Oracle 用戶名和密碼正確。對于此任務(wù),我們首先需要安裝 SQLPlus 包。:
rpm -ivh /tmp/oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
為了模擬連接,我們可以使用單行命令。在示例命令中,我使用用戶名“system”和密碼“oracle”通過端口“1521”訪問 Oracle 數(shù)據(jù)庫服務(wù)器“10.1.10.15”并連接到服務(wù)名稱“xe”:
sqlplus64 'system/oracle@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.10.15)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xe)))'
在輸出中我們可以看到:我們使用 19.12 客戶端連接到 11.2 服務(wù)器:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Sep 6 13:47:36 2021
Version 19.12.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
**注意:**這為我們提供了有關(guān) Oracle 即時客戶端的額外提示——新版本的客戶端向后兼容舊版本的 Oracle 數(shù)據(jù)庫服務(wù)器。盡管這不適用于 Oracle 客戶端/服務(wù)器的每個版本,但請先查看 Oracle 即時客戶端文檔。
說到配置ODBC,我們先安裝ODBC驅(qū)動管理器
dnf -y install unixODBC
現(xiàn)在我們可以看到我們有兩個新文件——“/etc/odbc.ini”(可能是空的)和“/etc/odbcinst.ini”。文件“/etc/odbcinst.ini”描述了驅(qū)動程序關(guān)系。目前,當(dāng)我們'grep'關(guān)鍵字'oracle'時沒有安裝oracle關(guān)系,當(dāng)我們運(yùn)行時輸出為空:
grep -i oracle /etc/odbcinst.ini
我們的下一步是安裝 Oracle ODBC 驅(qū)動程序包:
rpm -ivh /tmp/oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
'oracle-instantclient*-odbc' 包包含一個腳本,將自動更新 '/etc/odbcinst.ini' 配置:
cd /usr/lib/oracle/19.12/client64/bin
./odbc_update_ini.sh / /usr/lib/oracle/19.12/client64/lib
顯示結(jié)果:
*** ODBCINI environment variable not set,defaulting it to HOME directory!
現(xiàn)在當(dāng)我們在屏幕上打印文件時:
cat /etc/odbcinst.ini
我們會看到在文件末尾添加了 Oracle 19 ODBC 驅(qū)動部分:
[Oracle 19 ODBC driver]
Description=Oracle ODBC driver for Oracle 19
Driver=/usr/lib/oracle/19.12/client64/lib/libsqora.so.19.1
Setup =FileUsage=CPTimeout=CPReuse=
在執(zhí)行“l(fā)dd”命令時,檢查輸出中是否沒有錯誤很重要。這確保了依賴項得到滿足且可訪問,并且與庫版本控制沒有沖突:
ldd /usr/lib/oracle/19.12/client64/lib/libsqora.so.19.1
它會打印類似的東西:
linux-vdso.so.1 (0x00007fff121b5000)
libdl.so.2=> /lib64/libdl.so.2 (0x00007fb18601c000)
libm.so.6=> /lib64/libm.so.6 (0x00007fb185c9a000)
libpthread.so.0=> /lib64/libpthread.so.0 (0x00007fb185a7a000)
libnsl.so.1=> /lib64/libnsl.so.1 (0x00007fb185861000)
librt.so.1=> /lib64/librt.so.1 (0x00007fb185659000)
libaio.so.1=> /lib64/libaio.so.1 (0x00007fb185456000)
libresolv.so.2=> /lib64/libresolv.so.2 (0x00007fb18523f000)
libclntsh.so.19.1=> /usr/lib/oracle/19.12/client64/lib/libclntsh.so.19.1 (0x00007fb1810e6000)
libclntshcore.so.19.1=> /usr/lib/oracle/19.12/client64/lib/libclntshcore.so.19.1 (0x00007fb180b42000)
libodbcinst.so.2=> /lib64/libodbcinst.so.2 (0x00007fb18092c000)
libc.so.6=> /lib64/libc.so.6 (0x00007fb180567000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb1864da000)
libnnz19.so=> /usr/lib/oracle/19.12/client64/lib/libnnz19.so (0x00007fb17fdba000)
libltdl.so.7=> /lib64/libltdl.so.7 (0x00007fb17fbb0000)
當(dāng)我們執(zhí)行“odbc_update_ini.sh”腳本時,在“/root/.odbc.ini”中創(chuàng)建了一個新的DSN(數(shù)據(jù)源名稱)文件。這是一個示例配置 ODBC 配置文件,它描述了此版本的 ODBC 驅(qū)動程序支持哪些設(shè)置。
讓我們將此配置文件從用戶目錄移動到系統(tǒng)范圍內(nèi)可訪問的位置:
cat /root/.odbc.ini | sudo tee -a /etc/odbc.ini
并從用戶目錄中完全刪除該文件:
rm /root/.odbc.ini
這樣,系統(tǒng)中的每個用戶都將只使用這個 ODBC 配置文件。我們現(xiàn)在可以更改現(xiàn)有配置 – /etc/odbc.ini。我要突出顯示從默認(rèn)值更改的內(nèi)容:
[Oracle11g]
AggregateSQLType=FLOAT
Application Attributes=T
Attributes=W
BatchAutocommitMode=IfAllSuccessful
BindAsFLOAT=F
CacheBufferSize=20
CloseCursor=F
DisableDPM=F
DisableMTS=T
DisableRULEHint=T
Driver=Oracle 19 ODBC driver
DSN=Oracle11g
EXECSchemaOpt=EXECSyntax=T
Failover=T
FailoverDelay=10
FailoverRetryCount=10
FetchBufferSize=64000
ForceWCHAR=F
LobPrefetchSize=8192
Lobs=T
Longs=T
MaxLargeData=0
MaxTokenSize=8192
MetadataIdDefault=F
QueryTimeout=T
ResultSets=T
ServerName=//10.1.10.15:1521/xe
SQLGetData extensions=F
SQLTranslateErrors=F
StatementCache=F
Translation DLL=Translation Option=0
UseOCIDescribeAny=F
UserID=system
Password=oracle
DSN – 數(shù)據(jù)源名稱。應(yīng)該匹配括號中的部分名稱,例如:[Oracle11g] ServerName – Oracle 服務(wù)器地址 UserID – Oracle 用戶名 Password – Oracle 用戶密碼
要從命令行測試連接,讓我們使用 isql 命令行工具,該工具應(yīng)該模擬 ODBC 連接,類似于 Zabbix 在收集指標(biāo)時正在執(zhí)行的操作:
isql -v Oracle11g
本示例中的 isql 命令從 odbc.ini 文件中選取 ODBC 設(shè)置(用戶名、密碼、服務(wù)器地址)。我們所要做的就是引用特定的 DSN – Oracle11g
另一方面,如果我們不想在文件系統(tǒng) (/etc/odbc.ini) 上保留密碼,我們可以刪除“UserID”和“Password”行。然后我們可以測試 ODBC 連接:
isql -v Oracle11g 'system' 'oracle'
如果連接成功,它應(yīng)該打印:這就是 ODBC 配置!現(xiàn)在我們應(yīng)該可以在 Zabbix 中應(yīng)用 Oracle by ODBC 模板了
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
不要忘記,我們還需要提供必要的 Oracle 憑證來開始收集 Oracle 數(shù)據(jù)庫指標(biāo):
在這篇博文中學(xué)到的經(jīng)驗教訓(xùn)可以很容易地應(yīng)用于一般的 ODBC 監(jiān)控和故障排除,而不僅僅是 Oracle。如果您有任何問題或希望分享您在 ODBC 或 Oracle 數(shù)據(jù)庫監(jiān)控方面的經(jīng)驗——歡迎投稿分享,有償!
-------------- --------------
第1場Zabbix6.0ZCU培訓(xùn)報名開啟!
K8s、API、日志、prometheus,下半年課表更新!掃碼學(xué)習(xí)!
往期推薦
Z投稿|Zabbix如何通過ODBC對接Oracle獲取相關(guān)數(shù)據(jù)?
案例|光大銀行如何解決傳統(tǒng)監(jiān)控痛點,打造一體化監(jiān)控平臺?
Zabbix全年在線課錄屏
PDF手冊|1666頁 Zabbix6.0官方中文 操作手冊PDF下載!
掃一掃|加入技術(shù)交流群
微信號|17502189550
備注“使用Zabbix年限+企業(yè)+姓名”
5000+用戶已加入!
一個人走得快,一群人走得遠(yuǎn)