- 最后登录
- 2023-8-16
- 在线时间
- 1686 小时
- 威望
- 2135
- 金钱
- 50532
- 注册时间
- 2011-10-12
- 阅读权限
- 200
- 帖子
- 5207
- 精华
- 39
- 积分
- 2135
- UID
- 2
|
1#
发表于 2013-9-5 21:14:22
|
查看: 7057 |
回复: 5
2. Goldengate容灾系统实施方案
如果goldengate安装在unix或者linux操作系统下,则建议以oracle系统用户进行安装。如果使用其他用户进行安装,则需要确保该用户在dba组中,以确保该用户具备读取redo和归档日志的系统权限;
注:
1) Goldengate软件建议安装在服务器Server的/goldengate路径下,该目录的属主为oracle:dba,权限为775;
2)/goldengate目录一般是建立在共享存储上,这样实际上goldengate的软件和相应的文件如参数文件,队列文件等都是在共享存储上的。这样做的好处是,例如在RAC环境下,如果一台服务区宕机,则可以将/goldengate mount到另外一个正常的rac节点上,启动goldengate各个进程就可以了,不需要做任何其他的动作。
2.1. GG软件的安装
1) 使用Oracle用户(如非此用户,请自行取代,下同)通过ftp上传GGS软件并解压缩:
tar zxvf *.gz
或者分两步解压:
gunzip *.gz 或 gzip –d *.gz
tar xvf *.gz
2) 创建子目录
在数据库服务器上创建文件系统:/goldengate(小写), GoldenGate安装目录统一为:/goldengate(小写)
3) 队列文件存放目录为/goldengate/dirdat
4) 在/goldengate目录下运行GGS命令行控制界面:
./ggsci
5) 在GGS命令行界面下创建子目录:
GGSCI> create subdirs
2.2. 容灾中心GG软件安装
1) 使用Oracle用户(如非此用户,请自行取代,下同)通过ftp上传GGS软件并解压缩:
tar zxvf *.gz
或者分两步解压:
gunzip *.gz 或 gzip –d *.gz
tar xvf *.gz
2) 创建子目录
在数据库服务器上创建文件系统:/goldengate(小写), GoldenGate安装目录统一为:/goldengate(小写)
3) 队列文件存放目录为/goldengate/dirdat
4) 在/goldengate目录下运行GGS命令行控制界面:
./ggsci
5) 在GGS命令行界面下创建子目录:
GGSCI> create subdirs
2.3. 源端配置
2.3.1. 设置数据库为归档模式
数据库是否处于归档模式:
Select log_mode from v$database;
开启归档模式:
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
2.3.2. 开启数据库附加日志
2.3.2.1. 检查附加日志情况
使用以下sql语句检查数据库附加日志的打开状况:
Select
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
2.3.2.2. 打开数据库附加日志
打开附加日志并切换日志(保证Online redo log和Archive log一致)
alter database add supplemental log data ;
alter database add supplemental log data (primary key, unique,foreign key) columns;
alter system switch logfile;
回退操作:如果出现问题,可以通过以下语句进行回退:
alter database drop supplemental log data ;
alter database drop supplemental log data (primary key, unique,foreign key) columns;
2.3.2.3. 确认附加日志情况
使用以下sql语句检查数据库附加日志的打开状况:
Select
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
注:确保最小附加日志,pk,uk,fk附加日志打开。而all columns的附加日志关闭;
如果all columns的附加日志打开的话,则需要使用以下语句予以关闭:
alter database drop supplemental log data (ALL) columns;
2.3.3. 开启数据库强制日志模式
Alter database force logging
注:该模式的打开需要和业务部门进行相关确认和讨论;如果数据库不能打开到force logging的模式下,则no logging的表无法进行同步;
如果需要进行回退,关闭强制日志模式,请使用以下sql:
Alter database no force logging
2.3.4. 创建运行GoldenGate的用户
1) 在源端采用ORACLE用户运行GoldenGate
2) 安装位置:/goldengate
3) 创建GoldenGate数据库用户goldengate
--create tablespace
create tablespace goldengate datafile '/xx/goldengate01.dbf' size 10240M ;
-- Create the user
create user goldengate identified by "XXXXX" default tablespace goldengate;
-- Grant role privileges
grant resource, connect, dba to goldengate;
2.3.5. 关闭数据库的recyclebin (仅实施DDL时进行配置)
查询当前recyclebin的参数值:
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string OFF
SQL>
如不是off,需要关闭recyclebin:
SQL>alter system set recyclebin=off scope=both;
如果需要回退,打开recyclebin的话,可以使用以下语句:
SQL>alter system set recyclebin=off scope=both;
2.3.6. 添加变量(以linux操作系统为例)
export GG_HOME=/goldengate
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
以下为一些不同操作系统,对LIBRARY path 环境变量的不同名称:
IBM AIX LIBPATH
IBM z/OS LIBPATH
HP-UX SHLIB_PATH
Sun Solaris LD_LIBRARY_PATH
HP Tru64 (OSF/1) LD_LIBRARY_PATH
LINUX LD_LIBRARY_PATH
2.3.7. 编辑GLOBALS参数文件
这里直接建立在goldengate用户下:
Ggsci>EDIT PARAMS ./GLOBALS --在该文件中添加以下内容
GGSCHEMA goldengate --指定的进行DDL复制的数据库用户
2.3.11. 停止数据库的所有Session
OGG的DDL对象安装时不能有运行的sessoin存在,请DBA执行停机清理或者杀死所有数据库中的Session。
建议有条件先执行停止业务,并关闭Oracle的Listener。
注:时间大约需要30分钟左右,在这段时间内,需要完成2.3.12与2.3.13两个小节的所有操作步骤。此后的所有步骤,都可以在业务正常运行时进行操作。
2.3.12. 建立OGG的DDL对象
sqlplus "/ as sysdba"
SQL> @marker_setup.sql
Enter GoldenGate schema name:goldengate
SQL> @ddl_setup.sql
Enter GoldenGate schema name:goldengate
SQL> @role_setup.sql
Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:
GRANT GGS_GGSUSER_ROLE TO <loggedUser>
where <loggedUser> is the user assigned to the GoldenGate processes.
注意这里的提示:需要手工将这个GGS_GGSUSER_ROLE指定给extract所使用的数据库用户(即参数文件里面通过userid指定的用户),可以到sqlplus下执行类似的sql:
GRANT GGS_GGSUSER_ROLE TO goldengate;
注:这里的goldengate是extract使用的用户。如果你有多个extract,使用不同的数据库用户,则需要重述以上过程全部赋予GGS_GGSUSER_ROLE权限。
运行以下脚本,使触发器生效
SQL> @ ddl_enable.sql
2.3.13. 安装提升性能工具
本步骤为可选步骤,一般情况下建议运行该步骤。
为了提供OGG的DDL复制的性能,可以将ddl_pin脚本加入到数据库启动的脚本后面,该脚本需要带一个OGG的DDL用户(即安装DDL对象的用户,本例中是goldengate)的参数:
SQL> @ddl_pin <DDL_user>
注:如果因为业务问题,开启DDL以后,对性能的影响比较大的话,需要临时禁用DDL触发器的话,可以运行以下语句:
SQL> @ ddl_disable.sql
2.3.14. 添加抽取/传输进程与队列文件
根据事先规划好的进程个数、进程名称,执行以下命令,添加相应的进程和队列文件:
GGSCI>add ext extxx,tranlog ,begin now
GGSCI>add exttrail ./dirdat/xx,ext extxx,megabytes 200
GGSCI>add ext dpexx,exttrailsource ./dirdat/xx
GGSCI>add rmttrail ./dirdat/xx,ext dpeea,megabytes 200
2.4. 数据初始化
2.4.1. RMAN初始化方案
本方案在初始化过程中,不需要源数据库停机。
步骤如下:
生产端===============================================
1) 源端和目标端安装OGG软件,并启动manager
2) 源端配置OGG的Extract及DataPump
3) 源端启动Extract进程,并且人工记录抽取进程启动的时间点,例如:“2011-05-03 11:20:55” ,将此时间点作为在下一步中查找长事务的一个判断条件;可以在数据库中查询该时间点:”select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual”
4) 长事务处理:在V$TRANSACTION中查找当前正在运行的事务(RAC环境下,查看gv$transaction),并找出相应的长事务。在执行rman备份之前,确保这些长事务已经完成,或者被kill掉(需要得到dba或者相关管理人员的确认)。
Select start_time from gv$transaction where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss')<to_date('2011-05-03 11:20:55', 'yyyy-mm-dd hh24:mi:ss');
注:通过上面的SQL语句查找到比第3歩中记录下的时间点早的事务,需要等到该事务结束,然后执行rman的备份;
5) 使用oracle用户登录,执行rman备份
--备份数据库:
$rman target /
Rman> run {
ALLOCATE CHANNEL ch00 TYPE DISK MAXPIECESIZE 20G;
ALLOCATE CHANNEL ch01 TYPE DISK MAXPIECESIZE 20G;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT EXPIRED BACKUPSET;
sql 'alter system archive log current';
BACKUP AS BACKUPSET SKIP INACCESSIBLE;
TAG hot_db_bk_level0 FORMAT '/bakdir/data/bk_%s_%p_%t';
FULL DATABASE;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}
--备份归档和控制文件:(如果有三个日志文件组,可以按照以下方式进行切换,如果更多,则对应增加切换的次数即可);
run {
ALLOCATE CHANNEL ch00 TYPE DISK MAXPIECESIZE 20G;
ALLOCATE CHANNEL ch01 TYPE DISK MAXPIECESIZE 20G;
sql 'alter system switch logfile';
sql 'alter system switch logfile';
sql 'alter system switch logfile';
sql 'alter system archive log current';
BACKUP ARCHIVELOG ALL FORMAT '/bakdir/data /ARCH_%U';
BACKUP CURRENT CONTROLFILE FORMAT /bakdir/data /bk_controlfile';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}
在源机执行
SQL>set line 200
SQL>select * from Gv$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 23 104857600 1 NO CURRENT 218512 01-DEC-10
2 1 22 104857600 1 YES ACTIVE 218422 01-DEC-10
3 2 17 104857600 1 NO CURRENT 218503 01-DEC-10
4 2 16 104857600 1 YES INACTIVE 218412 01-DEC-10 (*)
获取不活动的已归档日志的最后一个SCN号,如果有多个已归档的INACTIVE的组,取最大的FIRST_CHANGE#,这里取218412
记录该SCN号(在“第10歩”目标端恢复数据库时使用),将备份文件,FTP到目标机
========================================
hpux2:/u01/oracle$ ftp 192.168.1.27
Connected to 192.168.1.27.
220 hpux_dr FTP server (Revision 4.0 Version wuftpd-2.6.1 Wed Jun 18 07:11:14 GMT 2008) ready.
Name (192.168.1.27:oracle): oracle
331 Password required for oracle.
Password:
230 User oracle logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /u01/oracle/rmanbk
250 CWD command successful.
ftp> lcd /u01/oracle/rmanbk
Local directory now /u01/oracle/rmanbk
ftp> bin
200 Type set to I.
ftp> prompt
Interactive mode off.
ftp> mput hp*
容灾端===============================================
6) 使用oracle用户登录目标机执行恢复
在目标机建立相同的目录结构,并正确设置:ORACLE_BASE,ORACLE_HOME,ORACLE_SID环境变量。
拷贝源机init{ORACLE_SID}.ora文件到目标机
cp $ORACLE_HOME/dbs/initorcl.ora 目标机对应目录
生成口令文件或者copy $ORACLE_HOME/dbs/PWD{ORACLE_SID}
7) 启动数据库到nomount状态
sqlplus '/ as sysdba'
SQL>startup nomount
8) 启动RMAN恢复控制文件
rman target /
RMAN>restore controlfile from '/u01/oracle/rmanbk/hpdb_ctlfile_757366280381.dbf';
9) 将数据库更改为mount状态
sqlplus '/ as sysdba'
SQL>alter database mount;
10) 启动RMAN恢复数据库
rman target /
RMAN>restore database;
RMAN>
run
{
set archivelog destination to '/u01/arch';
SET UNTIL SCN 218412; --在第5歩源端记录下的scn号
RECOVER DATABASE;
}
11) 使用以下SQL语句查找目标端数据库的SCN号:(得到该SCN号之后,在2.5.8章节中启动复制进程时,使用该SCN号。)
SQL> SELECT CHECKPOINT_CHANGE#,CHECKPOINT_TIME FROM V$DATAFILE_HEADER;
CHECKPOINT_CHANGE# CHECKPOIN
------------------ ---------
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
注:
a) 如果目标端数据库在“第10歩”操作之后,又额外追加了源数据库rman备份后的归档日志,导致目标端数据库的SCN号大于“第10歩”中SCN号。所以必须以目标端数据库当前的SCN为主,从而避免数据重复。
b) 如果目标端数据库在“第10歩”操作之后,没有额外追加源数据库rman备份后的归档日志,则“第11歩”中得到的SCN号应该与“第10歩”中的SCN号相等;
12) (备选)如果源端为RAC,目标端为单机,需将目标机改为单机模式
删除多余的redolog group
SQL> select THREAD#, STATUS, ENABLED from v$thread;
THREAD# STATUS ENABLED
---------- ------ --------
1 OPEN PUBLIC
2 CLOSED PRIVATE
SQL> select group# from v$log where THREAD#=2;
GROUP#
----------
4
5
6
SQL> alter database disable thread 2;
Database altered.
SQL> alter database drop logfile group 4;
alter database drop logfile group 4
ERROR at line 1:
ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archived
ORA-00312: online log 4 thread 2: '/u01/oracle/oradata/ractest/log/redo04.log'
SQL> alter database clear unarchived logfile group 4;
Database altered.
SQL> alter database drop logfile group 4;
Database altered.
SQL> alter database drop logfile group 5;
Database altered.
SQL> alter database drop logfile group 6;
Database altered.
SQL> select THREAD#, STATUS, ENABLED from v$thread;
THREAD# STATUS ENABLED
---------- ------ --------
1 OPEN PUBLIC
删除多余UNDO表空间
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> select tablespace_name from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME
------------------------------
UNDOTBS1
UNDOTBS2
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
Tablespace dropped.
如果源数据库为Oracle9i,因为RMAN时不备份TEMP表空间,需重新创建TEMP表空间
SQL> create temporary tablespace TEMP tempfile '/u01/temp.dbf' size 500M;
Tablespace created.
SQL> alter database default temporary tablespace TEMP;
Database altered.
13) 目标端打开数据库
alter database open resetlogs;
2.4.2. Oracle EXPDP/IMPDP初始化方案
在数据初始化的过程中,不需要源数据库停机。
1) 源端和目标端安装OGG软件,并启动manager
2) 源端配置OGG的Extract及DataPump
3) 源端启动Extract进程以及DataPump进程,并且人工记录抽取进程启动的时间点,例如:“2011-05-03 11:20:55” ,将此时间点作为在下一步中查找长事务的一个判断条件;
4) 长事务处理:在V$TRANSACTION中查找当前正在运行的事务(RAC环境下,查看gv$transaction),并找出相应的长事务。在执行rman备份之前,确保这些长事务已经完成,或者被kill掉(需要得到dba或者相关管理人员的确认)。
Select start_time from gv$transaction where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss')<to_date('2011-05-03 11:20:55', 'yyyy-mm-dd hh24:mi:ss');
注:通过上面的SQL语句查找到比第3歩中记录下的时间点早的事务,需要等到该事务结束,然后执行rman的备份;
5) 创建directory用于执行数据泵操作
--directory path for store dump file
CREATE OR REPLACE DIRECTORY DATA_PUMP AS 'E:\OGG\data';
grant read ,write on DIRECTORY DATA_PUMP to ggs ;
--users to execute expdp
grant read ,write on DIRECTORY DATA_PUMP to sglaw ;
6) 源端获取数据库当前的SCN
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3079975
7) 源端数据导出
在源端OS系统中执行数据导出,导出用户名、dmp文件名自行修改,导出完成后ftp至目标端datapump目录
expdp sglaw/sglaw directory=DATA_PUMP dumpfile=<dp_sglaw.dmp> flashback_scn=<scn>
--以下操作在目标端执行
8) 创建directory用于执行数据泵操作,同时给ggs以及导入用户赋权
--directory path for store dump file
CREATE OR REPLACE DIRECTORY DATA_PUMP AS '/goldengate/data';
grant read ,write on DIRECTORY DATA_PUMP to ggs ;
grant read ,write on DIRECTORY DATA_PUMP to sglaw;
9) 目标端导入数据
--- 以下操作在OS中执行,具体用户名与导入dmp文件名视具体情况而定
impdp sglaw/sglaw DUMPFILE=DATA_PUMP:DP_SGLAW.DMP
2.5. 目标端配置
2.5.1. 创建运行GoldenGate的用户
1) 在目标端采用goldengate 用户运行GoldenGate
2) 安装位置: /goldengate
3) 创建GoldenGate数据库用户goldengate
create tablespace goldengate datafile '/xx/goldengate01.dbf' size 1000M;
-- Create the user
create user goldengate
identified by "hljorarz"
default tablespace goldengate
temporary tablespace TEMP;
-- Grant/Revoke role privileges
grant dba to goldengate;
2.5.2. 安装GoldenGate
通过ftp上传GoldenGate软件包道安装目录/goldengate,并解压缩
gzip –d *.gz
tar -xvf *.tar
在ggsci环境下创建GoldenGate子目录,
create subdirs
2.5.3. 添加变量
export GG_HOME=/goldengate
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2.5.4. 修改数据库
2.5.4.1. 禁用触发器
declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable' from dba_triggers where owner in ('EMP_HLJ','EPC_HLJ','EPSA_HLJ','FLOW_HLJ','EPM_DE_HLJ','XEPMA_HLJ','EPM_LOADC_HLJ','EPM_HIS_HL','EPM_RPT_HLJ','SYSODM','EPM_CP','EPM_BANK_HLJ','EPM_IC_HLJ','EPM_SEC');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/
2.5.4.2. 禁用外键
declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name from dba_constraints where constraint_type='R' and owner in ('EMP_HLJ','EPC_HLJ','EPSA_HLJ','FLOW_HLJ','EPM_DE_HLJ','XEPMA_HLJ','EPM_LOADC_HLJ','EPM_HIS_HL','EPM_RPT_HLJ','SYSODM','EPM_CP','EPM_BANK_HLJ','EPM_IC_HLJ','EPM_SEC');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/
2.5.4.3. 禁用带有DML操作的JOB
1) 在dba_jobs中,有些job/schedule,会在复制对象中产生DML的操作,必须禁用掉,否则会造成DML语句在目标端的重复执行;
2) 在dba_schedule_jobs中的有些job,会在复制对象中产生DML操作,必须禁用掉,否则会造成DML语句在目标端的重复执行;
注:在目标端恢复的时候,可以在pfile文件中将job_queue_processes设置为0,然后将带有dml的job停掉以后,再修改job_queue_processes参数至正常值,如job_queue_processes=10;
2.5.5. GLOBALS配置
GGSCI> EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE goldengate.ggschkpt
2.5.8. 启动复制进程
Start replicat repxx , aftercsn 218412
注:该scn号是3.4.1小节的第11歩得到的;
3. 附录1—禁用触发器和级联删除的脚本
容灾端去掉trigger及cascade delete/update的脚本:
4. 附录2—开启DDL复制(在实施DML复制之后)
如果系统当前已经完成了Goldengate的DML复制实施(请确保DML实施遵循了本实施规范,打开的是数据库一级的PK,UI,FK,而不是在表一级实行add trandata的操作),并且正在运行,想在此基础上打开DDL复制,则需要按照本节介绍的步骤进行相应的操作。
4.1. 准备工作
1) 明确在配置DML时所创建的golengate的用户名,密码,表空间以及权限等信息;参考本文档的2.3.4小节部分内容。
2) 在配置DDL时,停止目前正在运行的goldengate所有进程,如mgr,extract,datapump,以及目标端的replicat进程
3) 在配置DDL时,生产端的数据库所有的session连接都应该退出(强烈建议);
4.2. 卸载DDL配置(可选)
如果之前曾经安装过ddl,需要重新进行安装,则需要先将ddl的一些组件卸载掉,然后再重新安装:
依次在OGG的根目录执行
1) 切换到Goldengate安装目录下,并且按照顺序以SYS用户依次执行以下脚本:
2) SQLPLUS SYS/ORACLE@ORCL @./ddl_disable.sql
3) SQL>/goldengate/ddl_remove.sql
4) SQL>/goldengate/marker_remove.sql
注:在执行上述脚本的时候,会提示输入安装时所指定的schema名称。
4.3. 配置数据库级别的附加日志
以下脚本用以查询和开启数据库级别的附加日志信息,
conn /as sysdba
SQL>Select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,SUPPLEMENTAL_LOG_DATA_FK from v$database;
SQL>alter database add supplemental log data;
SQL>alter database add supplemental log data (PRIMARY KEY,FOREIGN KEY,UNIQUE) columns;
--附加日志打开以后,正常需要执行一次归档操作,以使附加日志即时生效:
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
--ALL COLUMNS的附加日志不建议开启:
SQL>alter database add supplemental log data (ALL) columns;
--以下为取消数据库级别附加日志的方法:
SQL>alter database drop supplemental log data;
SQL>alter database drop supplemental log data (PRIMARY KEY,FOREIGN KEY,UNIQUE) columns;
SQL>alter database drop supplemental log data (ALL) columns;
注:正常需要切换一次redo,以确保附加日志即时生效
4.4. 删除表级别的附加日志
如果在实施DML操作时,曾经添加过表级别的附加日志信息,如:
--在ggsci的界面中运行:
Ggsci>add trandata scott.table1;
--或者在sql界面中执行以下sql语句:
SQL>alter table scott.t1 add supplemental log data (primary key, unique, foreign key) columns;
都是在表一级打开的附加日志信息。
因为已经开启了数据库级别的附加日志信息,所以对表级别的附加日志配置进行清除,使用以下脚本可以生成批量可执行的sql语句:
Conn / as sysdba
Sql>set line 200
Sql>set head off
Sql>Spool droptrandata.sql
Sql>select 'alter table '||owner|| '.' ||table_name|| ' drop supplemental log group '|| log_group_name||';' from dba_log_groups where dba_log_groups.owner in (’SAPSR3’,’xxx’);
Sql>spool off
--确认脚本保存路径,如/home/oracle
--在sys用户下运行droptrandata.sql脚本,清除表级别的附加日志信息:
Sql>@/home/oracle/droptrandata.sql
4.5. 编辑GLOBALS参数文件
这里直接建立在goldengate用户下:
Ggsci>EDIT PARAMS ./GLOBALS
GGSCHEMA goldengate
4.6. 关闭数据库的recyclebin
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string OFF
--如不是off,需要关闭recyclebin:
SQL>alter system set recyclebin=off scope=both;
4.7. 停止数据库的所有Session
OGG的DDL对象安装时不能有运行的sessoin存在,请DBA执行停机清理或者杀死所有数据库中的Session。
建议有条件先执行停止业务,并关闭Oracle的Listener。
4.8. 建立OGG的DDL对象
sqlplus "/ as sysdba"
SQL> @marker_setup.sql
Enter GoldenGate schema name:goldengate
SQL> @ddl_setup.sql
Enter GoldenGate schema name:goldengate
SQL> @role_setup.sql
Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:
GRANT GGS_GGSUSER_ROLE TO <loggedUser>
where <loggedUser> is the user assigned to the GoldenGate processes.
注意这里的提示:它需要你手工将这个GGS_GGSUSER_ROLE指定给你的extract所使用的数据库用户(即参数文件里面通过userid指定的用户),可以到sqlplus下执行类似的sql:
GRANT GGS_GGSUSER_ROLE TO goldengate;
这里的goldengate是extract使用的用户。如果你有多个extract,使用不同的数据库用户,则需要重述以上过程全部赋予GGS_GGSUSER_ROLE权限。
4.9. 安装提升性能工具
本步骤为可选步骤。
为了提供OGG的DDL复制的性能,可以将ddl_pin脚本加入到数据库启动的脚本后面,该脚本需要带一个OGG的DDL用户(即安装DDL对象的用户,本例中是goldengate)的参数:
SQL> @ddl_pin <DDL_user>
4.10. 配置OGG进程中DDL参数
GoldenGate的data pump进程和replicat的ddl开关默认是打开的,只有主extract是默认关闭的,所以DDL的配置要在extract进程中配置;同时因为replicat进程默认是所有DDL都复制,如果有多个replicat进程,如果在参数中不进行复制范围限制,必然引起DDL的重复复制,所以在replicat进程中也需要进行配置。
Extract中需要添加的配置参数:
DDL &
INCLUDE MAPPED OBJTYPE 'table' &
INCLUDE MAPPED OBJTYPE 'index' &
EXCLUDE OPTYPE COMMENT
DDLOPTIONS NOCROSSRENAME REPORT
Replicat中需要添加的配置参数:
DDL include mapped
DDLOPTIONS report
4.11. MGR的配置(只需配置源端)
另外,在mgr里面加入自动purge ddl中间表的参数:
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
4.12. 删除系统已有的OGG进程和队列,重新添加
GGSCI>delete er *
进入dirdat目录,删除里面的所有队列文件,进入dirrpt目录,删除里面的所有日志文件
GGSCI>add ext extea,tranlog ,begin now
GGSCI>add exttrail ./dirdat/ea,ext extea,megabytes 200
GGSCI>add ext dpeea,exttrailsource ./dirdat/ea
GGSCI>add rmttrail ./dirdat/ea,ext dpeea,megabytes 200
GGSCI>alter repea,extseqno 0,extrba 0
GGSCI>alter repeb,extseqno 0,extrba 0
GGSCI>alter repec,extseqno 0,extrba 0
4.13. 启动OGG DDL捕捉的trigger
在sqlplus里面执行ddl_enable.sql脚本启用ddl捕捉的trigger。
说明:ddl捕捉的trigger与OGG的extract进程是相互独立的,它并不依赖于extract进程存在。即使OGG的extract进程不存在或者没有启动,但是trigger已经启用了,那么捕捉ddl的动作就一直延续下去。如想彻底停止捕捉DDL捕捉,需要禁用ddl的trigger,此时需要执行ddl_disable.sql
1) 启动OGG的ext数据抽取进程,等抽取进程开始工作后,进行系统数据库热备份,具体方法参考数据库热备方案。
2) 在容灾中心的数据库上禁用外键、触发器、级联删除、带有dml操作的JOB,参考本文档的2.5.4部分。
3) 启动OGG所有进程
注意:启动容灾中心的REP进程的时候,使用如下的启动命令
GGSCI>start repea,aftercsn <recover时候指定的SCN>
GGSCI>start repeB,aftercsn <recover时候指定的SCN>
GGSCI>start repeC,aftercsn <recover时候指定的SCN>
GGSCI>start repeD,aftercsn <recover时候指定的SCN>
|
|