注册
以ODBC方式配置dblink访问达梦集群
专栏/Database Thinking/ 文章详情 /

以ODBC方式配置dblink访问达梦集群

胡li 2022/09/19 2889 4 0
摘要 访问dsc集群

以ODBC方式配置dblink访问达梦集群

一、 环境说明

1.1软件配置

软件类别 软件名称 版本
操作系统 Linux CentOS Linux release 7.7.1908 (Core)
数据库 DM DM v8

1.2 DSC集群规划

节点 IP地址 端口
DSC0 x.x.x.213 5236
DSC1 x.x.x.214 5237

二、配置dm_svc.conf

使用root用户在需要创建dblink的数据库服务器/etc目录添加dm_svc.conf文件,赋予777权限,配置如下:
[root@localhost ~]# vim /etc/dm_svc.conf

TIME_ZONE=(480)
LANGUAGE=(cn)
DMDSC=(x.x.x.213:5236,x.x.x.214:5237)

给予777权限

[root@localhost ~]# chmod 777 /etc/dm_svc.conf

dm_svc.conf配置文件部分参数如下所示:

参数 缺省值 简述
EP_SELECTOR 0 连接数据库时采用何种模型建立连接。以下为可填写值说明:0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连;
AUTO_RECONNECT 0 连接发生异常或一些特殊场景下连接处理策略。以下为可填写值说明:0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2:配合EP_SELECTOR=1使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上;

配置举例说明如下
[root@localhost ~]# cat /etc/dm_svc.conf

TIME_ZONE=(480)
LANGUAGE=(cn)
DMDSC=(x.x.x.213:5236,x.x.x.214:5237)
[DMDSC]
EP_SELECTOR=(1)
AUTO_RECONNECT=(1)

三、配置unixODBC

Linux系统调用ODBC驱动,前提条件是操作系统安装unixODBC环境。

3.1 安装unixODBC

  1. 将附件unixODBC-2.3.9.tar.gz安装包上传到/usr/local下,使用root用户执行安装。
    [root@localhost local]# tar -xzvf unixODBC-2.3.9.tar.gz
    [root@localhost unixODBC-2.3.9]# cd unixODBC-2.3.9
    [root@localhost unixODBC-2.3.9]# ./configure --enable-gui=no
    [root@localhost unixODBC-2.3.9]# make
    [root@localhost unixODBC-2.3.9]# make install
  2. 查看操作系统上查看ODBC版本
[root@localhost]# odbc_config --version
2.3.9
  1. 查看ODBC配置文件存放的位置
[root@localhost etc]# odbc_config --odbcini
/etc/odbc.ini
[root@localhost etc]# odbc_config --odbcinstini
/etc/odbcinst.ini

3.2 配置unixODBC

  1. 查看ODBC配置文件存放的位置
[root@localhost etc]# odbc_config --odbcini
/etc/odbc.ini
[root@localhost etc]# odbc_config --odbcinstini
/etc/odbcinst.ini
  1. 修改odbc.ini文件
    [root@localhost]# vim /etc/odbc.ini
[dm]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = DMDSC
UID = SYSDBA
PWD = SYSDBA
  1. 修改odbcinst.ini文件
    [root@localhost]# vim /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /opt/dmdbms_98/bin/libdodbc.so
  1. 测试连接
[root@localhost]# isql dm SYSDBA SYSDBA
+---------------------------------------+
| Connected!                           |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

Ø 注意

  1. dm6和dm7的配置文件可在附录1和附录2中查看。
  2. 连接失败:可使用isql -v dm SYSDBA SYSDBA命令查看。
  3. 数据源不存在:配置文件问题。
  4. 存在多个ODBC版本:可使用strace isql dm SYSDBA SYSDBA命令查看具体使用的是哪个配置文件(如果有多个位置将这些文件修改一致),同时将其他版本进行卸载删除(先备份)。
  5. odbc.ini中的Driver内容一定要与odbcinst.ini中的达梦驱动定义的节点名称相同。

四、创建DBLINK

登录数据库创建dblink。如创建基于ODBC的dblink,链接名为LINK1,数据源名称是dm,用户名与密码为SYSDBA/SYSDBA,语法如下:

create link LINK1 connect 'ODBC' with "SYSDBA" identified by "SYSDBA" using 'dm';

4.1使用DBLINK

通过外部链接,可以对远程服务器的对象进行查询或进行增删改操作,可以调用远程的过程。使用外部链接进行查询或增删改的语法格式与普通格式基本一致,唯一的区别在于指定外部链接表时需要使用如下格式作为表或视图的引用:

[TABLENAME | VIEWNAME] @链接名

4.1.1 举例说明

使用外部链接查询 LINK1 上的远程表进行查询

SELECT * FROM SYSOBJECTS@LINK1;

或对远程表进行插入数据:

INSERT INTO T1@LINK1 VALUES(1,2,3);

也可以查询本地表或其他链接的表对远程表进行操作,如下语句所示:

UPDATE T1@LINK1 SET C1 = C1+1 WHERE C2 NOT IN (SELECT ID FROM LOCAL_TABLE);
DELETE FROM T1@LINK1 WHERE C1 IN (SELECT ID FROM T2@LINK2);

4.2 DBLINK约束

使用外部链接,可以调用远程的存储过程,但是不支持调用远程的函数,使用中有以下约束:

  1. 参数数据类型为SQL类型,不允许为DMSQL程序类型;
  2. 参数数据类型不允许为复合类型。
    其使用方式为:
    [CALL] [<模式名>.][<包名>.]<过程名> [@] <外部链接名>(<参数列>);

4.2.1使用限制

外部链接的使用有以下限制:

  1. DM-DM的同构外部链接不支持MPP环境,DM与异构数据库的外部链接支持MPP环境;
  2. 增删改不支持 INTO语句;
  3. 不支持使用游标进行增删改操作;
  4. 不支持操作远程表的复合类型列;
  5. DBLINK理论上不支持LOB类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作;
  6. DBLINK的本地库和远程库的大小写敏感参数CASE_SENSITIVE应保持一致,若不一致,应用需要保证SQL语句书写符合远程库的规范。

4.2.2 DM连接异构数据库的外部链接使用限制

  1. 数据类型以DM为基础,不支持DM没有的数据类型;
  2. 语法以DM的语法为标准,不支持DM不兼容的语法;
  3. 主键更新,如果是涉及到多个服务器的语句,不能保证更新操作一定成功;
  4. 使用 CREATE VIEW view_name(view_col_name) AS SELECT ITEM FROM
    T@LINK方式创建的查询远程对象的本地视图,对于异构库,不能保证操作一定成功。对于查询异构库远程对象的本地视图,最好采用CREATE VIEW AS SELECT ITEM AS alias_name FROM T@LINK方式创建。

附录1:dm6 odbc配置

[root@localhost]# vim /etc/odbc.ini

[dm]
Description = dm
Driver =dm6
SERVER =DMDSC
UID=SYSDBA
PWD=SYSDBA

Server填写/etc/dm_svc.conf里绑定的两组ip地址的名称;odbc.ini 中的 Driver 内容一定要与 odbcinst.ini 中的达梦驱动定义的节点名称相同。

[root@localhost]# vim /etc/odbcinst.ini

[dm6]
Description=dm
Driver = /home/dmdbms/bin/libdmodbc.so

附录2:dm7 odbc配置

[root@localhost]# vim /etc/odbc.ini

[dm]
Description = DM ODBC DSN
Driver = DM7 ODBC DRIVER
SERVER = DMDSC
UID = SYSDBA
PWD = SYSDBA

Server填写/etc/dm_svc.conf里绑定的两组ip地址的名称;odbc.ini 中的 Driver 内容一定要与 odbcinst.ini 中的达梦驱动定义的节点名称相同。

[root@localhost]# vim /etc/odbcinst.ini

[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
Driver = /opt/dmdbms/bin/libdodbc.so
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服