使用数据库时,多个数据库之间的数据经常进行交互。当要通过达梦数据库,访问oracle数据库表中的数据时,数据库中就要创建远程数据库的dblink,这样达梦数据库可以像访问本地数据库一样访问oracle中数据库表中的数据。这时配置从达梦数据库到oracle的dblink变得尤为重要。但配置的过程中总是报如下错误:
第1 行附近出现错误[-2245]:DBLINK加载库文件失败.
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[V$INSTANCE]失败.
分析原因如下:加载库失败,一般是动态库没有包含在LD_LIBRARY_PATH变量里。在dm连接oracle过程中看,必须让dm认识oracle
解决方法:
1、在dmdba用户下执行sqlplus能连接oracle的前提下
a、在dmdba用户的环境变量确认该变量包含oracle lib路径。
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ORACLE_HOME/lib"
b、在$ORACLE_HOME/lib目录下,执行
ln -s libclntsh.so.11.1 libclntsh.so
链接命令里,后面的文件名是链接文件
执行ln -s libocci.so.19.1 libocci.so.11.1
ln -s libclntsh.so.19.1 libclntsh.so.11.1
是使用root用户还是dmdba执行,看这个目录的权限而定。
c、然后重启DM库服务,在启动前确认LD_LIBRARY_PATH包含了oracle的lib路径。
2、获取对象失败,一般是dm加载库文件完成,已经去连接oracle了,但oracle没有连接成功,此时需要检查oracle、ip、端口是否正常,可以通过sqlplus查看dm创建的dblink的参数是否正常。另外修改odbc配置后,重启库服务也很重要。
sqlplus配置如下:
a、export ORACLE_HOME=/home/dmdba/instantclient
export TNS_ADMIN=/home/dmdba/instantclient
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ORACLE_HOME"
export PATH=$PATH:/home/dmdba/tool/instantclient
b、将instantclient-basic-linux.x64-11.2.0.4.0.zip 解压到instantclient_11_2目录下,再将 instantclient-sqlplus-linux.x64-11.2.0.4.0.zip 解压到instantclient_11_2/bin下。
c、从oracle下将$ORACLE_HOME/sqlplus/mesg/* 文件拷贝到instantclient_11_2下。
d、配置环境变量
export ORACLE_HOME=/home/dmdba/instantclient_11_2
export TNS_ADMIN=/home/dmdba/instantclient_11_2
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ORACLE_HOME"
export PATH=$PATH:$ORACLE_HOME/binsqlplus
e、system/michael@192.168.104.34:1521/orac或sqlplus system/michael@orac34