oracle dataguard配置詳細過程及主備切換(adg)

oracle物理dg單實例配置:

1.查看數據庫版本是否一致

2.配置主備庫的hosts文件和tnsnames.ora,確保監聽正常。

3.主庫參數配置:

  ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri_unique_name,std_unique_nm)' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/arch/pri_sid_nm VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri_unique_nm' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=std_tnsname ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std_unique_nm' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;
  ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4 scope=spfile;
  ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
  ALTER SYSTEM SET FAL_CLIENT ='pri_tnsname' SCOPE=SPFILE;
  ALTER SYSTEM SET FAL_SERVER ='std_tnsname' SCOPE=SPFILE;
  -------------若主備庫數據日誌文件路徑不一致需要設置,主庫設置是爲主備切換用-------------
  ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; 
  ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;  重做日誌(redo log)目錄,先對方,後自己
  ---------------------------------------------------------------


  
4.開啓強制歸檔:
  alter database force logging;

5.主庫若沒開歸檔需要開啓:
  shutdown immediate
  startup mount
  alter database archivelog;
  alter database open;

6.主庫備份並恢復到備庫
  創建口令文件:
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5
  創建spfile:
  create pfile from spfile;
  mount狀態下,使用rman備份數據庫和歸檔日誌
  rman target /
   run {
   allocate channel c1 type disk;
   allocate channel c2 type disk;
   allocate channel c3 type disk;
   backup database format '/data/rman_backup/Full_%U.bak';
   backup archivelog all format '/data/rman_backup/Arc_%U.bak';
   release channel c1;
   release channel c2;
   release channel c3;}
  備份備庫控制文件
  backup device type disk format '/data/rman_backup/Standby_%U.ctl' current controlfile for standby;
  將主庫的備份集、口令文件、pfile傳至備庫相應目錄下


  備庫配置:

7.配置備庫參數文件:
  各中文件路徑確定修改正確,包括數據文件路徑,歸檔日誌路徑
  db_unique_name修改成備庫的唯一名
  LOG_ARCHIVE_DEST_1修改成備庫本機的log目錄,LOG_ARCHIVE_DEST_2修改成主庫參數   ----------主備切換用          
  FAL_SERVER修改成主庫連接串,FAL_CLIENT修改成備庫連接串      --------主備切換會用到
  ----------------若主備庫數據日誌文件路徑不一致備庫需要需要設置下面兩個參數----------------------
  ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; 
  ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;  -----重做日誌(redo log)目錄,先對方,後自己
  -----------------------------------------------------------------------------------------------
  查看Oracle的.bash_profile文件裏ORACLE_SID配置是否正確
  
8.創建spfile文件,並將備庫置於nomount狀態
  create spfile from pfile;
  startup nomount;
  show parameter spfile;

9.使用rman恢復控制文件和數據文件等:
  rman target /
   restore standby controlfile from '/data/rman_backup/Standby_08ri8i4r_1_1.ctl';
   alter database mount;
   run {
   allocate channel c1 type disk;
   allocate channel c2 type disk;
   allocate channel c3 type disk;
   restore database;
   release channelc1;
   release channelc2;
   release channelc3; }

===========================duplicate方式遷移數據(主庫不用停機)===========================

  創建口令文件----把主庫的刪掉,修改sys密碼後重新生成一份,把這份傳到備庫:
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys的密碼 entries=5
  
  將主庫的pfile文件傳到備庫修改後生成spfile,將備庫起到nomount
  rman target sys/wgot11g@BJ-YZ-207R-166-9 auxiliary sys/wgot11g@BJ-YZ-207R-166-8
  duplicate target database for standby from active database dorecover nofilenamecheck;

======================================================================================

10.主庫和備庫狀態查看:
  column db_unique_name format a10;
  set line 220;
  SELECT db_unique_name,name,switchover_status,database_role,open_mode FROM v$database;


11.主庫和備庫創建Standby Redo Log組數(主庫創建是爲主備切換用)
  公式如下:
  如果主庫是單實例庫:Standby Redo Log組數=主庫日誌組總數 + 1
  如果主庫是RAC環境:Standby Redo Log組數=(所有節點中日誌組數最大值 + 1) * RAC節點數
  alter database add standby logfile thread 1 group 4 '/data/oradata/fle/stdredo04.rdo' size 200m;
  alter database add standby logfile thread 1 group 5 '/data/oradata/fle/stdredo05.rdo' size 200m;
  alter database add standby logfile thread 1 group 6 '/data/oradata/fle/stdredo06.rdo' size 200m;
  alter database add standby logfile thread 1 group 7 '/data/oradata/fle/stdredo07.rdo' size 200m;

12.檢查:
  
  主庫查看路徑狀態:
  col dest_name for a20
  col status for a8 
  col type for a8
  col database_mode for a20
  col recovery_mode for a25
  col error for a20
  col destination for a40
  col synchronization_status for a30
  set line 240
  select dest_name, status, type, database_mode, recovery_mode, error, destination, synchronization_status  
  from v$archive_dest_status;
  
  主庫切換日誌:
  alter system switch logfile;
  
  備庫查看日誌的應用狀態:
  column name format a50;
  set line 200;
  SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;

  查看日誌傳輸進程狀態
  col RECOVERY_MODE for a8
  col protection_mode for a20
  col db_mode for a18
  col status for a10
  set line 200
  SELECT ds.dest_id id ,
       ad.status ,
       ds.database_mode db_mode ,
       ad.archiver TYPE , 
       ds.recovery_mode ,
       ds.protection_mode ,
       ds.standby_logfile_count "SRLs" ,
       ds.standby_logfile_active active ,
       ds.archived_seq#
  FROM v$archive_dest_status ds ,
       v$archive_dest ad
  WHERE ds.dest_id = ad.dest_id
    AND ad.status != 'INACTIVE'
  ORDER BY ds.dest_id;

  主備切換:

1.將主庫切換成物理standby:
  alter database commit to switchover to physical standby with session shutdown;
  startup mount;
   
2.備庫執行切換成primary,完成後數據庫是mount,需要open:
  recover managed standby database cancel;
  recover automatic standby database ;
  RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  alter database commit to switchover to primary with session shutdown;
  select status from v$instance;
  startup;
   
3.打開新的備庫(原主庫)的歸檔應用:
  alter database recover managed standby database using current logfile disconnect from session;
  檢查日誌應用狀態:
  
4.驗證切換後,歸檔應用是否正常:
  新備庫執行:
  column name format a50;
  set line 200;
  SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;
            
5.檢查切換後的主備庫的角色:
  新的主備庫分別執行:
  select switchover_status,database_role from v$database;

注意切換完成以後必須自行添加臨時文件,當我們在Primary端添加一個臨時表空間,Standby端雖然不能創建出臨時文件,但是臨時表空間的信息是聯動的帶入的
   
   
   
   


oracle dataguard主備庫參數文件配置詳解

主庫參數

fle.__db_cache_size=3070230528
fle.__java_pool_size=67108864
fle.__large_pool_size=83886080
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=973078528
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-9'
*.fal_server='BJ-YZ-207R-66-8'
*.log_archive_config='DG_CONFIG=(fle,flp)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fle'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-8 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=flp'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
 


備庫參數
 
fle.__db_cache_size=2399141888
fle.__java_pool_size=67108864
fle.__large_pool_size=822083584
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=905969664
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.db_unique_name='flp'
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-8'
*.fal_server='BJ-YZ-207R-66-9'
*.log_archive_config='DG_CONFIG=(flp,fle)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=flp'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-9 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fle'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'


主庫參數詳解:
 
保持同一個Data Guard中所有的DB_NAME相同
DB_NAME=ora11g
 
 爲一個數據庫指定一個唯一的名稱,該參數一經指定就不會發生改動除非DBA主動改動
DB_UNIQUE_NAME=ora11g_primary
 
初始化參數LOG_ARCHIVE_CONFIG用於控制發送歸檔日誌到遠程位置、接收遠程歸檔日誌,並指定Data  Guard配置的惟一數據庫名,默認值爲SEND,RECEIVE,NODG_CONFIG。

當設置該參數爲SEND時,會激活發送歸檔日誌到遠程位置;當設置該能數爲NOSEND時,會禁止發送歸檔日誌到遠程位置;當設置該參數爲RECEIVE時,會激活接收遠程歸檔日誌;當設置該參數

爲NORECEIVE時,會禁止接收遠程歸檔日誌;當設置該參數爲DG_CONFIG時,可以最多指定9個惟一數據庫名;當設置該參數爲NODG_CONFIG時,會禁止指定惟一數據庫名。

LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g_primary ,ora11g_standby)'   
 
指定本地歸檔的路徑
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora11g_primary'
 
指定遠端備庫的歸檔路徑
LOG_ARCHIVE_DEST_2='SERVICE=ora11g_standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora11g_standby'
 
LOG_ARCHIVE_DEST_n(從1到10)定義redo文件路徑。該參數必須通過location或service指定歸檔文件路徑。location表示本地路徑,service通常是net service name,即接收redo數據的

standby數據庫。

注意:每一個LOG_ARCHIVE_DEST_n都有一個對應的LOG_ARCHIVE_DEST_STATE_n參數,該參數擁有以下4個屬性值:

ENABLE:默認值,表示允許傳輸服務

DEFER: 指定對應的log_archive_dest_n參數有效,但暫不使用

ALTERNATE:禁止傳輸,但是如果其他相關的目的地的連接通通失敗,則它將變成enable

RESET:功能與DEFER類似,不過如果傳輸目的地之前有過錯誤,它會清除所有錯誤信息

LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
遠程登錄設置獨享模式(z注意保證主備庫密碼相同)
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
%s log sequence number
%S log sequence number, zero filled %t thread number, RAC的節點中設有THREAD參數, 就是這個值了
%T thread number, zero filled
 ------其中這前4項是可以用在 9I 中的
%a activation ID
%d database ID
%r resetlogs ID that ensures unique names are constructed for the archived log files across multiple incarnations of the database

 Oracle 10g開始,log_archive_format初始化參數必須包含%s, %t 和 %r,以確保生成的歸檔重做日誌名稱唯一。
(原因:10g能做穿越resetlog的恢復,所以要加%r.而9i的不能做穿越resetlog的恢復,所以沒有%r的參數)


LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
當Primary Database的某些日誌沒有發送到Standby Database 這時候發生歸檔裂縫(Archive Gap)
缺失的日誌就是裂縫(GAP)。Data Guard 能夠自動檢測,解決歸檔裂縫,不需要DBA的介入。這需要配置
FAL_CLIENT,FAL_SERVER這兩個參數(FAL:Fetch Archive Log)
從FAL這個名字可以看出,這個過程是 Standby Database 主動發起的取日誌的過程,Standby Database 就是
FAL_CLIENT,它是從FAL_SERVER中取這些GAP。10g中,這個FAL_SERVER可以是Primary Database,也可以是其他的
Standby Database
 
FAL_CLIENT和FAL_SERVER兩個參數都是Oracle Net NameFAL_CLIENT通過網絡向FAL_SERVER發送請求,
FAL_SERVER通過網絡向FAL_CLIENT發送缺失的日誌
但是這兩個連接不一定是一個連接。因此 FAL_CLIENT向FAL_SERVER發送請求時,會攜帶FAL_CLIENT的參數
值,用來告訴FAL_SERVER應該向哪裏發送缺少的日誌。這個參數也是一個Oracle Net Name 這個Name在FAL_SERVER
上定義的,用來指向FAL_CLIENT
FAL_SERVER=ora11g_standby
FAL_CLIENT=ora11g_primary
 
如果Primary數據庫數據文件發生修改(如新建)則在standby數據庫作相應修改
設爲AUTO表示自動管理。設爲MANUAL表示需要手工管理(注:重命名修改
是不會傳到standby數據庫)
STANDBY_FILE_MANAGEMENT=AUTO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章