1. 程式人生 > >ORACLE RAC ASM環境下DATAGUARD搭建步驟

ORACLE RAC ASM環境下DATAGUARD搭建步驟

1、準備工作

Host IP          DB_NAME     DB_UNIQUE_NAME    Net Service Name

主庫xxxxxxxxx    wechatqa      wechatqa        wechatqa , wechatqa1, wechatqa2

備庫xxxxxxxxx    wechatqa      wchtqadg        wchtqadg, wchtqadg1, wchtqadg2

保護模式:預設最大效能模式


     注意DataGuard正常啟動順序:

啟動順序: 先standby ,後primary;

關閉順序: 先primary ,後standby;

資料庫版本:11.2.0.4.0

1.1、[主庫]備份資料庫、引數檔案、控制檔案

備份引數檔案:

SQL>create pfile=’/tmp/pfile’ from spfile;

備份控制檔案:

cp 備份,手工複製, alter database backup controlfile to trace;

備份資料庫:

$ rman target /

RMAN> backup full database format '/backup/backup_%T_%s_%p.bak';

1.2、[主庫]檢查資料庫是否支援Data Guard,是否歸檔模式,Enable force logging

$ sqlplus '/as sysdba'

確認主庫處於歸檔模式     

SQL> archive log list        (先檢查是否歸檔模式,不是則修改)

startup mount

alter database archivelog;

alter database open;

將primary資料庫置為FORCE LOGGING模式

SQL> alter database force logging;  (強制產生日誌)

SQL> select force_logging from v$database;

1.3、[主庫]如果主庫沒有密碼檔案則建立密碼檔案,從而可以OS驗證的方式登陸

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5

若主庫存在密碼檔案,則需要將檔案拷貝到備庫$ORACLE_HOME/dbs

1.4、[主庫]設定主庫初始化引數

$ sqlplus '/as sysdba'

修改主庫引數

alter system set log_archive_config='dg_config=(wechatqa, wchtqadg)' scope=both;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=wechatqa';
alter system set log_archive_dest_2='service=wchtqadg lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=wchtqadg';
alter system set log_archive_dest_state_1=enable scope=both;
alter system set log_archive_dest_state_2=enable scope=both;
alter system set fal_server= 'wchtqadg1','wchtqadg2' scope=both; 
alter system set FAL_CLIENT= wechatqa1 scope=both sid='wchtqadg1';
alter system set FAL_CLIENT= wechatqa2 scope=both sid='wchtqadg2';
alter system set db_file_name_convert='+DATADG/wchtqadg/datafile/','+DATA/wechatqa/datafile/','wchtqadg','wechatqa','+datadg','+data' scope=spfile ;
alter system set log_file_name_convert='+DATADG/wchtqadg/onlinelog/','+DATA/wechatqa/onlinelog/','+DATADG','+DATA' scope=spfile ;
alter system set standby_file_management='AUTO' scope=both;

新增standby日誌

點選(此處)摺疊或開啟

  1. ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo01a.log','+DATA/wechatqa/onlinelog/stdredo01b.log') SIZE 250M;
  2. ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo02a.log','+DATA/wechatqa/onlinelog/stdredo02b.log') SIZE 250M;
  3. ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo03a.log','+DATA/wechatqa/onlinelog/stdredo03b.log') SIZE 250M;
  4. ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo04a.log','+DATA/wechatqa/onlinelog/stdredo04b.log') SIZE 250M;
  5. ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo05a.log','+DATA/wechatqa/onlinelog/stdredo05b.log') SIZE 250M;
  6. ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo06a.log','+DATA/wechatqa/onlinelog/stdredo06b.log') SIZE 250M;
  7. ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo07a.log','+DATA/wechatqa/onlinelog/stdredo07b.log') SIZE 250M;
  8. ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo08a.log','+DATA/wechatqa/onlinelog/stdredo08b.log') SIZE 250M;

然後重啟資料庫:

SQL> shutdown immediate

SQL> startup;

1.5、[主/備庫]上修改配置listener.ora檔案,新增靜態監聽

備庫1:                                                                                                                      

[email protected]:/grid/product/11.2.0.4/network/admin >vi listener.ora                                                             

  1. SID_LIST_LISTENER = 
  2. (SID_LIST = 
  3.     (SID_DESC = 
  4.         (GLOBAL_DBNAME = wchtqadg) 
  5.         (ORACLE_HOME = /oracle/oracle/11.2.0/db_1) 
  6.         (SID_NAME = wchtqadg1) 
  7.     ) 
  8. )

--重啟監聽

lsrnctl reload                                                                                                                            

備庫2                                                                                                                       

[email protected]:/grid/product/11.2.0.4/network/admin >vi listener.ora 

  1. SID_LIST_LISTENER = 
  2. (SID_LIST = 
  3.     (SID_DESC = 
  4.         (GLOBAL_DBNAME = wchtqadg) 
  5.         (ORACLE_HOME = /oracle/oracle/11.2.0/db_1) 
  6.         (SID_NAME = wchtqadg2) 
  7.     ) 
  8. )

--重啟監聽

lsrnctl reload                                                                                                                                 

主庫1:            

cd /oracle/11.2.0/grid/network/admin

vi listener.ora                                                                

  1. SID_LIST_LISTENER = 
  2. (SID_LIST = 
  3.     (SID_DESC = 
  4.         (GLOBAL_DBNAME = wechatqa) 
  5.         (ORACLE_HOME = /oracle/oracle/11.2.0/db_1) 
  6.         (SID_NAME = wechatqa1) 
  7.     ) 
  8. )

主庫2:                                                                                                                     

cd /oracle/11.2.0/grid/network/admin

vi listener.ora                                                                

  1. SID_LIST_LISTENER = 
  2. (SID_LIST = 
  3.     (SID_DESC = 
  4.         (GLOBAL_DBNAME = wechatqa) 
  5.         (ORACLE_HOME = /oracle/oracle/11.2.0/db_1) 
  6.         (SID_NAME = wechatqa2) 
  7.     ) 
  8. )
 

1.6、[主/備庫]上修改配置tnsname.ora檔案

--$ORACLE_HOME/network/admin 修改ORACLE_HOME目錄下的tnasnames.ora

/oracle/oracle/11.2.0/db_1/network/admin/tnsnames.ora

  1. WECHATQA1 =
  2. (DESCRIPTION =
  3.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.105)(PORT = 1521))
  4.     (CONNECT_DATA =
  5.         (SERVER = DEDICATED)
  6.         (SERVICE_NAME = wechatqa)
  7.     )
  8. )
  9. WECHATQA2 =
  10. (DESCRIPTION =
  11.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.106)(PORT = 1521))
  12.     (CONNECT_DATA =
  13.         (SERVER = DEDICATED)
  14.         (SERVICE_NAME = wechatqa)
  15.     )
  16. )
  17. wchtqadg1 =
  18. (DESCRIPTION =
  19.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.80)(PORT = 1521))
  20.     (CONNECT_DATA =
  21.         (SERVER = DEDICATED)
  22.         (SERVICE_NAME = wchtqadg)
  23.     )
  24. )
  25. wchtqadg2 =
  26. (DESCRIPTION =
  27.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.81)(PORT = 1521))
  28.     (CONNECT_DATA =
  29.         (SERVER = DEDICATED)
  30.         (SERVICE_NAME = wchtqadg)
  31.     )
  32. )
  33. wchtqadg =
  34. (DESCRIPTION =
  35.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.80)(PORT = 1521))
  36.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.81)(PORT = 1521))
  37.     (CONNECT_DATA =
  38.         (SERVER = DEDICATED)
  39.         (SERVICE_NAME = wchtqadg)
  40.     )
  41. )
  42. WECHATQA =
  43. (DESCRIPTION =
  44.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.105)(PORT = 1521))
  45.     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.106)(PORT = 1521))
  46.     (CONNECT_DATA =
  47.         (SERVER = DEDICATED)
  48.         (SERVICE_NAME = wechatqa)
  49.     )
  50. )

主備庫雙節點測試服務名連通性:
      tnsping <tnsname>

1.7、[備庫]檢查備庫oracle使用者profile

儘量與主庫oracle使用者profile一致

vi .bash_profile

export ORACLE_BASE=/oracle/oracle

export ORACLE_HOME=/oracle/oracle/11.2.0/db_1

export ORACLE_SID=wchtqadg1

1.8、[備庫]建立11g資料庫基本目錄

# su - oracle

mkdir -p $ORACLE_BASE/admin/wchtqadg/adump

mkdir -p $ORACLE_BASE/admin/wchtqadg/dpdump

mkdir -p $ORACLE_BASE/admin/wchtqadg/pfile

建立ASM中controlfile, datafile, archivelog路徑

1.9、[備庫]拷貝主庫口令檔案並改名

        --配置oratab

    $ echo 'wchtqadg1: /oracle/oracle/11.2.0/db_1:N ' >> /etc/oratab  

        --拷貝密碼檔案

        將主庫檔案orapwwechatqa1 拷貝到備庫兩節點$ORACLE_HOME/dbs

    $ mv orapwwechatqa1 orapwwchtqadg1 

        測試遠端登入

    $ sqlplus sys/[email protected] wechatqa as sysdba;

    $ sqlplus sys/[email protected] as sysdba;

2、建立備庫, RMAN duplicate 方式建立standby資料庫

2.1、備庫啟動到nomount狀態

        建立init引數檔案

        $ vi $ORACLE_HOME/dbs/initwchtqadg1.ora

    DB_NAME=wechatqa

    DB_UNIQUE_NAME=wchtqadg

DB_BLOCK_SIZE=8192


啟動資料庫到nomount狀態
$ sqlplus /nolog
SQL> conn / as sysdba 
SQL> startup nomount pfile=’ initwchtqadg1.ora’;

2.2、RMAN同時連線主庫與備庫

備庫一節點進入RMAN

rman target sys/[email protected] auxiliary sys/[email protected]

2.3、開始duplicate standby資料庫

點選(此處)摺疊或開啟

  1. run {
  2. allocate channel c1 type disk;
  3. allocate channel c2 type disk;
  4. allocate auxiliary channel stby type disk;
  5. duplicate target database for standby from active database
  6. spfile
  7. parameter_value_convert 'wechatqa','wchtqadg','WECHATQA','WCHTQADG','+DATA','+DATADG'
  8. set db_unique_name='wchtqadg'
  9. set db_file_name_convert='+DATA/wechatqa/datafile/','+DATADG/wchtqadg/datafile/','wechatqa','wchtqadg','+DATA','+DATADG'
  10. set log_file_name_convert='+DATA/wechatqa/onlinelog/','+DATADG/wchtqadg/onlinelog/','+DATA','+DATADG'
  11. set control_files='+DATADG/wchtqadg/controlfile/control01.ctl','+DATADG/wchtqadg/controlfile/control02.ctl'
  12. set log_archive_max_processes='20'
  13. set fal_client='wchtqadg'
  14. set fal_server='wechatqa1','wechatqa2'
  15. set remote_listener='gclx0006-scan.intranet.local:1521'
  16. set standby_file_management='AUTO'
  17. reset local_listener
  18. set instance_number='1'
  19. set log_archive_config='dg_config=(wechatqa,wchtqadg)'
  20. set log_archive_dest_2='service=wechatqa LGWR ASYNC NOAFFIRM valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=wechatqa'
  21. set log_archive_dest_1='location=+DATADG valid_for=(all_logfiles,all_roles) db_unique_name=wchtqadg' 
  22. set db_create_file_dest='+DATADG'
  23. ;
  24. release channel c1;
  25. release channel c2;
  26. release channel stby;
  27. }
  28. RMAN> quit

恢復管理器完成。

2.4、檢視備庫狀態

說明:duplicate資料庫之後,備庫只是處於mount狀態,檢視備庫狀態。

$ sqlplus / as sysdba

# 檢視備庫狀態

SQL>select open_mode,database_role,db_unique_name from v$database;

OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED              PHYSICAL STANDBY     wchtqadg

2.5、將備庫切換至READ ONLY WITH APPLY、實時應用模式

SQL> alter database open read only;

Database altered.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

Database altered.

檢查當前備庫上的日誌應用情況

SQL>select name,thread#,sequence#,applied,archived,deleted from v$archived_log

NAME           THREAD#  SEQUENCE# APPLIED   ARC DEL

---------------------------------------------------- ---------- --------- --- ---

/ora_arch1/arch/2_60_795973725.dbf                 2         60 YES       YES NO

/ora_arch1/arch/1_66_795973725.dbf                 1         66 YES       YES NO

/ora_arch1/arch/1_67_795973725.dbf                 1         67 YES       YES NO

/ora_arch1/arch/2_61_795973725.dbf                 2         61 YES       YES NO

/ora_arch1/arch/2_62_795973725.dbf                 2         62 YES       YES NO

/ora_arch1/arch/2_63_795973725.dbf                 2         63 YES       YES NO

/ora_arch1/arch/1_69_795973725.dbf                 1         69 YES       YES NO

/ora_arch1/arch/1_68_795973725.dbf                 1         68 YES       YES NO

/ora_arch1/arch/1_70_795973725.dbf                 1         70 IN-MEMORY YES NO