达梦の外部链接(dblink)
外部链接DBLINK
- 达梦の外部链接(dblink)
- 1.1 概述
- 1.2 语法讲解
- 1.3 案例演示
- 1.3.1 同构数据库:DM -> DM之间LINK
- 1.3.2 异构数据库: DM -> Oracle之间的LINK
- 方法一:odbc驱动连接
- 方法二:oracle客户端oci接口
- 1.3.3 异构数据库:Oracle -> DM之间的DBLINK
DM技术交流QQ群:940124259
达梦の外部链接(dblink)
1.1 概述
外部链接对象(LINK)是达梦中一种’特殊’的数据库实体对象,记录着远程数据库的连接和路径信息
,用于建立与远程数据的连接。
如果多台数据库主库间要相互通讯,透明地操作远程数据库中的数据
,就应用程序角度视作在一个大型数据库当中。
用户远程请求数据库的数据,都会被自动转换为网络请求,并在相应节点上实现相应的操作。
建立一个数据库链接(实质是指定一个对远程数据库的访问路径)。
外部链接可以是公用的"数据库中所有用户使用",也可以是私有的"只能被某个用户使用"
。
用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。
外部链接限制:
- DM-DM的同构外部链接不支持MPP环境,DM与异构数据库的外部链接支持MPP环境;
- 增删改不支持INTO语句;
- 不支持使用游标进行增删改操作;
- 不支持操作远程表的复合类型列;
- DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作。
DM 连接异构数据库的外部链接,如下使用限制:
- 数据类型以DM为基础,不支持DM没有的数据类型;
- 语法以DM的语法为标准,不支持DM不兼容的语法;
- 主键更新,如果是涉及到多个服务器的语句,不能保证更新操作一定成功;
- 例如使用CREATE VIEW view_name(view_col_name) AS SELECT ITEM FROM T@LINK 方式来创建查询远程对象的本地视图,对于异构库,不能保证操作一定成功。
对于查询异构库远程对象的本地视图,最好采用 CREATE VIEW AS SELECT ITEM AS alias_name FROM T@LINK方式创建。
删除外部链接:
DROP [PUBLIC] LINK [<模式名>.]<外部链接名>;
查询外部链接视图:
v$dblinkdba_db_links
1.2 语法讲解
CREATE [OR REPLACE] [PUBLIC] LINK <外部链接名> CONNECT ['<连接库类型>'] WITH <登录用户名> IDENTIFIED BY <登录口令> USING '<外部连接串>';
连接库类型: <DAMENG | ORACLE | ODBC>
外部链接串:
[连接类型;] <达梦外部链接串 | Oracle外部链接串> | odbc外部链接串>
连接类型:
[PRIMARY FIRST | STANDBY FIRST | PRIMARY ONLY |
STANDBY ONLY ;] 服务器列表: <服务器地址1 [, 服务器地址2 [, …]]>
服务器地址:> <mal_host/mal_port | mal_inst_host/mal_inst_port > mal_inst_name>
Oracle外部链接串:<TNSNAME配置 | DESCRIPTION描述符 | IP地址/服务名>
odbc外部链接串: <ODBC 数据源 DSN>
使用说明:
1. 创建达梦数据的外部链接须先配置dmmal.ini文件,dm.ini打开MAL_INI=1。
2. 达梦数据库的外部链接中提及的连接串有两种使用形式:远程数据库的实例名和IP地址/端口号。
3. 创建到Oracle数据库的外部链接,可以使用TNSNAME本地别名或连接描述字符串(description或ip地址/服务名)。
4. 创建到Oracle数据库的外部链接,需在发起请求连接的一端安装ORACLE OCI接口,并且保证OCI接口与达梦版本在32/64位一致。
5. 只支持普通用户,不支持SSL和Kerberos认证。
6. 达梦不支持连接自身实例的外部链接(LINK)。
7. 通过LINK对远程服务器所作的修改,由用户在本地服务器通过commit提交或rollback回滚。
8. 只有在具有DBA和Create LINK权限的用户才能创建外部链接。
9. 当DBLINK外部链接到多机系统(服务器地址列表),若正在所连接的服务器发生宕机等意外情况导致无法对外提供服务时,DBLINK会根据之前设定连接类型,在剩余的服务器列表中挑选舒适的服务器进行连接。
10.支持在CREATE SCHEMA子句中CREATE LINK,但是不支持CREATE PUBLIC LINK。
1.3 案例演示
1.3.1 同构数据库:DM -> DM之间LINK
# 本机有两个达梦数据库实例5236/5238
#### 步骤1. 打通MAL通信链路:本地端/远程端:配置mal本地实例和远程实例,配置内容项须保持一致
### dmmal.ini
## 注意:源库与目标库的MAL配置项要一致
MAL_LOGIN_TIMEOUT = 10 #MPP/DBLINK等实例之间登录超时的检测间隔时间。
[MAL_INST1]
MAL_INST_NAME = DEM
MAL_HOST = 192.168.0.120
MAL_PORT = 15238
MAL_INST_HOST = 192.168.0.120
MAL_INST_PORT = 5238#### 步骤2. 本地端/远程端: dm.ini 打开MAL通信子系统
#配置项
MAL_INI = 1
# 函数执行修改
SQL> SF_SET_SYSTEM_PARA_VALUE('MAL_INI',1,0,2);
# 由于MAL_INI属于静态参数需重启数据库生效。
SQL> select SF_GET_PARA_VALUE(1,'MAL_INI'),SF_GET_PARA_VALUE(2,'MAL_INI');
行号 SF_GET_PARA_VALUE(1,'MAL_INI') SF_GET_PARA_VALUE(2,'MAL_INI')
---------- ------------------------------ ------------------------------
1 1(文件值) 1 (内存值)
已用时间: 12.165(毫秒). 执行号:232.SQL> select * from v$parameter where name like 'MAL_INI';
SQL> select * from v$dm_mal_ini;行号 MAL_NAME MAL_INST_NAME MAL_HOST MAL_PORT MAL_INST_HOST MAL_INST_PORT MAL_DW_PORT MAL_LINK_MAGIC MAL_INST_DW_PORT
---------- --------- ------------- ------------- ----------- ------------- ------------- ----------- -------------- ----------------
1 MAL_INST1 DEM 192.168.0.120 15238 192.168.0.120 5238 0 0 0
2 MAL_INST2 DCA 192.168.0.120 15236 192.168.0.120 5236 0 0 0#### 步骤3. 确认MAL子系统通信端口已开启
[dmdba@dca01 ~]$ ss -lnp |grep dmserver
tcp LISTEN 0 128 192.168.0.120:15238 *:* users:(("dmserver",pid=18613,fd=7))
tcp LISTEN 0 128 192.168.0.120:15236 *:* users:(("dmserver",pid=18311,fd=7))
tcp LISTEN 0 128 [::]:5236 [::]:* users:(("dmserver",pid=18311,fd=4))
tcp LISTEN 0 128 [::]:5238 [::]:* users:(("dmserver",pid=18613,fd=4))#### 步骤4. 创建外部链接link
## 连接串形式1:mal_inst_host/mal_inst_port
SQL> CREATE LINK demlink CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING '192.168.0.120/5238';# 查看当前数据库已经存在的dblink
SQL> select * from dba_db_links;
行号 OWNER DB_LINK USERNAME HOST
---------- ------ ------- -------- ------------------CREATED ----------------------------------------------------------------
1 SYSDBA DEMLINK SYSDBA 192.168.0.120/52382021-04-08 22:46:02.650610
已用时间: 4.427(毫秒). 执行号:211.# 尝试访问远端数据库DEM 模式SYSDBA下T1表
SQL> select * from t1@demlink;
行号 A
---------- -----------
1 1
2 2
3 3
4 4
5 5
已用时间: 21.952(毫秒). 执行号:213.# 远程访问数据库后,缓存dblink链接信息
SQL> select * from v$dblink;
行号 LINK_CONN LINK_ID LINK_NAME SCH_ID OWNER_ID IS_PUBLIC LOGIN_NAME HOST_NAME PORT_NUM LOGGED_ON
---------- -------------------- ----------- --------- ----------- ----------- --------- ---------- ------------- ----------- ---------HETEROGENEOUS PROTOCOL IN_USE------------- -------- ------
1 111381824 201326595 DEMLINK 150994945 50331649 NO SYSDBA 192.168.0.120 5238 YESYES TCP/IP YES
已用时间: 1.473(毫秒). 执行号:214.
SQL> ## 连接串形式2:实例名instance_name->mal_inst_name
SQL> CREATE LINK demlink2 CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING 'DEM';
操作已执行
已用时间: 10.784(毫秒). 执行号:215.
SQL> select * from t1@demlink2;
行号 A
---------- -----------
1 1
2 2
3 3
4 4
5 5已用时间: 32.419(毫秒). 执行号:216.
SQL> ## 连接串形式3:mal_host/mal_port
SQL> CREATE LINK demlink3 CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING '192.168.0.120/15238';
操作已执行
已用时间: 17.793(毫秒). 执行号:217.
SQL> select * from t1@demlink3;
行号 A
---------- -----------
1 1
2 2
3 3
4 4
5 5已用时间: 16.746(毫秒). 执行号:218.
SQL> #### 步骤5. 建议使用同义词(隐藏细节:可选)
SQL> CREATE SYNONYM dem_t1 FOR t1@demlink3;# 查询含dblink的同义词
SQL> SELECT * FROM DBA_SYNONYMS WHERE DB_LINK='DEMLINK3';
行号 OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- ------ ------------ ----------- ---------- --------
1 SYSDBA DEM_T1 T1 DEMLINK3已用时间: 8.655(毫秒). 执行号:223.
SQL> select * from DEM_T1;
行号 A
---------- -----------
1 1
2 2
3 3
4 4
5 5已用时间: 11.394(毫秒). 执行号:224.///////////////////////////////////////////////////////////
### 验证在本地数据库内部创建自身的link ###
SQL> drop table cqsoft;
操作已执行
已用时间: 60.191(毫秒). 执行号:227.
SQL> create table cqsoft (id int);
操作已执行
已用时间: 10.302(毫秒). 执行号:228.
SQL> insert into cqsoft values(1),(2),(3),(4);
影响行数 4
已用时间: 5.788(毫秒). 执行号:229.
SQL> commit;
操作已执行
已用时间: 5.671(毫秒). 执行号:230.
SQL> select * from cqsoft;
行号 ID
---------- -----------
1 1
2 2
3 3
4 4
已用时间: 6.054(毫秒). 执行号:231.SQL> create link testlink connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.0.120/5236';
create link testlink connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.0.120/5236';
第1 行附近出现错误[-2235]:不支持DBLINK连接自身实例.
已用时间: 0.657(毫秒). 执行号:0.
SQL>
1.3.2 异构数据库: DM -> Oracle之间的LINK
方法一:odbc驱动连接
##安装和配置odbc(略) 参考我其他博客
#### 步骤1:达梦本地端安装odbc客户端连接工具
安装过程参考链接: (略)
[dmdba@dca01 ~]$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /dm8/dmdba/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[dmdba@dca01 ~]$ #### 步骤2:达梦本地端安装odbc驱动
[root@dca01 ~]# unzip instantclient-odbc-linuxx64.zip
[root@dca01 instantclient_21_1]# ls -l
总用量 1084
drwxr-xr-x. 4 root root 26 10月 31 17:34 help
-rwxr-xr-x. 1 root root 1082576 10月 31 17:34 libsqora.so.21.1
-rw-r--r--. 1 root root 5780 10月 31 17:34 ODBC_LICENSE
-rw-r--r--. 1 root root 7648 10月 31 17:34 ODBC_README
-rwxr-xr-x. 1 root root 5011 10月 31 17:34 odbc_update_ini.sh# 拷贝libsqora.so.21.1到达梦安装主目录bin下
[root@dca01 instantclient_21_1]# cp -v libsqora.so.21.1 /dm8/dmdba/dmdbms/bin
"libsqora.so.21.1" -> "/dm8/dmdba/dmdbms/bin/libsqora.so.21.1"
[root@dca01 instantclient_21_1]# chown -v dmdba:dinstall /dm8/dmdba/dmdbms/bin/libsqora.so.21.1
changed ownership of "/dm8/dmdba/dmdbms/bin/libsqora.so.21.1" from root:root to dmdba:dinstall
[root@dca01 instantclient_21_1]# #### 步骤3:达梦本地端配置Oracle odbc驱动加载
# 配置驱动加载位置
[root@dca01 ~]# vim /etc/odbcinst.ini
[Oracle ODBC Driver]
Description=ODBC driver for Oracle
Driver=/dm8/dmdba/dmdbms/bin/libsqora.so.21.1[dmdba@dca01 ~]$ isql ora -v
[01000][unixODBC][Driver Manager]Can't open lib '/dm8/dmdba/dmdbms/bin/libsqora.so.21.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[dmdba@dca01 ~]$ ldd /dm8/dmdba/dmdbms/bin/libsqora.so.21.1linux-vdso.so.1 => (0x00007ffe4b6bd000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fa1e2323000)libm.so.6 => /lib64/libm.so.6 (0x00007fa1e2021000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa1e1e05000)librt.so.1 => /lib64/librt.so.1 (0x00007fa1e1bfd000)libaio.so.1 => /lib64/libaio.so.1 (0x00007fa1e19fb000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa1e17e1000)libclntsh.so.21.1 => not found ****** 缺什么补什么libclntshcore.so.21.1 => not found ****** 缺什么补什么libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007fa1e15cf000)libc.so.6 => /lib64/libc.so.6 (0x00007fa1e1201000)/lib64/ld-linux-x86-64.so.2 (0x00007fa1e27e2000)libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fa1e0ff7000)
[dmdba@dca01 ~]$ # 申明:以上思路是对的,但驱动太新,后改用Oracle 11.2.0.4服务器版本安装目录$ORACLE_HOME/lib/libsqora.so.11.1
# 处理过程如下:
[root@dca01 bin]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/dmdba/dmdbms/bin:/usr/local/unixODBC/lib
[root@dca01 bin]# isql ora -v
[01000][unixODBC][Driver Manager]Can't open lib '/dm8/dmdba/dmdbms/bin/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[root@dca01 bin]# ldd /dm8/dmdba/dmdbms/bin/libsqora.so.11.1
ldd: 警告: 你没有执行权限 `/dm8/dmdba/dmdbms/bin/libsqora.so.11.1'linux-vdso.so.1 => (0x00007fff4d7f0000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fe932d48000)libm.so.6 => /lib64/libm.so.6 (0x00007fe932a46000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe93282a000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe932610000)libclntsh.so.11.1 (0x00007fe92fca1000)libodbcinst.so.1 => not found -- 缺什么补什么libc.so.6 => /lib64/libc.so.6 (0x00007fe92f8d3000)/lib64/ld-linux-x86-64.so.2 (0x00007fe932f4c000)libnnz11.so (0x00007fe92f506000)libaio.so.1 => /lib64/libaio.so.1 (0x00007fe92f304000)
[root@dca01 bin]# find / -name libodbcinst.so*
/usr/lib64/libodbcinst.so
/usr/lib64/libodbcinst.so.2
/usr/lib64/libodbcinst.so.2.0.0
/usr/local/unixODBC/lib/libodbcinst.so.2.0.0
/usr/local/unixODBC/lib/libodbcinst.so.2
/usr/local/unixODBC/lib/libodbcinst.so
# 符号链接文件
[root@dca01 bin]# ln -sfv /usr/lib64/libodbcinst.so /usr/lib64/libodbcinst.so.1
"/usr/lib64/libodbcinst.so.1" -> "/usr/lib64/libodbcinst.so"[root@dca01 bin]# ldd /dm8/dmdba/dmdbms/bin/libsqora.so.11.1
ldd: 警告: 你没有执行权限 `/dm8/dmdba/dmdbms/bin/libsqora.so.11.1'linux-vdso.so.1 => (0x00007fff431e4000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f61d28cf000)libm.so.6 => /lib64/libm.so.6 (0x00007f61d25cd000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f61d23b1000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f61d2197000)libclntsh.so.11.1 (0x00007f61cf828000)libodbcinst.so.1 => /lib64/libodbcinst.so.1 (0x00007f61cf616000)libc.so.6 => /lib64/libc.so.6 (0x00007f61cf248000)/lib64/ld-linux-x86-64.so.2 (0x00007f61d2ad3000)libnnz11.so (0x00007f61cee7b000)libaio.so.1 => /lib64/libaio.so.1 (0x00007f61cec79000)libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f61cea6f000)# 配置DSN
[root@dca01 bin]# vim /etc/odbc.ini
[ora]
Description=Oracle ODBC DSN
Driver=Oracle ODBC Driver
Database=erpdb
ServerName=192.168.0.207:1521/erpdb
USER_ID=SCOTT
Password=scott
Port=1521# 测试odbc连接
[dmdba@dca01 ~]$ isql ora scott scott
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select * from v$version;
+---------------------------------------------------------------------------------+
| BANNER |
+---------------------------------------------------------------------------------+
| Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production |
| PL/SQL Release 11.2.0.4.0 - Production |
| CORE 11.2.0.4.0 Production |
| TNS for Linux: Version 11.2.0.4.0 - Production |
| NLSRTL Version 11.2.0.4.0 - Production |
+---------------------------------------------------------------------------------+
SQLRowCount returns -1
5 rows fetched#### 步骤4:创建dblink
# 连接串:DSN源名
SQL> CREATE OR REPLACE LINK odbc1 CONNECT 'ODBC' WITH SCOTT IDENTIFIED BY "scott" USING 'ora';
SQL> select * from emp@ODBC1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 NULL 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 NULL 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 NULL 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 NULL 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000.00 NULL 20
7839 KING PRESIDENT NULL 1981-11-17 00:00:00 5000.00 NULL 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00 NULL 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 NULL 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 NULL 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 NULL 10SQL> select * from v$dblink;
行号 LINK_CONN LINK_ID LINK_NAME SCH_ID OWNER_ID IS_PUBLIC LOGIN_NAME HOST_NAME PORT_NUM LOGGED_ON
---------- -------------------- ----------- --------- ----------- ----------- --------- ---------- --------- ----------- ---------HETEROGENEOUS PROTOCOL IN_USE------------- -------- ------
1 117787968 201326603 ODBC1 150994945 50331649 NO SCOTT ora NULL YESYES TCP/IP YES已用时间: 3.753(毫秒). 执行号:105.
SQL>
方法二:oracle客户端oci接口
#### 步骤1. Oracle官网下载OCI客户端
下载链接:
https://www.oracle.com/database/technologies/instant-client.html
https://www.oracle.com/database/technologies/instant-client/downloads.html
### 步骤1:解压zip包
[root@dca01 ~]# ls
anaconda-ks.cfg dm6C039119.key percent.sh test2.sh traffic_mon.sh 模板 文档 桌面
a.sed initial-setup-ks.cfg perl5 test.log ystemctl status 视频 下载
b.sed instantclient-basic-linux.x64-11.2.0.4.0.zip rpmbuild test.sh 公共 图片 音乐
[root@dca01 ~]# unzip -q instantclient-basic-linux.x64-11.2.0.4.0.zip
[root@dca01 ~]# ls -l
总用量 59340
-rw-------. 1 root root 2200 1月 11 14:17 anaconda-ks.cfg
-rw-r--r--. 1 root root 47 2月 21 09:51 a.sed
-rw-r--r--. 1 root root 433 2月 21 09:53 b.sed
-rw-r--r--. 1 root root 648 9月 23 2020 dm6C039119.key
-rw-r--r--. 1 root root 2231 1月 11 14:25 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 233 4月 12 09:40 instantclient_11_2
-rw-r--r--. 1 root root 60704657 4月 12 09:28 instantclient-basic-linux.x64-11.2.0.4.0.zip
-rw-r--r--. 1 root root 239 2月 1 15:50 percent.sh
drwxr-xr-x. 2 root root 6 1月 11 17:51 perl5
drwxr-xr-x. 7 root root 72 2月 20 12:10 rpmbuild
-rw-r--r--. 1 root root 202 2月 1 12:40 test2.sh
-rw-r--r--. 1 root root 2718 2月 1 15:30 test.log
-rw-r--r--. 1 root root 177 2月 1 15:15 test.sh
-rwxr-xr-x. 1 root root 1451 3月 5 22:06 traffic_mon.sh
-rw-r--r--. 1 root root 16279 2月 20 17:01 ystemctl status
drwxr-xr-x. 2 root root 6 1月 26 09:22 公共
drwxr-xr-x. 2 root root 6 1月 26 09:22 模板
drwxr-xr-x. 2 root root 6 1月 26 09:22 视频
drwxr-xr-x. 2 root root 6 1月 26 09:22 图片
drwxr-xr-x. 2 root root 6 1月 26 09:22 文档
drwxr-xr-x. 2 root root 6 1月 26 09:22 下载
drwxr-xr-x. 2 root root 6 1月 26 09:22 音乐
drwxr-xr-x. 2 root root 6 1月 26 09:22 桌面
[root@dca01 ~]# cd instantclient_11_2/
## 可观察到带so关键字眼的文件
[root@dca01 instantclient_11_2]# ls -l
总用量 183520
-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
-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--r--r--. 1 root root 2091135 8月 25 2013 ojdbc5.jar
-r--r--r--. 1 root root 2739616 8月 25 2013 ojdbc6.jar
-rwxrwxr-x. 1 root root 192365 8月 25 2013 uidrvci
-rw-rw-r--. 1 root root 66779 8月 25 2013 xstreams.jar### 步骤2: 拷贝so文件到达梦安装目录bin路径下
[root@dca01 instantclient_11_2]# cp -v *.so* /dm8/dmdba/dmdbms/bin
"libclntsh.so.11.1" -> "/dm8/dmdba/dmdbms/bin/libclntsh.so.11.1"
"libnnz11.so" -> "/dm8/dmdba/dmdbms/bin/libnnz11.so"
"libocci.so.11.1" -> "/dm8/dmdba/dmdbms/bin/libocci.so.11.1"
"libociei.so" -> "/dm8/dmdba/dmdbms/bin/libociei.so"
"libocijdbc11.so" -> "/dm8/dmdba/dmdbms/bin/libocijdbc11.so"
[root@dca01 instantclient_11_2]# chown dmdba:dinstall /dm8/dmdba/dmdbms/bin/*
[root@dca01 instantclient_11_2]# ls -ltr /dm8/dmdba/dmdbms/bin/ | head
总用量 444040
-rwxr-xr-x. 1 dmdba dinstall 3057257 1月 31 20:17 SYSWORD.UTF8.LIB
drwxr-xr-x. 8 dmdba dinstall 93 1月 31 20:17 client_ssl
-rwxr-xr-x. 1 dmdba dinstall 3371068 1月 31 20:17 libcrypto.so
-rwxr-xr-x. 1 dmdba dinstall 38172 1月 31 20:17 libacdct.so
-rwxr-xr-x. 1 dmdba dinstall 91087 1月 31 20:17 libcyt_java.so
-rwxr-xr-x. 1 dmdba dinstall 310687 1月 31 20:17 libdisql_dll.so
-rwxr-xr-x. 1 dmdba dinstall 73084 1月 31 20:17 libdmamon.so
-rwxr-xr-x. 1 dmdba dinstall 191778 1月 31 20:17 libdmasm.so
-rwxr-xr-x. 1 dmdba dinstall 92310 1月 31 20:17 libdmapx.so### 步骤3:建立符号链接
[root@dca01 instantclient_11_2]# ln -sfv libclntsh.so.11.1 libclntsh.so
"libclntsh.so" -> "libclntsh.so.11.1"[root@dca01 bin]# ls -ltr
......
-rw-r--r--. 1 dmdba dinstall 1003582 4月 9 10:15 libsqora.so.11.1
-rwxr-xr-x. 1 dmdba dinstall 53865194 4月 22 20:23 libclntsh.so.11.1
-r-xr-xr-x. 1 dmdba dinstall 7996693 4月 22 20:23 libnnz11.so
-rwxr-xr-x. 1 dmdba dinstall 1973074 4月 22 20:23 libocci.so.11.1
-rwxr-xr-x. 1 dmdba dinstall 118738042 4月 22 20:23 libociei.so
-r-xr-xr-x. 1 dmdba dinstall 164942 4月 22 20:23 libocijdbc11.so
lrwxrwxrwx. 1 root root 17 4月 22 20:28 libclntsh.so -> libclntsh.so.11.1### 步骤4:重启数据库,重新自动加载so文件
[dmdba@dca01 bin]$ service DmServiceDEM restart### 步骤5:创建外部链接
# 连接串形式1:DESCRIPTION描述符信息
SQL> CREATE OR REPLACE PUBLIC LINK dm2ora CONNECT 'ORACLE' WITH SCOTT IDENTIFIED BY "scott" USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=erpdb)))'; # 连接串形式2:IP地址:端口号/服务名
SQL> CREATE OR REPLACE LINK DM2ORA2 CONNECT 'ORACLE' WITH SCOTT IDENTIFIED BY "scott" USING '192.168.0.207:1521/erpdb'; SQL> select * from dept@DM2ORA; 行号 DEPTNO DNAME LOC
---------- ------ ---------- --------
1 10 ACCOUNTING NEW YORK
2 20 RESEARCH DALLAS
3 30 SALES CHICAGO
4 40 OPERATIONS BOSTON已用时间: 78.746(毫秒). 执行号:504.SQL> select * from v$version@dm2ora;BANNER
---------- ----------------------------------------------------------------------------
1 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2 PL/SQL Release 11.2.0.4.0 - Production
3 CORE 11.2.0.4.0 Production
4 TNS for Linux: Version 11.2.0.4.0 - Production
5 NLSRTL Version 11.2.0.4.0 - Production已用时间: 10.801(毫秒). 执行号:505.
SQL>
1.3.3 异构数据库:Oracle -> DM之间的DBLINK
# odbc连接方式
#### 步骤1:oracle本地端安装odbc
[root@erp207 ~]# tar -zxvf unixODBC-2.3.0.tar.gz
[root@erp207 ~]# cd unixODBC-2.3.0
[root@erp207 unixODBC-2.3.0]# ./configure --prefix=/usr/local/unixODBC-2.3.0 --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc
[root@erp207 unixODBC-2.3.0]# make && make install
参考链接: (略)#### 步骤2:上传达梦odbc驱动链接文件
# ** 注意:最简单方式直接将达梦bin目录拷贝过来 **
## 先在达梦数据库服务器端,查找libdodbc.so所依赖的库
## 切记:最后从适配相应操作系统的达梦版本中拷贝而来。
[root@dca01 bin]# ldd libdodbc.so | awk '/\.\//{print $1}'
libdmdpi.so
libdmfldr.so
libdmelog.so
libdmutl.so
libdmclientlex.so
libdmos.so
libdmcvt.so
libdmstrt.so
libdmmem.so
libdmcalc.so## Oracle数据库端建立专用文件夹存放达梦so文件
[root@erp207 ld.so.conf.d]# mkdir -p /usr/lib64/dm8
[root@erp207 ld.so.conf.d]# echo "/usr/lib64/dm8" >> /etc/ld.so.conf.d/dmdb-x86_64.conf## 达梦数据库端开始依赖so拷贝
#scp 192.168.0.120:/dm8/dmdba/dmdbms/bin/{`ldd /lib64/libdodbc.so | grep 'not found' | awk '{print $1}' | sed ':a;$!N;s/\n/,/;ta'`} /lib64/
[root@dca01 bin]# scp `ldd libdodbc.so | awk '/\.\//{print $1}' | sed ':a;$!N;s/\n/ /;ta'` libdodbc.so root@192.168.0.207:/usr/lib64/dm8/
root@192.168.0.207's password:
libdmdpi.so 100% 9366KB 38.1MB/s 00:00
libdmfldr.so 100% 9160KB 42.5MB/s 00:00
libdmelog.so 100% 28KB 9.1MB/s 00:00
libdmutl.so 100% 79KB 12.8MB/s 00:00
libdmclientlex.so 100% 336KB 29.6MB/s 00:00
libdmos.so 100% 198KB 21.9MB/s 00:00
libdmcvt.so 100% 4995KB 43.6MB/s 00:00
libdmstrt.so 100% 91KB 14.5MB/s 00:00
libdmmem.so 100% 56KB 7.1MB/s 00:00
libdmcalc.so 100% 482KB 28.2MB/s 00:00
libdodbc.so 100% 186KB 18.3MB/s 00:00
[root@dca01 bin]# ## Oracle数据库端手工加载动态链接库
[root@erp207 ~]# ls -l /usr/lib64/dm8
total 25000
-rwxr-xr-x 1 root root 493768 Apr 23 21:27 libdmcalc.so
-rwxr-xr-x 1 root root 344083 Apr 23 21:27 libdmclientlex.so
-rwxr-xr-x 1 root root 5114569 Apr 23 21:27 libdmcvt.so
-rwxr-xr-x 1 root root 9590746 Apr 23 21:27 libdmdpi.so
-rwxr-xr-x 1 root root 28897 Apr 23 21:27 libdmelog.so
-rwxr-xr-x 1 root root 9380242 Apr 23 21:27 libdmfldr.so
-rwxr-xr-x 1 root root 56968 Apr 23 21:27 libdmmem.so
-rwxr-xr-x 1 root root 203240 Apr 23 21:27 libdmos.so
-rwxr-xr-x 1 root root 92922 Apr 23 21:27 libdmstrt.so
-rwxr-xr-x 1 root root 81200 Apr 23 21:27 libdmutl.so
-rwxr-xr-x 1 root root 190045 Apr 23 21:27 libdodbc.so
[root@erp207 ~]#
[root@erp207 ~]# ls -l /usr/lib64/dm8
total 25000
-rwxr-xr-x 1 root root 493768 Apr 23 21:27 libdmcalc.so
-rwxr-xr-x 1 root root 344083 Apr 23 21:27 libdmclientlex.so
-rwxr-xr-x 1 root root 5114569 Apr 23 21:27 libdmcvt.so
-rwxr-xr-x 1 root root 9590746 Apr 23 21:27 libdmdpi.so
-rwxr-xr-x 1 root root 28897 Apr 23 21:27 libdmelog.so
-rwxr-xr-x 1 root root 9380242 Apr 23 21:27 libdmfldr.so
-rwxr-xr-x 1 root root 56968 Apr 23 21:27 libdmmem.so
-rwxr-xr-x 1 root root 203240 Apr 23 21:27 libdmos.so
-rwxr-xr-x 1 root root 92922 Apr 23 21:27 libdmstrt.so
-rwxr-xr-x 1 root root 81200 Apr 23 21:27 libdmutl.so
-rwxr-xr-x 1 root root 190045 Apr 23 21:27 libdodbc.so
[root@erp207 ~]# ldconfig
[root@erp207 ~]# ldd /usr/lib64/dm8/libdodbc.so linux-vdso.so.1 => (0x00007ffda6dd5000)libdmdpi.so => /usr/lib64/dm8/libdmdpi.so (0x00007f46eb1b6000)libdmfldr.so => /usr/lib64/dm8/libdmfldr.so (0x00007f46ea59e000)libdmelog.so => /usr/lib64/dm8/libdmelog.so (0x00007f46ea398000)libdmutl.so => /usr/lib64/dm8/libdmutl.so (0x00007f46ea186000)libdmclientlex.so => /usr/lib64/dm8/libdmclientlex.so (0x00007f46e9f33000)libdmos.so => /usr/lib64/dm8/libdmos.so (0x00007f46e9d07000)libdmcvt.so => /usr/lib64/dm8/libdmcvt.so (0x00007f46e9627000)libdmstrt.so => /usr/lib64/dm8/libdmstrt.so (0x00007f46e9413000)librt.so.1 => /lib64/librt.so.1 (0x00007f46e920b000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f46e8fef000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f46e8deb000)libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f46e8ae4000)libm.so.6 => /lib64/libm.so.6 (0x00007f46e87e2000)libc.so.6 => /lib64/libc.so.6 (0x00007f46e8415000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f46e81ff000)libdmmem.so => /usr/lib64/dm8/libdmmem.so (0x00007f46e7ff3000)libdmcalc.so => /usr/lib64/dm8/libdmcalc.so (0x00007f46e7d82000)/lib64/ld-linux-x86-64.so.2 (0x00007f46ec02d000)
[root@erp207 ~]# #### 步骤3:配置odbc
[root@erp207 ~]# cat /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC for DM8
Driver = /usr/lib64/dm8/libdodbc.so[root@erp207 ~]# cat /etc/odbc.ini
[DM8]
Driver = DM8 ODBC DRIVER
Description = DM8 ODBC DSN
SERVER = 192.168.0.120
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5238#### 步骤4:测试连接
[root@erp207 bin]# isql dm8 -v
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select name from v$instance;
+---------------------------------------------------------------------------------------------------------------------------------+
| NAME |
+---------------------------------------------------------------------------------------------------------------------------------+
| DEM |
+---------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select sf_get_para_value(1,'PORT_NUM');
+--------------------------------+
| SF_GET_PARA_VALUE(1,'PORT_NUM')|
+--------------------------------+
| 5238 |
+--------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select id_code();
+---------------------------------------------------------------------------------------------------------------------------------+
| ID_CODE() |
+---------------------------------------------------------------------------------------------------------------------------------+
| 1-1-126-20.09.04-126608-ENT |
+---------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> #### 步骤5:Oracle数据库端配置透明网关
# 参考链接:https://www.cnblogs.com/xqzt/p/5688659.html
[oracle@erp207 admin]$ cd $ORACLE_HOME/hs/admin
[oracle@erp207 admin]$ ls
extproc.ora initdg4odbc.ora listener.ora.sample tnsnames.ora.sample
[oracle@erp207 admin]$ cp -v initdg4odbc.ora initdm8.ora
‘initdg4odbc.ora’ -> ‘initDMLINK.ora’## init<SID>.ora
[oracle@erp207 admin]$ cat initDMLINK.ora
# 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 = DM8 #达梦数据库源DSN,关键参数
HS_FDS_TRACE_LEVEL = OFF #debug等级,OFF为关闭
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so #unixODBC驱动
HS_LANGUAGE = American_America.ZHS16GBK #unixODBC数据源配置文件
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
[oracle@erp207 admin]$ #### 步骤6:配置监听服务和网络服务名
[oracle@erp207 admin]$ cd $ORACLE_HOME/network/admin
[oracle@erp207 admin]$ ls
samples shrept.lst
[oracle@erp207 admin]$ cp samples/listener.ora .
[oracle@erp207 admin]$ cp samples/tnsnames.ora .
[oracle@erp207 admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
[oracle@erp207 admin]$ cat listener.ora
LISTENER =(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(PROGRAM = dg4odbc)(SID_NAME = DMLINK) # DSN(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)))ADR_BASE_HOME = =/oracle/app/oracle[oracle@erp207 admin]$ cat tnsnames.ora
dm8link = (DESCRIPTION =(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521))(CONNECT_DATA = (SERVICE_NAME = DMLINK))(HS = ok))#### 步骤7:测试网络链接
[oracle@erp207 admin]$ lsnrctl reload
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:42
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))
The command completed successfully
[oracle@erp207 admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:49
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 23-APR-2021 22:26:29
Uptime 0 days 0 hr. 13 min. 19 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /oracle/app/oracle/diag/tnslsnr/erp207/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "DMLINK" has 1 instance(s).Instance "DMLINK", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@erp207 admin]$ tnsping dm8link
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:51
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521)) (CONNECT_DATA = (SERVICE_NAME = DMLINK)) (HS = ok))
OK (10 msec)
[oracle@erp207 admin]$ #### 8. Oracle端创建dblink到达梦数据库
[oracle@erp207 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 23 22:40:54 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1043886080 bytes
Fixed Size 2259840 bytes
Variable Size 331351168 bytes
Database Buffers 704643072 bytes
Redo Buffers 5632000 bytes
Database mounted.
Database opened.
SQL> select status from v$instance;
STATUS
------------
OPENSQL> create database link ora2dm connect to "SYSDBA" identified by "SYSDBA" using 'dm8link';
Database link created.SQL> select * from v$version@ora2dm;
BANNER
--------------------------------------------------------------------------------
DM Database Server 64 V8
DB Version: 0x7000bSQL> select * from test@ora2dm;
C1
--------------------------------------------------------------------------------
a
B
c
ASQL> insert into test@ora2dm values ('X');
1 row created.
SQL> insert into test@ora2dm(c1) values ('Y');
1 row created.
SQL> commit;
Commit complete.SQL> select * from test@ora2dm;
C1
--------------------------------------------------------------------------------
a
B
c
A
X
Y
6 rows selected.SQL>
达梦の外部链接(dblink)相关推荐
- 达梦中创建dblink链接oracle
1.需要配置oracle oci客户端 先从oracle官网下载oracle的client instantclient-basic-linux.x64-12.2.0.1.0 下载过后解压完将会是以下的 ...
- 达梦数据库通过DBLINK访问ORACLE (从DM到ORACLE)
一.环境 ORACLE: IP 100.111.8.9 操作系统版本 Linux CentOS 7.0 数据库版本 oracle 11g SELINUX DISABLED 防火墙 关闭 达梦: IP ...
- oracle数据库dblink创建语句_「运维实验」——达梦数据库间DBlink配置
作为一名运维工程师一定会专注于日常运维实验分享,即时分享即时阅读,希望能帮助同行在运维路上一路前(tuo)行(fa). 下面是详细实验: 实验环境说明 达梦数据库1:192.168.80.40 DMS ...
- 达梦数据库创建dblink
1.dblink(Database Link)数据库链接:当我们跨本地数据库,访问另一个数据库中的数据时,需创建远程数据库的链接来访问. 2.dblink的分类: (1)普通dblink:只有创建语句 ...
- oracle数据库dblink创建语句_「运维实验」——达梦数据库DBlink连接Oracle配置
经过昨天达梦数据库间DBlink配置(具体操作可回看上一篇文章),今天做延伸实验. 实验环境说明 Oracle数据库1:192.168.80.40 ora11g RHEL 6.5 64位 达梦数据库1 ...
- 达梦数据库(DM8)DCA培训及认证考试有感--附ODBC使用新场景
随着国产化进程的进一步开展,国产数据库的应用将日益广泛.达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,在国产化数据库中适配性良好,随着不断发展,达梦数据库在不断壮大,在 ...
- JeecgBoot 连接达梦数据库
JeecgBoot连接达梦数据库 一.达梦数据库官网下载地址 http://www.dameng.com/down.aspx?TypeId=11&FId=t14:11:14 项目采用DMB8开 ...
- DM(达梦)数据库简介
前言: 达梦数据库作为已商业化的国产数据库代表,在政府及事业单位应用还是比较广泛.最近工作中有使用到达梦数据库,这里对已学习的相关内容作个简单记录,方便以后查阅.另外,网络上有关达梦数据库的资料甚少, ...
- 达梦DBLINK(外部链接)
文章目录 一.创建外部链接(DM到DM) 二.删除外部链接 三.外部链接使用 四.ODBC方式 外部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用 ...
最新文章
- OpenCV 笔记(05)— opencv.hpp 头文件作用(是其它所有头文件的全集)
- 开源——需要分享共享的无私精神
- vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
- HarmonyOS之深入解析WLAN的功能和使用
- Python基础之window常见操作
- 数字图像处理 空间域锐化 MATLAB实验
- Linux 命令(77)—— killall 命令
- 超链接显示网站 A,访问后进入网站 B
- cad直线和圆弧倒角不相切_建议收藏:史上最全CAD快捷键大全
- 国内主流的ERP软件大盘点
- 松下弧焊机器人 调电压_松下焊接机器人-基本操作篇.pdf
- DPSK+PM调制解调
- 华氏温度和摄氏温度的转换-C语言
- html中超链接使用_html超链接有哪些类型 html中,超链接用的是什么标签
- Bit-M Accelerator全新上线
- 七牛云 CDN 调用
- Github建个人静态网页
- FPGA——SPI总线控制flash(3)含代码
- 轻松查询多个韵达快运最后物流中含有某个地方的单号
- 学习Linux的几点忠告(转贴)