Multitenant Database 的 Data Guard 建置方式與傳統 Non-CDB 的建置方式無異,在 Oracle 12c 至 19c 的
版本只能於 CDB 層級來建置 Data Guard ,自 Oracle 21c 之後就可以只在 PDB 層級建置 Data Guard 。
在 CDB 層級建立 Data Guard 之後需要探討的問題是,未來在此 CDB 上建立新的 PDB 是否會同步到 standby
端 ? 以下分別說明同步與不會同步的兩種情境 :
PDB 自動同步至 Standby 的情境
有兩個情境在 Primary 建立新 PDB 時會自動同步到 Standby :
1. Create PDB from seed
於 Primary 使用 seed 建立新的 PDB 時,所有的操作會自動同步到 Standby 端,例如在 Primary 建立 pdb3
會自動同步到 Standby :
在 Standby 的 alter log 可以看到新的 PDB3 自動被建立出來 :
如果這個情境下反而不想同步到 Standby 端,那麼在 create pluggable 的語法當中加上 STANDBYS=NONE
就不會同步了。
2. Clone PDB from Read-Only PDB
如果是以 clone 的方式建立 PDB ,則來源端 PDB 必須為 Read-Only 才能夠自動同步到 Standby ,
例如 Create PDB4 from Local PDB3 ,此時 PDB4 會自動同步到 Standby :
在 Standby 的 alter log 可以看到新的 PDB4 自動被建立出來 :
如果是 Clone from Remote PDB 則限制較多,除了要求 Remote PDB 必須為 Read only 之外,
Standby Database 必須為 ADG 且設定參數 standby_pdb_source_file_dblink 才會自動同步,
例如 Create rpdb from Remote Clone :
在這個情境下比較特殊, Standby 實際上是透過 DB Link 直接去 Remote Source PDB 拉 datafile
而非從 Primary 拉,standby_pdb_source_file_dblink 設定的是連線到 Source Database 的 DB Link 名稱
,而且此 DB Link 必須要能夠連線成功,如果設定都沒錯的話 Standby 就會自動同步建立此 PDB :
如果此時 Standby 沒有啟用 ADG ,則會因為無法使用 DB Link 來 restore datafile 造成 MRP crash :
此時必須先將新建的 PDB disable recovery 才能夠重新啟用 MRP :
PDB 不會同步至 Standby 的情境
使用 Clone 的方式建立 PDB 不論是從 Local Clone 或是 Remote Clone ,只要 Source PDB 不是 Read Only 的情況下
,新建的 PDB 就不會自動同步至 Standby ,此時必須手動針對新的 PDB 進行 restore 並且 enable recovery ,
例如 Create wpdb from Read Write pdb :
此時 Standby 端只會建立 Metadata 不會 restore datafile ,也就是此時 Standby 端只有 wpdb 的空殼而已 :
此時必須於 Standby 端進行 restore pluggable database :
Restore 結束後必須再 enable recovery 才能夠同步 :
除此之外,如果在 Primary 針對 PDB 進行 flashback 的操作, Standby 端也會同步針對這個 PDB 進行 flashback ,
例如於 Primary 端針對 PDB2 進行 flashback ,首先必須於 Standby 端確認 Standby 有啟用 flashback 功能 :
從 Primary 針對 PDB2 進行 flashback 的操作 :
在 pdb2 open resetlogs 的同時可以看到 Standby 端同步進行了 flashback 的動作 :
Data Guard 在有 CDB/PDB 的情況下較為複雜, DBA 在日常維運上必須要非常了解這些情境。