数据库准备工作:
1.数据库级别最下附加日志
SELECT supplemental_log_data_min, force_logging FROM v$database;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;
SELECT supplemental_log_data_min, force_logging FROM v$database;
ALTER SYSTEM SWITCH LOGFILE;
select supplemental_log_data_min from v$database;
alter database add supplemental log data;
ALTER SYSTEM SWITCH LOGFILE;
select force_logging from v$database;
ALTER DATABASE FORCE LOGGING;
2.确认表级附加日志添加
select owner,table_name from dba_tables where owner in (‘HR’) and logging=’NO’;
select ‘alter table ‘||owner||’.’||table_name||’ logging;’ from dba_tables where owner in (‘HR’) and logging=’NO’;
select owner,table_name from dba_tables where owner in (‘HR’) and logging=’NO’;
3.数据库启用goldengate
Oracle 11.2.0.4 以及之后版本数据库,源库以及目标库必须开启参数。
alter system set enable_goldengate_replication=true;
4.创建管理用户ogg
创建表空间是为了DDL同步,以及OGG查询。
create tablespace ogg datafile ‘+DATADG’ size 2048M autoextend on next 200m;
create user ogg identified by ogg default tablespace ogg;
SQL> create tablespace ogg datafile ‘+DATADG’ size 2048M autoextend on next 200m;
源目,授权,DBA权限在安装成功后可以收回:
11.2.0.3 之后的授权:
GRANT CONNECT TO ogg;
GRANT ALTER ANY TABLE TO ogg;
GRANT ALTER SESSION TO ogg;
GRANT CREATE SESSION TO ogg;
GRANT FLASHBACK ANY TABLE TO ogg;
GRANT SELECT ANY DICTIONARY TO ogg;
GRANT SELECT ANY TABLE TO ogg;
GRANT LOCK ANY TABLE TO ogg;
GRANT RESOURCE TO ogg;
GRANT DBA TO ogg;
GRANT SELECT ANY TRANSACTION TO ogg;
exec dbms_goldengate_auth.grant_admin_privilege(‘ogg’);
GRANT UNLIMITED TABLESPACE TO ogg;
----------------------**
GRANT CONNECT TO ogg;
GRANT ALTER ANY TABLE TO ogg;
GRANT ALTER SESSION TO ogg;
GRANT CREATE SESSION TO ogg;
GRANT FLASHBACK ANY TABLE TO ogg;
GRANT SELECT ANY DICTIONARY TO ogg;
GRANT SELECT ANY TABLE TO ogg;
GRANT LOCK ANY TABLE TO ogg;
GRANT RESOURCE TO ogg;
GRANT DBA TO ogg;
GRANT SELECT ANY TRANSACTION TO ogg;
exec dbms_goldengate_auth.grant_admin_privilege(‘ogg’);
–Capture from Data Vault,Capture from Virtual Private
Database, Capture redacted data
sys.dbms_internal_clkm 复制Oracle Transparent Data Encryption (TDE)时需要.
–安装成功后可以收回dba权限,但是要授予UNLIMITED TABLESPACE权限。
GRANT UNLIMITED TABLESPACE TO ogg;
或者alter user ogg quota unlimited on users;
SQL> create user ogg identified by ogg default tablespace ogg;
–在ddl_setup时报错,通过授予以下权限解决。
grant create any table to ogg;
grant create any view to ogg;
grant create any procedure to ogg;
grant create any sequence to ogg;
grant create any index to ogg;
grant create any trigger to ogg;
grant create any view to ogg;
–OGG DDL 的配置 ------
GLOBALS中:GGSCHEMA ogg
GRANT EXECUTE ON UTL_FILE TO ogg;
@marker_setup
@ddl_setup
@role_setup
GRANT GGS_GGSUSER_ROLE TO ogg;
@ddl_enable.sql
@ddl_pin.sql ogg
先执行@?/rdbms/admin/dbmspool.sql (DDL 性能工具)
–支持Sequence----
在 Source 和 target 都得执行,
grant dba to ogg;
ggsci>EDIT PARAMS ./GLOBALS –后面参数配置
GGSCHEMA ogg
SQL> @sequence.sql(源目标均执行)
在 source 系统里:
GRANT EXECUTE on DDLuser.updateSequence TO DBLOGINuser;
GRANT EXECUTE on ogg.updateSequence TO ogg;
在 target 系统里:
GRANT EXECUTE on DDLuser.replicateSequence TO Replicatuser;
GRANT EXECUTE on ogg.replicateSequence TO ogg;
源库执行如下:
ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
DDL 支持配置完毕,就可以支持 sequences (CREATE, ALTER, DROP, RENAME)
----OGG源端配置----
ggsci>dblogin userid ogg,password ogg(或者dblogin userid ogg@ogg1,password ogg)
ggsci>add SCHEMATRANDATA HR (按照用户添加)
ggsci>info trandata HR.*
ggsci>info schematrandata HR
—MGR-----
ggsci> edit param mgr
port 7809
DYNAMICPORTLIST 7800-7810
AUTORESTART EXTRACT *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 30
/每5分钟尝试重新启动所有进程,共尝试三次,没30分钟清零。
LAGREPORTHOURS 1
/每隔一小时检查一次传输延迟情况
LAGREPORTMINUTES 10
/传输延时超过10分钟将写入错误日志
LAGCRITICALMINUTES 10
/传输延时超过10分钟将写入警告日志
PURGEOLDEXTRACTS /ogg/ogginstall/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12
/第一个参数表示队列位置,第二个参数表示是首先要保证满足检查点需要,不能删除未处理队列,第三个参数表示最小保留多少天
userid ogg,password ogg
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
GLOBALS
GGSCI (ogg1 as ogg@ogg1) 6> dblogin userid ogg@ogg1,password ogg
GGSCI (ogg1 as ogg@ogg1) 7> EDIT PARAMS ./GLOBALS
GGSCHEMA ogg
CHECKPOINTTABLE OGG.ggschkpt
配置GLOBAL文件后,需要通过推出并重新登录ggsci,使得配置生效。
(WIN,需要安装一下服务,globals配置:mgrservname ggmgr,install addservice,cmd窗口,services.msc查看服务)
创建检查点
GGSCI (ogg1) > dblogin userid ogg@ogg1,password ogg
GGSCI (ogg1 as ogg@ogg1) 4> ADD CHECKPOINTTABLE
–创建抽取进程—
ggsci> dblogin userid ogg@ogg1,password ogg
单机: add extract sa_ext tranlog begin now
ggsci>add exttrail /ogg/install/dirdat/sa extract sa_ext, megabytes 100
ggsci>add exttrail /ogg/ogginstall/dirdat/sb extract sb_ext, megabytes 100
ggsci>edit param sa_ext
参数:
extract sa_ext
setenv (NLS_LANG=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”)
–SETENV (ORACLE_HOME = “/u01/app/oracle/product/11.2.0/dbhome_1”)
–-SETENV (ORACLE_SID = “ogg1”)
userid ogg@ogg1,password ogg
—TRANLOGOPTIONS DBLOGREADER
/涉及asm
exttrail /ogg/ogginstall/dirdat/sa
TRANLOGOPTIONS LOGRETENTION DISABLED
/LOGRETENTION主要功能是防止rman删除ogg恢复所需要用到的归档日志,可以通过禁用这个特性来解决上面的这个问题。
DBOPTIONS ALLOWUNUSEDCOLUMN
/当抽取进程遇到一个没有使用的字段时只生成一个警告,进程会继续执行而不会被异常终止(abend)
TRANLOGOPTIONS ALTARCHIVELOGDEST +ARCHDG/ORCL/ARCHIVELOG
–归档路径可以不用设置,OGG能够识别
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT “arch_%t_%s_%r.arc”
–归档路径可以不用设置,OGG能够识别
DISCARDFILE /ogg/ogginstall/dirdat/sa_ext.dsc, APPEND, MEGABYTES 100
/将执行失败的记录保存在discard file中,该文件位于./dirrpt/extya.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 6:00
为了防止discard file被写满,每天2:00做一次文件过期设定
REPORTROLLOVER AT 6:00
REPORTCOUNT EVERY 1 HOURS, RATE
/每隔1小时报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息。GoldenGate会在根目录下的ggserr.log里
面加入一条告警信息。通过察看ggserr.log或者在ggsci中执行view ggsevt命令查看这些告警信息
—FETCHOPTIONS MISSINGROW ABEND
FETCHOPTIONS MISSINGROW REPORT
/表示当extract需要获取的行在源库中无法定位时,extract进程继续运行,相关的错误信息会保存在discardfile参数指定的文件中;
STATOPTIONS REPORTFETCH
/使用ggsci命令stats时,显示获取的行的统计信息
WARNLONGTRANS 1H, CHECKINTERVAL 10m
每隔10分钟检查一下大事务,超过1小时还没结束的进行报告
DYNAMICRESOLUTION
/有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
FETCHOPTIONS FETCHPKUPDATECOLS
/当使用了HANDLECOLLISIONS时,请使用该参数。
复制进程出现丢失update记录(missing update)并且更新的是主键,update将转换成insert。由于插入的记录可能不是完整的行,若要保证完整需要加入此参数
FETCHOPTIONS NOUSESNAPSHOT
/不会从闪回日志中获取数据
–DDLSUBST ‘/ora10g/oradata/src/’ with ‘/ora11g/oradata/trg/’ — Create tablespace是可以复制的,可以支持复制到不同文件目录;
ddl include objname HR.* include objtype ‘TRIGGER’
table HR.*;
–pump进程----------
ggsci>add extract sa_dmp EXTTRAILSOURCE /ogg/ogginstall/dirdat/sa
ggsci>add extract sb_dmp EXTTRAILSOURCE /ogg/ogginstall/dirdat/sb
ggsci>ADD RMTTRAIL /ogg/ogginstall/dirdat/sa, EXTRACT sa_dmp
ggsci>ADD RMTTRAIL /ogg/ogginstall/dirdat/sb, EXTRACT sb_dmp
ggsci>edit param sa_dmp
EXTRACT sa_dmp
PASSTHRU
/采用pass-through模式处理表,对数据直接发送,不做处理
DYNAMICRESOLUTION
/动态解析表名
RMTHOST 172.16.0.111, MGRPORT 7809
–RMTHOST 172.16.0.111, MGRPORT 7809, COMPRESS, compressthreshold 750
rmttrail /ogg/ogginstall/dirdat/sa
DISCARDFILE /ogg/ogginstall/dirdat/sa_ext.dsc, APPEND, MEGABYTES 100
DISCARDROLLOVER AT 6:00
REPORTROLLOVER AT 6:00
为了防止report file被写满,每天2:00做一次文件过期设定
REPORTCOUNT EVERY 1 HOURS, RATE
TABLE HR.*;
—OGG目标端—
—mgr-----
ggsci>edit param mgr
port 7809
DYNAMICPORTLIST 7800-7810
AUTORESTART replicat *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 30
LAGREPORTHOURS 1
/每隔一小时检查一次传输延迟情况
LAGREPORTMINUTES 10
/传输延时超过10分钟将写入错误日志
LAGCRITICALMINUTES 10
/传输延时超过10分钟将写入警告日志
PURGEOLDEXTRACTS /ogg/ogginstall/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12
userid ogg,password ogg
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
/除DDL历史表,最小保存7天,最大保存14天
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
/删除MARKER历史表,最小保存7天,最大保存14天。
GGSCI (ogg1 as ogg@ogg2) 6> dblogin userid ogg,password ogg
GGSCI (ogg1 as ogg@ogg2) 7> EDIT PARAMS ./GLOBALS
GGSCHEMA ogg
CHECKPOINTTABLE OGG.ggschkpt
GGSCI (ogg1 as ogg@ogg2) 7> ADD CHECKPOINTTABLE
ggsci>dblogin
userid ogg@ogg2,password ogg
ggsci>add
replicat sa_rep exttrail /ogg/ogginstall/dirdat/sa
ggsci>edit param sa_rep
replicat sa_rep
setenv(NLS_LANG=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”)
SETENV(ORACLE_HOME = “/u01/app/oracle/product/11.2.0/dbhome_1” )
–SETENV(ORACLE_SID = “ogg2”)
userid ogg@ogg,password ogg
—SQLEXEC “ALTER SESSION SET CONSTRAINTS=DEFERRED”
–HANDLECOLLISIONS
/当灾备端已经存在数据的情况下,解决复制过程中出现的冲突。如果要重新做初始化,可以删除drop灾备端数据库后再rman恢复,这样做的话就不需要该参数了。
ASSUMETARGETDEFS
/使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
ALLOWNOOPUPDATES
/当生产端有某些列但是目标表却没有,或者复制进程中配置了COLSEXCEPT 参数 在这些情况下,当生产端对那些列进行更新,目标表将不发生任何变化
NUMFILES 3000
/使用NUMFILES参数控制OGG给多少张TABLE 和MAP进行初始化的内存分配,并且此参数必须在TABLE or MAP,SOURCEDEFS or TARGETDEFS 之前生效, Default 1000.
REPERROR DEFAULT, DISCARD
/除了特殊指定的REPERROR语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。
DISCARDFILE /ogg/ogginstall/dirdat/sa_rep.dsc, append megabytes 50
BATCHSQL OPSPERBATCH 5000
/ 通过在replicat使用batchsql来把相同的语句作为一批处理,而不是像普通的处理方式,每行语句单独提交。
对于经常大批量更新,使用batchsql可以大幅度提高性能。但是要注意如果应用程序中有lob字段,或是经常有只更新
少量的行,这样使用batchsql没有益能好处,反而使replicat在normal和batch mode之前来回switch,而会影响性能.
对于有些不满足batchsql的条件,replicat会进行重试三次,在这样的情况下,性能下降的情况更加明显.
batchsql 两个主要的参数,定义了多少条语句作为一个语句提交
batchsql opsperqueue 30000, opsperbatch 30000/
GROUPTRANSOPS 100
/将小交易合并成一个大的交易进行提交,减少提交次数,降低系统io消耗
MAXTRANSOPS 1000
/将大交易拆分,每xx条记录提交一次。
(
GROUPTRANSOPS与MAXTRANSOPS
/Grouptransops示例
三个交易,分别有25/50/60个记录
假如grouptransops 为100 (缺省值),则Replicat一直要等待到第三个交易时
25 + 50 + 60 > 100才后Commit
两参数关系算法
if end of transaction OR num of operations >= maxtransops then
if num of operations >= grouptransops then
COMMIT transaction.
举例
- 假设Grouptransops = 100, maxtransops = 1,则上述例子中同样要等
待第三个交易后提交 - 假设Grouptransops = 1, maxtransops = 1,则每个交易提交一次
- 假设Grouptransops = 10, maxtransops = 10,则每10个记录提交一次
- 建议二者设置为相同值MAXTRANSOPS = GROUPTRANSOPS/)
CHECKSEQUENCEVALUE
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
GETTRUNCATES
/不捕获生产端truncate table的操作。(存在疑问?)
REPORT AT 06:00
每天早上6点报告
REPORTCOUNT EVERY 30 MINUTES, RATE
每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
REPORTROLLOVER AT 02:00
为了防止report file被写满,每天2:00做一次文件过期设定
DISCARDROLLOVER AT 02:00
为了防止discard file被写满,每天2:00做一次文件过期设定
MAP HR.,TARGET HR.;
—随笔—
abend,即一旦出现错误即停止复制,此为缺省配置;discard,出现错误后继续复制,只是把错误的数据放到discard文件中。
复制端,关于排除表(MAPEXCLUDE):在一个复制链路的任何一个环节去掉该表即可排除该表复制,但建议在主Extract进行排除,可以避免各进程做不必要的工作;同时,在各个进程参数均明确去掉该表可以保持前后的逻辑统一性和易读性
进程监控:
ggsci命令
- 通过在OGG命令行中查看进程信息命令的输出结果监控进程运行状态
- 常用命令是info命令,如infall, infer *等
- 通过自定义脚本执行ggsci命令可以监控OGG运行状态
ggserr.log - 该日志文件由Manager进程维护
- 记录所有进程的启动和停止信息及其它日志信息,按照严重级别划分为
INFO/WARNING/ERROR
欢迎关注我的公众号
这是一个专注写Oracle,mysql,python,shell,cloud 的小公号。欢迎交流沟通