一步一步學DataGuard(13)邏輯standby之建立示例
假設當前架構為一個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應用,standby redologs是必須的,因此我們在此處也要為該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也是如此,你究竟是想要物理的,還是想要邏輯的呢,這是個問題~~~~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-217027/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 4 Creating a Logical Standby Database 建立邏輯備庫Database
- 邏輯STANDBY建立中碰到ORA-16146: standby destination control file enqueue unavailableENQAI
- 一步一步學ROP之linux_x86篇Linux
- 一步一步學ROP之Android ARM 32位篇Android
- 一步一步學ROP之linux_x64篇Linux
- DataGuard---->物理StandBy的角色切換之switchover
- 一步一步學spring bootSpring Boot
- 一步一步分析vue之observeVue
- 一步一步分析vue之$mount(1)Vue
- 一步一步教你使用Eclipse如何建立Swing專案(一)Eclipse
- DATAGUARD手記(PRIMARY+2STANDBY)(二)
- DATAGUARD手記(PRIMARY+2STANDBY)(一)
- 一步一步來
- 邏輯STANDBY上的ORA-00600: internal error code, arguments: [krvtadc], [], [], [], [], []Error
- 邏輯STANDBY負載高,應用緩慢的解決負載
- Oracle dataguard報錯:Error 1017 received logging on to the standbyOracleError
- 一步一步上手MyBatisPlusMyBatis
- 機器學習之邏輯迴歸機器學習邏輯迴歸
- 元件化第一步,建立私有Pod元件化
- 一步一步手寫GPTGPT
- 一步一步理解命令模式模式
- 如何一步一步配置webpackWeb
- 一步步瞭解執行緒池之按需建立-CachedThreadPool執行緒thread
- standby_file_management為manual造成dataguard延遲
- 一步一步教你寫kubernetes sidecarIDE
- 一步一步搭建腳手架
- 一步一步教你 https 抓包HTTP
- 一步一步分析Redux原始碼?Redux原始碼
- 手挽手帶你學React:四檔(下篇)一步一步學會react-reduxReactRedux
- 從零開始學React:四檔(下篇)一步一步學會react-reduxReactRedux
- Android新增OpenCV支援,一步一步新增。AndroidOpenCV
- 一步一步實現一個PromisePromise
- 一步一步實現手寫PromisePromise
- js原型鏈,一步一步找祖宗JS原型
- 一步步建立ABAP post exit增強
- linux之LVM邏輯卷LinuxLVM
- 邏輯漏洞之支付漏洞
- Golang原始碼學習:排程邏輯(二)main goroutine的建立Golang原始碼AI
- 一步一步學習大資料:Hadoop 生態系統與場景大資料Hadoop