一、环境
两台Oracle VM VirtualBox虚拟机
host:master1、master2
IP:192.168.1.1、192.168.1.2
OS:Linux 2.6.32
DB:Oracle 11.2.0.3,启用归档
OGG:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit 2.2.3
二、安装OGG
在master1、master2两台上执行以下步骤:
1. 解压到OGG安装目录
三、配置OGG支持sequence和DDL
1. 配置支持Oracle sequences,除特别指出的外,均在master1、master2两台上执行以下步骤:
在SQLPLUS里用SYSDBA执行以下命令,建立ogg用户并授权
在SQLPLUS里用SYSDBA执行以下命令,其中ogg是第1步建立的ogg用户,wxy是要复制的schema
在master1上执行
2. 配置DDL支持
在SQLPLUS里用SYSDBA用户执行以下命令,给ogg用户授予utl_file包的执行权限
在SQLPLUS里用SYSDBA执行OGG安装目录下的ddl_setup.sql脚本
在SQLPLUS里用SYSDBA执行OGG安装目录下的role_setup.sql脚本
在SQLPLUS里用SYSDBA执行以下命令,其中wxy是要复制的schema
四、在源和目标库上配置OGG
1. 建立管理参数文件,在OGG安装目录执行ggsci,在GGSCI下执行
2. 配置主抽取进程,在master1的OGG安装目录执行ggsci,在GGSCI下执行
3. 配置数据泵进程,在master1的OGG安装目录执行ggsci,在GGSCI下执行
4. 建立检查点,在master2的OGG安装目录执行ggsci,在GGSCI下执行
5. 配置复制进程,在master2的OGG安装目录执行ggsci,在GGSCI下执行
五、配置Oracle数据库
在master1、master2两台上,在SQLPLUS里用SYSDBA执行以下命令在库级添加补充日志
六、使用To direct bulk load to SQL*Loader方式实例化并开始OGG复制
1. 准备测试的初始化结构和数据,用wxy用户执行下面的SQL语句(这里的wxy用户已经授予了DBA权限)
2. 启动OGG管理进程,在master 1、master 2的OGG安装目录执行ggsci,在GGSCI下执行
3. 添加初始抽取进程,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
4. 添加初始复制进程,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
5. 注册初始抽取进程到数据库,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
6. 在master 1的数据库上配置归档日志删除策略
7. 配置抽取进程,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
8. 配置复制进程,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
9. 启动抽取,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
10. 启动复制,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
七、测试
先查看一下master 1、master 2库里的数据,确认初始化结果
两台Oracle VM VirtualBox虚拟机
host:master1、master2
IP:192.168.1.1、192.168.1.2
OS:Linux 2.6.32
DB:Oracle 11.2.0.3,启用归档
OGG:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit 2.2.3
二、安装OGG
在master1、master2两台上执行以下步骤:
1. 解压到OGG安装目录
cd /home/oracle/ogg
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit
2. 在OGG安装目录执行ggsci,在GGSCI下执行
CREATE SUBDIRS
3. 环境变量LD_LIBRARY_PATH加入OGG的安装目录
LD_LIBRARY_PATH=/home/oracle/ogg:$LD_LIBRARY_PATH export LD_LIBRARY_PATH
三、配置OGG支持sequence和DDL
1. 配置支持Oracle sequences,除特别指出的外,均在master1、master2两台上执行以下步骤:
在SQLPLUS里用SYSDBA执行以下命令,建立ogg用户并授权
CREATE USER ogg IDENTIFIED BY 123456;
GRANT CONNECT,RESOURCE,DBA TO ogg;
在OGG安装目录执行ggsci,在GGSCI下执行
EDIT PARAMS ./GLOBALS
# 输入以下内容后,保存并关闭文件
GGSCHEMA ogg
在SQLPLUS里用SYSDBA执行OGG安装目录下的sequence.sql脚本
@sequence.sql
提示用户信息时输入ogg
在SQLPLUS里用SYSDBA执行以下命令,其中ogg是第1步建立的ogg用户,wxy是要复制的schema
在master1上执行
GRANT EXECUTE on ogg.updateSequence TO wxy;
在master2上执行
GRANT EXECUTE on ogg.replicateSequence TO wxy;
在master1上执行
alter table sys.seq$ add supplemental log data (primary key) columns;
2. 配置DDL支持
在SQLPLUS里用SYSDBA用户执行以下命令,给ogg用户授予utl_file包的执行权限
GRANT EXECUTE ON utl_file TO ogg;
在SQLPLUS里用SYSDBA执行OGG安装目录下的marker_setup.sql脚本
@marker_setup.sql
提示用户信息时输入ogg
在SQLPLUS里用SYSDBA执行OGG安装目录下的ddl_setup.sql脚本
@ddl_setup.sql
提示用户信息时输入ogg
在SQLPLUS里用SYSDBA执行OGG安装目录下的role_setup.sql脚本
提示用户信息时输入ogg@role_setup.sql
在SQLPLUS里用SYSDBA执行以下命令,其中wxy是要复制的schema
GRANT GGS_GGSUSER_ROLE TO wxy;
在SQLPLUS里用SYSDBA执行OGG安装目录下的ddl_enable.sql脚本
@ddl_enable.sql
在SQLPLUS里用SYSDBA执行OGG安装目录下的ddl_pin.sql脚本
@ddl_pin ogg
四、在源和目标库上配置OGG
1. 建立管理参数文件,在OGG安装目录执行ggsci,在GGSCI下执行
EDIT PARAMS MGR
# 输入以下内容后,保存并关闭文件
PORT 7809
DYNAMICPORTLIST 7810-7820, 7830
AUTOSTART ER t*
AUTORESTART ER t*, RETRIES 4, WAITMINUTES 4
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS /home/oracle/ogg/dirdat/tt*, USECHECKPOINTS, MINKEEPHOURS 2
这步在master1、master2两台上执行,两个机器的MGR相同配置
2. 配置主抽取进程,在master1的OGG安装目录执行ggsci,在GGSCI下执行
EDIT PARAMS pri_ext
# 输入以下内容后,保存并关闭文件
EXTRACT pri_ext
USERID ogg, PASSWORD 123456
EXTTRAIL /home/oracle/ogg/dirdat/lt
DDL
SEQUENCE wxy.*;
TABLE wxy.*;
FLUSHCSECS 10
EOFDELAYCSECS 10
3. 配置数据泵进程,在master1的OGG安装目录执行ggsci,在GGSCI下执行
EDIT PARAMS pum_ext
# 输入以下内容后,保存并关闭文件
EXTRACT pum_ext
USERID ogg, PASSWORD 123456
RMTHOST 192.168.1.2, MGRPORT 7809
RMTTRAIL /home/oracle/ogg/dirdat/rt
SEQUENCE wxy.*;
TABLE wxy.*;
FLUSHCSECS 10
EOFDELAYCSECS 10
4. 建立检查点,在master2的OGG安装目录执行ggsci,在GGSCI下执行
DBLOGIN USERID ogg, PASSWORD 123456
ADD CHECKPOINTTABLE ogg.cpt
EDIT PARAMS ./GLOBALS
# 添加以下内容后,保存并关闭文件
CHECKPOINTTABLE ogg.cpt
5. 配置复制进程,在master2的OGG安装目录执行ggsci,在GGSCI下执行
EDIT PARAMS rep
# 输入以下内容后,保存并关闭文件
REPLICAT rep
USERID ogg, PASSWORD 123456
DBOPTIONS SUPPRESSTRIGGERS, DEFERREFCONST
DDL
ASSUMETARGETDEFS
DISCARDFILE /home/oracle/ogg/disc
MAP wxy.*, TARGET wxy.*;
EOFDELAYCSECS 10
五、配置Oracle数据库
在master1、master2两台上,在SQLPLUS里用SYSDBA执行以下命令在库级添加补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM SWITCH LOGFILE;
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
-- 输出应该为YES 或 IMPLICIT
exec dbms_goldengate_auth.grant_admin_privilege('WXY');
六、使用To direct bulk load to SQL*Loader方式实例化并开始OGG复制
1. 准备测试的初始化结构和数据,用wxy用户执行下面的SQL语句(这里的wxy用户已经授予了DBA权限)
-- master 1:
create table t1 (a int primary key);
CREATE SEQUENCE WXY.SEQ1 START WITH 0 MAXVALUE 99999999999 MINVALUE 0 NOCYCLE NOCACHE NOORDER;
insert into t1 select seq1.nextval from dual;
insert into t1 select seq1.nextval from dual;
insert into t1 select seq1.nextval from dual;
insert into t1 select seq1.nextval from dual;
commit;
-- master 2:
create table t1 (a int primary key);
CREATE SEQUENCE WXY.SEQ1 START WITH 0 MAXVALUE 99999999999 MINVALUE 0 NOCYCLE NOCACHE NOORDER;
2. 启动OGG管理进程,在master 1、master 2的OGG安装目录执行ggsci,在GGSCI下执行
START MANAGER
3. 添加初始抽取进程,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
ADD EXTRACT init_ext, SOURCEISTABLE
EDIT PARAMS init_ext
# 输入以下内容后,保存并关闭文件
EXTRACT init_ext
USERID ogg, PASSWORD 123456
RMTHOST 192.168.1.2, MGRPORT 7809
RMTTASK replicat, GROUP init_rep
TABLE wxy.*;
4. 添加初始复制进程,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
ADD REPLICAT init_rep, SPECIALRUN
EDIT PARAMS init_rep
# 输入以下内容后,保存并关闭文件
REPLICAT init_rep
USERID ogg, PASSWORD 123456
BULKLOAD
ASSUMETARGETDEFS
MAP wxy.*, TARGET wxy.*;
5. 注册初始抽取进程到数据库,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
DBLOGIN USERID ogg, PASSWORD 123456
REGISTER EXTRACT init_ext DATABASE
6. 在master 1的数据库上配置归档日志删除策略
rman target /
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY
7. 配置抽取进程,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
# 添加主抽取进程
ADD EXTRACT pri_ext, TRANLOG, BEGIN NOW
# 添加本地trail文件
ADD EXTTRAIL /home/oracle/ogg/dirdat/lt, EXTRACT pri_ext
# 添加数据泵进程
ADD EXTRACT pum_ext, EXTTRAILSOURCE /home/oracle/ogg/dirdat/lt
# 添加远程trail文件
ADD RMTTRAIL /home/oracle/ogg/dirdat/rt, EXTRACT pum_ext
8. 配置复制进程,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
# 添加复制进程
ADD REPLICAT rep, EXTTRAIL /home/oracle/ogg/dirdat/rt
9. 启动抽取,在master 1的OGG安装目录执行ggsci,在GGSCI下执行
START EXTRACT pri_ext
START EXTRACT pum_ext
DBLOGIN USERID ogg, PASSWORD 123456
FLUSH SEQUENCE wxy.seq1
START EXTRACT init_ext
10. 启动复制,在master 2的OGG安装目录执行ggsci,在GGSCI下执行
VIEW REPORT init_ext
EDIT PARAMS rep
# 输入以下内容后,保存并关闭文件
HANDLECOLLISIONS
# 启动复制进程
START REPLICAT rep
INFO REPLICAT rep
# 初始化复制结束后,去掉HANDLECOLLISIONS
SEND REPLICAT rep, NOHANDLECOLLISIONS
EDIT PARAMS rep
# 删除HANDLECOLLISIONS,保存并关闭文件
七、测试
先查看一下master 1、master 2库里的数据,确认初始化结果
-- 启动复制前master 2上没有数据,初始化结束后两个机器上的以下查询结果应该一致
select * from t1;
select * from dba_sequences where sequence_name = 'SEQ2';
-- 进一步测试,在master 1的库里,用wxy用户执行创建用户、创建表,创建序列,查询序列,插入、修改、删除表数据,truncate table、drop table等一系列DML、DDL操作,查询master 2的库,确认复制是否正确。
-- master 1:
create table t2 (a int);
insert into t2 values (1);
commit;
select * from t2;
-- master 2:
select * from t2;
-- master 1:
insert into t2 values (2);
commit;
select * from t2;
-- master 2:
select * from t2;
-- master 1:
delete from t2 where a=1;
commit;
select * from t2;
-- master 2:
select * from t2;
-- master 1:
update t2 set a=10;
commit;
select * from t2;
-- master 2:
select * from t2;
-- master 1:
truncate table t2;
-- master 2:
select * from t2;
-- master 1:
drop table t2 purge;
-- master 2:
select * from t2;
-- master 1:
create user u1 identified by 123456;
grant connect to u1;
-- master 2:
conn u1
select * from user_role_privs;
-- master 1:
CREATE SEQUENCE WXY.SEQ2 START WITH 0 MAXVALUE 99999999999 MINVALUE 0 NOCYCLE NOCACHE NOORDER;
select seq2.nextval from dual;
select seq2.nextval from dual;
select seq2.nextval from dual;
select * from dba_sequences where sequence_name = 'SEQ2';
-- master 2:
select * from dba_sequences where sequence_name = 'SEQ2';