当数据要从oracle库中迁移到DM数据库且数据量非常大时,就需要使用到DMHS来辅助迁移,所以学会搭建DMHS是非常有必要的。
一、Oracle端配置(捕获端):
1.关闭防火墙:
service iptables stop
chkconfig iptables off
2.在环境变量(.bash_profile)中添加LD_LIBRARY模块的路径信息:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
3.配置listener.ora、tnsnames.ora文件
4.打开监听
lsnrctl start
5.进入数据库
sqlplus / as sysdba
1.启动数据库
startup;
2.创建连接用户(此处创建了DMHS用户)
3.给用户授权
grant select any table to dmhs;
grant select any dictionary to dmhs;
grant create session to dmhs;
grant lock any table to dmhs;
grant execute on dbms_flashback to dmhs;
grant connect to DMHS;
4.oracle关闭最小回收机制:
show parameter recycle; #检查回收机制是否开启,为on则开启
alter system set recyclebin=off deferred;
5.Oracle开启归档
6.查看最小附加日志是否开启:
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
7.oracle开启最小附加日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
8.将同步表设置为logging模式,后续操作记录到redo日志中
select 'alter table '||owner||'.'||table_name||' logging;' from dba_tables where logging = 'NO' and duration not like 'SYS%' and owner in ('D5000','HISDB','OSP','STATICS','ALARM');
9.确认捕获端是否存在物化视图日志表,需加入至同步黑名单:
select * from dba_tables where table_name like 'MLOG$%' and owner='D5000';
10.查看数据库字符集(数据库的字符变量应与环境变量一致:AMERICAN_AMERICA.ZHS16GBK)
*若不一致,跳转至最后
select userenv('language') from dual;
11.源端数据库必须允许 DDL 触发器的触发动作,查看的命令:
show parameter "_system_trig_enabled";
6.启动dmhs服务
./dmhs_server dmhs_cpt.xml
另开一个连接启动控制台:
./dmhs_console
<DMHS> connect 127.0.0.1:5345
<DMHS> clear exec lsn
<DMHS> COPY 0 "SCH.NAME='NW_HS_TEST' AND TAB.NAME='TEST'" CREATE|INSERT|DICT
<DMHS>start cpt
<DMHS>state
<DMHS>cpt
这里需要注意,每次在全库重新装载之前,需要清空目的端的DMHS_TABLE_SEQID辅助表。如果不清空,可能会导致CONTINUE使用的正确性。
备注
ORACLE端的dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<cpt>
<db_type>ORACLE11g</db_type>
<db_server>EMS_MDB1</db_server>
<db_user>DMHS</db_user>
<db_pwd>DMHS123456</db_pwd>
<db_port>1521</db_port>
<idle_time>10</idle_time>
<ddl_mask>TABLE:VIEW:INDEX:OP</ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.187.131</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_pack_size>256</net_pack_size> #NET 模块投递消息时消息包的大小,取值范围在 1-512,单位 K,默认 256。
<net_turns>0</net_turns> #禁用网闸模式,
<trigger>1</trigger> #下一级数据入库时,禁用触发器
<constraint>1</constraint> #一级数据入库时,禁用约束,不包括主键约束和唯一性约束,主要是包括外键约束
<identity>1</identity> #示下一级数据入库时,忽略自增列
<filter>
<enable>
<item>D5000.*</item>
</enable>
<disable/>
</filter>
<map>
<item></item>
</map>
</send>
</cpt>
</dmhs>
问题:字符集不同
1.oracle数据库设置字符集:
SQL> conn /as sysdba;
SQL> shutdown immediate;
SQL> startup mount;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> alter database open;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
SQL> select * from v$nls_parameters;
SQL> shutdown immediate;
SQL> startup;
SQL> select userenv('language') from dual;
2.环境变量添加字符集:
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
更多资讯请上达梦技术社区了解:https://eco.dameng.com
最后修改时间:2021-09-18 16:04:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。