Goldengate容災系統實施方案

shilei1發表於2014-05-17
轉載劉相兵
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

where 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以後,對效能的影響比較大的話,需要臨時禁用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') 注:透過上面的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') 注:透過上面的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= flashback_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

where 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

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
GGSCI>start repeB,aftercsn
GGSCI>start repeC,aftercsn
GGSCI>start repeD,aftercsn

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1163218/,如需轉載,請註明出處,否則將追究法律責任。

相關文章