*
*
前言:达梦数据库配置DBlink是以后达梦运维经常会遇到的一种需求。达梦数据库DBLINK创建的方法以及SQL语句基本与Oracle兼容,但并不意味Oracle上创建DBLINK的方法就在达梦数据库上适用,个人认为达梦数据库的DBLINK配置相对而言比较繁琐,尤其在Linux环境下,环境变量的配置可能引起比较多的问题。
达梦数据库总体来说是一款优秀的数据库管理软件,但对错误,异常信息的处理,文档支持实在不敢恭维,出了问题,你根本没办法去排查,加上达梦官方文档,少的可怜,只能自己一阵摸索,运气对了,那就对了,要是运气差了点,死活你都判断不出来错在那里。
个人在对达梦DBLINK的实验测试中,发现早期版本的达梦在配置同Oracle数据库的DBLINK时遇到执行dblink查询导致达梦数据库宕机的情况,这是一个非常严重问题,在与达梦官方的工程师沟通中,他们也无法查出根本原因,更可恶的是,创建DBLINK的语句,在使用达梦管理工具查看完成的DDL时,竟然会截取字符长度,完整的DBLINK语句竟然不完整。
版本信息:
我不知道DBLINK的语句DDL截取是否影响了DBLINK的配置,但这个版本确实存在宕机的情况,而且达梦工程师也遇到过。只是他说是配置DBLINK导致的,至于根本原因无从得知,最后我也放弃了寻根问底了,直接从达梦官网下载了最新版本,结果无论我怎么配置DBLINK,达梦数据库都是正常的。
在配置DBLNK的过程中,还有一点让我记忆犹新,DBLINK语句的写法,这是我最想吐槽的地方。在安装配置达梦数据库的时候,我们都知道有个选项是大小写敏感,我们在安装的时候基本是将勾去掉,但在DBLINK的SQL语句写法中,如下:
CREATE OR REPLACE LINK LINK01 CONNECT 'ORACLE' WITH "scott" IDENTIFIED BY "tiger" USING '(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.40)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = ORCL)))';
以上SQL中,scott用户一定要用大写,小写人家根本不认识,由于达梦的异常信息提示,你基本都无法判断是因为这个SQL中使用用户为小写才导致DBLINK查询不出来结果。在那个晚上,当我几乎要放弃的时候,为了让SQL好看,我随手将SOCTT用户名使用了大写,再次重试,跳出来结果让我几乎要感动落泪,真TMD不容易。
最后言归正传,就算达梦再不好用,他也是填补了我们国家数据库软件的空白,接下来描述本次DBLINK测试的艰辛历程。本次测试分为三个:
达梦与达梦之间的DBLINK配置
达梦与Oracle之间的DBLINK配置
Oracle与达梦之间的DBLNK配置
在这里要着重说下,达梦通过创建DBLINK连接Oracle数据库,与ORACLE数据库配置DBLINK连接达梦数据库之间的配置是不一样的,因此分开来说,至于达梦与其他异构数据库之间的DBLINK本人尚为未尝试,在官方的论坛中也未有这类的需求,这样就暂时不在本文中介绍。
*
*
达梦数据库间DBlink配置
实验环境说明
*
*
达梦数据库1:192.168.80.40 DMSERVER RHEL 6.5 64位
达梦数据库2:192.168.80.41 DMSERVER2 RHEL 6.5 64位
达梦数据库版本:
DM Database Server x64 V7.1.5.117-Build(2016.09.29-73607)ENT
要求具备条件1:
两台服务器之间能通,且将两台数据库服务器之间防火墙,SELINUX 关闭。(本人在实验的时候做了一次蠢事,防火墙使用service iptable stop 停掉后,后面有重启主机忘记再次停了,之后做DBLINK的测试,死活不行,建议在开始就将防火墙给禁掉。chkconfig iptables off)
要求具备条件2:
达梦安装需要用dm.key 否则DBLINK配置开启MAL不成功,必须进行安全功能设置,如果不配置dm.key就无法进行安全功能配置。
要求具备条件3:
两台数据库的实例名不能一致,如果一致则配置MAL时会报错,达梦数据库无法启动。
*
*
实施步骤
1、配置dm.ini 开启MAL,打通两台主机之间的通信链路
*
*
停止两台达梦数据库的实例
[root@oracleadg1 dameng7]# /etc/init.d/DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
[root@oracleadg2 dameng7]# /etc/init.d/DmServiceDMSERVER2 stop
Stopping DmServiceDMSERVER2: [ OK ]
修改dm.ini文件,开启MAL
该配置默为0:MAL_INI = 0,将该参数开启,设置为1
#configuration file
MAL_INI = 1 #dmmal.ini
ARCH_INI = 0 #dmarch.ini
REP_INI = 0 #dmrep.ini
LLOG_INI = 0 #dmllog.ini
TIMER_INI = 0 #dmtimer.ini
MPP_INI = 0 #dmmpp.ini
两个达梦数据库均以上配置,开启MAL后,需要配置dmmal.ini
*
*
2、配置dmmal.ini 文件,设置MAL相关参数
*
*
两个达梦数据库均配置dmmal.ini文件,该文件可以参考dmmal_example.ini ,可复制下来可以修改,也可以自己编辑,内容如下:
[dmdba@oracleadg1 DAMENG]$ cat dmmal.ini
[mal_inst1]
mal_inst_name = DMSERVER
mal_host = 192.168.80.40
mal_port = 5400
[mal_inst2]
mal_inst_name = DMSERVER2
mal_host = 192.168.80.41
mal_port = 5400
[mal_inst1] :表示达梦实例1,
[mal_inst2] :表示达梦实例2,下面配置对于该实例的一些配置。
mal_inst_name:MAL实例名与数据库实例保持一致
mal_host :数据库实例服务器地址
mal_port :数据库定义mal端口,不能配置为5236,需配置其他的端口名。
两台数据库均配置一样,配置后需要重启达梦数据库
*
*
3、重启两台主机上的达梦数据库
*
*
[root@oracleadg1 dameng7]# /etc/init.d/DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[root@oracleadg2 dameng7]# /etc/init.d/DmServiceDMSERVER2 restart
Stopping DmServiceDMSERVER2: [ OK ]
Starting DmServiceDMSERVER2: [ OK ]
重启后可以通过netstat 验证MAL端口是否正常监听
[root@oracleadg1 dameng7]# netstat -an|grep 5400
tcp 0 0 192.168.80.40:42931 192.168.80.41:5400 ESTABLISHED
tcp 0 0 192.168.80.40:60899 192.168.80.40:5400 ESTABLISHED
tcp 0 0 :::5400 :::* LISTEN
tcp 0 0 ::ffff:192.168.80.40:5400 ::ffff:192.168.80.41:33685 ESTABLISHED
tcp 0 0 ::ffff:192.168.80.40:5400 ::ffff:192.168.80.40:60899 ESTABLISHED
[root@oracleadg1 dameng7]#
能正常监听,则配置成功,否则需检查那个地方配置有误。
*
*
4、建立DBLINK并测试
*
*
在源机192.169.80.40上创建DBLINK,如下:
[root@oracleadg1 ~]# /dameng7/dmdbms/bin/disql sysdba/oracle
服务器[LOCALHOST:5236]:处于普通打开状态
使用普通用户登录
登录使用时间: 51.697(毫秒)
disql V7.1.5.117-Build(2016.09.29-73607)ENT
Connected to: DM 7.1.5.117
SQL> CREATE or replace PUBLIC LINK LINK02 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY oracle USING '192.168.80.41/5400';
操作已执行
已用时间: 38.163(毫秒). 执行号:9.
SQL> select * from v$version@LINK02;
行号 BANNER
---------- --------------------------------------------------------------
1 DM Database Server x64 V7.1.5.117-Build(2016.09.29-73607)ENT
2 DB Version: 0x70009
已用时间: 00:00:02.423. 执行号:10.
也可以在192.169.80.41上创建DBLINK连接40上的达梦数据库,如下:
[root@oracleadg2 ~]# /dameng7/dmdbms/bin/disql sysdba/oracle
服务器[LOCALHOST:5236]:处于普通打开状态
使用普通用户登录
登录使用时间: 680.260(毫秒)
disql V7.1.5.117-Build(2016.09.29-73607)ENT
Connected to: DM 7.1.5.117
SQL> CREATE or replace PUBLIC LINK LINK02 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY oracle USING '192.168.80.40/5400';
操作已执行
已用时间: 00:00:02.190. 执行号:10.
SQL> select * from v$version@LINK02;
行号 BANNER
---------- --------------------------------------------------------------
1 DM Database Server x64 V7.1.5.117-Build(2016.09.29-73607)ENT
2 DB Version: 0x70009
已用时间: 578.159(毫秒). 执行号:11.
测试验证OK,达梦数据库之间的DBLINK配置完成。
*
*
注意事项
*
*
1、达梦数据库服务器之间通信要通,且防火墙,SELINUX关闭,否则提示如下报错
SQL> select * from v$version@LINK02;
select * from v$version@LINK02;
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[v$version]失败.
已用时间: 26.456(毫秒). 执行号:5.
2、达梦数据库安装配置时必须要配置dm.key,否则无法开启MAL。
3、配置端口不要配置数据库访问端口,如5236 ,配置其他端口。
4、创建DBLINK一定要使用MAL端口,否则提示如下错误信息:
CREATE or replace PUBLIC LINK LINK02 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY oracle USING '192.168.80.40/5236';
第1 行附近出现错误[-8707]:实例不存在.
已用时间: 00:00:01.003. 执行号:11.
5、注意SQL串中用户为大写,否则提示如下错误信息:
SQL> select * from v$version@LINK02;
select * from v$version@LINK02;
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[v$version]失败.
已用时间: 26.456(毫秒). 执行号:5.
*
*
达梦数据库DBlink连接Oracle配置
实验环境说明
*
*
Oracle数据库1:192.168.80.40 ora11g RHEL 6.5 64位
达梦数据库1:192.168.80.41 DMSERVER2 RHEL 6.5 64位
oracle数据库版本:oracle 11.2.0.4
达梦数据库版本:DM Database Server x64 V7.1.5.117-Build(2016.09.29-73607)ENT
要求具备条件1:Oracle数据库能对外提供服务,可以通过客户端以及中间件配置,测试验证数据库能对外提供服务。
要求具备条件2:两台服务器之间能正常访问,且防火墙关闭,SELINUX均为关闭。
要求具备条件3:达梦数据库版本要求,尽量为实验测试的版本,实验版本之前的版本出现严重的BUG,在进行DBLINK查询时,达梦数据库会宕机,出现以下错误提示:
说明:oracle单实例与集群测试均未有差别,如果集群RAC配置了scan IP,则可以使用scan IP地址来创建DBLINK,如未配置,则使用其中一个节点IP均可。
*
*
实验步骤
1、下载OCI ,并安装在达梦服务器
*
*
异构数据库之间的访问比同一数据库产品要复杂的多,由于Oralce数据库并没有对达梦数据库的兼容性,达梦数据库创建的dblink是无法直接访问到oralce数据库的,但达梦可以通过Oracle数据库提供OCI组件访问到oralce数据库
在ORACLE官网中下载OCI ,如下链接:
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
下载与数据库版本一致的OCI,此实验我下载的版本为:11.2.0.4版本OCI下载的OCI包,最好包含basic ,sqlplus ,sdk 并将它上传到达梦数据库所在的服务器上,如下:
-rwxr-xr-x. 1 root root 834491 11月 22 2016 instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
-rwxr-xr-x. 1 root root 643089 11月 22 2016 instantclient-sdk-linux.x64-11.2.0.4.0.zip
-rwxr-xr-x. 1 root root 60704657 11月 22 2016 instantclient-basic-linux.x64-11.2.0.4.0.zip
所谓安装,即解压即可,在生成的instantclient_11_2 目录中包含了达梦数据库所需要的DBLINK与oralce数据库连接的加载文件。
[root@oracleadg2 instantclient_11_2]# pwd
/dameng7/instantclient_11_2
[root@oracleadg2 instantclient_11_2]# ls -l
总用量 186444
-rwxrwxr-x 1 root root 25420 8月 25 2013 adrci
-rw-rw-r-- 1 root root 439 8月 25 2013 BASIC_README
-rwxrwxr-x 1 root root 47860 8月 25 2013 genezi
-r-xr-xr-x 1 root root 368 8月 25 2013 glogin.sql
-rwxrwxr-x 1 root root 53865194 8月 25 2013 libclntsh.so.11.1
-r-xr-xr-x 1 root root 7996693 8月 25 2013 libnnz11.so
-rwxrwxr-x 1 root root 1973074 8月 25 2013 libocci.so.11.1
-rwxrwxr-x 1 root root 118738042 8月 25 2013 libociei.so
-r-xr-xr-x 1 root root 164942 8月 25 2013 libocijdbc11.so
-r-xr-xr-x 1 root root 1502287 8月 25 2013 libsqlplusic.so
-r-xr-xr-x 1 root root 1469542 8月 25 2013 libsqlplus.so
-r--r--r-- 1 root root 2091135 8月 25 2013 ojdbc5.jar
-r--r--r-- 1 root root 2739616 8月 25 2013 ojdbc6.jar
-r-xr-xr-x 1 root root 9320 8月 25 2013 sqlplus
-rw-rw-r-- 1 root root 443 8月 25 2013 SQLPLUS_README
-rwxrwxr-x 1 root root 192365 8月 25 2013 uidrvci
-rw-rw-r-- 1 root root 66779 8月 25 2013 xstreams.jar
*
*
2、配置达梦连接Oracle数据库的dblink加载库环境
*
*
将上一步解压出来的so文件复制拷贝到达梦数据库所在的bin目录下:
[dmdba@oracleadg2 bin]$ cp /dameng7/instantclient_11_2/*.so* ./
使用dmdba的帐号
-rwxr-xr-x 1 dmdba dinstall 19791 10月 25 20:16 rac_reinit
-rwxr-xr-x 1 dmdba dinstall 186016 10月 25 20:17 libdodbc.so
-rwxr-xr-x 1 dmdba dinstall 6634 10月 25 20:17 DmAuditMonitor
-rwxr-xr-x 1 dmdba dinstall 6589 10月 25 20:17 DmJobMonitor
-rwxr-xr-x 1 dmdba dinstall 6392 10月 25 20:17 DmInstanceMonitor
lrwxrwxrwx 1 dmdba dinstall 14 10月 25 20:17 libxqilla.so.3 -> libxqilla23.so
drwxr-xr-x 2 dmdba dinstall 4096 10月 25 20:17 lib
drwxr-xr-x 2 dmdba dinstall 4096 10月 25 20:55 pids
-rwxr-xr-x 1 dmdba dinstall 53865194 10月 25 23:41 libclntsh.so.11.1
-r-xr-xr-x 1 dmdba dinstall 7996693 10月 25 23:41 libnnz11.so
-rwxr-xr-x 1 dmdba dinstall 1973074 10月 25 23:41 libocci.so.11.1
-rwxr-xr-x 1 dmdba dinstall 118738042 10月 25 23:42 libociei.so
-r-xr-xr-x 1 dmdba dinstall 164942 10月 25 23:42 libocijdbc11.so
-r-xr-xr-x 1 dmdba dinstall 1502287 10月 25 23:42 libsqlplusic.so
-r-xr-xr-x 1 dmdba dinstall 1469542 10月 25 23:42 libsqlplus.so
将libclntsh.so.11.1 复制一个名字为:libclntsh.so ,也可以对这个文件创建一个软链接,名字为:libclntsh.so,个人使用前面的方法。
-rwxr-xr-x 1 dmdba dinstall 6392 10月 25 20:17 DmInstanceMonitor
lrwxrwxrwx 1 dmdba dinstall 14 10月 25 20:17 libxqilla.so.3 -> libxqilla23.so
drwxr-xr-x 2 dmdba dinstall 4096 10月 25 20:17 lib
drwxr-xr-x 2 dmdba dinstall 4096 10月 25 20:55 pids
-rwxr-xr-x 1 dmdba dinstall 53865194 10月 25 23:41 libclntsh.so.11.1
-r-xr-xr-x 1 dmdba dinstall 7996693 10月 25 23:41 libnnz11.so
-rwxr-xr-x 1 dmdba dinstall 1973074 10月 25 23:41 libocci.so.11.1
-rwxr-xr-x 1 dmdba dinstall 118738042 10月 25 23:42 libociei.so
-r-xr-xr-x 1 dmdba dinstall 164942 10月 25 23:42 libocijdbc11.so
-r-xr-xr-x 1 dmdba dinstall 1502287 10月 25 23:42 libsqlplusic.so
-r-xr-xr-x 1 dmdba dinstall 1469542 10月 25 23:42 libsqlplus.so
-rwxr-xr-x 1 dmdba dinstall 53865194 10月 25 23:45 libclntsh.so
注意:有些文档或达梦论坛上有建议复制拷贝在主机的/lib64目录下,但个人测试过几次,发现没有效果。
*
*
3、重启达梦数据库
*
*
具备上一步条件后,重启达梦数据库,重启步骤省略。重启达梦数据库的目的是为了达梦数据库能加载到DBLINK访问Oracle数据库所需要的文件,否则在查询DBLINK时,提示如下信息:
SQL> select * from emp@ceshi;
select * from emp@ceshi;
第1 行附近出现错误[-2245]:DBLINK加载库文件失败.
已用时间: 0.751(毫秒). 执行号:4.
另外经过多次验证,客户端软件OCI删除后,如果达梦数据库不重启还是可以用,如果重启了数据库,则需要重新配置,建议将oci中全部so文件拷贝过去,尚未验证具体需要那些so。
*
*
4、创建DBLINK,并测试
*
*
登录到达梦数据库,创建dblink 并查询oralce数据库中scott用户下的表信息。
[root@oracleadg2 ~]# /dameng7/dmdbms/bin/disql sysdba/oracle
服务器[LOCALHOST:5236]:处于普通打开状态
使用普通用户登录
登录使用时间: 81.288(毫秒)
disql V7.1.5.117-Build(2016.09.29-73607)ENT
Connected to: DM 7.1.5.117
SQL> create or replace link ceshi connect 'ORACLE' with SCOTT identified by "tiger" using '(DESCRIPTION =
2 (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.40)(PORT = 1521)))
3 (CONNECT_DATA = (SERVICE_NAME = ora11g)))';
操作已执行
已用时间: 61.119(毫秒). 执行号:8.
SQL> select * from emp@ceshi;
行号 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ------ --------- ---- --------------------------- ------- ------- ------
1 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 NULL 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30
3 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30
4 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 NULL 20
5 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30
6 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 NULL 30
7 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 NULL 10
8 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000.00 NULL 20
9 7839 KING PRESIDENT NULL 1981-11-17 00:00:00 5000.00 NULL 10
10 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0 30
11 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00 NULL 20
行号 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ------ ------- ---- --------------------------- ------- ---- ------
12 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 NULL 30
13 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 NULL 20
14 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 NULL 10
14 rows got
已用时间: 105.881(毫秒). 执行号:9.
测试成功
*
*
注意事项
*
*
1、达梦数据库服务器之间通信要通,且防火墙,SELINUX关闭,否则提示如下报错
SQL> select * from v$version@LINK02;
select * from v$version@LINK02;
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[v$version]失败.
已用时间: 26.456(毫秒). 执行号:5.
oci中so文件需全部拷贝到达梦数据库bin目录中,并且重启达梦数据库,否则提示加载DBLINK的库文件失败。
SQL> select * from emp@ceshi;
select * from emp@ceshi;
第1 行附近出现错误[-2245]:DBLINK加载库文件失败.
已用时间: 0.751(毫秒). 执行号:4.
3、、注意SQL串中用户为大写,否则提示如下错误信息:
SQL> select * from v$version@LINK02;
select * from v$version@LINK02;
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[v$version]失败.
已用时间: 26.456(毫秒). 执行号:5.
*
*
Oracle数据库DBlink连接达梦数据库配置
实验环境说明
*
*
Linux服务器(192.168.91.100):达梦7
Linux服务器(192.168.91.55) :Oracle11g 11.2.0.4
WINDOWS服务器(192.168.91.254):win64_11gR2_gateways oracle数据库透明网关
达梦数据库版本:DM Database Server x64 V7.1.5.117-Build(2016.09.29-73607)ENT
达梦认识Oracle,但Oracle并不买账,所以从Oracle数据库建立到达梦数据库的DBLINK,这是要费一番周折。还好DM数据库支持ODBC ,ORACLE在对异构数据库这块也是有需求的,ORACLE数据库可以提供hs异构数据库的配置使得Oracle能够访问目标的异构数据库。而异构数据库则包含了ODBC数据源,也就是说,Oracle可以将ODBC的数据源通过异构hs的配置,将ODBC构造成Oracle数据库的服务,类似从Oracle访问另一个Oracle的数据库,这样就可以在Oracle创建DBLINK进行异构数据库之间的访问。也就是说,我们将目标达梦数据库通过ODBC伪装成Oracle数据库,这样就可以实现Oracle DBlink访问到达梦数据库了。
Oracle数据库和异构数据库不可能在同一台主机,因此ODBC的实现,HS的实现会变得有点繁琐,尤其在Linux平台,配置会变得复杂。我们不喜欢做复杂的事,同样Oracle绝不做复杂的事,因此对于异构数据库的访问需求,Oracle开发了gateways工具,它就像Oracle的客户端工具一样,可以让你轻松访问其他主机上的异构数据库。如DB2,informix ,mysql ,MS SqlServer等等,唯独没有达梦,还好Oracle 没有忘记ODBC,因此在配置Oracle访问达梦的DBLINK,首先要将达梦数据库在windows主机上创建ODBC数据源,然后在windows主机上安装透明网关,并配置hs,将ODBC配置为Oracle自身认可的Oracle服务,然后Oracle源数据就可以通过对该服务创建DBLINK实现oracle到达梦访问。
*
*
实验步骤
1、WINDOWS主机上配置达梦ODBC数据源
*
*
打开WINDOWS 的控制面板,在管理工具中找到创建ODBC数据源的管理程序,如下图所示:
选择系统DSN创建ODBC数据源,单击添加按钮,进入配置页面:
添加数据源,找到对应的数据库驱动:
注意:前提条件下windows主机上要先安装达梦数据库软件,否则无法获取达梦数据库的驱动。
填写好数据库信息,创建ODBC数据源,如下:
配置完成后,进行测试(一定要测试),如下图:
配置完成后最后如下图所示:
上图配置了一个叫dg4odbc的ODBC数据源。
*
*
2、WINDOWS主机上安装透明网关-Gateways
*
*
从Oracle官网上下载对应版本的Gateways安装包,Gateways安装具体过程略过,类似安装oracle数据库客户端,安装的组件选择如下图所示:
我们选择的是gateway for ODBC,因此选择这个组件安装即可。
安装完成了会生成以下目录,跟客户端类似,
安装目录如下:E:\product\11.2.0\tg_1
最主要的是进入到hs目录,以及network/admin目录,配置hs,监听,以及tns。
HS路径:E:\product\11.2.0\tg_1\hs\admin
监听及Tnsname.ora路径:E:\product\11.2.0\tg_1\NETWORK\ADMIN
*
*
3、配置HS,监听,tnsname.ora
*
*
配置HS:initdg4odbc.ora
文件命名格式为:init+Service_NAME.ora ,这个Service_NAME就是需要我们自己命名的,在这里我取名叫做dg4odbc,你也可以取其他的名字。该文件配置如下:
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = dg4odbc
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
#
# Environment variables required for the non-Oracle system
#
#set =
配置解析:
HS_FDS_CONNECT_INFO = dg4odbc #这里是要填写ODBC的名字,就是之前对达梦配置的ODBC的名字。
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
这三个参数是HS异构数据库配置的一些参数,根据情况而定,在这就不做解释。这个文件配置好后,则需要配置tnsname.ora 来创建oracle本地服务。
配置HS:tnsname.ora
Tnsnames.ora文件内容如下:
# This is a sample tnsnames.ora that contains the NET8 parameters that are
# needed to connect to an HS Agent
dg4odbc =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.91.254)(PORT=1521))
(CONNECT_DATA=(SID=dg4odbc))
(HS=OK)
)
配置解析:
(CONNECT_DATA=(SID=dg4odbc)):需要配置的数据库的SID,跟配置的hs文件的名字保持一致,这里为dg4odbc。 (HS=OK):表示为异构数据库
配置HS:监听Listener.ora
# listener.ora Network Configuration File: E:\product\11.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = SC-201606142035)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=E:\product\11.2.0\tg_1)
(PROGRAM=dg4odbc)
)
)
ADR_BASE_LISTENER = E:\product\11.2.0\tg_1
主要是添加蓝色代码:
配置解析:
SID_NAME=dg4odbc:表示监听的数据库的SID的名称,与配置tnsname.ora中的名字保持一致,这里为dg4odbc。
PROGRAM=dg4odbc:这里dg4odbc 不是指的ODBC的名字,也不是要设置的SID的名字,这里指的是配置为11g的ODBC异构数据库,10g的名字为:tg4odbc。
配置好监听后,就可以启动监听,监听程序的在
E:\product\11.2.0\tg_1\bin目录下:
双击LSNRCTL.exe文件,先停止,再启动
如果提示没有权限,让它运行在管理员模式下
这样就成功创建了一个叫dg4odbc的oracle服务。这服务是可以对外访问的。
*
*
4、创建DBLINK,并测试
*
*
创建dblink可以直接在数据库中执行创建语句,也可以使用pl/sql工具来创建,如下:
CREATE PUBLIC DATABASE LINK test_sql CONNECT TO "test" identified by "abc1234567" using '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.91.254)(PORT=1521))(CONNECT_DATA=(SID=dg4odbc))(HS=OK))';
测试语句为:select * from dual@test_sql;
意思是创建Oralce访问windows主机上伪造的oracle数据库服务的Dblink,这样Oracle就可以通过这种方式访问到达梦数据库。
*
*
注意事项
*
*
1、ODBC配置前应在windows主机上安装达梦数据库,否则找不到驱动。
2、ODBC配置后,应进行有效性测试,测试能否正常访问到达梦数据库。
3、安装透明网关后,配置hs的initdg4odbc.ora文件 ,tnsname.ora 文件,监听文件之间的关系要搞清楚。
*
*
结束语
国产数据库是国家信息安全的重中之重,对比国外的数据库产品来讲,国产数据库还存在比较大的差距,但这种差距也越来越小。达梦数据库从安全技术标准,使用习惯以及重要的性能各方面来讲达梦数据库也正一步一个脚印在追赶国外优秀的数据库产品,我们相信在不久的将来国产数据库一定能够取代国外优秀的数据库产品。
关注我们
领取专属 10元无门槛券
私享最新 技术干货