简介:外部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数据,使应用程序看起来只有一个大型数据库。用户远程数据库中的数据请求,都被自动转换为网络请求,并在相应结点上实现相应的操作。用户可以建立一个数据库链接,以说明一个对象在远程数据库中的访问路径。这个链接可以是公用的(数据库中所有用户使用),也可以是私有的(只能被某个用户使用)。
用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。
下面章节主要针对三个部分进行操作的配置和注意事项
方式一:开启DMAL,重启数据库
1.两套数据库配置DMMAL参数文件
源端:192.168.1.225(DMSERVER01)
远端:192.168.1.223(DMSERVER02)
cat > dmmal.ini
[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.使用disql工具登录本地数据库创建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';
方式二:无需开启MAL重启数据库(通过dpi方式)
create or replace public link LINK_DPI connect 'DPI' with SYSDBA identified by SYSDBA using '192.168.1.223:5236';
1.在达梦用户dmdba下安装Oracle客户端,并配置环境变量如下(红色字体需要重点关注)
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
stty erase ^H
2.配置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.拷贝Oracle家目录$ORACLE_HOME/lib目录的so文件拷贝到$DM_HOME/bin
cp -r $ORACLE_HOME/bin/*.so $DM_HOME/bin
5.重启达梦数据库(不重启lib的文件不生效)
6.disql登录达梦数据库disql,创建dblink
create public link LINK_DM01 connect 'ORACLE' with ECLOUD identified by 123456 using '192.168.1.244/ORCL';
ODBC下载地址http://www.unixodbc.org/
环境:
达梦8数据库192.168.1.223
Oracle11.2.0.4.0数据库192.168.1.245
操作系统版本:redhat 6.8
以下内容均在oracle操作
1.安装unixODBC(root用户)
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
配置odbc.ini参数文件
vi /etc/odbc.ini
[dm8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = 192.168.1.223 #达梦数据库地址
UID = SYSDBA #数据库访问用户
PWD = SYSDBA #数据库密码
TCP_PORT = 5236 #数据库端口
配置odbcinst.ini参数文件
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
以上配置完毕后,测试下ODBC效果:
2.创建透明网关的配置文件,路径$ORACLE_HOME/hs/admin,名称已init+SID.ora命名
vi $ORACLE_HOME/hs/admin/initdm8.ora
HS_FDS_CONNECT_INFO=dm8 #配置的tns名称
HS_FDS_TRACE_LEVEL = debug #开启debug可以获取输出日志,生产环境调试后off关闭
HS_FDS_SHAREABLE_NAME=/usr/lib/libodbc.so #写ODBC的libodbc.so库文件还是达梦的libdodbc.so均可不用纠结
HS_LANGUAGE="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
HS_NLS_NCHAR=UCS2
set ODBCINI=/etc/odbc.ini
3.监听文件配置listener.ora
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(PROGRAM = dg4odbc) #无需修改Oracle的协议名称
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = dm8) #配置的连接实例名称
(ENV="LD_LIBRARY_PATH=$unix_ODBC/lib:$DM_HOME/bin:$ORACLE_HOME/lib")#此行可加可不加,如果系统的lib设置无问题,可以忽略,系统LIB设置无法访问ODBC的LIB库就需要单独添加,ODBC,ORACLE,DM三个产品的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.245)(PORT = 1521)) #Oracle本地实例的地址和端口
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
停止监听:lsnrctl stop
启动监听:lsnrctl start
不能重启就重新加载监听: lsnrctl reload
4.配置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.disql登录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;