【OGG参考】
OGG手册:https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/toc.htm
OGG相关命令及参数: https://docs.oracle.com/goldengate/1212/gg-winux/GWURF/toc.htm
RAC下OGG 配置(仅传输DML操作)
1. 【源端和目标端】创建ACFS文件系统,在共享存储创建ogg软件安装目录,上传文件并解压缩ogg软件
cd /ogg
tar -xvf /soft/fbo...
添加oracle环境变量LD_LIBRARY_PATH
vi ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
安装:
./ggsci
create subdirs
--完成ogg 安装
2.【源端】检查是否开启归档
SQL> select name,log_mode,supplemental_log_data_min from v$database;
NAME LOG_MODE SUPPLEME
--------- ------------ --------
MMDB NOARCHIVELOG NO
a.开启归档
SHUTDOWN IMMEDIATE --关闭数据库:
STARTUP MOUNT --启动到Mount状态
ALTER DATABASE ARCHIVE LOG; --开启归档
ALTER DATABASE OPEN --打开数据库
ARCHIVE LOG LIST --检查归档状态,确认归档位置是否合适
b.打开最小附加日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; --打开最小附加日志
ALTER SYSTEM SWITCH LOGFILE --切换日志使生效
c.打开OGG特性
SHOW PARAMETER GOLDENGATE
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
3.【源端目标端】确定所有待同步的表必须有主键或唯一索引
COL OWNER FOR A20
COL TABLENAME FOR A30
SELECT OWNER,TABLE_NAME,CONSTRAINT_TYPE,INVALID FROM DBA_CONSTRAINTS WHERE OWNER='SCOTT' AND CONSTRAINT_TYPE IN ('P','U'); --查询用户下哪些表有主键
4. OGG用户创建:
_________________________________________________________________
【源端】:
CREATE USER ggadmin IDENTIFIED BY ggadmin123, DEFAULT TABLESPACE USERS ;
GRANT CONNECT TO ggadmin;
GRANT CREATE SESSION TO ggadmin;
GRANT ALTER SESSION TO ggadmin;
GRANT RESOURCE TO ggadmin;
GRANT SELECT ANY DICTIONARY TO ggadmin;
GRANT SELECT ANY TABLE TO ggadmin;
GRANT FLASHBACK ANY TABLE TO ggadmin;
GRANT ALTER ANY TABLE TO ggadmin;
或
GRANT DBA TO ggadmin;
【目标端】:
建立OGG数据库用户
? 通过sql将数据写入数据库
? OGG目标数据库用户权限
CREATE USER ggadmin IDENTIFIED BY ggadmin123, DEFAULT TABLESPACE USERS ;
GRANT ALTER SESSION TO ggadmin;
GRANT CREATE SESSION TO ggadmin;
GRANT CONNECT TO ggadmin;
GRANT RESOURCE TO ggadmin;
GRANT SELECT ANY DICTIONARY TO ggadmin;
GRANT SELECT ANY TABLE TO ggadmin;
GRANT FLASHBACK ANY TABLE TO ggadmin;
GRANT INSERT ANY TABLE TO ggadmin;
GRANT UPDATE ANY TABLE TO ggadmin;
GRANT DELETE ANY TABLE TO ggadmin;
或
GRANT DBA TO ggadmin;
5.【源端配置】:
5.1 mgr 配置
./ggsci
GGSCI> edit param mgr
PORT 7809 //监听端口PORT
DYNAMICPORTLIST 7810-7900 //动态监听端口PORT,监听端口失败时使用
--AUTOSTART ER * //开启管理进程后,自动启动所有的EXTRACT及REPLICAT进程
AUTORESTART ER *,RETRIES 5,WAITMINUTES 3,RESETMINUTES 60 //自动重启异常中止的进程,重试5次,每次等2分钟,一小时后重试
STARTUPVALIDATIONDELAY 5 //启动时延迟5秒校验
PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS, MINKEEPDAYS 3 //自动清理使用过的trail队列,最少保留3天
LAGREPORTHOURS 1 //每一小时检查延迟
LAGINFOMINUTES 30 //延迟30分钟记录信息到error log
LAGCRITICALMINUTES 45 //延50分钟记录警告到error log
GGSCI> START MGR //打开管理进程
GGSCI> INFO ALL //验证已打开
5.2 添加抽取进程及队列文件
GGSCI> ADD EXTRACT ex_jtwx1, tranlog, begin now,thread 2
GGSCI> ADD EXTTRAIL ./dirdat/la,EXT ex_jtwx1, MEGABYTES 100
GGSCI> ADD EXTRACT dp_jtwx1, EXTTRAILSOURCE ./dirdat/la
GGSCI> ADD RMTTRAIL /ogg/dirdat/ra, EXT dp_jtwx1, MEGABYTES 100
5.3 配置抽取进程参数
extract 抽取进程参数配置:
./ggsci
GGSCI> edit param ex_jtwx1
EXTRACT ex_jtwx1
--[环境变量,非必须]
--SETENV( ORACLE_SID=xxx )
--SETENV( ORACLE_HOME=xxx )
--SETENV( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
USERID ggadmin, PASSWORD ggadmin123,
TRANLOGOPTIONS DBLOGREADER, DBLOGREADER BUFSIZE 4194304, BUFSIZE 4194304
FETCHOPTIONS FETCHPKUPDATECOLS
NOCOMPRESSDELETES
EXTTRAIL ./dirdat/la
DYNAMICRESOLUTION //动态解析表结构
--TRANLOGOPTIONS CONVERTUCS2CLOBS //抽取CLOB必须加上
--GETTRUNCATES //捕获truncate操作,默认不捕获
--[待传输的表]
table myschema.maytable1;
table myschema.maytable2;
table myschema.*;
--TABLE hq.acct, COLS (col1, col3); --只复制1,3列
--TABLE hq.acct, where (id=1 and name=2); --过滤,只复制满足条件记录
--TABLE hq.acct, COLSEXCEPT (col4); --复制除了第4列
datapump传输进程参数配置:
GGSCI>edit param dp_jtwx1
extract dp_jtwx1
setenv ( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
passthru //passthru表示本进程是一个传输进程data pump,无需跟数据库交互,只需要搬运数据即可
--REPORT AT 01:59 //配置在特定时间报告传输状态
--reportrollover at 02:00 //指定每日在特定时间生成一个新的报告
rmthost 10.128.59.52,mgrport 7809, compress //传输进程需要知道目标端的主机端口信息
rmttrail /ogg/dirdat/ra
Dynamicresolution
numfiles 8000
table myschema.mytable1;
table myschema.mytable2;
TABLE hq.acct; //注意此时不用再过滤cols了。
5.4 添加表级附加日志
GGSCI> DBLOGIN USERID ggadmin, PASSWORD ggadmin123,
GGSCI> LIST TABLES SCOTT.*
GGSCI> ADD TRANDATA scott.emp
GGSCI> ADD TRANDATA scott.dept
....
或
SQL>alter table user.table add supplemental log group ggs_table_1 (PK or UK) always;
SQL>
GGSCI> START * --启动抽取进程和传输进程
GGSCI> INFO ALL --检查是否正常启动
--------------
【备注1】
GGSCI> VIEW REPORT ex_jtwx1 --排错常用方法1
GGSCI> sh tail -10 ggserr.log --排错常用方法2
6.【目标端配置】
6.1 配置GLOBALS参数
GGSCI> EDIT PARAM ./GLOBALS
GGSCHEMA ggadmin
CHECKPOINTTABLE ggadmin.checkpointtable
6.2 创建检查点记录表
GGSCI> DBLOGIN USERID ggadmin, PASSWORD ggadmin123,
GGSCI> ADD CHECKPOINTTABLE ggadmin.checkpointtable
6.3 配置投递进程
GGSCI> ADD REP rp_jtwx1, EXTTRAIL ./dirdat/ra, CHECKPOINTTABLE ggadmin.checkpointtable
GGSCI> EDIT PARAM rp_jtwx1
REPLICAT rp_jtwx1
--环境变量,非必须
--SETENV( ORACLE_SID=ogg2 )
--SETENV( ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 )
--SETENV( NLS_LANG = AMERICAN_AMERICA.AL32UTF8 )
USERID ggadmin, PASSWORD ggadmin
--REPORT AT 01:59 //配置在特定时间报告复制状态
--REPORTROLLOVER AT 02:00 //指定每日在特定时间生成一个新的报告
REPERROR default,discard //配置如果出现错误后的处理模式,这里abend表示出现错误即进程终止,等待客户修正后恢复;也可以设置为discard,此时会将错误数据写到下面参数定义的文件中,但是继续处理,进程不退出
INSERTALLRECORDS
DISCARDFILE ./dirrpt/rp_jtwx1.dsc,append, megabytes 200 //定义出错后写错误信息的目标文件,为查错提供帮助。 Append表示在尾部添加, purge表示每次生成一个新的disard文件; megabyte表示最大允许大小,如果超过了此大小则进程也会终止。
ASSUMETARGETDEFS //表示源和目标表的结构相同,即相同数据库类型、表的字段定义相同
DYNAMICRESOLUTION //动态解析表的结构,加快启动速度
--HANDLECOLLISIONS //冲突数据处理,主要在初始化时候用到
--GETTRUNCATES //同步truncate 操作
MAP scott.emp, TARGET scott.emp;
MAP scott.dept, TARGET scott.dept1 , COLMAP (usedefaults , committime = @GETENV ("GGHEADER", "COMMITTIMESTAMP"));
--//定义源表和目标表的映射, colmap里面定义列映射,如果是两端表的列全部相同则不用colmap;
--userdefaults表示,没有列在后面的列全部按照缺省规则(列名相同的对应)进行映射,而列在后面的如committime则赋给GoldenGate的一个自有变量,这里是指提交时间。
GGSCI> START REP rp_jtwx1 //启动投递进程
GGSCI> INFO ALL //检查状态
--------------
【备注2】
GGSCI> help --查看可用命令
GGSCI> help add exttrail --查看添加队列文件命令使用方法
GGSCI> send rp_jtwx1,status --查看数据同步进度
GGSCI> stats rp_jtwx1 --查看投递进程处理数据量统计
【场景一】主键不一致
目标端: MAP src.s_tab, TARGET tar.t_tab, KEYCOLS ( s_tab_pk_col );
或源端: Add trandata src.s_tab, cols ( t_tab_pk_col),nokey
【场景二】数据过滤
源端: TABLE demo_src.people, FILTER (age > 50);
age需为主键才能过滤,或者Add trandata demo_src.people, cols (age)强制为该列加入附加日志
【场景三】数据初始化
通过导入加载初始数据后
源端: ALTER ex_jtwx1,begin 2010-03-21 08:00:00 (保证归档存在)
或目标端: ALTER REPLICAT rp_jtwx1, EXTSEQNO 53, EXTRBA 0
【场景四】数据冲突处理
在replicat使用handlecollisions(必须有主键或者唯一索引)
http://docs.oracle.com/goldengate/1212/gg-winux/GWURF/gg_parameters081.htm#GWURF520
示例:
HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
NOHANDLECOLLISIONS(默认参数)
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30592920/viewspace-2143905/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30592920/viewspace-2143905/