本文作者:
junsansi????
轉(zhuǎn)載網(wǎng)址:
http://www.5ienet.com/index.shtml
?
?
第三部分邏輯standby(2)創(chuàng)建示例? 2008.02.18
??? 假設(shè)當(dāng)前架構(gòu)為一個(gè)primary+二個(gè)物理standby,我們轉(zhuǎn)換其中一個(gè)物理standby 成為邏輯standby,專用于查詢服務(wù),另一個(gè)物理standby 用于執(zhí)行備份操作及提供災(zāi)備。這里我們直接借用之前創(chuàng)建的物理standby,只演示創(chuàng)建過(guò)程,我們假設(shè)當(dāng)前primary 數(shù)據(jù)庫(kù)狀態(tài)良好,沒(méi)有任何不被邏輯standby 支持的對(duì)象或類型。
?
??? 為了方便區(qū)分當(dāng)前操作的數(shù)據(jù)庫(kù),我們?cè)O(shè)置一下操作符:
??? SQL> set sqlprompt JSSWEB> --表示primary 數(shù)據(jù)庫(kù)
??? SQL> set sqlprompt JSSPDG> --表示物理standby
??? SQL> set sqlprompt JSSLDG> --表示邏輯standby
?
?
一、創(chuàng)建物理standby
??? 此步跳過(guò),如有不明,具體可參考第二部分。
?
??? 提示:表忘記暫停該standby 的redo 應(yīng)用
??? JSSLDG>alter database recover managed standby database cancel;
??? 數(shù)據(jù)庫(kù)已更改。
?
二、設(shè)置primary數(shù)據(jù)庫(kù)
?
??? 由于有前期創(chuàng)建物理standby 時(shí)的基礎(chǔ),此處primary 數(shù)據(jù)庫(kù)的初始化參數(shù)可以不做修改,最重要的是不要忘記生成LogMiner 字典信息。
??? JSSWEB>execute dbms_logstdby.build;
??? PL/SQL 過(guò)程已成功完成。
?
三、轉(zhuǎn)換物理standby為邏輯standby
??? 執(zhí)行下列語(yǔ)句,轉(zhuǎn)換物理standby 為邏輯standby:
?
??? JSSLDG>show parameter db_name;
??? NAME???????????????? TYPE??????? VALUE
??? -------------------- ----------- --------------------
??? db_name????????????? string????? jssweb
?
??? JSSLDG>alter database recover to logical standby jssldg;
???
數(shù)據(jù)庫(kù)已更改。
?
??? JSSLDG>shutdown immediate
??? ORA-01507:
未裝載數(shù)據(jù)庫(kù)
??? ORACLE
例程已經(jīng)關(guān)閉。
?
??? JSSLDG>startup mount;
??? ORACLE
例程已經(jīng)啟動(dòng)。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1289484 bytes
??? Variable Size 79692532 bytes
??? Database Buffers 79691776 bytes
??? Redo Buffers 7098368 bytes
???
數(shù)據(jù)庫(kù)裝載完畢。
?
??? 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 數(shù)據(jù)庫(kù)一致。
?
五、調(diào)整邏輯standby初始化參數(shù)
?
??? 注意歸檔文件路徑不要沖突:
??? JSSLDG>alter system set log_archive_dest_1='location=E:\ora10g\oradata\JSSLDG\arc\valid_for=(online_logfiles,all_roles) db_unique_name=JSSLDG';
???
系統(tǒng)已更改。
?
??? JSSLDG>alter system set log_archive_dest_2='location=E:\ora10g\oradata\JSSLDG\std\valid_for=(standby_logfiles,standby_role) db_unique_name=JSSLDG';
???
系統(tǒng)已更改。
?
??? 另外,由于之前我們創(chuàng)建JSSLDG 時(shí)并未創(chuàng)建standby redologs,但對(duì)于邏輯standby 的sql 應(yīng)用,standbyredologs 是必須的,因此我們?cè)诖颂幰惨獮樵搒tandby 創(chuàng)建幾組standby redologs:
??? JSSLDG>alter database add standby logfile group 4 ('E:\ora10g\oradata\JSSLDG\standbyrd01.log') size 20m;
???
數(shù)據(jù)庫(kù)已更改。
?
??? JSSLDG>alter database add standby logfile group 5 ('E:\ora10g\oradata\JSSLDG\standbyrd02.log') size 20m;
???
數(shù)據(jù)庫(kù)已更改。
?
??? JSSLDG>alter database add standby logfile group 6 ('E:\ora10g\oradata\JSSLDG\standbyrd03.log') size 20m;
???
數(shù)據(jù)庫(kù)已更改。
?
??? 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
行。
?
六、打開(kāi)邏輯standby
??? 由于邏輯standby 與primary 數(shù)據(jù)庫(kù)事務(wù)并不一致,因此第一次打開(kāi)時(shí)必須指定resetlogs 選擇,如下:
??? SQL> alter database open resetlogs;
??? 數(shù)據(jù)庫(kù)已更改。
?
??? 然后執(zhí)行下列sql 命令應(yīng)用redo 數(shù)據(jù):
??? SQL> alter database start logical standby apply immediate;
??? 數(shù)據(jù)庫(kù)已更改。
?
?
七、檢查一下
?
??? 首先在primary 數(shù)據(jù)庫(kù)執(zhí)行:
??? JSSWEB> select * from jss.b;
??? ID
??? ----------
??? 1
??? 2
??? 3
???
已選擇
3
行。
?
??? JSSWEB> insert into jss.b values (4);
???
已創(chuàng)建
1
行。
??? JSSWEB> insert into b values (5);
???
已創(chuàng)建
1
行。
??? JSSWEB> insert into b values (6);
???
已創(chuàng)建
1
行。
??? JSSWEB> commit;
???
提交完成。
?
??? JSSWEB> alter system switch logfile;
???
系統(tǒng)已更改。
?
??? 查詢物理standby 的同步情況,由于物理standby 處于mount 狀態(tài),無(wú)法直接查詢,因此我們需要先暫停redo應(yīng)用,然后以read only 模式打開(kāi)數(shù)據(jù)庫(kù)再執(zhí)行查詢:
??? JSSPDG>alter database recover managed standby database cancel;
???
數(shù)據(jù)庫(kù)已更改。
?
??? JSSPDG>alter database open read only;
???
數(shù)據(jù)庫(kù)已更改。
?
??? 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 行。
??? 提示:細(xì)心觀察,發(fā)現(xiàn)邏輯standby 有一點(diǎn)很好,從primary 接收到的redo 文件,應(yīng)用過(guò)之后會(huì)自動(dòng)刪除,節(jié)省磁盤空間。
?
??? Ok,邏輯standby 也創(chuàng)建完成了,我們?cè)倩剡^(guò)頭來(lái)回憶回憶我們最開(kāi)始的假設(shè):
??? 對(duì)于相機(jī)拍照而言,有種傻瓜相機(jī)功能強(qiáng)大而操作簡(jiǎn)便,而對(duì)于素描,即使是最簡(jiǎn)單的畫法,也需要相當(dāng)?多的練習(xí)才能掌握。這個(gè)細(xì)節(jié)是不是也說(shuō)明邏輯standby 相比物理standby 需要操作者擁有更多的操作技能呢?
?
??? 現(xiàn)在看起來(lái),操作呢相比物理standby 是稍稍復(fù)雜了一點(diǎn)點(diǎn),但機(jī)理呢與物理standby 大同小異,功能呢也不見(jiàn)的就比物理standby 強(qiáng)到哪里,主要是前期準(zhǔn)備工作略嫌繁瑣(尤其你的數(shù)據(jù)庫(kù)系統(tǒng)比較宏大時(shí),畢竟有那么多支持和不支持的數(shù)據(jù)類型/操作/語(yǔ)句需要dba 手工處理),這么看來(lái),畫畫的仿佛是要比搞攝影的更講究基本功啊,不過(guò)事物要辯證著看,愛(ài)好攝影的朋友千萬(wàn)莫因此而感\(zhòng)到沮喪,從實(shí)用角度看,搞攝影不知要比畫畫強(qiáng)多少倍啊,效率在那擺著呢,要出片子按下快門就成啦!對(duì)于standby 也是如此,你究竟是想要物理的,還是想要邏輯的呢,這是個(gè)問(wèn)題~~~~~
?
?
?