構建Oracle雙向流複製是一個十分複雜的過程,我寫這個文檔的目的是盡量有條理地列出所需做的工作,協助DBA更有效建設流複製環境。
1.以scott模式為複製樣本,一般只要在建立資料庫時選擇了安裝sample schema,都會存在該scott模式;至少保證源庫中存在該schema,以便可以初始化到目標庫中。
2.在源和目標2個資料庫中建立strmadmin流系統管理使用者,當然你也可以選用其他名字。同時在2個庫中都要建立streams使用的資料表空間,以便讓logmnr使用它:
CREATE TABLESPACE streams_tbs DATAFILE 'XXXXXX' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
/* 10g r2中logmnr預設使用SYSAUX資料表空間 */
exec DBMS_LOGMNR_D.SET_TABLESPACE ('streams_tbs');
/* 建立完資料表空間後,接著要建立strmadmin使用者 */
CREATE USER strmadmin IDENTIFIED BY strmadmin
DEFAULT TABLESPACE streams_tbs
QUOTA UNLIMITED ON streams_tbs;
GRANT DBA TO strmadmin;
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => true);
END;
/
/* 可以通過查詢dba_streams_administrator視圖檢查使用者是否正確授予流系統管理權限 */
SQL> SELECT * FROM dba_streams_administrator;
USERNAME LOC ACC
------------------------------ --- ---
MACLEAN YES YES
STRMADMIN YES YES
3.在2邊資料庫中都需要設定合理的執行個體初始化參數,我們以10g release2為例:
參數名與推薦值:_job_queue_interval = 1
描述:job的隊列的掃描參數,預設為5,即5s掃描一次
出於何種考慮:設定較小的_job_queue_interval有利於propagation作業
如何設定:alter system set "_job_queue_interval"=1 scope=spfile;
/* 注意scope=spfile的參數都需要重啟執行個體方能生效 */
參數名與推薦值:COMPATIBLE>= 10.2.0.0
描述:資料庫版本相容性參數,以前介紹過,不再展開
出於何種考慮:10g release2的部分Streams新特性要求該參數至少為10.2.0.0或更高
如何設定:只有從較低版本升級到10g r2的資料庫需要設定該參數,
alter system set compatible="10.2.0.0" scope=spfile;
參數名與推薦值:GLOBAL_NAMES=true
描述:指定是否要求database link名與資料庫全域名一致,預設為FALSE也就是不需要一致
出於何種考慮:協助我們準確識別database link和資料庫的關係,避免誤操作
如何設定:alter system set global_names=true scope=spfile;
參數名與推薦值:job_queue_processes>4
描述:指定了執行個體中job隊列進程的數量(如J000…J999).
出於何種考慮:該參數控制了執行個體中能夠並行啟動並執行job的最大值,應設一個大於已配置的propagations
數量的值,同時也要考慮到可能還有其他資料庫作業
如何設定:alter system set job_queue_processes=15;
參數名與推薦值:PARALLEL_MAX_SERVERS
描述:指定了執行個體中最大並行進程的數量
出於何種考慮:
在Streams環境中,capture進程和apply進程都會用到多個並行進程。
設定該初始化參數為適當值(10*CPU#)以保證總是有足夠的可用並行進程;
每多一個capture或apply進程,則有必要為該參數+2再加上加入的capture或apply進程的並行度parallelism參數。
如何設定:
alter system set PARALLEL_MAX_SERVERS=40;
參數名與推薦值:REMOTE_ARCHIVE_ENABLE
描述:指定是否將歸檔記錄傳送到遠程目的地
出於何種考慮:只有downstream capture時會用到,不展開
參數名與推薦值:SGA_MAX_SIZE
描述:設定合理的SGA記憶體最大值
出於何種考慮:常見參數,不展開
參數名與推薦值:SGA_TARGET=0
描述:disable掉10g中的Automatic Shared Memory Management.
出於何種考慮:Oracle推薦在stream環境中手動指定streams_pool和shared_pool的大小而不使用10g中的記憶體自動管理特性
如何設定:
alter system set sga_target=0;
參數名與推薦值:調優STREAMS_POOL_SIZE
描述:
為流池指定大小。流池包括了緩衝的隊列訊息。此外,流池也會被用於並行capture和apply的內部通訊。
建議參考V$STREAMS_POOL_ADVICE視圖的資訊判斷最佳大小,避免spill溢出
出於何種考慮:
該參數可以動態修改。若該參數歸零則執行個體中streams相關的進程和作業都將無法運行。流池的大小受到以下因素的影響:
1.capture進程的並行度,每增加一個capture進程有必要為流池增加10MB的大小;
此外當capture參數PARALLELISM大於1時,有必要為流池增加10Mb*parallelism的大小;
舉例來說,若某capture進程的並行度parallelism設定為3,則需要為Streams池增加30Mb。
2.apply進程的並行度,每增加一個apply進程有必要為streams pool增加1MB;
此外當apply進程的並行度大於1時,為streams pool增加1Mb*parallelism的大小;
舉例來說某apply進程的parallelism被設定為5,則需要為streams池增加5Mb。
3.Logical Change Records(LCRS)被儲存在buffered queues緩衝隊列中;
適當增加Streams pool大小以適應源庫和目標庫上資料複製的資料量;
Oracle建議在低負載的資料庫上最小設定Streams pool為256Mb,而在活躍度高的OLTP環境中設定為500Mb;
通過V$STREAMS_POOL_ADVISE視圖給出的建議進一步調整Streams Pool的大小
到一個合理值以避免過多的緩衝隊列溢出到磁碟上。