针对dblink的介绍,这里不做描述,想了解的朋友可以自行百度下或看下达梦8的管理员手册中外部链接篇章,本篇文章针对自测环境搭建dblink过程以及碰到的问题记录分享,主要针对三个章节进行配置和描述,如下:
操作系统:Red Hat Enterprise Linux Server release 7.6 (Maipo)
数据库版本:DM Database Server 64 V8
源端数据库IP:192.168.1.225
远端数据库IP:192.168.1.223
1.两套数据库配置DMMAL参数文件,配置文件路径请查阅参数文件dm.ini文件中CONFIG_PATH配置路径
cat > dmmal.ini << EOF
[MAL_INST1]
MAL_INST_NAME=DMSERVER01
MAL_HOST=192.168.1.225
MAL_PORT=62141
MAL_INST_PORT=5236
MAL_INST_HOST=192.168.1.225
[MAL_INST2]
MAL_INST_NAME=DMSERVER02
MAL_HOST=192.168.1.223
MAL_PORT=62142
MAL_INST_PORT=5236
MAL_INST_HOST=192.168.1.223
EOF
2.设置dm.ini文件中MAL_INI参数值为1,重启两套数据库生效。
3.登录本地数据库创建dblink
create public link LINK_DM01 connect ‘DAMENG’ with DM identified by dm12345678 using ‘192.168.1.223/5236’;
或
create public link LINK_DM02 connect ‘DAMENG’ with SYSDBA identified by SYSDBA using ‘DMSERVER02’;
4.查询dblink视图
select * from DBA_DB_LINKS;
5.通过dblink查询远端数据库实例
1.disql登录达梦8数据库,执行如下命令
create or replace public link LINK_DPI connect ‘DPI’ with SYSDBA identified by SYSDBA using ‘192.168.1.223:5236’;
2.查询dblink视图
select * from DBA_DB_LINKS;
3.通过dblink查询远端数据库实例
操作系统:Red Hat Enterprise Linux Server release 7.6 (Maipo)
数据库版本:DM Database Server 64 V8
源端数据库IP:192.168.1.225
远端数据库IP:192.168.1.244
远端数据库版本:11.2.0.4.0
1.安装Oracle客户端(使用达梦数据库的系统用户安装dmdba)并配置dmdba用户的环境变量.bash_profile
vi .bash_profile
export ORACLE_BASE=/home/dmdba/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
export DM_HOME=/home/dmdba/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin:$ORACLE_HOME/bin
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$ORACLE_HOME/bin
2.配置tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.244)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.测试连通性:tnsping orcl
结果OK通过
4.重启达梦数据库
5.登录达梦数据库disql,创建dblink
create public link LINK_ORACLE connect ‘ORACLE’ with system identified by oracle using ‘192.168.1.244/ORCL’;
6.查询dblink视图
select * from DBA_DB_LINKS;
7.通过link查询Oracle的实例名称和状态
常见dblink报错:
1.Oracle error:[1017]ORA-01017: invalid username/password; logon denied
oracle的登录用户密码注意大小写问题,如果有需要使用双引号。
2.[-7096]:远程操作符执行失败.Error while trying to retrieve text for error ORA-01804
使用达梦数据库的操作系统用户dmdba识别Oracle的lib文件导致,使用dmdba用户重启数据库即可。
操作系统:Red Hat Enterprise Linux Server release 7.6 (Maipo)
源端数据库IP:192.168.1.244
源端数据库版本:11.2.0.1.0
远端数据库版本:DM Database Server 64 V8
远端数据库IP: 192.168.1.223
dblink创建分两部分:
配置ODBC,通过ODBC连接达梦8数据库;
配置Oracle的透明网关(Oracle11g及之后版本数据库自带透明网关无需再单独安装)
1.安装达梦8数据库客户端和驱动(安装过程参考安装手册这里不做描述)
2.下载ODBC
下载地址:http://www.unixodbc.org/
这里说明下避免各位踩坑
如果Oracle数据库的操作系统低于redhat7版本建议编译安装unixODBC-2.3.0版本,如果是redhat7版本可以使用新版unixODBC-2.3.11均可。
如果想省事直接使用本地yum源配置即可。
3.安装unixODBC(root用户,编译的时候建议使用如下路径,否则需要单独配置ODBC库文件路径使其生效)
#tar -xvf 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
#odbcinst -j
配置文件
vi /etc/odbc.ini
[dm8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = ==192.168.1.223==
UID = ==SYSDBA==
PWD = ==SYSDBA==
TCP_PORT = ==5237==
vi /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DIRVER FOR DM8
DRIVER = ==$DM_HOME/bin/libdodbc.so== #填写实际全路径
注意:
(1)在oracle服务器仅需要按照达梦的客户端和驱动即可。
(2)达梦的libdodbc.so文件,oracle需要去访问达梦的lib库文件,Oracle自己的Lib库文件,以及ODBC的lib库文件。
在oracle的/home/oracle/.bash_profile中增加达梦bin目录的路径以及ODBC的lib库路径,如下,请根据自己环境修改
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib64:$DM_HOME/bin
4.创建透明网关的配置文件,路径$ORACLE_HOME/hs/admin,名称已init+SID.ora命名
vi $ORACLE_HOME/hs/admin/initdm8.ora
HS_FDS_CONNECT_INFO===dm8==
HS_FDS_TRACE_LEVEL = ==debug== #生产环境配置off
HS_FDS_SHAREABLE_NAME=/usr/lib/libodbc.so
HS_LANGUAGE="==SIMPLIFIED CHINESE_CHINA.AL32UTF8==" #语言根据自己环境修改
HS_NLS_NCHAR=UCS2
set ODBCINI=/etc/odbc.ini
Oracle监听文件配置listener.ora
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(PROGRAM = ==dg4odbc==) #dg4odbc是Oracle的透明网关协议无需修改
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = ==dm8==) #名称保持跟透明网关的SID一致
(ENV="LD_LIBRARY_PATH=\$unix_ODBC/lib:\$DM_HOME/bin:$ORACLE_HOME/lib") #这行如果配置了系统环境变量可以不配置
)
(SID_DESC =
(GLOBAL_DBNAME = orcl1) #本地数据库实例名称
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.244)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
停止监听:lsnrctl stop
启动监听:lsnrctl start
不能重启就重新加载监听: lsnrctl reload
配置tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora
dm8 =
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP) (HOST=localhost) (PORT=1521)
)
(CONNECT_DATA=(SID=dm8))
(HS=OK)
)
注意:host,port均是填写本地Oracle的,HS=OK表示异构
测试:tnsping dm8 返回结果OK
5.登录Oracle数据库创建dblink
create public database link DMLINK connect to “SYSDBA” identified by “SYSDBA” USING ‘DM8’;
6.查询已创建dblink
set pages 200 lines 200
col db_link for a15
col OWNER for a20
col host for a20
col USERNAME for a20
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select * from dba_db_links;
7.测试link查询:select * from v$version@dmlink;
常见报错1:
Oracle环境11.2.0.4配置连接DM8的dblink访问报错如下
Oracle环境11.2.0.1配置连接DM8的dblink访问报错如下
解决方法:如果添加的library不在/lib和/usr/lib里面的话,就需要修改/etc/ld.so.conf文件,往该文件追加library所在的路径,然后也需要重新调用下ldconfig命令。或者在/etc/ld.so.conf.d/下添加*.conf的文件并追加library的路径,然后执行ldconfig。在安装ODBC的时候,其库文件/usr/local/lib,就需要追加到/etc/ld.so.conf文件中 ,然后执行命令:echo “/usr/local/lib” >>/etc/ld.so.conf && ldconfig
常见报错2:找不到libodbc.so文件
解决方法:在oracle的/home/oracle/.bash_profile中的LD_LIBRARY_PATH增加$DM_HOME/bin库文件目录路径及ODBC的库路径,如下:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib64:$DM_HOME/bin
文章
阅读量
获赞