Oracle Dataguard之物理standby的基本配置


盡管網上有很多Oracle Dataguard的配置教程,但不難發現,很多采用的是rman duplicate這種方法,盡管此種方法較為簡便。但在某種程度上,卻也誤導了初學者,雖說也能配置成功,但只知其然不知其所以然,Dataguard的本質沒有吃透,也不利於其維護和調優。

本配置文檔基於Oracle官方文檔,目的在於加深大家對於Dataguard的了解。

本配置的結果是最大性能模式下的異步傳輸 ,因此在參數文件中,只涉及基本的主備參數,沒有考慮switchover和最大性能模式下的real time apply。在監聽的配置中,也沒有考慮Data Guard Broker的應用情況

配置環境:

主庫:                                                                         備庫:

      操作系統版本:           Oracle Linux 6.3                             Oracle Linux 6.3

      數據庫版本:              Oracle 11.2.0.1.0                           Oracle 11.2.0.1.0

      主機名:                    node1.being.com                           node2.being.com

      IP:                          192.168.1.11                                192.168.1.12

      db_name                   orcl                                              victor

      db_unique_name        orcl                                               orcl

      instance_name           orcl                                              victor

      service_names            orcl                                              victor

注意:1. Dataguard中只需要db_unique_name保持一致即可

        2. 主庫中除了安裝Oracle軟件以外,還需要dbca建庫。而備庫中,只需要安裝Oracle軟件即可,即在./runInstaller安裝過程中,第三步選擇install software only

            即可

        3. 主備庫的ORACLE_BASE=/u01/app/oracle,ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1/db_1

一、配置監聽

     1> 主庫上

          [oracle@node1 ~]$ cd $ORACLE_HOME/network/admin/

          [oracle@node1 admin]$ cat tnsnames.ora  

TO_VICTOR =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.12)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = victor)
    )
  )

       其中to_victor為網絡服務名,在后面配置log_archive_dest_2和fal_server中會用到

    2> 備庫上

         [oracle@node2 ~]$ cd $ORACLE_HOME/network/admin/

         [oracle@node2 admin]$ cat tnsnames.ora         

TO_ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

       注意:該配置只是基於基本的Dataguard配置,沒有考慮Dataguard broker的配置       

二、主庫環境准備  -->> 在node1上操作

     1> 將數據庫設置為歸檔模式

         SQL> archive log list   -->>若Database log mode為No Archive Mode,則表示該數據庫運行在非歸檔模式下。進行以下操作

         SQL> shutdown immediate

         SQL> startup mount

         SQL> alter database archivelog;

         SQL> alter database open;

     2> 將數據庫設置為Force Logging模式

         SQL> select force_logging from v$database;  -->>若為NO,則進行以下操作

         SQL> alter database force logging;

     3> 修改主庫參數文件

          SQL> alter system set log_archive_config='dg_config=(orcl,victor)';  

          -->> 代表該Dataguard是兩個節點,一主一從,若要配置多個節點,則需要在此處添加。

          SQL> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(online_logfiles,primary_role) db_unique_name=orcl'; 

          -->> location代表本地歸檔。在這里我們使用閃回區作為在線日志文件的歸檔目錄,在實際生產環境中,如果歸檔日志是歸檔在本地文件系統上,不建議使用閃回區,因為閃回區和數據庫軟件是在同一個目錄下,如果歸檔日志過多,閃回區空間增長過快,容易造成磁盤空間不足,這樣容易使數據庫掛掉。valid_for代表該歸檔目錄只有在該庫為主庫,歸檔在線日志文件時才有效。

          SQL> alter system set log_archive_dest_2='service=to_victor async valid_for=(online_logfiles,primary_role) db_unique_name=victor';

          -->> service后面接的是網絡服務名

          SQL> alter system set log_archive_dest_state_1='enable';

          SQL> alter system set log_archive_dest_state_2='enable';

          SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;  -->> 設置密碼文件的權限,該設置需重啟數據庫才能生效

          SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;  -->> 設置歸檔日志的格式,該設置需重啟數據庫才能生效

          -->> 最后兩項可不用顯性設定

三、 為備庫創建各種文件 -->> 在node1上操作

      1> 密碼文件

          [oracle@node1 ~]$ cd $ORACLE_HOME/dbs/

          [oracle@node1 dbs]$ orapwd file=orapworcl entries=5 force=y password=oracle

      2> 參數文件

          SQL> create pfile='/home/oracle/orcl.ora' from spfile;

      3> 備份數據庫

           對數據庫做備份有多種辦法,包括冷備、在線熱備、RMAN備份,在這里我們使用RMAN備份

          [oracle@node1 ~]$ mkdir /home/oracle/rman

          [oracle@node1 ~]$ rman target /

          RMAN> backup database format '/home/oracle/rman/full_%U';

      4> 備份控制文件

           SQL> alter system switch logfile;

           SQL> alter database create standby controlfile as '/home/oracle/victor.ctl';

四、將上述四類文件copy到備庫

          [oracle@node1 ~]$ scp $ORACLE_HOME/dbs/orapworcl oracle@192.168.1.12:/u01/app/oracle/product/11.2.0.1/db_1/dbs/orapwvictor                    

          [oracle@node1 ~]$ scp /home/oracle/orcl.ora oracle@192.168.1.12:/home/oracle/victor.ora

          [oracle@node1 ~]$ scp -r /home/oracle/rman/ oracle@192.168.1.12:/home/oracle/rman

          [oracle@node1 ~]$ scp /home/oracle/victor.ctl oracle@192.168.1.12:/home/oracle

五、 創建備庫

      1> 修改參數文件

           [oracle@node2 ~]$ vim victor.ora 

*.audit_file_dest='/u01/app/oracle/admin/victor/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/victor/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
db_unique_name=victor
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(protocol=TCP)'
*.log_archive_config='dg_config=(orcl,victor)'
*.log_archive_dest_1='location=/u01/archivelog valid_for=(standby_logfiles,standby_role) db_unique_name=victor'
*.log_archive_dest_state_1='enable'
*.memory_target=471859200
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_servers=1
*.undo_tablespace='UNDOTBS1'
fal_server=to_orcl
db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/victor/'
log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/victor/’
standby_file_management=auto

    2> 創建參數文件中相應的目錄 

         [oracle@node2 ~]$ mkdir -p /u01/app/oracle/admin/victor/adump

         [oracle@node2 ~]$ mkdir /u01/archivelog

         [oracle@node2 ~]$ mkdir -p /u01/app/oracle/oradata/victor

         [oracle@node2 ~]$ cp /home/oracle/victor.ctl /u01/app/oracle/oradata/victor/control01.ctl

    3> 創建備庫

         [oracle@node2 ~]$ sqlplus / as sysdba

         SQL> create spfile from pfile='/home/oracle/victor.ora';

         SQL> startup mount

         [oracle@node2 ~]$ rman target /

         RMAN> restore database;

         RMAN> alter database open;

         SQL> alter database recover managed standby database disconnect from session;   

六、測試

     1> 在備庫上查詢歸檔日志的序列號

          SQL> select sequence# from v$archived_log;

     2> 在主庫上切換一次日志

          SQL> alter system switch logfile;

     3> 在備庫上查詢歸檔日志的序列號,看是否有增加

          SQL> select sequence# from v$archived_log;

     4> 在備庫上查詢歸檔日志是否被應用

          SQL> select sequence#,applied from v$archived_log;

     當然,也可以用具體案例進行測試,譬如在主庫中新建一張表,對表進行增、刪、改,然后切換日志,看備庫能否應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM