DM8到ORACLE11g创建DBLINK
一、
安装Oracle11g客户端安装配置
1)解压安装客户端
进入/dm/创建oracle客户端目录
mkdir -p /dm8/oracleclient/
chown dmdba.dinstall -R /dm8/oracleclient/
cd /dm8/oracleclient/
tar -xvf dbclt11204_x64_RHEL7U4_x64.tar.gz
2)将oracle客户端lib下面的so包拷贝到达梦安装bin目录下,验证一下libclntsh.so是否正常
1、cd /dm8/oracleclient/product/db11gr2/lib/
cp *.so* /dm8/dm8/bin
进入 /dm8/dm8/bin
2、验证libclntsh.so是否正常
ldd libclntsh.so
3、一般拷贝过来可能这个libclntsh.so包会报错,建议做一个软连接
cd /dm8/bin
ln -s /dm8/oracleclient/product/db11gr2/lib/libclntsh.so.11.1 libclntsh.so
3) 修改用户的profile将客户端的路径写入
编辑/etc/profile增加环境变量
vi /etc/profile
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
Source /etc/profile
4)增加ORACLE服务名配置文件
在/dm8/oracleclient/product/db11gr2/network/admin下批配置 tnsnames.ora,用来添加ORADB 的服务名
vi /dm8/oracleclient/product/db11gr2/network/admin/tnsnames.ora
ORADB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=29.28.147.89)(PORT=18789))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORADB)))
5)测试是否正确安装
1、tnsping测试
[dmdba@pt20paappdbyg4n-M3~]$tnsping ORADB
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 04-NOV-2021 15:34:10
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
/dm8/oracleclient/product/db11gr2/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=19.28.147.89)(PORT=18789))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORADB)))
OK (20 msec)
2、用账户测试从达梦端连oracle
[dmdba@pt20]$sqlplus weixin/xxxx@ORADB
SQL*Plus: Release 11.2.0.4.0 Production on Thu Nov 4 15:36:33 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
二、创建使用dblink并验证
./disql SYSDBA/xxx
1、创建dblink(方法一,使用别名需要配置前面的tnsname.ora)
SQL> create or replace public link sit_thc_oracle connect 'oracle' with weixin identified by "weixin2017" using 'ORADB';
executed successfully
used time: 84.017(ms). Execute id is 501.
SQL> select * from dual@sit_thc_oracle;
2、创建dblink(方法二)
SQL> create or replace public link test_thc_oracle connect 'oracle' with weixin identified by "xxxx" using '29.28.147.89:18789/oradb';
executed successfully
used time: 60.281(ms). Execute id is 600.
3、验证dblink可用性
LINEID DUMMY
---------- -----
1 X
三、查询当前的DBLINK
SQL> select * from v$dblink;
LINEID 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 129705880 201326593 SIT_THC_ORACLE 0 50331649 YES WEIXIN ORADB NULL YES
YES TCP/IP YES
2 139838902922176 201326594 TEST_THC_ORACLE 0 50331649 YES WEIXIN 29.28.147.89:18789/oradb NULL YES
YES TCP/IP YES
used time: 0.581(ms). Execute id is 602.
SQL>
四、常见问题处理
错误1
select * from t1@link1;
执行失败(语句1)
第1 行附近出现错误[-2245]:
DBLINK加载库文件失败
解决方案:
1、动态库的名称是否为libclntsh.so,否则也会报错。ln -s libclntsh.so.11.1 libclntsh.so
2、启动达梦的会话前ldd libclntsh.so 检查该依赖库是否完整。
如有缺少需要设置环境变量
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME
错误2
select * from t1@link1;
执行失败(语句1)
第1 行附近出现错误[-2251]:
DBLINK远程服务器获取对象[T1]失败
解决方案:
查看达梦的日志:发现错误是Oracle connect error:[12154]ORA-12154: TNS:could not resolve the connect identifier specified
could not resolve the connect identifier specified
常见错误:
1、连接串写错
create or replace public link link1 connect 'ORACLE' with system identified by "hust4400" using 'ORCL';
再次执行,成功。
2、如果前面的export LD_LIBRARY_PATH=/u01/media/oracle/clientora 没有设置ORACLE_HOME,此时需要配置TNS_ADMIN ,加载tnsnames.ora
export TNS_ADMIN= /usr/lib/oracle/11.2/client64/network/admin可以解决。
也可以直接配置export ORACLE_HOME=/u01/media/oracle/clientora,这样也OK,但是必须是tnsnames.ora不需在$ ORACLE_HOME/network/admin下,换成其他的路径无法加载。
查看日志发现是Oracle connect error:[12170]ORA-12170: TNS:Connect timeout occurred 报错的解决:1、可能Oracle服务器端监听没有启动 ,启动oracle 的监听,重启DM。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 19.168.1.144)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
错误3
Can't match object[dual] in dblink remote server
解决方法:查看达梦日志cd /dm8/log
[dmdba@pt20/dm8/log]$cat dm_THCDB_202111.log |grep ORA
2021-11-03 23:15:08.077 [ERROR] database P0000028260 T0000000000000028373 Oracle error:[1017]ORA-01017: invalid username/password; logon denied
2021-11-03 23:36:23.777 [ERROR] database P0000031089 T0000000000000031199 Oracle error:[1017]ORA-01017: invalid username/password; logon denied
可以定位到是用户名、密码错误,原因是之前在创建dblink的时候我个人使用的用户名(小写)加了引号导致的



