Oracle 11g DataGuard物理standby配置1

看到oracle官方文檔說oracle 11g dataguard在物理standby機器上出於open狀態也能夠應用redo,因此就在本地試驗了下,確實如此,這樣既能夠應用redo也能夠進行數據查詢和數據庫的備份.既解決了數據的容災也解決了主數據庫的壓力.

Oracle dataguard 簡介

Dataguard分爲2:
 
  物理standby:  此類型分爲redo應用、read-only模式、read-write模式,當處於redo應用 的時候,不能進行相關的查詢操做,當處於read-only,不能應用redo,可是 oracle 11G版本以後,read-only下能夠應用redo,當處於read-write,  暫停從primary接受redo數據.
 
 邏輯 standby:  此類型能夠在read-write模式下,能夠從primary接受redo數據,而且能夠應 redo.
 
關於2者的區別和特色,你們能夠本身在網上進行搜索,我這裏就不一一說了.
 
2種類型的相關進程:
 
物理standby相關進程
_ Remote file server (RFS)
負責從主數據庫上接收歸檔文件
_ Archiver (ARCn)
將日誌進行歸檔
Managed recovery process (MRP)
將歸檔文件應用到備用機上
 
邏輯standby相關進程
_ Remote file server (RFS)
負責從主數據庫上接收歸檔文件
_ Archiver (ARCn)
將日誌進行歸檔
Logical standby process (LSP)
將歸檔文件應用到備用機上

實驗環境:

   本次試驗使用vmware server 1.6虛擬機,相關的IP規劃以下:
 
   192.168.137.93                primary數據庫
   192.168.137.94                standby數據庫
 
   2個服務器上執行以下操做:
   # vi /etc/hosts
 
 192.168.137.93                node1
   192.168.137.94                node2

軟件環境

   數據庫:  oracle  11G

Dataguard 配置:

primary服務器上執行以下操做
 
SQL> ALTER DATABASE FORCE LOGGING;    //primary數據庫設置
                                        FORCE LOGGING模式
 
SQL> create pfile from spfile;   //建立一個pfile,能夠方便編輯,我這裏把spfile放到另一個路徑,oracle讀取pfile.
 
pfile文件添加以下內容:
 
*.DB_UNIQUE_NAME=uqn_node1              //自定義一個
                                          unique_name名字
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)'  //此處爲主備服務器unique_name
*.LOG_ARCHIVE_DEST_2='SERVICE=node2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node2'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=node2                        //這裏爲net
                                            service name
*.FAL_CLIENT=node1
*.STANDBY_FILE_MANAGEMENT=AUTO
 
假如數據庫處在非歸檔模式下執行下面的sql(此步驟因是否處於歸檔模式而定)
 
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
 
STANDBY數據建立控制文件
 
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oradata/wiliiwin.ctl';
SQL> ALTER DATABASE OPEN;
 
複製primary服務器的文件(數據文件、密碼文件、pfile文件、控制文件)到STANDBY服務器上
 
# cd /home/oracle/dbs
# cp initora10.ora orapwora10 /home/oradata/
# cd /home/
$ scp -r admin/ oradata/ oracle@node2:/home/oradata
 
STANDBY服務器上執行下面的操做
 
$ cd /home/oradata/ora10
$ rm -rf control0*
$ mv ../wiliiwin.ctl control01.ctl
$ cp control01.ctl control02.ctl
$ cp control01.ctl control03.ctl
$ cd /home/oracle/dbs
$ mv /home/oradata/initora10.ora .
$ mv /home/oradata/orapwora10 .
$ vi initora10.ora                        //須要把裏面的內
                                            容稍微修改下
 
  *.DB_UNIQUE_NAME=uqn_node2              //自定義一個
                                            unique_name名字
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)'  //此處爲主備服務器的unique_name
*.LOG_ARCHIVE_DEST_2='SERVICE=node1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node1'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=node1                        //這裏爲net
                                            service name
*.FAL_CLIENT=node2
*.STANDBY_FILE_MANAGEMENT=AUTO
 
$ lsnrctl start                       //primary
                                      STANDBY服務器上都執行
 
在主服務器上啓動數據庫實例
SQL> startup;
$ sqlplus system/oracle@node1    //primarySTANDBY服務器上都進行測試下看時候能正常鏈接
 
STANDBY服務器上啓動數據庫實例
 
//建立4stanby redo 大小最好與主服務器大小相同,而且多一個文件,最好在Primary服務器上也作以下操做,方便以後的角色切換.
 
SQL> startup mount;
SQL> alter database add standby logfile group 4 '/home/oradata/ora10/stdREDO01.LOG' size 50m;  
SQL> alter database add standby logfile group 5 '/home/oradata/ora10/stdREDO02LOG' size 50m;
SQL> alter database add standby logfile group 6 '/home/oradata/ora10/stdREDO03LOG' size 50m;
SQL> alter database add standby logfile group 7 '/home/oradata/ora10/stdREDO04LOG' size 50m;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;     //啓動實時應用

測試dataguard數據是否同步

測試同步是否正常方法1
 
STANDBY服務器:
 
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
 
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
         4 04-MAY-10 04-MAY-10
         5 04-MAY-10 04-MAY-10
 
Primary服務器:
 
SQL> ALTER SYSTEM SWITCH LOGFILE;  //觸發歸檔
 
如今再回到STANDBY服務器上:
 
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
 
 SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
         4 04-MAY-10 04-MAY-10
         5 04-MAY-10 04-MAY-10
         6 04-MAY-10 04-MAY-10
 
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
 
 SEQUENCE# APP
---------- ---
         4 YES
         5 YES
         6 YES
 
發現有一條新的記錄,說明同步是正常的.
 
測試同步是否正常方法2
 
Primary服務器上建立一個表
 
SQL> create table wiliiwin(id integer, name char(10));
SQL> insert into wiliiwin values(1,'wiliiwin');
SQL> insert into wiliiwin values(2,'wiliiwiner');
SQL> insert into wiliiwin values(3,'wiliiwinsi');
SQL> ALTER SYSTEM SWITCH LOGFILE;
 
STANDBY服務器上
 
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;  //取消執行redo
    
   //報錯ORA-16136: Managed Standby Recovery not active
     是因爲MRP0服務沒有啓動,以下是查看各服務狀態sql語句
 
   SQL>select process,status,sequence# from v$managed_standby;
 
   SQL>RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; //啓動MRP0服務
 
 
SQL> ALTER DATABASE OPEN;             //打開數據庫,因爲使用
                                       的oracle 11g 因此現
                                       在也能夠應用redo.
SQL> select * from wiliiwin;
 
        ID NAME
---------- ----------
         1 wiliiwin
         2 wiliiwiner
         3 wiliiwinsi      //能夠看到數據已經同步過來了,
                             於oracle 11G open狀態下也可
                             以執行redo,因此如今在primary
                             相關的操,STANDBY也照樣能夠同
                             步過來
 
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;  //使STANDBY恢復到mount狀態
相關文章
相關標籤/搜索