DMHS数据同步(Oracle11g 到 dm8)
本文详细介绍了Oracle 11g 到 dm8 的数据同步安装部署过程。
建议虚拟机内存30G。
ip地址 | 数据库版本 | 端口号 | 备注 |
---|---|---|---|
192.168.100.5 | Oracle11g | 1521 | 源端 |
192.168.100.9 | DM8 | 5236 | 目的端 |
切换用户(尽量使用以下带 - 的方式切换用户)
su – oracle
创建目录
mkdir /home/oracle/archivelog
连接数据库
sqlplus / as sysdba
关闭数据库服务
SQL> shutdown immediate
以 mount 方式启动 oracle 数据库
SQL> startup mount
开启归档
SQL> alter database archivelog;
设置归档文件路径(如果使用本地路径存放归档日志,需要将 db_recovery_file_dest 参数置空,然后设置 log_archive_dest 参数
SQL> alter system set db_recovery_file_dest=’’;
SQL> alter system set log_archive_dest=’’/home/oracle/app/oracle/archivelog’;
恢复为 open 状态
SQL> alter database open;
再次检查归档
SQL> archive log list;
附加日志(supplemental log)指数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,进行数据的分析。
检查附加日志
SQL> select SUPPLEMENTAL_LOG_DATA_MIN min,SUPPLEMENTAL_LOG_DATA_PK pk,SUPPLEMENTAL_LOG_DATA_UI ui,SUPPLEMENTAL_LOG_DATA_FK fk, SUPPLEMENTAL_LOG_DATA_ALL "all" from v$database;
开启数据库最小附加日志级全列日志
SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data (all) columns;
再次检查附加日志
SQL> select supplemental_log_data_min, supplemental_log_data_all from v$database;
检查 oracle 回收机制 on/off
SQL> show parameter recyclebin;
如果是on,需要关闭oracle回收机制
SQL> alter system set recyclebin=off deferred;
需要重启数据库后才生效。
查询 oracle 数据库的字符集:(AMERICAN_AMERICA.ZHS16GBK)
SQL> select userenv(‘language’) from dual;
在根目录下执行
vi ~/.bash_profile export NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK” source ~/.bash_profile
启动 oracle 数据库创建DMHS用户密码为DMHS并授权。
SQL> create user DMHS identified by "DMHS" default tablespace USERS temporary tablespace TEMP profile DEFAULT;
SQL> grant connect to DMHS;
SQL> grant create any table to DMHS;
SQL> grant select any table to DMHS;
SQL> grant select any dictionary to DMHS;
SQL> grant create session to DMHS;
SQL> grant lock any table to DMHS;
SQL> grant execute on dbms_flashback to DMHS;
SQL> grant unlimited tablespace to DMHS;
切换到root用户下
查看是否安装 odbc
rpm -qa|grep unixODBC
添加 odbc 环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
安装 odbc
yum -y install unixODBC unixODBC-devel
安装完成后,执行以下命令:
odbcinst -j
配置 unixODBC
新增 odbc.ini 文件
vim /etc/odbc.ini
写入以下内容:
[ORACLE]
Description = Oracle ODBC driver for Oracle 11g
Driver= Oracle in OraDb11g_home1
SERVER = 192.168.100.5
ServerName = orcl
UserID = DMHS
Password = DMHS
Port = 1521
配置 odbcinst.ini 文件
vim /etc/odbcinst.ini
增加以下内容:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /home/oracle/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
Threading = 0
查看是否缺少依赖:
ldd /home/oracle/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
如果发现缺少依赖文件。
查找系统其他位置是否存在依赖文件:
find / -name libodbcinst*
复制相应文件到依赖路径下:
cp /usr/lib64/libodbcinst.so.2 /lib64/libodbcinst.so.1
配置完成之后,可使用 isql 命令测试配置是否正确。
注意要用 oralce 用户测试。
isql -v ORACLE DMHS DMHS
连接数据库
disql SYSDBA/SYSDBA@192.168.100.9:5236
查询归档是否开启,Y/N
SQL> select arch_mode from v$database;
开启归档
如果查询结果为N需要开启归档
alter database mount;
alter database archivelog;
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm/dmdbms/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';
alter database open;
再次查询归档是否开启,Y/N
select arch_mode from v$database;
执行数据库后重启数据库服务生效
SQL> SP_SET_PARA_VALUE(2,'RLOG_APPEND_LOGIC',1);
SQL> exit;
DmServiceDMSERVER restart;
查询逻辑日志是否开启:1/0
SQL> SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME='RLOG_APPEND_LOGIC';
dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响同步。
SQL> select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
输出为 0 则正常。
创建用户
SQL> create user DMHS identified by "DMHS" default tablespace MAIN temporary tablespace TEMP;
给用户授权
SQL> grant resource to DMHS;
SQL> grant select any table to DMHS;
SQL> grant dba to DMHS;
SQL> grant unlimited tablespace to DMHS;
选择正确版本的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>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.100.9</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<exec_thr>8</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>2000</exec_trx>
<exec_rows>2000</exec_rows>
<msg_col_size>30000</msg_col_size>
<ddl_continue>1</ddl_continue>
<affect_row>0</affect_row>
<exec_policy>2</exec_policy>
<enable_rowid>0</enable_rowid>
<clear_trx_file>1</clear_trx_file>
<trx_max_file>8</trx_max_file>
</exec>
</dmhs>
在dmhs安装目录下bin路径执行
./dmhs_server dmhs.hs
在开一个终端执行
./dmhs_console
启动 exec 模块
DMHS> start exec
选择正确版本的dmhs安装包安装
修改配置文件
在安装目录的bin目录下
vim dmhs.hs
文件内容:(注意修改俩 ip 地址)
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<ckpt_interval>60</ckpt_interval><!--执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
<siteid>100</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
<version>2.0</version><!-- 版本号-->
</base>
<cpt><!-- 这项配置可以配置多个,也就是可以配置多个捕获模块,如果该节点只作为执行端,该节点需要删除 -->
<db_type>oracle11g</db_type><!-- Oracle数据库类型,限定值Oracle10g,Oracle11g,dm6,dm7 -->
<db_server>192.168.100.5/orcl</db_server><!-- 数据库实例名-->
<db_user>DMHS</db_user><!-- 需要同步的数据库用户名,默认为SYSDBA -->
<db_pwd>DMHS</db_pwd><!-- 数据库用户口令,默认为SYSDBA -->
<db_port>1521</db_port><!-- Oracle数据库端口号-->
<ddl_mask>0</ddl_mask><!-- 分析端是否支持DDL同步,可选项0(不支持DDL), 1(支持DDL),需要将安装脚本中对应的DDL脚本在源端执行-->
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>0</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件)-->
</arch>
<send><!-- 发送模块配置 -->
<ip>192.168.100.9</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<filter><!-- 过滤,必须指定,一定要注意大小写,要跟源库中的对像名大小写保持一致 -->
<enable>
<item>DMHS.*</item><!-- 需要同步的源端数据库对象 -->
</enable>
</filter>
<map>
<item>DMHS.*==SYSDBA.*</item><!-- 映射,将源端数据库对象映射到目的端的SYSDBA用户中 -->
</map>
</send>
</cpt>
</dmhs>
~
在dmhs安装目录下bin路径执行
./dmhs_server dmhs.hs
在开一个终端执行
./dmhs_console
DMHS> clear exec lsn
DMHS> load 0 "sch.name='DMHS'" CREATE|INSERT|DICT
DMHS> start cpt
使用 oracle 用户登录 Oracle 数据库,创建数据表,并添加数据。
查看表记录
在 SYSDBA用户下执行命令,连接数据库
查看系统表,确定数据表 "A" 在达梦数据库中已创建
SQL> select table_name from A;
查询表记录,数据跟 Oracle 数据库中数据表记录一致
SQL> select * from A;
至此,Oracle 11g 到 DM8 的数据同步部署成功!
若要退出,则先于源端执行 stop cpt ,再于目的端执行 stop exec 。
使用SYSDBA连接登录数据库执行DMHS安装目录下script子目录的“ddl_sql_ora.sql”脚本。(如果使用disql工具执行,需要先执行set define off和set char_code utf8来设置关闭本地变量和设置字符集编码,然后使用"start /xx/xx.sql"执行该脚本,如果是使用DM管理工具连接的数据库,可以直接复制SQL脚本内容到查询框执行即可)。
查看表数据
修改表结构
查看目的端表结构:可以看到ddl已经同步过来了
修改Oracle源端dmhs.hs 中ddl_mask参数
启动目的端dmhs
启动源端dmhs
源端创建分区表
CREATE TABLE INFO(
NAME VARCHAR(50),
PRICE INT
)
PARTITION BY RANGE(PRICE)(
PARTITION P1 VALUES LESS THAN (10),
PARTITION P2 VALUES LESS THAN (100),
PARTITION P3 VALUES LESS THAN (1000),
PARTITION P4 VALUES LESS THAN (MAXVALUE)
);
插入数据
insert into DMHS.INFO values('铅笔',1);
insert into DMHS.INFO values('笔记本',22);
insert into DMHS.INFO values('蓝牙耳机',868);
insert into DMHS.INFO values('电脑',4599);
insert into DMHS.INFO values('牙刷',8);
insert into DMHS.INFO values('水杯',15);
insert into DMHS.INFO values('书包',35);
目的端查询INFO_P1表
问题描述:
解决办法:
在DMHS 安装bin目录下增加一个在有效使用期限内的 dmhs.key 文件。
问题描述:
DMHS> start exec
CSL[ERROR]: load execute module failure
解决办法:
ldd libdmhs_exec.so
发现缺少 libmoci.so 文件,执行以下命令查找:
find / -name libmoci.so
找到文件后复制到 /home/dmdba/dmdbms/bin 目录下即可。
重新启动控制台,启动 exec 模块成功。
Oracle 11g 到 dm8 的数据同步安装部署过程基本如上。其难点主要在于选择合适的dmhs版本的安装、环境变量的配置(如环境变量和字符集设置)、dmhs.hs的配置,odbc的配置和相关依赖的缺失解决。
如果报错找不到相关依赖文件,先到 dmhs 的 bin 目录下查看相关文件是否存在。若存在,则是 LD_LIBRARY_PATH 环境变量未配置好,没有添加 dmhs 的 bin 目录为环境变量;若不存在,则执行 find / -name lib*.so,将其中一份复制到 /dmhs/bin 目录下或者系统可读依赖目录下即可。
查找DMHS依赖命令
ldd dmhs_server
ldd dmhs_console
在配置过程中,出现了磁盘空间不够的情况也会报错,在配置虚拟机环境时候建议配置内存大于等于30G。
文章
阅读量
获赞