由于达梦的dblink,尤其是在读写分离集群中,数据流量是通过心跳网段实现的。现实业务中,为避免业务高峰期带来的压力,导致集群状态出现波动。我们建议即使是两台达梦数据库之间也通过ODBC的方式来创建dblink。
这样做有以下几种好处。
- 数据流量通过ODBC,相当于是正常的业务流量,不会对集群状态产生影响。
- 达梦的dblink服务是通过心跳网段实现的。因此每增加一个节点的dblink信息,dmmal文件中就会增加一个节点。如果业务复杂,你会得到一个异常复杂的dmmal文件。这是很不利于后期运维的。
- 同时因为它需要认dmmal文件,因此每新加一条链路,就需要重启数据库服务。对于很多的业务来说,加一条链路就需要申请停机时间,这是难以接受的。
- 达梦数据库的小版本较多,由于各个业务间的小版本可能存在差异,很有可能导致dblink无法实现功能。之前曾出现过相差四个月的版本间的数据库,dblink无法返回数据。
以下是具体操作步骤。
- 安装gcc
yum install gcc*
-
安装ODBC
很多帖子与网站都有源码安装的教程与讲解。包括达梦官网的技术文档中记录的也是源码安装。这里我更推荐使用yum安装。不仅仅是安装更为便捷。同时,源码安装有时候会无法避免安装不规范的事情发生,或者下载的源码有问题,这是在生产环境中不希望看到的。目前的主流操作系统的本地镜像就已经可以支持yum直接安装。我们也就没有必要舍近求远,迎难而上。ODBC这样的组件安装与配置,我们还是应该追求简易,快速,可批量化操作。
yum install unixODBC-devel-2.3.7-2.ky10.aarch64
yum install unixODBC-2.3.7-2.ky10.aarch64
- ODBC参数文件配置
如果选择yum安装,ODBC的配置文件的绝对路径为/etc/odbc.ini和/etc/odbcinst.ini.
vim odbcinst.ini
[DM8]
Description = dm odbc
Driver = /达梦安装位置/bin/libdodbc.so
vim odbc.ini
[对应实例名]
Description = DM8 dsn
Driver = DM8 ---此处可以写odbcinst.ini里[]内的内容,也可以选择直接写libdodbc.so 的绝对路径
SERVER =127.0.0.1 对应实例的IP地址
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236 对应实例的端口号
其中,odbcinst.ini的主要作用就是为odbc.ini的Driver参数指明路径。在测试中,我们发现,odbc.ini中的driver路径也可以直接写libdodbc.so的绝对路径。也是可以被服务认到的。
- 更改权限
大多数的软件安装都逃不开权限这个问题。ODBC也不例外,但是在这里需要格外注意,并且操作时需要额外谨慎的事情是。参数文件在/etc路径下面。或出现操作不当而更改系统其他组件权限的问题。解决权限问题的方法有很多,这里我建议使用软链接的方式,来避免由于操作不当而导致的其他不可预测的问题。这里选用软链接的方式也是因为符合前文中提到的,配置ODBC,我们应该追求简易,快速,可批量化操作。
同时,选择软链接还有一个随之而来的有点。如果,我们不选择软链接,要让达梦数据库认到这个参数文件。我们需要重新配置dmdba用户的环境变量,虽然不难,但是烦。我这个人就很懒,能少打一个字我都开心。如果在这里配置了软链接,就可以直接把链接写到环境变量中的LD_LIBRARY_PATH路径下。省去配置环境变量的步骤。
cd /etc
Chmod 755 odbc.ini
Chmod 755 odbcinst..ini
mkdir -p /usr/local/etc/
cd /usr/local
chmod -R 755 etc/
ln -s /etc/odbc.ini /达梦安装路径/bin/odbc.ini
ln -s /etc/odbcinst.ini /达梦安装路径/bin/odbcinst.ini
- 测试ODBC
切换至dmdba用户
su - dmdba
isql -v [对应实例名]
如果你获得了如下截图
那么第一阶段的准备工作就结束了。
- 创建dblink
create link "SYSDBA"."TEST" connect 'ODBC' with "sa" identified by "123456789" using '对应实例名';
- 测试dblink
在以往的dblink测试中,我倾向于使用
select 1 from dual@dblink;
这种方式简单直接
可惜的是,odbc这里并不支持,odbc的查询中更希望查到一张真实有效的表。
所以,这一部分,大家各显神通吧。