以ODBC方式配置dblink访问达梦集群
软件类别 | 软件名称 | 版本 |
---|---|---|
操作系统 | Linux | CentOS Linux release 7.7.1908 (Core) |
数据库 | DM | DM v8 |
节点 | IP地址 | 端口 |
---|---|---|
DSC0 | x.x.x.213 | 5236 |
DSC1 | x.x.x.214 | 5237 |
使用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)
Linux系统调用ODBC驱动,前提条件是操作系统安装unixODBC环境。
[root@localhost]# odbc_config --version
2.3.9
[root@localhost etc]# odbc_config --odbcini
/etc/odbc.ini
[root@localhost etc]# odbc_config --odbcinstini
/etc/odbcinst.ini
[root@localhost etc]# odbc_config --odbcini
/etc/odbc.ini
[root@localhost etc]# odbc_config --odbcinstini
/etc/odbcinst.ini
[dm]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = DMDSC
UID = SYSDBA
PWD = SYSDBA
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /opt/dmdbms_98/bin/libdodbc.so
[root@localhost]# isql dm SYSDBA SYSDBA
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Ø 注意
登录数据库创建dblink。如创建基于ODBC的dblink,链接名为LINK1,数据源名称是dm,用户名与密码为SYSDBA/SYSDBA,语法如下:
create link LINK1 connect 'ODBC' with "SYSDBA" identified by "SYSDBA" using 'dm';
通过外部链接,可以对远程服务器的对象进行查询或进行增删改操作,可以调用远程的过程。使用外部链接进行查询或增删改的语法格式与普通格式基本一致,唯一的区别在于指定外部链接表时需要使用如下格式作为表或视图的引用:
[TABLENAME | VIEWNAME] @链接名
使用外部链接查询 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);
使用外部链接,可以调用远程的存储过程,但是不支持调用远程的函数,使用中有以下约束:
外部链接的使用有以下限制:
[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
[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
文章
阅读量
获赞