原理
1.ogg一般来说有4个进程,Manager进程,Extract进程,Pump进程,Replicat进程
2.源库有抽取进程,会把相应表的事务抽取出来,写入本地队列文件
3.dump进程吧队列中的文件发送到目标库的队列文件中,再由目标库的回复进程进行还原
1.公共操作
alter database archivelog;
alter system set enable_goldengate_replication=true;
select supplemental_log_data_min from v$database;
alter database add supplemental log data;
ALTER SYSTEM ARCHIVE LOG CURRENT;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export GG_HOME=/u01/ogg
export PATH=$PATH:$ORACLE_HOME/bin:$GG_HOME
alias ggsci='cd $GG_HOME;ggsci'
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
create subdirs
Parameter files /u01/ogg/dirprm: already exists (放置参数文件)
Report files /u01/ogg/dirrpt: created (放置报告文件)
Checkpoint files /u01/ogg/dirchk: created (放置ogg的检查点文件,抽取进程检查点的检测)
Process status files /u01/ogg/dirpcs: created (进程的状态记录)
SQL script files /u01/ogg/dirsql: created (抽取出来的日志还原sql语句)
Database definitions files /u01/ogg/dirdef: created (数据库定义文件,数据库是什么样的数据库)
Extract data files /u01/ogg/dirdat: created (抽取出来的日志放的文件,只能两位字母,全名八位)
Temporary files /u01/ogg/dirtmp: created (抽取和复制要ogg用户干活(影子用户:主备库的影子用户名称可以 相同也可以不同)
2.源库配置
OGG需要从数据字典读取表结构,如Oracle日志中没有足够信息,则需通过flash back或者直接读取数据库记录(例如,CLOB/BLOG/BINARY等)
2.1 OGG数据库用户权限
create tablespace tbs_gguser datafile '/u01/app/oracle/oradata/gguser.dbf' size 50M autoextend on;
create user ogg identified by ogg default tablespace tbs_gguser temporary tablespace TEMP quota unlimited on tbs_gguser;
grant connect to ogg;
grant create session to ogg;
grant alter session to ogg;
grant resource to ogg;
grant select any dictionary to ogg;
grant select any table to ogg;
grant flashback any table to ogg;
grant alter any table to ogg;
2.2 管理进程
是GoldenGate的控制进程,它主要作用有以下几个方面:启动、监控、重启GoldenGate的其他进程,报告错误及时间,分配数据存储空间,发布阀值报告等。
edit params mgr
port 7809
DYNAMICPORTLIST 7820-7830, 7833, 7835
autostart er *
autorestart er *, retries 5, waitminutes 3
purgeoldextracts /u01/ogg/dirdat/*,usecheckpoints, minkeepdays 7
start mgr
info mgr
view report mgr
2.3 抽取进程
运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期性地检查 并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,我们重启Extract进程 后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。
1.添加表级附加日志
dblogin userid ogg, password ogg
add trandata scott.emp
or
addadd trandata scott.*
2.添加抽取进程,从数据库日志中抓取有效数据
add ext extra, tranlog, begin now (抽取的类型,文件名,抽取的日志,立即抽取)
extra为进程名,一般为ext开头表示是extract进程,后面可以加1-2位字符标识;tranlog表示要抽取数据库日志;begin now表示从当前时间点开始抽取
3.为extra进程配置本地队列,本地的trail文件以oa开头
add exttrail /u01/ogg/dirdat/oa, ext extra, MEGABYTES 100 (等价于)add exttrail ./dirdat/oa,extract extra,megabytes 100
ps 抽取进程队列:注意此时exttrail指定的是本地队列位置,MEGABYTES默认10M
1.配置日志抽取进程
edit params extra
extract extra 如果是使用了data pump,则抽取日志进程extra参数如下
setenv ( nls_lang = american_america.al32utf8 )
setenv (oracle_sid = orcl)
userid ogg, password ogg
exttrail /u01/ogg/dirdat/oa
dynamicresolution
--GETUPDATEBEFORES
--DDL INCLUDE ALL (DDL复制参数)
--DDLOPTIONS ADDTRANDATA NOCROSSRENAME REPORT (ddl复制参数)
--NOCOMPRESSDELETES
table scott.emp;
table scott.dept;
--table scott.*;
--table scott.a, cols (col1, col3); //只复制该表的col1和col3列
--table acott.b, colsexcept (col4); //复制该表除col4外的所有列相比不使用data pump,其区别就是使用exttrail 代替了rmttrail,也无需再配置rmthost。
ps 保存退出。上述命令,配置的抽取进程组名为extra,taril文件的前缀为oa,GG自动加上6位数字,从000000开始,到999999,之后再循环。table参数表示只处理定义的表,具体到本示例,只处理scott.emp1和scott.dept1,注意:分号的使用
4.启动抽取进程
start ext extra
info ext extra
info ext extra detail
日志在dirdat目录下。操作系统下,查看oa000000文件已产生。
使用view report查看产生的报告
view report extra
2.4 pump推送进程
运行在数据库源端,如果源端使用了本地trail文件,那么Pump进程就会把Trail文件以数据块的形式通过 TCP/IP协议发送到目标端,我们配置都是这种方式。Pump进程本质是Extract进程的一种特殊形式,如果不使用Trail文件,那么 Extract进程在抽取完数据后,直接投递到目标端。与Pump进程相对应的叫Server Collector进程,这个进程不需要引起我们关注,因为在实际操作过程中无需对其进行任何配置,它运行在目标端,任务就是把Extract/Pump进程投递过来的数据块重新组装成Trail文件。
1.配置pump进程文件
edit params datapush
extract datapush
setenv ( nls_lang = american_america.al32utf8 )
passthru --告诉抽取,推送进程不进行任何更改)
rmthost ogg,mgrport 7809 --远端机器的的机器名以及端口号) 推送没有连接数据库的过程,直接连接计算机系统
rmttrail /u01/ogg/dirdat/dp
--dynamicresolution
table scott.*;
table scott.dept;
ps 存盘退出。pump是另一种类的抽取进程,该进程中不能定义SETENV NLS_LANG。passthru表示不在源和目的之间做任何的筛选或字段匹配。源和目的的数据结构完全相同。
2.增加pump进程组:将本地的./dirdat/oa文件传送到目标端
add extract datapush,exttrailsource /u01/ogg/dirdat/oa
3.为pmpa进程配置远程队列,队列的位置是源端的主机目录,传送到目标端后命名以dp开头。
add rmttrail /u01/ogg/dirdat/dp, ext datapush, MEGABYTES 100
4.启动推送进程
start ext datapush
5.使用view report查看产生的报告
view report datapush
3.目标端操作
3.1 创建用户及权限
create tablespace tbs_gguser datafile '/data/app/oracle/oradata/gguser.dbf' size 50M autoextend on;
create user ogg identified by ogg default tablespace tbs_gguser temporary tablespace TEMP quota unlimited on tbs_gguser;
grant alter session to ogg;
grant create session to ogg;
grant connect to ogg;
grant resource to ogg;
grant select any dictionary to ogg;
grant select any table to ogg;
grant flashback any table to ogg;
grant insert any table to ogg;
grant update any table to ogg;
grant delete any table to ogg;
3.2 复制进程
运行在目标端,是数据投递的最后一站,负责读取目标端Trail文件中的内容,并将解析其解析为DML或DDL语句,然后应用到目标数据库中。
配置文件,名字必须为GLOBAL,因为复制端只有一个进程,所以是全局的
1.创建全局检查点表
dblogin userid ogg, password ogg
edit params ./GLOBALS
checkpointtable ogg.ggschkpt
ps 这就在ogg的安装目录下,创建了GLOBALS文件。GLOBALS文件是全局文件,对所有的组都有效
2.连接数据库,建立检查点表
add checkpointtable ggschkpt
3.配置复制文件
edit params rep_f
replicat rep_f
setenv ( nls_lang = american_america.al32utf8 )
setenv (oracle_sid = orcl)
userid ogg,password ogg
assumetargetdefs
handlecollisions 表示自动处理冲突的情况(一般情况不要加)
reperror default,abend
dynamicresolution
discardfile ./dirrpt/repa.dsc,append,megabytes 100 --purge
map scott.dept,target scott.dept1;
map scott.*,target scott.*;
4.增加复制组
add replicat rep_f,exttrail ./dirdat/dp,nodbcheckpoint
--checkpointtable ogg.ggschkpt
--add checkpointtable ogg.ggschkpt
4.初始化数据
源端:
Select current_scn from v$database;
expdp system/123456@orcl1 cluster=no parallel=6 filesize=20G dumpfile=orcl1_db_20190923_%U.dmp logfile=orcl1_db_20190923.log SCHEMAS=scott compression=ALL flashback_scn=2269219
目标端:
impdp system/oracle directory=DATA_PUMP_DIR cluster=no parallel=6 dumpfile=orcl1_db_20190923_%U.dmp logfile=imp_orcl1_db_20190923.log SCHEMAS=scott DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
start rep rep_f,aftercsn 2269219
启动目标端
start replicate rep_f, aftercsn 2269219
4115

被折叠的 条评论
为什么被折叠?



