天天看點

Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

一、概述

        linux環境下,Oracle資料庫通過DBLink遠端連接配接MySQL資料庫。

二、環境資訊

1、Oracle

    ①作業系統:Linux X86-64

    ②資料庫版本:11.2.0.4.0

    ③字元集:SIMPLIFIED CHINESE_CHINA.AL32UTF8

2、MySQL

    ①作業系統:Linux i686

    ②資料庫版本:5.7.21

    ③字元集:UTF8

三、配置UnixODBC

1、下載下傳UnixODBC安裝包

軟體位址:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz

2、安裝

①root使用者執行

    cd /usr/local

    tar zxvf unixODBC-2.3.0.tar.gz

② 編譯安裝

    cd unixODBC-2.3.0/

    ./configure --prefix=/usr/local/unixODBC-2.3.0 --includedir=/usr/include --libdir=/usr/lib64 --bindir=/usr/bin --sysconfdir=/etc

    make

    make install

3、測試

執行指令:odbcinst -j,如果安裝成功會顯示:

[root@vbox66 local]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[root@vbox66 local]#            

        unixODBC所需的頭檔案都被安裝到了/usr/inlucde下,編譯好的庫檔案安裝到了/usr/lib64下,與unixODBC相關的可執行檔案安裝到了/usr/bin下,配置檔案放到了/etc下。

四、配置odbc連接配接MyDQL

1、下載下傳檔案

https://cdn.mysql.com//Downloads/Connector-ODBC/5.1/mysql-connector-odbc-5.1.13-1.x86_64.rpm           

2、rpm安裝

rpm -ivh mysql-connector-odbc-5.1.13-1.x86_64.rpm
           

3、配置odbc.ini檔案

vi /etc/odbc.ini
[testdb]
Description = mysql
Driver = MySQL ODBC 5.1 Driver
Server = 192.169.31.103            //MySQL伺服器IP
Database = test                   //MySQL資料庫名
Port = 3306                      //端口
USER = user_name                //資料庫使用者名
Password = passwd                //使用者民密碼
Socket =
Option = 3
Stmt =
CHARSET = UTF8                  //資料庫字元集           

4、測試odbc連接配接MySQL

運作指令: isql testdb -v //testdb為odbc.ini檔案中中括号中的内容

[root@vbox66 lib64]# isql testdb -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| aaa                                                             |
| jrjctest                                                        |
| mysql                                                           |
| otter                                                           |
| performance_schema                                              |
| sbtest                                                          |
| sys                                                             |
| test                                                            |
| test1                                                           |
| test_wr                                                         |
| wr                                                              |
| wr_test1                                                        |
| www                                                             |
+-----------------------------------------------------------------+
SQLRowCount returns 14
14 rows fetched           

odbc連接配接MySQL成功!

五、配置Oracle通過DBLink通路MySQL

1、修改環境變量

su - oracle
vi .bash_profile
export ODBCINI=/etc/odbc.ini           

2、配置Oracle監聽

①cd $ORACLE_HOME/network/admin

vi listener.ora
添加如下資訊:
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4odbc)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
         (PROGRAM=dg4odbc)
      )
  )           

官方文檔解釋如下:

Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

②修改tnsnames.ora

vi tnsnames.ora
添加如下資訊:
dg4odbc =
  (DESCRIPTION=
    (ADDRESS = (PROTOCOL =tcp)(HOST = vbox66)(PORT = 1521))
    (CONNECT_DATA =
      (SID = dg4odbc))
      (HS=OK)
  )           
Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題
Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

③配置ODBC監聽

cd $ORACLE_HOME/hs/admin
vi initdg4odbc.ora  //注意,這裡init後面的内容要和之前配置 SID_NAME(dg4odbc)一緻
HS_FDS_CONNECT_INFO=testdb
HS_FDS_TRACE_LEVEL = on
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE="simplified chinese_china.al32utf8"    //提供具有非oracle資料源的字元集、語言和區域資訊的異構服務
HS_NLS_NCHAR=UCS2     //NVARCHAR/NCHAR和圖形資料類型通常以Unicode格式存儲資料。unicode字元集因資料庫的不同而不同,設定此參數外部資料庫保持一緻

set ODBCINI=/etc/odbc.ini           

④重新開機測試監聽配置

oracle使用者執行:

lsnrctl stop
lsnrctl start
alter system register;(資料庫中執行)
lsnrctl status;           
Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題
tnsping dg4odbc
           
Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

顯示以上資訊則表示監聽配置成功!

3、建立DBLink

①su - oracle

sqlplus / as sysdba
create public database link myodbc connect to "wangrui" identified by "wangrui" using 'dg4odbc'; --注意:wangrui和wangruit是MySQL使用者名和密碼,都需要使用雙引号,dg4odbc使用單引号。           

②select * from "a2"@myodbc1;

Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

六、可能會遇到的問題

1、

SYS@vbox66in>select "id" from t1@myodbc1;
select "id" from t1@myodbc1
*
第 1 行出現錯誤:
ORA-28500: 連接配接 ORACLE 到非 Oracle 系統時傳回此資訊:
[
           

原因:有一些内容顯示不全,檢查odbc監聽檔案,檢視HS_LANGUAGE參數,配置為和資料庫字元集一緻

2、

SYS@vbox66in>select "id" from "t1"@myodbc1;
select "id" from "t1"@myodbc1
*
第 1 行出現錯誤:
ORA-28500: 連接配接 ORACLE 到非 Oracle 系統時傳回此資訊: ORA-28541:
HS 初始化檔案的第 8 行發生錯誤。 ORA-02063:
緊接着 2 lines (起自 MYODBC1)
           

原因:NVARCHAR/NCHAR和圖形資料類型通常以Unicode格式存儲資料。unicode字元集因資料庫的不同而不同,需要修改HS_NLS_NCHAR=UCS2

Oracle通過DBLink連接配接MySQL一、概述二、環境資訊三、配置UnixODBC四、配置odbc連接配接MyDQL五、配置Oracle通過DBLink通路MySQL六、可能會遇到的問題

3、

SYS@vbox66in>select * from a2@myodbc1;
select * from a2@myodbc1
*
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
[MySQL][ODBC 5.1 Driver][mysqld-5.7.21-log]Table 'test.A2' doesn't exist
{42S02,NativeErr = 1146}
ORA-02063: 緊接着 2 lines (起自 MYODBC1)
           

原因:MySQL資料中是區分大小寫的,表需要用雙引号引起來