一、使用限制
当同步源数据库是 Oracle 时,DMHS 使用具有以下限制:
1.启动 DMHS 的用户必须具有DBA权限,并和 Oracle 的安装用户位于同一用户组中。如果没有DBA权限,那么需要赋予如下权限(例如用户为“dmhs”):
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; |
2. 不支持Varray、Anydata、Anydataset、Anytype、BFILE、BINARY_INTEGER、MLSLABEL、PLS_INTEGER、URITYPE、UROWID等数据类型。
4. 不支持外部表。
5. 不能同步 Oracle 预留模式的对象。
6. 不能同步 Oracle 的回收表,如果要支持 Oracle 的DDL同步操作,必须将 Oracle 的回收机制关闭。
二、开启归档
当同步源数据库是 Oracle 时,必须开启 Oracle 的归档日志,请按照以下顺序进行操作,相关操作命令如下所示。
1.查看当前归档模式,确认是否开启归档日志
登录:sqlplus / as sysdba SQL> ARCHIVE LOG LIST; |
2. 如果未开启归档日志,应首先关闭 Oracle 服务,准备开启归档日志。
SQL> SHUTDOWN IMMEDIATE; |
3.切换归档日志的开启状态,首先必须采用 MOUNT 方式启动 Oracle 服务。
SQL> STARTUP MOUNT; |
4.开启归档日志,查看开启归档日志是否成功,并对归档路径等进行设置。
SQL> ALTER DATABASE ARCHIVELOG; |
查看归档列表
SQL> ARCHIVE LOG LIST; |
修改恢复路径
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST=''; |
修改归档路径
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST='e:\arch'; |
5.设置完成,将数据库切换到正常的工作状态,打开数据库。
SQL> ALTER DATABASE OPEN; |
三、开启最小附加日志
当同步源数据库是 Oracle 时,还必须开启最小附加日志;并且当同步表不包含主键,还需要开启数据库级补充日志。相关操作命令如下所示。
1. 开启最小附加日志。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; |
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; |
2.查看最小附加日志是否开启。
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE; |
四、RAC的支持
当同步源数据库是 Oracle 时,DMHS支持 ASM 类型和裸设备的 RAC,并且需要注意以下事项。
1. DMHS必须安装Oracle RAC环境中的任意一个节点上,以便DMHS可以访问到共享磁盘上的日志文件。
2. 必须要检查RAC集群中所有节点的时钟同步情况。RAC集群中所有的节点的时钟必须同步,缺省容忍节点间有3秒的误差,如果允许容忍时间超过3秒,请修改对应的epoch参数。
3. 为了确保DMHS可以连接到ASM实例,需要在“tnsnames.ora”文件中进行配置ASM实例。配置方法示例如下:
ASM = ( DESCRIPTION = (ADDRESS =(PROTOCOL=TCP)(HOST=***.***.***.***)(PORT=1521)) (CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME=+ASM)) ) |
4. DMHS开启Oracle RAC同步时,配置文件中必须开启RAC选项,配置RAC实例连接的用户名和密码。当需要动态增加或减少RAC集群连接节点时,需要修改配置文件中的节点数,并重启DMHS方能生效。
5. 对于裸设备的RAC,归档文件是在本地文件系统,需要对节点上的归档目录进行nfs配置,实现共享。
五、用户
1创建\删除用户
登录到system以创建其他用户
SQL> connect / as sysdba 创建用户以及设置密码: SQL> create user DMHS identified by 123456; 修改用户: SQL> alter user DMHS identified by 234556; 撤销用户DMHS: SQL> drop user DMHS; 为用户DMHS授权: grant connect, resource to DMHS; |
2.授权用户
GRANT SELECT ON SYS.V_$DATABASE TO DMHS;
GRANT SELECT ON SYS.V_$SESSION TO DMHS;
GRANT SELECT ON SYS.GV_$PARAMETER TO DMHS;
GRANT SELECT ON SYS.GV_$INSTANCE TO DMHS;
GRANT SELECT ON SYS.GV_$ARCHIVE_DEST TO DMHS;
GRANT SELECT ON SYS.GV_$ARCHIVE TO DMHS;
GRANT SELECT ON SYS.GV_$LOG TO DMHS;
GRANT SELECT ON SYS.GV_$LOGFILE TO DMHS;
GRANT SELECT ON SYS.DBA_TABLES TO DMHS;
GRANT SELECT ON SYS.V_$INSTANCE TO DMHS;
GRANT SELECT ON SYS.OBJ$ TO DMHS;
GRANT SELECT ON SYS.USER$ TO DMHS;
GRANT SELECT ON SYS.COL$ TO DMHS;
GRANT SELECT ON SYS.DBA_CONS_COLUMNS TO DMHS;
GRANT SELECT ON SYS.DBA_CONSTRAINTS TO DMHS;
GRANT SELECT ON SYS.LOB$ TO DMHS;
GRANT SELECT ON SYS.TABPART$ TO DMHS;
GRANT SELECT ON SYS.TAB$ TO DMHS;
GRANT SELECT ON SYS.TABSUBPART$ TO DMHS;
GRANT SELECT ON SYS.TABCOMPART$ TO DMHS;
GRANT EXECUTE ON DBMS_FLASHBACK TO DMHS;
GRANT CREATE ANY TABLE TO DMHS;
GRANT LOCK ANY TABLE TO DMHS;
GRANT SELECT ANY TABLE TO DMHS;
GRANT CREATE ANY VIEW TO DMHS;
GRANT SELECT ANY DICTIONARY TO DMHS;
GRANT FLASHBACK ANY TABLE TO DMHS;
六、执行DDL同步脚本
SQL> start 目录/ddl_sql_ora.sql |
七、配置dmhs.hs文件
<?xml version="1.0" encoding="utf-8" standalone="no"?> <dmhs> <base> <lang>en</lang> <mgr_port>5345</mgr_port> <!-- 管理端口号--> <chk_interval>3</chk_interval> <ckpt_interval>60</ckpt_interval> <siteid>1</siteid> <!-- 源端站点编号--> <version>2.0</version> </base> <cpt> <db_type>Oracle11g</db_type> <db_server>orcl</db_server> <db_user>DMHS</db_user> <!--数据库用户名--> <db_pwd>123456</db_pwd> <!--数据库密码--> <db_port>1521</db_port> <idle_time>300</idle_time> <ddl_mask>OBJ:OP</ddl_mask> <!--DDL同步参数--> <arch> <clear_interval>600</clear_interval> <clear_flag>0</clear_flag> <!--归档删除标识--> </arch> <send> <ip>192.168.117.130</ip> <!--目标库ip--> <mgr_port>5345</mgr_port> <data_port>5346</data_port> <net_pack_size>256</net_pack_size> <net_turns>0</net_turns> <crc_check>0</crc_check> <trigger>0</trigger> <constraint>0</constraint> <identity>0</identity> <filter> <!--过滤规则--> <enable> <item>DMHS.*</item><!--源端DMHS模式下--> </enable> <disable/> </filter> <map> <!--映射规则--> <!--源端DMHS模式下的对象同步到目的端SYSDBA模式下--> <item>DMHS.* == SYSDBA.*</item> </map> </send> </cpt> </dmhs> |