注册
ORACLE到达梦dblink配置
专栏/培训园地/ 文章详情 /

ORACLE到达梦dblink配置

陌上桑 2026/09/11 85 0 0
摘要

1.dg4odbc介绍

在Oracle数据库中,dg4odbc 是 Oracle Database Gateway for ODBC 的一个可执行程序名。这个网关允许Oracle数据库通过ODBC接口连接到非Oracle数据库(如达梦数据库、MySQL、SQL Server等)。
工作流程如下:
1)应用程序通过Oracle数据库链接(DB Link)访问非Oracle数据库。
2)Oracle数据库通过监听器将请求转发给 dg4odbc 进程。
3)dg4odbc 进程读取相应的HS初始化文件(如 initdm8.ora)来获取ODBC配置信息。
4)dg4odbc 通过ODBC驱动管理器加载指定的ODBC驱动,并连接到目标数据库。
5)执行SQL并返回结果。

Oracle Client → Oracle Listener → dg4odbc 进程 → ODBC Driver → 目标数据库(如达梦)

2.环境信息

操作系统 CentOS Linux release 7.6.1810 (Core)
cpu x86
oracle版本 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
oracle信息 ip:192.168.138.111 1521 sid:orcl
达梦版本 DM V8
ip:192.168.138.48 5236

3.配置步骤

3.1 oracle端配置达梦客户端

(此步骤与配置普通odbc一致)
如果oracle和dm服务器类型一致,可以直接将dm上的bin文件打包拷贝到oracle上,如果不一致,则需要单独安装达梦数据库。
oracle服务器上odbc配置
安装oracle过程中,已安装odbc
[oracle@localhost ~]$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/oracle/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

/etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/oracle/dmdbms_4_80p36/bin/libdodbc.so

/etc/odbc.ini
[dm8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = 192.168.138.48
UID = SYSDBA
PWD = Dameng_123
TCP_PORT = 5236

oracle中.bash_profile添加
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/oracle/dmdbms_4_80p36/bin"

测试
[oracle@localhost ~]$ isql -v dm8
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select id_code;
+----------------------------------------------+
| ID_CODE |
+----------------------------------------------+
| --03134284368-20250929-295229-20149 Pack36 |
+----------------------------------------------+
SQLRowCount returns 1
1 rows fetched

3.2 hs配置

[oracle@localhost admin]$ cat /opt/oracle/product/11.2.0/db/hs/admin/initdm8.ora
HS_FDS_CONNECT_INFO=dm8
HS_FDS_TRACE_LEVEL=off
HS_FDS_SHAREABLE_NAME=/home/oracle/dmdbms_4_80p36/bin/libdodbc.so
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8
HS_NLS_NCHAR=UCS2
注意:这里需要注意的是dm8要与/etc/odbc.ini中的dm8保持一致

3.3监听配置

[oracle@localhost admin]$ cat /opt/oracle/product/11.2.0/db/network/admin/listener.ora
listener.ora Network Configuration File: /opt/oracle/product/11.2.0/db/network/admin/listener.ora
Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dm8)
(ORACLE_HOME=/opt/oracle/product/11.2.0/db)
(PROGRAM=dg4odbc)
)
)
ADR_BASE_LISTENER = /opt/oracle
中间蓝色部分为新增部分。其中SID_NAME对应gateway参数配置文件后面的名称init+SID_NAME.ora。即/opt/oracle/product/11.2.0/db/hs/admin/initdm8.ora中的dm8要与此处的SID_NAME保持一致。
PROGRAM=dg4odbc固定写法,无需改动,表示执行/opt/oracle/product/11.2.0/db/bin下面的此程序
ll /opt/oracle/product/11.2.0/db/bin/dg4odbc

重启监听
lsnrctl stop/start
lsnrctl status

3.4 tns配置

[oracle@localhost admin]$ cat /opt/oracle/product/11.2.0/db/network/admin/tnsnames.ora
dm8tns =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.138.111)(PORT=1521))
(CONNECT_DATA=(SID=dm8))
(HS=OK)
)
配置完成后tnsping验证
[oracle@localhost admin]$ tnsping dm8tns

TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 13-OCT-2025 23:09:00

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.138.111)(PORT=1521)) (CONNECT_DATA=(SID=dm8)) (HS=OK))
OK (0 msec)

3.5 dblink创建

create public database link dmlink connect to SYSDBA identified by "Dameng_123" using 'dm8tns';

SQL> select * from v$version@dmlink;

BANNER

DM Database Server 64 V8
DB Version: 0x7000d
03134284368-20250929-295229-20149
Msg Version: 44
Gsu level(5) cnt:

--中文测试
SQL> select * from t1@dmlink;

C1 C2

1 中文测试

--insert测试
SQL> insert into t1@dmlink values(2,'测试2');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1@dmlink;

C1 C2

1 中文测试
2 测试2

--删除
drop public database link dmlink;

4.报错处理

SQL> select 1 from dual@dmlink;
select 1 from dual@dmlink
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
如果报错如下,检查如下配置,是否HS_NLS_NCHAR=UCS2没有添加
[oracle@localhost admin]$ cat initdm8.ora
HS_FDS_CONNECT_INFO=dm8
HS_FDS_TRACE_LEVEL=off
HS_FDS_SHAREABLE_NAME=/home/oracle/dmdbms_4_80p36/bin/libdodbc.so
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8
HS_NLS_NCHAR=UCS2

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服