【OGG】GoldenGate For Oracle實施文檔 --超詳細總結版____Oracle

來源:互聯網
上載者:User

Oracle to Oracle版本的

平時給客戶生產環境部署參考的文檔,總結的比較詳細,主要是詳細的說明了資料初始化的過程,參數各個環境不同,所以只是寫了比較簡單的,根據實際條件添加吧。

1. 前期準備 1.1. 系統層面

windows需要安裝c\c++ 2005運行庫 1.2. 資料庫層面

運行full-DB_CheckOracle.sql 查看結果,檢查是否有不支援的對象 2. 源端資料庫配置 2.1. 開啟歸檔模式

檢查源端資料庫是否為歸檔模式

SQL>archive log list;

若為非歸檔模式,在資料庫mount狀態下將其改為歸檔模式

SQL> alter database archivelog;

確認歸檔已經開啟

SQL>archive log list; 2.2. 開啟庫層級最小附加日誌

檢查源端資料庫附加日誌是否開啟

SQL>select supplemental_log_data_min from v$database;

開啟資料庫附件日誌

SQL>alter database add supplemental log data;

切換日誌以使附加日誌生效

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

SQL>alter system switch logfile;

確認最小附加日誌已經開啟

select supplemental_log_data_min from v$database; 2.3. 建立GoldenGate專有使用者

建立goldengate資料表空間:

SQL>create tablespace goldengate datafile '/oracle/oracle/oradata/ora11/goldengate.dbf' size 100m;

註:不開啟DDL的話源端goldengate不會在資料庫中建立任何錶,儲存任何資料,所以這個資料表空間給較少空間即可

建立goldengate使用者並授權:

SQL>create user goldengate identified by goldengate default tablespace goldengate;

給使用者授權:

如果客戶對於許可權管理不嚴格,直接賦予DBA許可權即可:

SQL>grant dba to goldengate;

如果管理嚴格請參考各版本OGG文檔進行授權

註:如開啟DDL必須需要DBA許可權 3. 源端部署GoldenGate 3.1. 下載並將GoldenGate上傳到伺服器

Linux\Unix傳到Oracle使用者即可,windows傳到Oracle的安裝使用者下 3.2. 配置環境變數

主要配置以下三個變數:

ORACLE_SID         ORACLE_HOME       LD_LIBRARY_PATH(LINUX環境)

其中D_LIBRARY_PATH寫ogg的安裝目錄

export LD_LIBRARY_PATH=/ggs/11.0:$LD_LIBRARY_PATH 3.3. 配置啟動mgr

windows環境需要加入到服務中

.\install addservice

 

 

./ggsci

create subdirs

 

配置mgr參數

edit params mgr

port 7809

DYNAMICPORTLIST 7840-7898

autostart er *

autorestart er *, retries 5, waitminutes 3

PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS, MINKEEPDAYS 7

啟動mgr

start mgr

確認mgr啟動成功

info all 3.4. 增加trandata

ggsci登入到資料庫

dblogin userid goldengate,password goldengate

增加trandata

add TRANDATA ajdbo.passenger

確認trandata添加成功

info trandata ajdbo.passenger

在資料庫中確認已經添加trandata的表

select * from dba_log_groups where owner='xxx' and table_name='xxx'; 3.5. 配置、啟動extract進程

增加extract進程

add extract ext_ynkg, tranlog, begin now

增加exttrail

add exttrail ./dirdat/ld,extract ext_ynkg, MEGABYTES 100

配置extract進程

edit params ext_ynkg

 

EXTRACT ext_ynkg

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID goldengate, PASSWORD goldengate  

TRANLOGOPTIONS EXCLUDEUSER goldengate

EXTTRAIL ./dirdat/ld

--GETTRUNCATES

--GETUPDATEBEFORES

EOFDELAY 3

NUMFILES 5000

DISCARDFILE ./dirrpt/ext_ynkg.dsc, APPEND, MEGABYTES 1000

DYNAMICRESOLUTION

table ajdbo.passenger;

talle ajdbo.channel;

table ajdbo.validate_info;

table ajdbo.bord_info;

啟動extract進程

start ext_ynkg

確認進程啟動成功

info ext_ynkg 3.6. 擷取基準SCN 3.6.1. 方法一

如果客戶環境歸檔保留的比較多,則可採用這種方法:

首先確認系統中最早的transaction的啟動時間

sql> select min(start_time) from gv$transaction;

MIN(START_TIME)

--------------------

02/08/16 19:21:38

之後在指定extract進程的begin時間時,指定一個比這個早的時間,讓extract從這裡開始抽取:

add extract <ext_name> tranlog threads 2 begin 2016-02-08 19:20:00

最後再查詢當前SCN號

select current_scn from v$database;

則該SCN則為基準SCN(SCN3),如使用匯入匯出的方法,這個SCN即為最終確定的SCN時間點,如果使用RMAN則最終RMAN恢複的SCN要大於等於這個SCN。 3.6.2. 方法二

如果客戶環境歸檔保留的比較少,則可採用這種方法

查詢當前SCN號(SCN1)

select current_scn from v$database;

查看當前資料庫系統中最早transaction的scn號(SCN2)

select min(start_scn) from gv$transaction;

多次查詢系統中最早的transaction的啟動時間,一直到這個值大於SCN1。(如果大的transaction一直在運行,可以考慮殺死這個transaction對應的進程,尋找該進程的語句如下:

select p.INST_ID,p.SPID,t.start_scn

from gv$transaction t,gv$process p,gv$session s

where s.taddr=t.addr and p.addr=s.paddr and t.start_scn<=&1;)

重新查詢當前SCN號(SCN3)

select current_scn from v$database;

則該SCN則為基準SCN(SCN3),如使用匯入匯出的方法,這個SCN即為最終確定的SCN時間點,如果使用RMAN則最終RMAN恢複的SCN要大於等於這個SCN。 3.7. 歸檔當前日誌(可選)

這一步僅當使用RMAN做初始化並使用的是之前的全備時需要,是為了拷貝過去的歸檔能恢複到之前確定的SCN。

 

查詢當前日誌號:

select INST_ID,GROUP#,SEQUENCE#,ARCHIVED,STATUS from gv$log;

歸檔當前日誌:

ALTER SYSTEM ARCHIVE LOG CURRENT;

之後確認第一次為current的SEQUENCE已經歸檔

select INST_ID,SEQUENCE#,ARCHIVED from gv$archived_log where SEQUENCE#=&1;

註:RAC環境下兩個節點都要進行確認 3.8. 配置pump進程

增加pump進程

add extract pmp_ynkg, exttrailsource ./dirdat/ld

增加rmttail檔案

add rmttrail ./dirdat/rd,EXTRACT pmp_ynkg,MEGABYTES 100

配置pump進程

edit params pmp_ynkg

 

EXTRACT  pmp_ynkg

USERID goldengate,PASSWORD goldengate

PASSTHRU

RMTHOST 10.1.0.50,MGRPORT 7809

RMTTRAIL ./dirdat/rd

--REPORT AT 01:59

--REPORTROLLOVER AT 02:00

DISCARDFILE ./dirrpt/pmp_ynkg.dsc, APPEND, MEGABYTES 1000

--PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS, MINKEEPDAYS 7

DYNAMICRESOLUTION

table ajdbo.*; 4. 資料初始化 4.1. 匯入匯出方式 4.1.1. 確定兩端字元集

查詢兩端字元集:

select userenv('language') from dual;

如果相同則沒有問題

如果不同

(1)需要使用csscan工具對源端資料進行檢測,查看資料匯入到目標端後是否會出現欄位長度不足,亂碼等情況。csscan使用方法見附錄。

(2)需要在extract進程和replicat進程中設定環境變數NLS_LANG,均和源端資料庫字元集一致即可。具體是否會出現亂碼還需要測試。 4.1.2. 源端匯出目標表

建立directory

create directory oggd as '/home/oracle';

匯出目標表,FLASHBACK_SCN為之前確定的SCN3

expdp XPADB/XPADB DIRECTORY=oggd DUMPFILE=xpadb.`date '+%Y%m%d_%H%M'`.dmp.%U LOGFILE=xpadb.`date '+%Y%m%d_%H%M'`.log parallel=4 FLASHBACK_SCN=xxxxx 4.1.3. 調整目標端job_queue_processes

調整job_queue_processes為0

SQL>show parameter job    (記錄下來,之後還會調整回來)

SQL>alter system set job_queue_processes=0 scope=memory;

再次確認一下修改成功

SQL>show parameter job 4.1.4. 目標端資料庫匯入

impdp XPADRPT/xpadrpt DIRECTORY=oggd DUMPFILE=xpadb.20130620_1525.dmp.%U LOGFILE=impdp.xpadb.20160220_1525.log parallel=4 REMAP_SCHEMA=xpadb:xpadrpt REMAP_TABLESPACE=xpaddat:xpaddata

  4.2. RMAN方式 4.2.1. 備份資料庫

備份資料庫、歸檔、控制檔案:

$rman target /

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

crosscheck backupset;

delete noprompt expired backupset;

backup as backupset full database tag='db_bak' format '/u01/backup/db_%U_%T';

sql 'alter system archive log current';

backup archivelog all tag='arc_bak' format='/u01/backup/arc_%U_%T' filesperset 6;

backup current controlfile tag='ctl_bak' format='/u01/backup/ctl_file_%U_%T';

release channel c1;

release channel c2;

release channel c3;

release channel c4;

} 4.2.2. 確定最終SCN

在源端剛備份完的資料庫執行:

SQL>select GROUP# ,THREAD#,SEQUENCE#,ARCHIVED,STATUS,FIRST_CHANGE# from gv$log;

 

    GROUP#    THREAD#  SEQUENCE# ARC STATUS           FIRST_CHANGE#

---------- ---------- ---------- --- ---------------- -------------

         1          1        240 YES INACTIVE               1697423

         3          1        241 NO  CURRENT                1718793

         2          1        239 YES INACTIVE               1690905

 

擷取不活動的已歸檔日誌的最後一個SCN號,如果有多個已歸檔的INACTIVE的組,取最大的FIRST_CHANGE#,這裡取1697423,該SCN號(SCN4)即為最終rman恢複和啟動replicat的scn號。(這個SCN4一定要比基準SCN(SCN3)大)

註:如果是RAC環境要確保這個SCN號對應的日誌兩邊都已經歸檔。 4.2.3. 拷貝備份、PFILE、密碼檔案到目標端 4.2.4. 目標端執行恢複

啟動資料庫到nomount狀態

sqlplus '/ as sysdba'

SQL>startup nomount

啟動RMAN恢複控制檔案

rman target /

RMAN>restore controlfile from '/u01/backup/ctl_file_757366280381.dbf';

將資料庫更改為mount狀態

sqlplus '/ as sysdba'

SQL>alter database mount;

啟動RMAN恢複資料庫

rman target /

RMAN>restore database;

RMAN>

run

{

   set archivelog destination to '/u01/arch';

   SET UNTIL SCN 218412;     –前邊確定的scn號 SCN4

   RECOVER DATABASE;

} 4.2.5. 調整目標端job_queue_processes

調整job_queue_processes為0

SQL>show parameter job    (記錄下來,之後還會調整回來)

SQL>alter system set job_queue_processes=0 scope=memory;

再次確認一下修改成功

SQL>show parameter job

  4.2.6. 目標端開啟資料庫

開庫

SQL>alter database open resetlogs; 5. 目標端資料庫配置 5.1. 禁用所有job 5.1.1. dbms_job

禁用job

declare

v_sql number;

CURSOR c_job IS SELECT job from

dba_jobs where schema_user in

('JP');

BEGIN

OPEN c_job;

LOOP

FETCH c_job INTO v_sql;

EXIT WHEN c_job%NOTFOUND;

dbms_ijob.broken(v_sql,true);

end loop;

close c_job;

commit;

end;

/

驗證job確實被禁用

select job,LOG_USER,PRIV_USER,SCHEMA_USER,broken from dba_jobs where schema_user in ('JP'); 5.1.2. schedule job

禁用job

declare

v_sql varchar2(200);

CURSOR c_job IS SELECT OWNER||'.'||JOB_NAME from

DBA_SCHEDULER_JOBS where OWNER in

('JP');

BEGIN

OPEN c_job;

LOOP

FETCH c_job INTO v_sql;

EXIT WHEN c_job%NOTFOUND;

dbms_scheduler.disable(NAME =>v_sql);

end loop;

close c_job;

commit;

end;

/

驗證job確實被禁用

SELECT OWNER,JOB_NAME,STATE FROM DBA_SCHEDULER_JOBS WHERE OWNER IN('JP'); 5.1.3. 調整目標端job_queue_processes

將目標端job_queue_processes值調整回原值 5.2. 禁用所有trigger

關閉trigger

declare

v_sql varchar2(2000);

CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable' from

dba_triggers where owner in

('JP');

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;

/

確認trigger已經全部關閉

select distinct status from dba_triggers where owner in ('JP'); 5.3. 禁用所有外鍵

禁用外鍵

declare

v_sql varchar2(2000);

CURSOR c_con IS SELECT 'alter table '||owner||'.'||table_name||' disable constraint

'||constraint_name from dba_constraints where constraint_type='R' and owner in

('JP');

BEGIN

OPEN c_con;

LOOP

FETCH c_con INTO v_sql;

EXIT WHEN c_con%NOTFOUND;

execute immediate v_sql;

end loop;

close c_con;

end;

/

確認外鍵已經被禁用

select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,STATUS

from dba_CONSTRAINTS

where CONSTRAINT_TYPE='R' and status = 'ENABLED' and owner in ('JP'); 5.4. 確認目標端目標表的主鍵可用

select T1.STATUS,T1.VALIDATED,T2.status,T1.constraint_name,T1.owner

from dba_constraints T1,dba_objects T2  

where T2.OBJECT_NAME=T1.constraint_name AND T1.OWNER IN ('JP');

確認查詢結果:

T1.STATUS為ENABLED

T1.VALIDATED為VALIDATED

T2.status為VALID

如果不是,需要修改為開啟狀態。 6. 目標端部署GoldenGate 6.1. 下載並將GoldenGate上傳到伺服器

Linux\Unix傳到Oracle使用者即可,windows傳到Oracle的安裝使用者下 6.2. 配置環境變數

主要配置以下三個變數:

ORACLE_SID         ORACLE_HOME       LD_LIBRARY_PATH(LINUX環境)

其中D_LIBRARY_PATH寫ogg的安裝目錄

export LD_LIBRARY_PATH=/ggs/11.0:$LD_LIBRARY_PATH 6.3. 配置啟動mgr

windows環境需要加入到服務中

.\install addservice

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.