Oracle 11g Active Dataguard

n-lauren發表於2012-11-28

一直以來都沒有正兒八經的記錄oracle 11g dataguard物理備庫的建立步驟,11g的logical standby還沒有去測試,不過個人認為隨著11g adg特性的推出,logical standby其實已經沒有什麼吸引力了!本文介紹了11g active dataguard的詳細配置步驟和資料保護模式的修改!

一:環境介紹
主庫
IP地址:192.168.1.61/24
作業系統版本:rhel5.4 64bit
資料庫版本:11.2.0.3 64bit
資料庫sid名:dg
資料庫名:dg
資料庫db_unique_name:dg1


備庫1 物理備庫 (只安裝oracle資料庫軟體,無需建庫)
IP地址:192.168.1.62/24
作業系統版本:rhel5.4 64bit
資料庫版本:11.2.0.3 64bit
資料庫sid名:dg
資料庫名:dg
資料庫db_unique_name:dg2

二:修改主備庫listener.ora,tnsnames.ora檔案如下,備庫根據自身情況修改

  1. [oracle@dg1 ~]$ cat $TNS_ADMIN/listener.ora
  2. SID_LIST_LISTENER =
  3. (SID_LIST =
  4. (SID_DESC =
  5. (GLOBAL_DBNAME = dg1.yang.com)
  6. (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db1)
  7. (SID_NAME = dg)
  8. )
  9. )
  10. LISTENER =
  11. (DESCRIPTION_LIST =
  12. (DESCRIPTION =
  13. (ADDRESS_LIST =
  14. (ADDRESS = (PROTOCOL = TCP)(HOST = dg1.yang.com)(PORT = 1521))
  15. )
  16. )
  17. )
  18. [oracle@dg1 ~]$ cat $TNS_ADMIN/tnsnames.ora
  19. dg1 =
  20. (DESCRIPTION =
  21. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
  22. (CONNECT_DATA =
  23. (SERVER = DEDICATED)
  24. (SERVICE_NAME = dg1.yang.com)
  25. )
  26. )
  27. dg2 =
  28. (DESCRIPTION =
  29. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.62)(PORT = 1521))
  30. (CONNECT_DATA =
  31. (SERVER = DEDICATED)
  32. (SERVICE_NAME = dg2.yang.com)
  33. )
  34. )
  35. for_db =
  36. (DESCRIPTION =
  37. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
  38. )

三:在主庫上修改dataguard配置相關的各個引數,各引數的具體含義可以參考oracle線上文件

  1. SQL> alter database force logging;
  2. Database altered.
  3. SQL> alter system set db_unique_name='dg1' scope=spfile;
  4. System altered.
  5. SQL> alter system set log_archive_config='DG_CONFIG=(dg1,dg2)';
  6. System altered.
  7. SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog valid_for=
  8. (all_logfiles,primary_role) db_unique_name=dg1' scope=spfile;
  9. System altered.
  10. SQL> alter system set log_archive_dest_2='SERVICE=dg2 lgwr sync valid_for=(online_logfile,primary_role)
  11. db_unique_name=dg2';
  12. System altered.
  13. SQL> alter system set log_archive_dest_3='LOCATION=/u01/app/oracle/standbylog valid_for=
  14. (standby_logfile,standby_role) db_unique_name=dg1' scope=spfile;
  15. System altered.
  16. SQL> alter system set fal_client='dg1';
  17. System altered.
  18. SQL> alter system set fal_server='dg2';
  19. System altered.
  20. SQL> alter system set standby_file_management=auto;
  21. System altered.
  22. SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/dg/standby04.log' size 50M;
  23. Database altered.
  24. SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/dg/standby05.log' size 50M;
  25. Database altered.
  26. SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/dg/standby06.log' size 50M;
  27. Database altered.
  28. SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/dg/standby07.log' size 50M;
  29. Database altered.
  30. SQL> shutdown immediate
  31. Database closed.
  32. Database dismounted.
  33. ORACLE instance shut down.
  34. SQL> startup
  35. ORACLE instance started.
  36. Total System Global Area 417546240 bytes
  37. Fixed Size 2228944 bytes
  38. Variable Size 285216048 bytes
  39. Database Buffers 121634816 bytes
  40. Redo Buffers 8466432 bytes
  41. Database mounted.
  42. Database opened.
  43. SQL> alter system set local_listener='for_db';
  44. System altered.
  45. SQL> create pfile='/home/oracle/initdg.ora' from spfile;
  46. File created.

三:將生成的pfile檔案修改後傳遞到備庫,注意紅色字型部分

[oracle@dg1 ~]$ cat /home/oracle/initdg.ora
dg.__db_cache_size=121634816
dg.__java_pool_size=4194304
dg.__large_pool_size=4194304
dg.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
dg.__pga_aggregate_target=167772160
dg.__sga_target=251658240
dg.__shared_io_pool_size=0
dg.__shared_pool_size=109051904
dg.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/dg/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/dg/control01.ctl','/u01/app/oracle/fast_recovery_area/dg/control02.ct
l'
*.db_block_size=8192
*.db_domain='yang.com'
*.db_name='dg'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.db_unique_name='dg2'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dgXDB)'
*.fal_client='dg2'
*.fal_server='dg1'
*.local_listener='for_db'
*.log_archive_config='DG_CONFIG=(dg1,dg2)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog valid_for=(all_logfiles,primary_role) db_unique_name=dg2'
*.log_archive_dest_2='SERVICE=dg1 lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=dg1'
*.log_archive_dest_3='LOCATION=/u01/app/oracle/standbylog valid_for=(standby_logfile,standby_role)
db_unique_name=dg2'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=419430400
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

[oracle@dg1 ~]$ scp initdg.ora 192.168.1.62:/home/oracle/

四:將備庫啟動到nomount狀態,然後連線主庫進行duplicate操作

  1. [oracle@dg2 ~]$ lsnrctl start
  2. [oracle@dg2 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdg password=123456 entries=5
  3. [oracle@dg2 ~]$ sqlplus /nolog
  4. SQL*Plus: Release 11.2.0.3.0 Production on Sun Apr 22 13:36:53 2012
  5. Copyright (c) 1982, 2011, Oracle. All rights reserved.
  6. SQL> conn /as sysdba
  7. Connected to an idle instance.
  8. SQL> create spfile from pfile='/home/oracle/initdg.ora';
  9. File created.
  10. SQL> startup nomount
  11. ORACLE instance started.
  12. Total System Global Area 417546240 bytes
  13. Fixed Size 2228944 bytes
  14. Variable Size 285216048 bytes
  15. Database Buffers 121634816 bytes
  16. Redo Buffers 8466432 bytes

[oracle@dg2 ~]$ rman target sys/123456@dg1 auxiliary sys/123456@dg2
Recovery Manager: Release 11.2.0.3.0 - Production on Sun Apr 22 13:38:33 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: DG (DBID=1694605607)
connected to auxiliary database: DG (not mounted)

RMAN> duplicate target database for standby nofilenamecheck from active database;

Starting Duplicate Db at 2012-04-22-13:39:25
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=134 device type=DISK

contents of Memory Script.:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/db1/dbs/orapwdg' auxiliary format
'/u01/app/oracle/product/11.2.0/db1/dbs/orapwdg' ;
}
executing Memory Script

Starting backup at 2012-04-22-13:39:26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
Finished backup at 2012-04-22-13:39:28

contents of Memory Script.:
{
backup as copy current controlfile for standby auxiliary format

'/u01/app/oracle/oradata/dg/control01.ctl';
restore clone controlfile to '/u01/app/oracle/fast_recovery_area/dg/control02.ctl' from
'/u01/app/oracle/oradata/dg/control01.ctl';
}
executing Memory Script

Starting backup at 2012-04-22-13:39:29
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/db1/dbs/snapcf_dg.f tag=TAG20120422T133929 RECID=1

STAMP=781277970
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 2012-04-22-13:39:32

Starting restore at 2012-04-22-13:39:32
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 2012-04-22-13:39:34

contents of Memory Script.:
{
sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script.:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/dg/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/dg/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/dg/sysaux01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/dg/undotbs01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/dg/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/dg/system01.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/dg/sysaux01.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/dg/undotbs01.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/dg/users01.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /u01/app/oracle/oradata/dg/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 2012-04-22-13:39:42
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/dg/system01.dbf
output file name=/u01/app/oracle/oradata/dg/system01.dbf tag=TAG20120422T133943
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:06
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/dg/sysaux01.dbf
output file name=/u01/app/oracle/oradata/dg/sysaux01.dbf tag=TAG20120422T133943
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:55
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/dg/undotbs01.dbf
output file name=/u01/app/oracle/oradata/dg/undotbs01.dbf tag=TAG20120422T133943
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/dg/users01.dbf
output file name=/u01/app/oracle/oradata/dg/users01.dbf tag=TAG20120422T133943
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 2012-04-22-13:45:05

sql statement: alter system archive log current

contents of Memory Script.:
{
switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/users01.dbf
Finished Duplicate Db at 2012-04-22-13:45:29

RMAN> exit
Recovery Manager complete.

五:將備庫置於active dataguard模式下

  1. [oracle@dg2 ~]$ sqlplus /nolog
  2. SQL*Plus: Release 11.2.0.3.0 Production on Sun Apr 22 13:47:17 2012
  3. Copyright (c) 1982, 2011, Oracle. All rights reserved.
  4. SQL> conn /as sysdba
  5. Connected.
  6. SQL> select open_mode,database_role,db_unique_name from v$database;
  7. OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
  8. -------------------- ---------------- ------------------------------
  9. MOUNTED PHYSICAL STANDBY dg2
  10. SQL> alter database open;
  11. Database altered.
  12. SQL> alter database recover managed standby database using current logfile disconnect from session;
  13. Database altered.
  14. SQL> select open_mode,database_role,db_unique_name from v$database;
  15. OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
  16. -------------------- ---------------- ------------------------------
  17. READ ONLY WITH APPLY PHYSICAL STANDBY dg2
  18. SQL> select status from v$standby_log;
  19. STATUS
  20. ----------
  21. ACTIVE
  22. UNASSIGNED
  23. UNASSIGNED
  24. UNASSIGNED
  25. SQL> select member from v$logfile;
  26. MEMBER
  27. --------------------------------------------------------------------------------
  28. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_3_7s76qbhq_.log
  29. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_2_7s76q94s_.log
  30. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_1_7s76q5w1_.log
  31. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_4_7s76qdpk_.log
  32. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_5_7s76qhmy_.log
  33. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_6_7s76qlhz_.log
  34. /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_7_7s76qp99_.log
  35. 7 rows selected.

六:修改dataguard的資料保護模式為最高可用性模式,根據oracle文件的解釋,最高可用性資料保護模式需要先滿足以下幾個條件

  1. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  2. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  3. ------------------------------ -------------------- --------------------
  4. dg2 MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
  5. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  6. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  7. ------------------------------ -------------------- --------------------
  8. dg1 MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
  9. SQL> alter database set standby database to maximize availability;
  10. Database altered.
  11. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  12. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  13. ------------------------------ -------------------- --------------------
  14. dg1 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
  15. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  16. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  17. ------------------------------ -------------------- --------------------
  18. dg2 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
  19. 將備庫shutdown後,主庫的PROTECTION_LEVEL將變為RESYNCHRONIZATION
  20. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  21. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  22. ------------------------------ -------------------- --------------------
  23. dg2 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
  24. SQL> alter database recover managed standby database cancel;
  25. Database altered.
  26. SQL> shutdown immediate
  27. Database closed.
  28. Database dismounted.
  29. ORACLE instance shut down.
  30. SQL> select db_unique_name,protection_mode,protection_level from v$database;
  31. DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
  32. ------------------------------ -------------------- --------------------
  33. dg1 MAXIMUM AVAILABILITY RESYNCHRONIZATION

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-750161/,如需轉載,請註明出處,否則將追究法律責任。

相關文章