select *,id_code from v$version; #查询达梦8当前版本
服务器IP | 角色 |
---|---|
172.18.21.144 | 达梦8主数据库 |
172.18.21.145 | 达梦8备份数据库 |
提前把防火墙关闭避免端口引起问题
systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service #临时关闭防火墙
systemctl disable firewalld.service #开机不自启防火墙
关闭SELinux,查看是否开启了SELinux,如果显示为Enforcing,需要改为Disabled,再重启系统使配置生效。
getenforce
vi /etc/selinux/config
进入文件后修改 SELINUX = disabled
保存退出文件
reboot
执行安装
chmod +x dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin
./dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin -i
按ctrl+c #退出安装
tail -1000f /opt/dmhs/log/install.log #查看一下安装日志是否正常
yum -y install unixODBC #在线更新安装ODBC插件,如果是内网环境,去网上查查怎么离线安装!
ps -ef|grep dm #查看一下当前达梦8的BIN路径
vim /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /opt/dmdbms/bin/libdodbc.so
vim /etc/odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
使用SYSDBA连接登录数据库执行以下语句开启归档日志。其中DEST为归档日志存放目录,需要提前创建好,FILE_SIZE为单个归档文件大小,SPACE_LIMIT为归档目录日志目录大小限制.
cd /opt/dmdbms/bin/
./disql SYSDBA/SYSDBA:5236
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmarch/DMHS,TYPE=LOCAL,SPACE_LIMIT=0';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
select para_value from v$dm_ini where para_name in ('ARCH_INI');
使用SYSDBA用户连接登录数据库执行以下语句:
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
select para_value from v$dm_ini where para_name in ('RLOG_APPEND_LOGIC');
使用SYSDBA连接登录数据库执行DMHS安装目录下script子目录的“ddl_sql_dm8.sql”脚本。(可以使用disql连接,使用"start /xx/xx.sql"直接执行该脚本,但建议使用DM管理工具连接的数据库,直接复制SQL脚本内容到查询框执行)
要执行一些初始化的脚本,这个脚本要用达梦的管理工具执行,要不然会报错!
先找到文件
cd /opt/dmhs/scripts
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
执行以下SQL语句查询触发器是否创建成功:
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
cd /opt/dmhs/bin
vim dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base> <!-- 管理模块的基本配置 -->
<lang>en</lang> <!-- 语言选项,ch 为中文,en 为英文 -->
<mgr_port>5345</mgr_port> <!-- 管理端口号,默认为5345-->
<ckpt_interval>60</ckpt_interval> <!-- 检查点间隔,默认60 -->
<siteid>2</siteid> <!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
<version>2.0</version>
</base>
<exec> <!-- 执行模块的基本配置 -->
<recv>
<data_port>5346</data_port> <!-- 当数据传递采用网络直连时,需要配置该参数,表明同步数据从该端口号获取。 -->
</recv>
<db_type>dm8</db_type> <!-- 目标端数据库类型 -->
<db_server>172.18.21.145</db_server> <!-- 目标端数据库服务名或IP -->
<db_user>SYSDBA</db_user> <!-- 目标端数据库用户 -->
<db_pwd>SYSDBA</db_pwd> <!-- 用户的密码 -->
<db_port>5236</db_port> <!-- 目标端数据库端口 -->
<db_name></db_name> <!-- 默认数据库名,默认为空串(只针对dm6有用)-->
<char_code>PG_GB18030</char_code>
<exec_thr>4</exec_thr> <!-- 执行线程个数,只有当 exec_mode 为 1 时才会生效!默认为1 -->
<exec_sql>1024</exec_sql> <!-- SQL 缓存大小,默认为 512M -->
<exec_trx> 5000 </exec_trx> <!-- 事务缓存个数,默认为 5000 -->
<exec_rows>1000</exec_rows> <!-- 批量绑定行数,默认为 250 -->
</exec>
</dmhs>
./dmhs_server dmhs.hs
start exec
https://blog.csdn.net/weixin_45260302/article/details/126672849 #参考文章解决方法
ldd libdmhs_exec.so
find / -name libdmoci.so
然后把not found的文件libdmoci.so复制到安装DMHS的bin目录下(若是find不到,可以从别处相对应DMHS版本中copy所需要的文件);
cp /opt/dmhs/db/bin/libdmoci.so /opt/dmhs/bin/
./dmhs_server dmhs.hs
start exec
cd /opt/dmhs/bin
vim dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>172.18.21.144</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_ssl_path></db_ssl_path>
<db_ssl_pwd></db_ssl_pwd>
<parse_thr>1</parse_thr>
<ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
<arch><!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send><!-- 发送模块配置 -->
<ip>172.18.21.145</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->
<constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->
<identity>1</identity>
<net_turns>0</net_turns>
<filter><!--过滤配置项-->
<enable><!-- 白名单,所有允许同步的表 -->
<item>SYSDBA.*</item>
</enable>
</filter>
<map><!--映射配置项-->
<item>SYSDBA.*==SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
create table a(
id int,
name varchar(255)
);
insert into a values(1,'john');
./dmhs_server dmhs.hs
clear exec lsn #为了初始化日志的起始位置。
COPY 0 “ SCH.NAME=’SYSDBA’ ” CREATE|INSERT|DICT #装载数据,配置同步掩码--一次就行
start cpt
ldd libcpt_dm8.so
find / -name libdmoci.so
然后把not found的文件libdmoci.so复制到安装DMHS的bin目录下(若是find不到,可以从别处相对应DMHS版本中copy所需要的文件);
cp /opt/dmhs/db/bin/libdmoci.so /opt/dmhs/bin/
./dmhs_server dmhs.hs
clear exec lsn #为了初始化日志的起始位置。
笔者这次部署失败了,主要是因为作者这个DMHS来源版本跟当前DM8的版本对应不一致,需要专门的版本对应的下载安装。
也就说是一一对应的,要不然总是报那个断错误。笔者后续再去官方找找资料,如果对应的版本一致,应该是如下的效果!!!
然后去目标数据库查看
刚刚源数据库上建的表,目标数据库也存在,则主从配置成功
参考官方文档:
https://eco.dameng.com/community/training/e32a7f896ad9e9f5aec59c8ae5c13f36
笔者觉得应该是跟服务器环境有关系,则又将目标端的服务器重新还原映像重新安装了一遍DMHS插件。
再启动,这次的问题与上次体现有些不同。
MGR[ERROR]: lib libdmhs_exec.so can not found,error code 2, libdodbc.so: cannot open shared object file: No such file or directory
MGR[ERROR]: log exec start fail
执行
ldd libdmhs_exec.so
报libdodbc.so找不到
find / -name libdodbc.so #全盘搜索
此处搜索有多个,我们选择达梦数据库路径下的这个文件,而不是其他目录。
cp /opt/dmdbms/bin/libdodbc.so /opt/dmhs/bin/ #复制到DMHS的bin路径下
再执行ldd libdmhs_exec.so
ldd libdmhs_exec.so
find / -name libdmelog.so
cp /opt/dmhs/bin/stat/libdmelog.so /opt/dmhs/bin/
find / -name libdmutl.so
cp /opt/dmhs/bin/stat/libdmutl.so /opt/dmhs/bin/
find / -name libdmclientlex.so
cp /opt/dmhs/bin/stat/libdmclientlex.so /opt/dmhs/bin/
find / -name libdmos.so
cp /opt/dmhs/bin/stat/libdmos.so /opt/dmhs/bin/
find / -name libdmcvt.so
cp /opt/dmhs/bin/stat/libdmcvt.so /opt/dmhs/bin/
find / -name libdmstrt.so
find / -name libdmmem.so
cp /opt/dmhs/bin/stat/libdmmem.so /opt/dmhs/bin/
反反复复的查找缺失的文件,最终执行命令
ldd libdmhs_exec.so
再没有发现缺失的文件报警,则代表成功了!
补缺失的文件这个有难点,因为不知道到底应该是取那个文件,因为同名称的。
笔者是把达梦8跟DMHS装同一个机器上,所以文件直接考,如果部署不同机器上,则需要拷过来,参考笔者的方法逐步一个一个文件测试,验证。
最终再执行
./dmhs_server dmhs.hs
start exec #手打
再启动源端服务
./dmhs_server dmhs.hs
clear exec lsn #初始化归档日志起始位置
COPY 0 " SCH.NAME='SYSDBA' " CREATE|INSERT|DICT #装载离线字典
start cpt
start cpt
CPT[WARN]: log format is invalid, please check DM8 version, sub_type: 108
查了查网上的资料,意思说DMHS版本需要与数据库达梦8版本一一对应,很显然数据库版本高了,数据库版本是2022年9月份的,这个DMHS是2021年12月,不是一个时期的。而且达梦官网也没有下载历史版本的途径,这次只能等待以商务的方式解决获取对应版本的DMHS再做测试了!!!!!