??? 假設當前架構為一個primary+二個物理standby,我們轉換其中一個物理standby 成為邏輯standby,專用于查詢服務,另一個物理standby 用于執行備份操作及提供災備。這里我們直接借用之前創建的物理standby,只演示創建過程,我們假設當前primary 數據庫狀態良好,沒有任何不被邏輯standby 支持的對象或類型。
??? SQL> set sqlprompt JSSWEB> --表示primary 數據庫
??? SQL> set sqlprompt JSSPDG> --表示物理standby
??? SQL> set sqlprompt JSSLDG> --表示邏輯standby
??? 此步跳過,如有不明,具體可參考第二部分。
???
JSSLDG>alter database recover managed standby database cancel;
??? 數據庫已更改。
二、設置primary數據庫
??? JSSWEB>execute dbms_logstdby.build;
??? PL/SQL 過程已成功完成。
三、轉換物理standby為邏輯standby
??? 執行下列語句,轉換物理standby 為邏輯standby:
??? JSSLDG>show parameter db_name;
??? NAME???????????????? TYPE??????? VALUE
??? -------------------- ----------- --------------------
??? db_name????????????? string????? jssweb
?
??? JSSLDG>alter database recover to logical standby jssldg;
???
數據庫已更改。
?
??? JSSLDG>shutdown immediate
??? ORA-01507:
未裝載數據庫
??? ORACLE
例程已經關閉。
?
??? JSSLDG>startup mount;
??? ORACLE
例程已經啟動。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1289484 bytes
??? Variable Size 79692532 bytes
??? Database Buffers 79691776 bytes
??? Redo Buffers 7098368 bytes
???
數據庫裝載完畢。
?
??? JSSLDG>show parameter db_name;
??? NAME???????????????? TYPE??????? VALUE
??? -------------------- ----------- --------------------
??? db_name????????????? string????? JSSLDG
?
??? JSSLDG>select database_role from v$database;
??? DATABASE_ROLE
??? ----------------
??? LOGICAL STANDBY
四、重建邏輯standby的密碼文件
??? E:\ora10g>orapwd file=e:\ora10g\product\10.2.0\db_1\database\PWDjssldg.ora password=verysafe entries=30
??? 注意保持sys 密碼與primary 數據庫一致。五、調整邏輯standby初始化參數
??? JSSLDG>alter system set log_archive_dest_1='location=E:\ora
???
系統已更改。
?
??? JSSLDG>alter system set log_archive_dest_2='location=E:\ora
???
系統已更改。
??? JSSLDG>alter database add standby logfile group 4 ('E:\ora
???
數據庫已更改。
?
??? JSSLDG>alter database add standby logfile group 5 ('E:\ora
???
數據庫已更改。
?
??? JSSLDG>alter database add standby logfile group 6 ('E:\ora
???
數據庫已更改。
?
??? JSSLDG>select member from v$logfile;
??? MEMBER
??? ----------------------------------------------------------
??? E:\ORA
??? E:\ORA
??? E:\ORA
??? E:\ORA
??? E:\ORA
??? E:\ORA
???
已選擇
6
行。
六、打開邏輯standby
??? 由于邏輯standby 與primary 數據庫事務并不一致,因此第一次打開時必須指定resetlogs 選擇,如下:
???
SQL> alter database open resetlogs;
??? 數據庫已更改。
??? SQL> alter database start logical standby apply immediate;
??? 數據庫已更改。
??? JSSWEB> select * from jss.b;
??? ID
??? ----------
??? 1
??? 2
??? 3
???
已選擇
3
行。
?
??? JSSWEB> insert into jss.b values (4);
???
已創建
1
行。
??? JSSWEB> insert into b values (5);
???
已創建
1
行。
??? JSSWEB> insert into b values (6);
???
已創建
1
行。
??? JSSWEB> commit;
???
提交完成。
?
??? JSSWEB> alter system switch logfile;
???
系統已更改。
??? JSSPDG>alter database recover managed standby database cancel;
???
數據庫已更改。
?
??? JSSPDG>alter database open read only;
???
數據庫已更改。
?
??? JSSPDG>select * from jss.b;
??? ID
??? ----------
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
???
已選擇
6
行。
??? JSSLDG>select * from jss.b;
??? ID
??? ----------
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 已選擇6 行。
??? 提示:細心觀察,發現邏輯standby 有一點很好,從primary 接收到的redo 文件,應用過之后會自動刪除,節省磁盤空間。
??? 對于相機拍照而言,有種傻瓜相機功能強大而操作簡便,而對于素描,即使是最簡單的畫法,也需要相當?多的練習才能掌握。這個細節是不是也說明邏輯standby 相比物理standby 需要操作者擁有更多的操作技能呢?