本文作者:
junsansi????
轉載網址:
http://www.5ienet.com/index.shtml
?
?
第三部分邏輯standby(2)創建示例? 2008.02.18
??? 假設當前架構為一個primary+二個物理standby,我們轉換其中一個物理standby 成為邏輯standby,專用于查詢服務,另一個物理standby 用于執行備份操作及提供災備。這里我們直接借用之前創建的物理standby,只演示創建過程,我們假設當前primary 數據庫狀態良好,沒有任何不被邏輯standby 支持的對象或類型。
?
??? 為了方便區分當前操作的數據庫,我們設置一下操作符:
??? SQL> set sqlprompt JSSWEB> --表示primary 數據庫
??? SQL> set sqlprompt JSSPDG> --表示物理standby
??? SQL> set sqlprompt JSSLDG> --表示邏輯standby
?
?
一、創建物理standby
??? 此步跳過,如有不明,具體可參考第二部分。
?
??? 提示:表忘記暫停該standby 的redo 應用
??? JSSLDG>alter database recover managed standby database cancel;
??? 數據庫已更改。
?
二、設置primary數據庫
?
??? 由于有前期創建物理standby 時的基礎,此處primary 數據庫的初始化參數可以不做修改,最重要的是不要忘記生成LogMiner 字典信息。
??? 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:\ora10g\oradata\JSSLDG\arc\valid_for=(online_logfiles,all_roles) db_unique_name=JSSLDG';
???
系統已更改。
?
??? JSSLDG>alter system set log_archive_dest_2='location=E:\ora10g\oradata\JSSLDG\std\valid_for=(standby_logfiles,standby_role) db_unique_name=JSSLDG';
???
系統已更改。
?
??? 另外,由于之前我們創建JSSLDG 時并未創建standby redologs,但對于邏輯standby 的sql 應用,standbyredologs 是必須的,因此我們在此處也要為該standby 創建幾組standby redologs:
??? JSSLDG>alter database add standby logfile group 4 ('E:\ora10g\oradata\JSSLDG\standbyrd01.log') size 20m;
???
數據庫已更改。
?
??? JSSLDG>alter database add standby logfile group 5 ('E:\ora10g\oradata\JSSLDG\standbyrd02.log') size 20m;
???
數據庫已更改。
?
??? JSSLDG>alter database add standby logfile group 6 ('E:\ora10g\oradata\JSSLDG\standbyrd03.log') size 20m;
???
數據庫已更改。
?
??? JSSLDG>select member from v$logfile;
??? MEMBER
??? ----------------------------------------------------------
??? E:\ORA10G\ORADATA\JSSLDG\REDO01.LOG
??? E:\ORA10G\ORADATA\JSSLDG\REDO02.LOG
??? E:\ORA10G\ORADATA\JSSLDG\REDO03.LOG
??? E:\ORA10G\ORADATA\JSSLDG\STANDBYRD01.LOG
??? E:\ORA10G\ORADATA\JSSLDG\STANDBYRD02.LOG
??? E:\ORA10G\ORADATA\JSSLDG\STANDBYRD03.LOG
???
已選擇
6
行。
?
六、打開邏輯standby
??? 由于邏輯standby 與primary 數據庫事務并不一致,因此第一次打開時必須指定resetlogs 選擇,如下:
??? SQL> alter database open resetlogs;
??? 數據庫已更改。
?
??? 然后執行下列sql 命令應用redo 數據:
??? SQL> alter database start logical standby apply immediate;
??? 數據庫已更改。
?
?
七、檢查一下
?
??? 首先在primary 數據庫執行:
??? 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;
???
系統已更改。
?
??? 查詢物理standby 的同步情況,由于物理standby 處于mount 狀態,無法直接查詢,因此我們需要先暫停redo應用,然后以read only 模式打開數據庫再執行查詢:
??? 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
行。
??? 查詢邏輯standby 的同步情況:
??? JSSLDG>select * from jss.b;
??? ID
??? ----------
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 已選擇6 行。
??? 提示:細心觀察,發現邏輯standby 有一點很好,從primary 接收到的redo 文件,應用過之后會自動刪除,節省磁盤空間。
?
??? Ok,邏輯standby 也創建完成了,我們再回過頭來回憶回憶我們最開始的假設:
??? 對于相機拍照而言,有種傻瓜相機功能強大而操作簡便,而對于素描,即使是最簡單的畫法,也需要相當?多的練習才能掌握。這個細節是不是也說明邏輯standby 相比物理standby 需要操作者擁有更多的操作技能呢?
?
??? 現在看起來,操作呢相比物理standby 是稍稍復雜了一點點,但機理呢與物理standby 大同小異,功能呢也不見的就比物理standby 強到哪里,主要是前期準備工作略嫌繁瑣(尤其你的數據庫系統比較宏大時,畢竟有那么多支持和不支持的數據類型/操作/語句需要dba 手工處理),這么看來,畫畫的仿佛是要比搞攝影的更講究基本功啊,不過事物要辯證著看,愛好攝影的朋友千萬莫因此而感\到沮喪,從實用角度看,搞攝影不知要比畫畫強多少倍啊,效率在那擺著呢,要出片子按下快門就成啦!對于standby 也是如此,你究竟是想要物理的,還是想要邏輯的呢,這是個問題~~~~~
?
?
?