異構資料庫的關聯查詢 oracle hsodbc 關聯mysql
隨著我們資料庫從oracle 向mysql 遷移,一個新問題出來, 一個應用的一部分在 oracle端,一個部分在mysql端,
而一個需求又恰恰是要關聯兩邊的表做查詢,怎麼做?
一個方法,把其中一部分搬到另外一個庫裡去做表關聯查詢。
另一個就異構資料庫的關聯查詢了, 這裡介紹下oracle 關聯mysql 的配置:
經過一天半的測試終於成功了。
首先 oracle 的異構資料庫是透過gateway 來實現的, 有兩種,一個是透明閘道器,專門針對不同的資料庫有不同的軟體包
一個綜合閘道器,通吃一切。
hsodbc 屬於後者。
hsodbc 是一個32位程式,即便是在64位的oracle 安裝裡也是一個32位的程式,估計是oracle 不準備更新了
hsodbc 是透過odbc 來實現與異構資料庫的關聯的。
所以要主機上安裝odbc的管理包
windows 上不用了,都有
unix / linux 下有uinxODBC 的包
因為要跟mysql關聯所以要在oracle 的主機上安裝mysql的客戶端驅動。 mysql-connect-odbc
注意:
因為hsodbc 為32位程式,所以這倆程式包要有對應的32位的程式。 否則報錯。
安裝就很簡單了
查詢相關的包 安裝unixodbc
安裝mysql-conn-odbc
這兩個安裝完後,
執行
註冊下odbc
然後配置odbc 的DSN
vi /etc/odbc.ini
說明 :
[test] -------dsn 的名字
Driver = /usr/lib/libmyodbc3.so -------mysql-conn-odbc 的驅動
DATABASE = test --------mysql 資料庫的database
DESCRIPTION = MySQL ODBC 3.51 Driver -----------描述字元
PORT = 3306 ---------------mysql的埠號
SERVER = 127.0.0.1 ----------------mysql 主機的ip 或者主機名
UID = nagios ----------從oracle端登入mysql的使用者名稱
PWD = passpwd --------------- 從oracle端登入mysql的密碼
CHARSET = gbk -------------------字符集
TRACEFILE = /tmp/myodbc-demodsn.trc ------trace 檔案 mysql -odbc 3.51下不起作用
TRACE = ON -----開啟trac --------mysql -odbc 3.51下不起作用
配置 oracle 的hsodbc
目錄 $ORACLE_HOME/hs/admin/init${sid}.ora
$sid 是 我們在odbc.ini中指定odbc的dsn的名字 切記,切記
vi inittest.ora
配置完後 可以用oracle 使用者執行 hsodbc 測試下,如果沒有出錯會報告版本號
現在配置oracle的listener 監聽
在 $ORACLE_HOME/network/admin/listener.ora中增加一個監聽記錄
(SID_DESC=
(SID_NAME=test)
(ORACLE_HOME=/data/oracle/product/10.2.0)
(PROGRAM=hsodbc)
(ENVS=LD_LIBRARY_PATH=/data/oracle/product/10.2.0/lib32:/data/oracle/product/10.2.0/hs/lib32:/lib32)
)
sid_name 是odbc dsn 的名字
program 是 hsodbc
ENVS 則是指定的相關的環境變數
可以參考 $ORACLE_HOME/hs/admin/listener.ora.example
在在$ORACLE_HOME/network/admin/tnsnames.ora 中增加一個條目:
test =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST= 192.168.74.9)(PORT=1521))
(CONNECT_DATA=
(SID=test)
)
(HS = OK )
)
注意 :
test 是我們制定的odb dsn 的名字
( HS=OK) 一定要放在 (CONNECT_DATA 的外面 ,否則會報錯,無法連線
然後重啟listener
好了,基本的配置就差不多了
我們在資料庫裡建一個db link 測試下吧
注意 使用者名稱和密碼一定要用雙引號(”) 引起來,因為mysql 裡是大小寫敏感的。
先做個測試資料
然後在oracle 端看看吧
注意因為mysql是case sensitive 所以要用雙引號把表明,欄位名括起來,或者mysql端設定引數 lower_case_table_names=1
而一個需求又恰恰是要關聯兩邊的表做查詢,怎麼做?
一個方法,把其中一部分搬到另外一個庫裡去做表關聯查詢。
另一個就異構資料庫的關聯查詢了, 這裡介紹下oracle 關聯mysql 的配置:
經過一天半的測試終於成功了。
首先 oracle 的異構資料庫是透過gateway 來實現的, 有兩種,一個是透明閘道器,專門針對不同的資料庫有不同的軟體包
一個綜合閘道器,通吃一切。
hsodbc 屬於後者。
hsodbc 是一個32位程式,即便是在64位的oracle 安裝裡也是一個32位的程式,估計是oracle 不準備更新了
hsodbc 是透過odbc 來實現與異構資料庫的關聯的。
所以要主機上安裝odbc的管理包
windows 上不用了,都有
unix / linux 下有uinxODBC 的包
因為要跟mysql關聯所以要在oracle 的主機上安裝mysql的客戶端驅動。 mysql-connect-odbc
注意:
因為hsodbc 為32位程式,所以這倆程式包要有對應的32位的程式。 否則報錯。
安裝就很簡單了
查詢相關的包 安裝unixodbc
1 | yum search unixODBC ; |
2 |
3 | yum install unixODBC.i386 |
4 |
5 | yum install unixODBC-devel.i386 |
安裝mysql-conn-odbc
1 | yum search mysql-connect-odbc |
2 |
3 | yum install mysql-connector-odbc.i386 |
4 |
5 | yum install mysql-connector-odbc-setup.i386 |
這兩個安裝完後,
執行
1 | myodbc3i -a -d -t"MySQL ODBC 3.51 Driver;Driver=/usr/lib/libmyodbc3.so;Setup=/usr/lib/libmyodbc3S.so" |
註冊下odbc
然後配置odbc 的DSN
vi /etc/odbc.ini
01 | [test] |
02 | Driver = /usr/lib/libmyodbc3.so |
03 | DATABASE = test |
04 | DESCRIPTION = MySQL ODBC 3.51 Driver |
05 | PORT = 3306 |
06 | SERVER = 127.0.0.1 |
07 | UID = nagios |
08 | PWD = supportdb |
09 | CHARSET = gbk |
10 | TRACEFILE = /tmp/myodbc-demodsn.trc |
11 | TRACE = ON |
說明 :
[test] -------dsn 的名字
Driver = /usr/lib/libmyodbc3.so -------mysql-conn-odbc 的驅動
DATABASE = test --------mysql 資料庫的database
DESCRIPTION = MySQL ODBC 3.51 Driver -----------描述字元
PORT = 3306 ---------------mysql的埠號
SERVER = 127.0.0.1 ----------------mysql 主機的ip 或者主機名
UID = nagios ----------從oracle端登入mysql的使用者名稱
PWD = passpwd --------------- 從oracle端登入mysql的密碼
CHARSET = gbk -------------------字符集
TRACEFILE = /tmp/myodbc-demodsn.trc ------trace 檔案 mysql -odbc 3.51下不起作用
TRACE = ON -----開啟trac --------mysql -odbc 3.51下不起作用
配置 oracle 的hsodbc
目錄 $ORACLE_HOME/hs/admin/init${sid}.ora
$sid 是 我們在odbc.ini中指定odbc的dsn的名字 切記,切記
vi inittest.ora
01 | # This is a sample agent init file that contains the HS parameters that are |
02 | # needed for an ODBC Agent. |
03 | # |
04 | # HS init parameters |
05 | # |
06 | HS_FDS_CONNECT_INFO = test ## odbc dsn 的名字 |
07 | HS_FDS_TRACE_LEVEL = debug ## trace |
08 | HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so ## odbc的驅動,切記是odbc的驅動不是mysql的驅動 |
09 |
10 | HS_DB_NAME=test ### 資料庫的名字 |
11 | # |
12 | # ODBC specific environment variables |
13 | # |
14 | set DBCINI=/etc/odbc.ini ## odbc.ini的目錄 |
15 |
16 | # |
17 | # Environment variables required for the non-Oracle system |
18 | # |
19 | #set |
20 | set ORACLE_HOME=/data/oracle/product/10.2.0 |
21 | set LD_LIBRARY_PATH=/data/oracle/product/10.2.0/lib32:/lib32:/usr/lib:/data/oracle/product/10.2.0/hs/lib32 |
配置完後 可以用oracle 使用者執行 hsodbc 測試下,如果沒有出錯會報告版本號
1 | hsodbc |
2 |
3 | Oracle Corporation --- Wed May 19 2010 16:42:32.130 |
4 | Heterogeneous Agent Release 10.2.0.4.0 - Production Built with |
5 | Driver for ODBC |
現在配置oracle的listener 監聽
在 $ORACLE_HOME/network/admin/listener.ora中增加一個監聽記錄
(SID_DESC=
(SID_NAME=test)
(ORACLE_HOME=/data/oracle/product/10.2.0)
(PROGRAM=hsodbc)
(ENVS=LD_LIBRARY_PATH=/data/oracle/product/10.2.0/lib32:/data/oracle/product/10.2.0/hs/lib32:/lib32)
)
sid_name 是odbc dsn 的名字
program 是 hsodbc
ENVS 則是指定的相關的環境變數
可以參考 $ORACLE_HOME/hs/admin/listener.ora.example
在在$ORACLE_HOME/network/admin/tnsnames.ora 中增加一個條目:
test =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST= 192.168.74.9)(PORT=1521))
(CONNECT_DATA=
(SID=test)
)
(HS = OK )
)
注意 :
test 是我們制定的odb dsn 的名字
( HS=OK) 一定要放在 (CONNECT_DATA 的外面 ,否則會報錯,無法連線
然後重啟listener
1 | lsnrctl stop |
2 |
3 | lsnrctl start |
好了,基本的配置就差不多了
我們在資料庫裡建一個db link 測試下吧
1 | create public database link t |
2 | connect to "nagios" identified by "passwd" |
3 | using 'test'; |
注意 使用者名稱和密碼一定要用雙引號(”) 引起來,因為mysql 裡是大小寫敏感的。
先做個測試資料
01 | isql -v test |
02 | [MYODBCUtilReadDataSource.c][243][ERROR] Unknown attribute (TRACEFILE). |
03 | [MYODBCUtilReadDataSource.c][243][ERROR] Unknown attribute (TRACE). |
04 | +---------------------------------------+ |
05 | | Connected! | |
06 | | | |
07 | | sql-statement | |
08 | | help [tablename] | |
09 | | quit | |
10 | | | |
11 | +---------------------------------------+ |
12 | SQL> insert into t values (1) ; |
13 | SQLRowCount returns 1 |
14 | SQL> commit; |
15 | SQLRowCount returns 0 |
16 | SQL> select * from t; |
17 | +-----------+ |
18 | | id | |
19 | +-----------+ |
20 | | 1 | |
21 | +-----------+ |
22 | SQLRowCount returns 1 |
23 | 1 rows fetched |
24 | SQL> |
然後在oracle 端看看吧
01 | [oracle@test740_9 ~]$ sqlplus / as sysdba ; |
02 | SQL*Plus: Release 10.2.0.4.0 - Production on D??úèy 5?? 19 16:57:12 2010 |
03 | Copyright (c) 1982, 2007, Oracle. All Rights Reserved. |
04 |
05 | Connected to: |
06 | Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production |
07 | With the Partitioning, OLAP, Data Mining and Real Application Testing options |
08 |
09 | SQL> select * from "t"@t; |
10 | id |
11 | ---------- |
12 | 1 |
13 | SQL> |
注意因為mysql是case sensitive 所以要用雙引號把表明,欄位名括起來,或者mysql端設定引數 lower_case_table_names=1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-731986/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多個異構資料庫如何關聯查詢資料庫
- 資料庫AR之關聯查詢資料庫
- MySQL多表關聯查詢MySql
- BIRT 異構跨庫的動態關聯查詢怎麼做
- mysql中的多表關聯查詢MySql
- mysql 三表關聯查詢MySql
- mysql三表關聯查詢MySql
- mysql關聯查詢優化MySql優化
- hyperf關聯子表查詢主表資料
- mysql三張表關聯查詢MySql
- day95:flask:SQLAlchemy資料庫查詢進階&關聯查詢FlaskSQL資料庫
- 區分關聯子查詢和非關聯子查詢
- exist-in和關聯子查詢-非關聯子查詢
- MyBatis關聯查詢MyBatis
- thinkphp關聯查詢PHP
- Yii2實現跨mysql資料庫關聯查詢排序功能MySql資料庫排序
- 20240719資料庫關聯查詢、條件查詢資料庫
- MYSQL A、B表陣列關聯查詢MySql陣列
- mysql三表關聯查詢練習MySql
- java 分庫關聯查詢工具類Java
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- Laravel Eloquent 關聯模型查詢快取資料Laravel模型快取
- Mongodb 關聯表查詢MongoDB
- JPA多表關聯查詢
- 關於同一個連線不同資料庫之間的 Eloquent 關聯查詢資料庫
- thinkphp中的多表關聯查詢PHP
- 關聯子查詢的用處
- 關聯子查詢 Correlated Subqueries
- 關於Oracle資料庫的時間查詢Oracle資料庫
- 資料結構——關聯容器資料結構
- 資料庫關聯問題資料庫
- DataSet多表關聯實現本地資料複雜的查詢
- 關聯查詢的resultMap寫法示例
- 關聯查詢子查詢效率簡單比照
- 使用外部表關聯MySQL資料到OracleMySqlOracle
- 如何做多表關聯查詢
- SQL三表左關聯查詢SQL
- 求助:DetachedCriteria關聯查詢問題~~