Oracle GoldenGate在异种OS上同种DB之间的数据同步(一)

2014-11-24 17:17:51 · 作者: · 浏览: 2

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

实施过程
1.上传介质到源头和目的端。
2.在源头的实施过程:
2.1 创建goldengate系统用户并授权
Sql> create tablespace GGTBS datafile 'd:\相关路径\ggtbs01.dbf'size 1024M auextend on;
Sql> Create user Goldengate default tablespace ggtbs identified by oracle;(目标数据库也创建这一个goldengate用户)
Sql> grant dba to goldengate;
2.2 将数据库设置为归档模式--一般的生产库都处于归档模式。
2.3 打开源端数据库的附加日志
Sql>alter databse add supplemental log data;
切换日志使附加日志生效:
Sql>alter system archive log current;
2.4 检查源端数据库的附加日志
Sql>select supplemental_log_data_min from v$database;
--返回yes表示附加日志已经打开。
2.5 打开源头数据库的force logging:
sql> alter database force logging;
2.6 对 主库 执行检查脚本,确认如下情况是否存在:找出唯一索引的索引列的列定义允许为null的

select dic.table_owner, dic.table_name, dic.index_name, di.uniqueness,dic.column_name
from dba_ind_columns dic , dba_indexes di,dba_tab_columns dtc
where dic.table_owner=’自行添加用户’and dtc.OWNER='自行添加用户’
AND dic.table_owner=di.table_owner and dic.TABLE_NAME=di.table_name
and dic.index_name=di.index_name
and di.uniqueness='UNIQUE' and dtc.owner=di.table_owner
and dtc.TABLE_NAME=di.table_name and dic.column_name=dtc.COLUMN_NAME and dtc.nullable='Y'
and dic.TABLE_NAME=dtc.TABLE_NAME

--->自行添加用户请用需要同步的user来代替。
对于查询出来的表和唯一索引名,请修改:要么变为非唯一索引,要么在保留唯一索引的情况下,将列的定义置为not null。

2.7 假设将ogg软件放在d:\ggs目录下,cmd界面下进入d:\ggs
ggsci>create subdirs -->该命令的作用是在d:\ggs下建立dirprm、dirdat、dirrpt等下级目录。
2.8 ggsci>edit params ./GLOBALS
添加如下的字符,之后保存退出
MGRSERVNAME GGSSERVICE
2.9 建立ogg的 windows service
D:\ggs>install addservice autostart


2.10 为表添加补充日志
ggsci>dblogin userid goldengate password oracle
ggsci> add trandata USER1.* --->注意:*后别加分号。
ggsci> add trandata USER2.* --->注意:*后别加分号。
ggsci> add trandata USER3.* --->注意:*后别加分号。


确认表的补充日志是否已经添加:
select table_name from all_tables
where owner='USER1' and table_name not in (select distinct table_name from dba_log_groups where owner='USER1');

2.11 配置DDL复制
SQL> GRANT EXECUTE ON UTL_FILE TO goldengate;
ggsci>edit params ./GLOBALS 添加如下的字符,之后保存退出
GGSCHEMA goldengate

cmd下 cd 到d:\ggs目录
退出所有的oracle session
sqlplus / as sysdba
SQL> @marker_setup.sql
SQL> @ddl_setup.sql
SQL> @role_setup.sql
SQL> grant ggs_ggsuser_role to goldengate;
SQL> @ddl_enable.sql

2.12 配置sequence的同步(若是备库是报表查询需求,请忽略此步)
cmd下 cd 到d:\ggs目录
sqlplus / as sysdba
SQL> @sequence.sql
--->源头执行:SQL> GRANT EXECUTE on goldengate.updateSequence TO goldengate;
--->目的端执行:SQL> GRANT EXECUTE on goldengate.replicateSequence TO goldengate;
2.13 源端配置参数文件
ggsci > edit params mgr
添加如下参数,之后保存退出。
port 7809
autostart extract *
autorestart extract *, waitminutes 1, retries 60, RESETMINUTES 60
PURGEOLDEXTRACTS d:\ggs\dirdat\st*, USECHECKPOINTS, MINKEEPHOURS 2


ggsci> add extract extfull, tranlog, Threads 2, begin now
--->以上命令是针对主库是rac2个节点的情况,若是单机,请忽略Threads 2

ggsci >edit params extfull
添加如下参数,之后保存退出
extract extfull
setenv ( NLS_LANG = " AMERICAN_AMERICA.ZHS16GBK " )
--TRANLOGOPTIONS ASMUSER SYS@ASM1, ASMPASSWORD oracle
--THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 80000 IOLATENCY 160000

DBOPTIONS ALLOWUNUSEDCOLUMN
userid goldengate, password oracle

ddl include mapped

ddloptions addtrandata RETRYOP MAXRETRIES 1000 RETRYDELAY 10, REPORT

WA