ogg实现方式
①源端日志抽取进程抽取日志
②源端推送进程pump
③目的端复制文件到目标库
一、配置
平台 linux x86_64
oracle 11.2.0.4
二、配置OGG
1、配置网络互通
2、安装ogg
①创建目录/u01/app/ogg
②解压缩软件
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/app/ogg
3、修改环境变量:
vi .bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
否则,运行ggsci时报如下错误:
./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory
4、创建子目录:
oracle:
cd /u01/app/ogg
./ggsci
GGSCI>create subdirs
5、创建用户ogg并授权,收回unlimited tablespace权限
create user ogg identified by ogg;
grant resource,connect to ogg;
grant select any dictionary to ogg;
(grant all on scott.emp1 to ogg; //在scott创建了表之后赋予权限
grant all on scott.dept1 to ogg;)
revoke unlimited tablespace from ogg;
alter user ogg quota unlimited on users; //让用户ogg在users表空间上有权限
6、scott用户创建emp1和dept1表,加上约束(目标库上只要结构,没有数据)
源端:
create table emp1 as select * from emp;
create table dept1 as select * from dept;
alter table emp1 add constraints empno_pk primary key(empno);
alter table dept1 add constraints deptno_pk primary key(deptno);
alter table emp1 add constraints deptno_fk foreign key(deptno) references dept1(deptno);
目标端:
create table emp1 as select * from emp where 1=2;
create table dept1 as select * from dept where 1=2;
alter table emp1 add constraints empno_pk primary key(empno);
alter table dept1 add constraints deptno_pk primary key(deptno);
alter table emp1 add constraints deptno_fk foreign key(deptno) references dept1(deptno);
7、启用补充日志并切换日志
alter database add supplemental log data;
alter system switch logfile;(alter system archive log current)
8、源库启用强制日志,若单向复制,目的库可不启用强制日志。
使用gg的add trandata启用表的补充日志。这种情况是强制记录了表的主键日志:
GGSCI(source)>dblogin userid ogg password ogg
GGSCI(source)>add trandata scott.emp1
GGSCI(source)>add trandata scott.dept1
上述过程,也可以使用sql命令完成:
SQL>alter table scott.emp1 add supplemental log group ggs_emp1_12345(empno) always;
查看可通过dba_log_groups视图。
但使用sql命令的方式,gg配置中缺失: GGSCI>info trandata scott.*
9、配置manager进程(源端和目标端都要做)
ggsci
edit params mgr
port 7809
PURGEOLDEXTRACTS /u01/ogg/dirdat,USECHECKPOINTS //该行表明,使用检查点为检查手段,删除不再使用的trail文件。
启动管理进程:
start mgr
使用info命令查看管理进程的启动状态:
info mgr (detail) //detail是查看详细信息
使用view report查看管理进程报告:
view report mgr
********************************配置源端日志抽取进程********************************
10、源端配置日志抽取进程:
①配置日志抽取配置文件:
edit params eora_1
extract eora_1
userid ogg,password ogg
exttrail /u01/app/ogg/dirdat/aa (本地trail文件,aa是前缀,只能是2个字符)
table scott.dept1;
table scott.emp1;
保存退出。上述命令,配置的抽取进程组名为eora_1,taril文件的前缀为aa,GG自动加上6位数字,从000000开始,到
999999,之后再循环。table参数表示只处理定义的表,具体到本示例,只处理scott.emp1和scott.dept1,注意:分号
的使用
②增加抽取的进程组
add extract eora_1,tranlog,begin now
③定义本地trail文件
add exttrail ./dirdat/aa,extract eora_1,megabytes 10 //exttrail文件缺省大小就是10M
④启动抽取进程:
start extract eora_1
⑤使用info命令查看抽取进程是否工作正常,可以加detail参数查看详细信息:
info extract eora_1 (detail) //extract写不写都可以,名字唯一就可以不写extract
日志在dirrpt目录下
操作系统下,查看aa000000文件已产生。
cd /u01/app/ogg/dirdat
ls -l
⑥使用view report查看产生的报告:
GGSCI(source)>view report eora_1
-------------------------------------配置源端推送进程pump-----------------------------
11、配置源端推送进程pump
①源端配置pump配置文件:
GGSCI(source)>edit params pora_1
extract pora_1
passthru
rmthost ogg2,mgrport 7809
rmttrail /u01/app/ogg/dirdat/pa
table scott.dept1;
table scott.emp1;
存盘退出。pump是另一种类的抽取进程,该进程中不能定义SETENV NLS_LANG。passthru表示不在源和目的之间做任何的筛选或字段匹配。源和目的的数据结构完全相同。
②增加pump进程组:
GGSCI(source)>add extract pora_1,exttrailsource /u01/app/ogg/dirdat/aa
增加远程trail文件
GGSCI(source)>add rmttrail /u01/app/ogg/dirdat/pa,extract pora_1,megabytes 10
③启动传输进程
GGSCI(source)>start extract pora_1
④使用info命令查看传输进程是否工作正常,可以加detail参数查看详细信息:
GGSCI(source)>info extract pora_1[,detail]
其中的status应是RUNNING才对
日志在dirrpt目录下。
操作系统下,查看目的库,pa000000文件已产生。
cd /u01/app/ogg/dirdat
ls -l
⑤使用view report查看产生的报告:
GGSCI(source)>view report pora_1
**************************************配置初始同步装载**************************************
12、配置初始装载数据:
初始装载不需要pump,直接载入目的数据库。注意:初始装载要在日志抽取之后做,目的是为了在装载的过程中,数据的变化也被记录下来。
---------------------------------------配置源端----------------------------------------------
①配置初始装载配置文件:
GGSCI(source)>edit params eini_1
extract eini_1
userid ogg,password ogg
rmthost wangrb,mgrport 7809
rmttask replicat,group rini_1
table scott.dept1; //按顺序写表时看清主外键约束,避免初始不成功
table scott.emp1;
存盘退出。
②增加装载的组:
GGSCI(source)>add extract eini_1,sourceistable
③使用info命令和view report命令查看装载配置,注意:装载尚未启用
info eini_1
view report eini_1
---------------------------------------配置目的端--------------------------------------------------------
④配置初始复制配置文件:
GGSCI(target)>edit params rini_1 // 注意:和源端配置中的指定组名匹配
replicat rini_1 //目的端不是抽取(extract),而是复制(replicat)
assumetargetdefs //使用它时,目的端和源端的数据结构相同
userid ogg,password ogg
discardfile /u01/app/ogg/dirrpt/Riniaa.dsc,purge
map scott.*,target scott.*;
存盘退出。
⑤增加复制的组:
GGSCI(target)>add replicat rini_1,specialrun specialrun表明是初始复制
⑥使用info命令和view report命令查看复制配置,注意:复制尚未启用,事实上,目的端不需要启动
---------------------------------------开始装载-----------------------------------------------------
⑦在源端启动初始装载:
GGSCI(source)>start extract eini_1
⑧使用info及view report查看结果状态。
注意:由于emp1表和dept1表之间存在主外键约束,会报错, 找不到父项关键字。可以修改源端的配置文件,将dept1表放在前,也可以使用sql命令先禁用此约束。事实上ogg也可使约束无效。
⑨到目标端查看emp1表和dept1表,这时可以看到有数据存在
****************************************目的端配置复制**************************************************
13、在目的端增加检查点表:
①配置文件,名字必须为GLOBAL,内容可以只有一行:
GGSCI(target)>edit params /u01/app/ogg/GLOBALS
checkpointtable ogg.ggschkpt
这就在ogg的安装目录下,创建了GLOBALS文件。GLOBALS文件是全局文件,对所有的组都有效
②连接数据库,建立检查点表:
exit(退出去重新登陆)
GGSCI(target)>dblogin userid ogg,password ogg
GGSCI(target)>add checkpointtable
14、启用目的端的复制:
①配置复制配置文件:
GGSCI(target)>edit params rora_1
replicat rora_1
assumetargetdefs
handlecollisions //表示自动处理冲突的情况
userid ogg,password ogg
discardfile /u01/app/ogg/dirrpt/Riniaa.dsc,purge
map scott.dept1,target scott.dept1;
map scott.emp1,target scott.emp1;
存盘退出。
②增加复制组:
GGSCI(target)>add replicat rora_1,exttrail u01/app/ogg/dirdat/pa
③启动复制:
GGSCI(target)>start replicat rora_1
④使用info命令和view report命令检查