和physical建立類似,此處只標明logical standby特殊的地方。
logical standby和physical standby最大的不同在於:它是從redo檔案中抽取sql應用到logical database上,standby資料庫和primary、physica資料庫在系統結構角度上是不同的,他可以即時處於open狀態,可以有自己的次要資料庫模式對象!但由於抽過sql的限制使得logical database 和primary庫有本質的不同:可以認為logical database只是提供基礎的 data 冗餘保護,而不是完整的database應用保護!理解了這一點,也就不難理解建立logical standby資料庫的諸多限制了!
建立logical standby database的限制:
- 許多oracle的資料類型不被支援:bfile、encryped columns、rowid、urowid、xmltype、object、varrays、nested table、user-defined type
- 採用壓縮段儲存結構的表不被支援:segemnt compression
- 需要修改metadata的pls/sql包、過程等等不被支援:如dbms_java、dbms_alert、dbms_redefinition等等......
- 許多的sql語句不被支援:alter database、create database link等等......
- 表資料需要有唯一性:這裡面就涉及下面的具體檢測、解決處理
- 檢測資料類型是否支援:select * from dba_logstdby_unsupported
- 檢測表資料是否唯一性:select * from dba_logstdby_not_unique
- 檢測補充日誌記錄是否開啟:selelct * from v$database,查看sup、sup列
- 開啟supplemental logging 功能:execute dbms_logstdby.build;
- 開啟、關閉 supplemental logging 所有data資料:alter database {add|drop} supplemental log data
- 開啟、關閉 supplemental logging 所有data資料:alter database {add|drop} supplemental log data (all)columns
- 開啟、關閉 supplemental logging 所有唯一性列資料:alter database {add|drop} supplemental log data ({[primary key] [unique] [foreign key] })columns
- 開啟、關閉 supplemental logging for plsql replication:alter database {add|drop} supplemental log data for procedural replication
- 為可以定義unique約束的表 建立指示primary key:alter table user_table_name add primary key (column,,) rely disable
6.在建立logical standby之前必須執行logminer字典資訊的初始化動作:execute dbms_logstdby.build;並且該過程會自動啟用primary database的supplemental logging功能!
7.physical standby 只能單向轉換為 logical standby ,反之不可以!
建立logical stanby 的基本步驟
- 建立physical standby
- 在primary上執行: exec dbms_logstdby.build;
- 在physica standby上執行:alter database recover to logical standby new_dbname; --注意必須是新的資料庫名。注意該操作可能不成功,應觀察standby的alter.log。我就遇到缺失 較早的歸檔日誌 的情況。
- 開啟logical standby database:使用resetlogs的open操作