dblink

 

SQL>  show parameter open_links
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_links                           integer     4
open_links_per_instance              integer     4

参数的解释:
***open_links :每个session最多允许的dblink数量;
***open_links_per_instance:指每个实例最多允许的dblink个数

创建 DBLINK 

CREATE PUBLIC DATABASE LINK DBL_BJLHR CONNECT TO SCOTT IDENTIFIED BY TIGER USING 'TNS_BJLHR';
SELECT * FROM SCOTT.TB_TEST@DBL_BJLHR;

CREATE DATABASE LINK DBL_BJLHR
CONNECT TO SCOTT IDENTIFIED BY TIGER
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BJLHR)
)
)';

查看dblink

select * from dba_db_links d WHERE D.db_link LIKE '%PROD2_2%';

Oracle通过dblink连接MySQL  

 参考文档: Detailed Overview of Connecting Oracle to MySQL Using DG4ODBC Database Link (Doc ID 1320645.1)

原理:

Oracle使用DG4ODBC数据网关连接其它非Oracle数据库,其原理图如下:

1)判断32位还是64位

因为32位和64位的配置不一样,64位更复杂一些,因此我们首先得确定Oracle和DG4ODBC是32位还是64位:

file $ORACLE_HOME/bin/dg4odbc  

2)下载并安装ODBC Driver Manager(默认已安装2.3.1版本)

http://www.unixodbc.org/

tar -zxvf unixODBC-2.3.9.tar.gz
cd unixODBC-2.3.9              (root执行)
./configure --prefix=/usr/local/unixODBC-2.3.9 --includedir=/usr/include --libdir=/usr/lib64 --bindir=/usr/bin --sysconfdir=/etc
make && make install

---unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib64下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。

执行命令:odbcinst -j 验证是否安装成功

3)下载并按照ODBC Driver for MySQL

https://downloads.mysql.com/archives/c-odbc/
tar -zxvf mysql-connector-odbc-8.0.26-linux-glibc2.12-x86-64bit.tar.gz
mv mysql-connector-odbc-8.0.26-linux-glibc2.12-x86-64bit /home/oracle/app/myodbc-8.0.26

4)配置ODBC Driver

vim /etc/odbc.ini:

[myodbc8]  
Driver = /home/oracle/app/myodbc-8.0.26/lib/libmyodbc8w.so
Description = Connector/ODBC 8.0 Driver DSN  
SERVER = 192.168.56.110 
PORT = 3307
USER = root
PASSWORD = mysql
DATABASE = oldboy
OPTION = 0  
TRACE = OFF

5)验证ODBC连接

export ODBCINI=/etc/odbc.ini                ---写到.bash_profile中
export LD_LIBRARY_PATH=/home/oracle/app/myodbc-8.0.26/lib:$LD_LIBRARY_PATH
isql myodbc8 -v
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_oldboy                                                |
+-----------------------------------------------------------------+
| t1                                                              |
| t2                                                              |
+-----------------------------------------------------------------+
SQLRowCount returns 2

 6)配置tnsnames.ora

dg4odbc =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.20)(PORT = 15210))
    (CONNECT_DATA =
      (SID = dg4odbc)
      (HS = OK)
    )
  )

7)配置listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracle19)(PORT = 15210))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC15210))
    )
  )

SID_LIST_LISTENER =
(SID_LIST =
   (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome)
      (GLOBAL_DBNAME=wmsdb_dg_bj)
   )
   (SID_DESC =
      (SID_NAME = dg4odbc)
      (ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome)
      (PROGRAM=dg4odbc)
(ENVS=LD_LIBRARY_PATH=/home/oracle/app/unixodbc-8.0.26/lib:/oracle/app/oracle/product/19c/dbhome/lib)
)
)

8)创建init<sid>.ora文件

HS_FDS_CONNECT_INFO=myodbc8           # Data source name in odbc.ini
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_TRACE_LEVEL = on
HS_FDS_SUPPORT_STATISTICS
=FALSE HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
HS_NLS_NCHAR=UCS2
//NVARCHAR/NCHAR和图形数据类型通常以Unicode格式存储数据。unicode字符集因数据库的不同而不同,设置此参数外部数据库保持一致
# ODBC env variables
set ODBCINI=/etc/odbc.ini

9)使上述配置文件生效

$ lsnrctl reload
$ lsnrctl status

10)验证配置是否正确

tnsping myodbc8

11)创建dblink

create public database link myodbc connect to "root" identified by "mysql" using 'dg4odbc'; 
--注意:MySQL用户名和密码,都需要使用双引号,dg4odbc使用单引号。
select count(*) from trans_expert_map@myodbc;

备注:MySQL数据中是区分大小写的,表需要用双引号引起来

 

 

sqldeveloper工具连接mysql参考下面网址

https://blog.csdn.net/wb175208/article/details/85797988

posted @ 2021-08-20 16:55  harrison辉  阅读(566)  评论(0)    收藏  举报