DM8 dblik搭建

13 篇文章 0 订阅
12 篇文章 0 订阅

目录

一.dblink简介

二.语法格式:

三.dm到dm的dblink搭建

3.1准备环境

3.2 搭建步骤

3.2.1 创建dmmal.ini

3.2.2 修改配置文件

3.2.3 重启数据库实例

3.2.4 创建测试表

3.2.6  结果测试

(1)DBLINK本地服务器与远程服务器编码不同

(2)dblink连接丢失.

四、dm到Oracle的dblink搭建

4.1 环境准备

4.2 操作步骤

4.2.1 oracle创建用户,测试表及启动监听

4.2.2 配置Oracle客户端

4.2.3 配置dm到数据库链接

4.2.3 测试数据库dblink连接

4.2.4 结果测试

4.2.5 报错处理

(1)远程连接报错无法找到libsqlplus.so文件


一.dblink简介

     达梦数据库的外部链接是一种数据库的实体对象,记录了远程数据库的连接信息,用于建立与远程数据的联系。用户可以通过数据库的外部链接对象透明地操作远程数据库的数据,对远程数据库的表进行查询和增删改操作,也可以调用远程的存储过程。数据库的外部链接对象可以是公用的(数据库中所有用户使用),也可以是私有的(特定用户使用)。

二.语法格式:

CREATE [OR REPLACE] [PUBLIC] LINK < 外部链接名> CONNECT ['< 连接库类型>'] WITH < 登录名> IDENTIFIED BY < 登录口令> USING '< 连接串> ';

< 连接库类型> ::= DAMENG | ORACLE | ODBC

< 连接串> ::=< 外部链接串>

< 外部链接串>::=< DAMENG外部链接串>| < ORACLE外部链接串> |

< DAMENG外部链接串>::=< 实例IP地址>/< 实例端口号> |

/ |

< ORACLE外部链接串>::= ||/< 服务名>

::=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=< 端口号>)))(CONNECT_DATA=(SERVICE_NAME=< 服务名>)))

::=

参数

OR REPLACE 使用OR REPLACE选项的好处是,如果系统中已经有同名的数据库链接名,服务器会自动用新的代码覆盖原来的代码。如果不使用OR REPLACE选项,当创建的新外部链接名称与系统中已有的外部链接名称同名时,服务器会报错。

PUBLIC 此链接对象是否能够被创建者之外的用户引用;

< 外部链接名> 数据库链接的名称;

< 连接库类型> 目前只支持DAMENG、ORACLE或ODBC,默认为DAMENG;

< 登录名> 登录用户名称;

< 登录口令> 登录用户口令;

支持三种格式,分别对应目标节点在dmmal.ini中的配置项,具体如下:
l mal_inst_host/mal_inst_port
l mal_host/mal_port
l mal_inst_name

可以使用配置的网络服务名tsn_name(网络服务名需要配置),或者连接描述符description(连接描述符是网络连接目标特殊格式的描述,它包括网络协议、主库IP地址、端口号和服务名),或者/< 服务名>;

DSN需要用户手动配置。

三.dm到dm的dblink搭建

3.1准备环境

  (1)两台数据库机器A 、B,均安装了达梦数据库。
  (2)两台数据库机器A 、B,均关闭了防火墙和selinux。
 (3)两台数据库机器A 、B的实例名不能一致,两个数据库的字符集必须一致。

数据库版本

IP

主机名

实例名

端口号

机器

DM Database Server 64 V8

192.168.135.1

DM1

DM1

5237

A

DM Database Server 64 V8

192.168.135.2

DM2

DMSERVER

5236

B

3.2 搭建步骤

3.2.1 创建dmmal.ini

两台数据库机器,第一台为目的主机A(被连接的机器),另外一台为测试机B(用来连接的机器),首先我们在两台机器的数据库实例下面创建dmmal.ini 文件

vi /dm8/dmdata/{DB_NAME}/dmmal.ini

[dmlink1]    #自定义

mal_inst_name  = DM1   #A主机的实例名,和dm.ini中的INSTANCE_NAME保持一致

mal_inst_host = 192.168.135.1  #A主机的ip地址

mal_inst_port = 5237        #A主机的实例端口,和dm.ini中的PORT_NUM保持一致

mal_host = 192.168.135.1   #A主机的ip地址

mal_port = 61142       #系统监听TCP连接端口(自定义)

[dmlink2]    #自定义

mal_inst_name  = DMSERVER   #B主机的实例名,和dm.ini中的INSTANCE_NAME保持一致

mal_inst_host = 192.168.135.2   #B主机的ip地址

mal_inst_port = 5236        #B主机的实例端口,和dm.ini中的PORT_NUM保持一致

mal_host = 192.168.135.2   #B主机的ip地址

mal_port = 61142      #系统监听TCP连接端口(自定义)

注意:两台机器的dmmal.ini必须一致,A和B的实例名不能一样

3.2.2 修改配置文件

修改两台数据库实例的dm.ini的参数,MAL_INI参数改为1

3.2.3 重启数据库实例

机器A:

机器B:

3.2.4 创建测试表

在主机A中创建表后,使用主机B来连接进行操作:

主机A创建test表

Create table test(c1 int,c2 int);

建立外部连接语法如下:

create public link 外部连接名 connect with A主机登录用户 identified by A主机登录用户密码 using 'A主机ip/a主机系统监听TCP连接端口';

主机B创建dblink:

SQL> create public link dmlink1 connect with "SYSDBA" identified by "SYSDBA123" using '192.168.135.1/61142';

3.2.6  结果测试

机器B:

SQL> insert into test@dmlink1 values(1,1);

影响行数 1

已用时间: 7.996(毫秒). 执行号:602.

SQL> commit;

操作已执行

机器A:

SQL> select * from test;

行号     C1          C2         

---------- ----------- -----------

1          1           1

机器B可以操作机器A的表3.2.7 报错处理

(1)DBLINK本地服务器与远程服务器编码不同

 

原因:两库之间字符级编码不一致,无法搭建DBLINK,需要字符集相同的库建立dblink。

注:unicode [0]代表GB18030,[1]D代表UTF8

(2)dblink连接丢失.

原因;dm.ini中MAL_INI值为0

解决:修改dm.ini的值为1,并且重启数据库服务。

四、dm到Oracle的dblink搭建

4.1 环境准备

(1)一台数据库机器A安装了oracle数据库并启动监听。

(2)一台机器B安装了DM数据库和oracle数据库客户端。

(3)关闭防火墙和selinux。

数据库版本

IP

主机名

实例名

端口号

机器

DM Database Server 64 V8

192.168.135.1

DM1

DMSERVER

5236

A

Oracle Database 11.2.0.4.0

192.168.135.88

Oracle1

prod

1521

B

4.2 操作步骤

4.2.1 oracle创建用户,测试表及启动监听

Oracle端执行:

(1) 连接数据库创建测试用户user01密码user01,创建测试表test

Create user  user01 identified by user01;

grant dba to user01;

conn user01/user01

create table test (id int);

insert into test values(1);

commit;

(2) 确认是否开启监听

[oracle@oracle1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-5月 -2023

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

LISTENER 的 STATUS

------------------------

别名                      LISTENER

版本                      TNSLSNR for Linux: Version 11.2.0.4.0 - P

启动日期                  23-5月 -2023 16:42:02

正常运行时间              0 天 0 小时 0 分 17 秒

跟踪级别                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

监听程序日志文件          /u01/diag/tnslsnr/oracle1/listener/alert/

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle1)(PORT=1521)))

服务摘要..

服务 "prod" 包含 1 个实例。

  实例 "prod", 状态 READY, 包含此服务的 1 个处理程序...

服务 "prodXDB" 包含 1 个实例。

  实例 "prod", 状态 READY, 包含此服务的 1 个处理程序...

4.2.2 配置Oracle客户端

Oracle端:

(1)去下载客户端:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

(2)下载basic,sqlplus,sdk包,根据oracle的版本号下载如下图所示的压缩包(示范的orace版本为11.2.0.4),需要oracle账号可以免费

 

 

将以上安装包解压后,会存到同一个文件夹中

  1. DM端:FTP将下载的包传输到达梦数据库安装路径/dmdbms/bin目录下:

        并修改dmdba:dinstall属组和 755权限。

cp -r /home/dmdba/dmdbms/bin/instantclient_11_2 ../

Chmod -R 755 *

4.2.3 配置dm到数据库链接

将libclntsh.so.11.1 复制一个名字为:libclntsh.so  

[dmdba@DM1 ~]$ cp /home/dmdba/dmdbms/bin/libclntsh.so.11.1 /home/dmdba/dmdbms/bin/libclntsh.so

检查lib链接是否完整:

注意:如果链接不完整,就从客户端下载一份链接,或者从oracle同版本的环境copy一份到/dmdbms/bin下即可

[dmdba@DM1 bin]$ mkdir -p /home/dmdba/dmdbms/bin/network/admin

[dmdba@DM1 bin]$ vi /home/dmdba/dmdbms/bin/network/admin/tnsnames.ora

prod =                                           

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.135.88)(PORT = 1521))             

    )

    (CONNECT_DATA =

      (SERVICE_NAME = prod)                 

    )

  )

配置环境变量:

vi /home/dmdba/.bash_profile:

--添加已下内容:

export ORACLE_HOME=/home/dmdba/dmdbms/bin

export TNS_ADMIN=$ORACLE_HOME/network/admin

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export PATH=$ORACLE_HOME:$PATH

Source .bash_profile

4.2.3 测试数据库dblink连接

SQL> create or replace link  LL connect 'ORACLE' with user01 identified by "user01" using 'prod’

操作已执行

4.2.4 结果测试

测试可以插入成功!

4.2.5 报错处理

(1)远程连接报错无法找到libsqlplus.so文件

[dmdba@DM1 ~]$ sqlplus user01/user01@prod

sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory

1.权限问题 文件libsqlplus.so 没有可读权限

没有权限导致的,查找libsqlplus.so文件,输入命令;

find / -name libsqlplus.so

接着修改权限,输入命令;

chmod 755 libsqlplus.so

2、环境变量设置有问题

输入命令,修改环境变量:

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

  1. 检查lib库是否缺失动态so文件:

如果缺失,就重新下载完整版客户端,或拷贝一份所需的so文件到/dmdbms/bin目录下

达梦云适配技术社区
https://eco.dameng.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值