1. 程式人生 > >11g RAC to Single Dataguard 配置方式(RMAN)

11g RAC to Single Dataguard 配置方式(RMAN)

==================================================
一.基礎準備工作
==================================================
1.1.配置網路解析
--------------------------------------------------
1).配置/etc/hosts檔案
====================
# vi /etc/hosts
確保主機之間有互相解析,除迴環地址外加入:


#public ip
129.1.1.124   phosta
129.1.1.125   phostb
129.1.51.102     phostt2


#private ip
1.1.1.9       phosta-priv
1.1.1.10      phostb-priv


#vip
129.1.1.224   phosta-vip
129.1.1.225   phostb-vip


#scanip
129.1.1.226    addr-cluster-scanip


注:確保主備節點都有對方的解析


====================
2).配置tns解析
====================
ADDRPROD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.1.226)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = addrprod)
    )
  )                                                                


ADDR11G1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.1.224)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = addrprod)
    )
  )


ADDR11G2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.1.225)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = addrprod)
    )
  )
                                                                    
ADDRPROD_STD =                                                               
  (DESCRIPTION =                                                    
    (ADDRESS_LIST =                                                 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.51.102)(PORT = 1521))
    )                                                               
    (CONNECT_DATA =                                                 
      (SERVICE_NAME = addrprod_std)                                         
    )                                                               
  )


====================
3).配置靜態監聽(HOST建議調整成IP)
====================
--在單例項各個節點的監聽檔案中增加以下內容,引數需要根據實際情況進行替換。
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = addrprod_std)
      (SID_NAME = addr11g_stdb)
      (ORACLE_HOME = /orastg/app/oracle/product/11.2.0/db_1)
    )
  )


--------------------------------------------------
1.2.主庫準備工作
--------------------------------------------------
1).日誌配置
====================
a).檢查是否強制產生日誌
--------------------
SQL> select force_logging from v$database;


--調整
SQL> alter database force logging;
SQL> select force_logging from v$database;


--------------------
b).檢查歸檔模式
--------------------
SQL> archive log list;
SQL> show parameter log_archive_format;          //確保此引數包含執行緒號:%t


--如果沒有開歸檔,則進行修改
SQL> alter system set log_archive_dest_1 ='LOCATION=+ARCHDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod' scope=both sid='*';
SQL> alter system set log_archive_format='%r_%t_%s.arc' scope=spfile sid='*';
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log list;
SQL> alter database open;


--------------------
c).增加standby redo
--------------------
--獲取日誌組數和最大的檔案大小:
SQL> select max(bytes/1024/1024) as "Size(MB)" from v$log;
SQL> select thread#, count(1) from v$log group by thread#;


--數量最好比online redo多一組:
SQL> alter database add standby logfile thread 1 group 11 size 100M;
SQL> alter database add standby logfile thread 1 group 12 size 100M;
SQL> alter database add standby logfile thread 1 group 13 size 100M;
SQL> alter database add standby logfile thread 1 group 14 size 100M;
SQL> alter database add standby logfile thread 1 group 15 size 100M;
SQL> alter database add standby logfile thread 1 group 16 size 100M;
SQL> alter database add standby logfile thread 1 group 17 size 100M;
SQL> alter database add standby logfile thread 1 group 18 size 100M;
SQL> alter database add standby logfile thread 1 group 19 size 100M;
SQL> alter database add standby logfile thread 2 group 31 size 100M;
SQL> alter database add standby logfile thread 2 group 32 size 100M;
SQL> alter database add standby logfile thread 2 group 33 size 100M;
SQL> alter database add standby logfile thread 2 group 34 size 100M;
SQL> alter database add standby logfile thread 2 group 35 size 100M;
SQL> alter database add standby logfile thread 2 group 36 size 100M;
SQL> alter database add standby logfile thread 2 group 37 size 100M;
SQL> alter database add standby logfile thread 2 group 38 size 100M;
SQL> alter database add standby logfile thread 2 group 39 size 100M;




====================
2).備份standby controlfile
====================
RMAN> backup current controlfile for standby format '/orastg/rmanbk/stdctl_%d_%T_%s_%p';


====================
3).調整引數
====================
SQL> alter system set log_archive_dest_2 = 'service=ADDRPROD_STD arch async valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) reopen=60 db_unique_name=ADDRPROD_STD' scope=both sid='*';
SQL> alter system set log_archive_dest_state_2 = 'defer' scope=both sid='*';
SQL> alter system set log_archive_config= 'dg_config=(ADDRPROD,ADDRPROD_STD)' scope=both sid='*';
SQL> alter system set log_archive_max_processes = 8 scope=both sid='*';
SQL> alter system set db_unique_name='ADDRPROD' scope=spfile sid='*';
SQL> alter system set standby_file_management=auto scope=both sid='*';
SQL> alter system set fal_server='ADDRPROD_STD' scope=both sid='*';
SQL> alter system set fal_client='ADDRPROD' scope=both sid='*';


Note:當primary與standby之間的網路頻寬較小時建議將歸檔程序數量設定帶2~3即可(包含歸檔到本地的arc0和到遠端的1~2個程序),如此一來可以防止歸檔產生速度過快時引起的arc程序搶佔不到網路資源而hang住然後被kill最終導致目標端與遠端資料版本差距越來越大。在網路頻寬不足且一個primary和多個standby關聯時建議將網路不好的級聯在網路較好的standby後面,防止出現網路不佳的standby佔用完arc程序而網路較好的standby無法搶佔到資源而產生gap.(案例:)
dg_config:此引數裡面寫的是在此dg配置框架中的所有資料庫的db_unique_name,值得注意的是:如果fal_server/fal_client配置時不包含在db_config中(或者大小寫不一致)都會在trace檔案中出現: FAL[server] :  Returning NULL frb entry.等報錯。故建議:配置時最好將TNS和db_unique_name對應,dg_config中的名字和fal_server/fal_client等引數大小寫匹配
注:調整完成後重啟資料庫,確認所有引數是否生效(以grid使用者執行)
# su - grid
$ srvctl stop database -d addrprod
$ srvctl start database d addrprod
$ crsctl status res -t


====================
4).準備引數檔案
====================
SQL> create pfile='/orastg/rmanbk/initaddr.ora' from spfile;


--------------------------------------------------
1.3.備節點準備工作
--------------------------------------------------
1).獲取主庫的引數檔案、控制檔案、密碼檔案
====================
$ scp
[email protected]
:/orastg/rmanbk/stdctl* /orastg/rmanbk/
$ scp [email protected]:/orastg/rmanbk/*.ora /orastg/rmanbk/
$ scp [email protected]:/orastg/app/oracle/product/11.2.0/db_1/dbs/orapwaddrprod $ORACLE_HOME/dbs/orapwaddr11g_stdb


====================
2).調整引數檔案(增加DG相關引數)
====================
a).原有引數檔案值
--------------------
*._b_tree_bitmap_plans=FALSE
*._gc_undo_affinity=FALSE
*.archive_lag_target=1800
*.cluster_database_instances=2
*.cluster_database=TRUE
addr11g2.cluster_interconnects='1.1.1.10'
addr11g1.cluster_interconnects='1.1.1.9'
*.compatible='10.2.0.1.0'
*.CONTROL_FILE_RECORD_KEEP_TIME=14
*.control_files='+datadg/addrprod/controlfile/current.335.843512833','+datadg/addrprod/controlfile/current.336.843512827','+datadg/addrprod/controlfile/current.337.843512821'
*.db_block_size=8192
*.db_cache_size=16G
*.db_create_file_dest='+DATADG'
*.db_create_online_log_dest_1='+DATADG'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='addrprod'
*.db_unique_name='addrprod'
*.diagnostic_dest='/orastg/app/oracle'
*.event='31156 trace name context forever, level 0x400:10298 trace name context forever, level 32'
addr11g1.instance_name='addr11g1'
addr11g2.instance_name='addr11g2'
addr11g1.instance_number=1
addr11g2.instance_number=2
*.java_pool_size=512M
*.job_queue_processes=0
*.large_pool_size=512M
*.local_listener='LOCAL_LISTENER'
addr11g1.log_archive_dest_1='LOCATION=+ARCHDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod'
addr11g2.log_archive_dest_1='LOCATION=+ARCHDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_format='%r_%t_%s.arc'
*.log_archive_trace=128
*.log_buffer=10072000
*.O7_DICTIONARY_ACCESSIBILITY=TRUE
*.open_cursors=2048
*.optimizer_secure_view_merging=FALSE
*.pga_aggregate_target=8G
*.processes=1500
*.remote_listener='REMOTE_LISTENER'
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=true
*.session_cached_cursors=100
*.sessions=1600
*.sga_max_size=32G
*.sga_target=32G
*.shared_pool_reserved_size=80m
*.shared_pool_size=1024m
*.sort_area_size=134217728
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.streams_pool_size=256M
addr11g1.thread=1
addr11g2.thread=2
*.undo_management='AUTO'
addr11g1.undo_tablespace='UNDOTBS1'
addr11g2.undo_tablespace='UNDOTBS2'
*.utl_file_dir='/files'


--------------------
b).調整後如下
--------------------
*._b_tree_bitmap_plans=FALSE
*._gc_undo_affinity=FALSE
*.archive_lag_target=1800
*.cluster_database_instances=2
#*.cluster_database=TRUE
*.cluster_database=false
#addr11g2.cluster_interconnects='1.1.1.10'
#addr11g1.cluster_interconnects='1.1.1.9'
*.compatible='10.2.0.1.0'
*.CONTROL_FILE_RECORD_KEEP_TIME=14
#*.control_files='+datadg/addrprod/controlfile/current.335.843512833','+datadg/addrprod/controlfile/current.336.843512827','+datadg/addrprod/controlfile/current.337.843512821'
*.db_block_size=8192
*.db_cache_size=16G
*.db_create_file_dest='/orastg/app/oracle/oradata'
*.db_create_online_log_dest_1='/orastg/app/oracle/oradata/'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='addrprod'
*.db_unique_name='addrprod_std'
*.diagnostic_dest='/orastg/app/oracle'
*.event='31156 trace name context forever, level 0x400:10298 trace name context forever, level 32'
#addr11g1.instance_name='addr11g1'
#addr11g2.instance_name='addr11g2'
#addr11g1.instance_number=1
#addr11g2.instance_number=2
*.java_pool_size=512M
#*.job_queue_processes=70
*.job_queue_processes=0
*.large_pool_size=512M
*.local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.51.102)(PORT = 1521))'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=( addrprod, addrprod_stb)'
#addr11g1.log_archive_dest_1='LOCATION=+ARCHDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod'
#addr11g2.log_archive_dest_1='LOCATION=+ARCHDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod'
*.log_archive_dest_1='LOCATION=/orastg/app/oracle/arch/addrprod_std VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod_std'
*.log_archive_dest_2 = 'service=addrprod arch async valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) reopen=60 db_unique_name=addrprod'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%r_%t_%s.arc'
*.log_archive_trace=128
*.log_archive_max_processes = 8
*.FAL_CLIENT='addrprod_stb'
*.fal_server='ADDR11G1','ADDR11G2'
*.log_buffer=10072000
*.O7_DICTIONARY_ACCESSIBILITY=TRUE
*.open_cursors=2048
*.optimizer_secure_view_merging=FALSE
*.pga_aggregate_target=8G
*.processes=1500
#*.remote_listener='REMOTE_LISTENER'
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=true
*.session_cached_cursors=100
*.sessions=1600
*.sga_max_size=32G
*.sga_target=32G
*.shared_pool_reserved_size=80m
*.shared_pool_size=1024m
*.sort_area_size=134217728
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.streams_pool_size=256M
#addr11g1.thread=1
#addr11g2.thread=2
*.undo_management='AUTO'
#addr11g1.undo_tablespace='UNDOTBS1'
#addr11g2.undo_tablespace='UNDOTBS2'
*.undo_tablespace='UNDOTBS1'
*.utl_file_dir='/files'


--以下是主要需要調整內容,已經將job程序數恢復成70
*.db_create_file_dest='/orastg/app/oracle/oradata/'
*.db_create_online_log_dest_1='/orastg/app/oracle/oradata/'
*.diagnostic_dest='/orastg/app/oracle'
*.log_archive_config= 'dg_config=(ADDRPROD,ADDRPROD_STD)'
*.log_archive_dest_1='LOCATION=/orastg/app/oracle/arch/addrprod_std VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=addrprod_std'
*.log_archive_dest_2 = 'service=addrprod arch async valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) reopen=60 db_unique_name=addrprod'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%r_%t_%s.arc'
*.log_archive_max_processes = 8
*.db_unique_name='ADDRPROD_STD'
*.standby_file_management=auto
*.FAL_CLIENT='addrprod_stb'
*.fal_server='ADDR11G1','ADDR11G2'


--以下引數不針對OMF,是否開啟OMF確認引數(db_create_online_log_dest_1,db_create_file_dest)
*.db_file_name_convert='+DATA10G/addrprod/datafile/','/u02/addrprod/'
*.log_file_name_convert='+DATA10G/addrprod/onlinelog/','/u02/addrprod/'


====================
3).恢復控制檔案
====================
a).控制檔案恢復
--------------------
$ env
注:確保環境變數正確
SQL> startup nomount pfile='/orastg/rmanbk/initaddr.ora';
RMAN> restore standby controlfile from '/orastg/rmanbk/stdctl_ADDRPROD_20140401_10379_1';
RMAN> restore standby controlfile from '/orastg/rmanbk/stdctl_ADDRPROD_20140401_10379_1';
RMAN> restore standby controlfile from '/orastg/rmanbk/stdctl_ADDRPROD_20140401_10379_1';
RMAN> shutdown immediate;


--------------------
b).調整引數檔案
--------------------
到<db_create_file_dest>/db_unique_name/controlfile下確認控制檔名,再更新到引數檔案中。


--------------------
c).重新開庫到Mount
--------------------
SQL> startup nomount pfile='/orastg/rmanbk/initaddr.ora';
SQL> alter database mount standby database;


==================================================
二、主庫備份
==================================================
2.1.準備備份指令碼
--------------------------------------------------
$ vi /home/oracle/upgrdtools/backup_pri_database.sh
#
ORACLE_BASE=/orastg/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
ORACLE_SID=addr11g1
export ORACLE_BASE ORACLE_HOME ORACLE_SID
export NLS_LANG='american_america.zhs16gbk'
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PATH=$ORACLE_HOME/OPatch:$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH


#--execute rman command
rman target / nocatalog log /home/oracle/upgrdtools/backup_pri_database.log<<EOF
run
{allocate channel c1 type disk maxpiecesize 65G;
allocate channel c2 type disk maxpiecesize 65G;
allocate channel c3 type disk maxpiecesize 65G;
backup as compressed backupset maxsetsize 70G database format '/orastg/rmanbk/full_%d_%T_%s_%p';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
crosscheck archivelog all;
backup as compressed backupset maxsetsize 70G archivelog all format '/orastg/rmanbk/arch_%d_%T_%s_%p';
}
exit;
EOF


--------------------------------------------------
2.2.資料庫備份
--------------------------------------------------
$ chmod +x /home/oracle/upgrdtools/backup_pri_database.sh
$ nohup /home/oracle/upgrdtools/backup_pri_database.sh &
[1]     6422544
$ tail -f nohup.out
$ tail -f /home/oracle/upgrdtools/backup_pri_database.log


--------------------------------------------------
2.3.傳送備份到目標端
--------------------------------------------------
$ scp /orastg/rmanbk/*_1
[email protected]
:/orastg/rmanbk/


==================================================
三.備庫恢復
==================================================
3.1.備份集資訊處理
--------------------------------------------------
$ rman target / nocatalog log /home/oracle/upgrdtools/rman_pre_restore.log
RMAN> catalog start with '/orastg/rmanbk/full'  noprompt;
RMAN> catalog start with '/orastg/rmanbk/arch' noprompt;
RMAN> crosscheck backup;
RMAN> crosscheck archivelog all;
RMAN> delete noprompt expired archivelog all;
RMAN> delete noprompt expired backup;
RMAN> delete noprompt obsolete backup redundancy 1 device type disk;
RMAN> report need backup database;


--------------------------------------------------
3.2.恢復資料庫
--------------------------------------------------
1).準備restore指令碼
====================
$ vi /home/oracle/upgrdtools/restore_std_database.sh
#
ORACLE_BASE=/orastg/app/oracle
ORACLE_HOME=/orastg/app/oracle/product/11.2.0/db_1
ORACLE_SID=addr11g_stdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
export NLS_LANG='american_america.zhs16gbk'
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PATH=$ORACLE_HOME/OPatch:$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH


#--execute rman command
rman target / nocatalog log /home/oracle/upgrdtools/restore_std_database.log<<EOF
run
{allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
restore database;
switch tempfile 1 to '/orastg/app/oracle/oradata/addrprod/tempfile/temp.256.843646099';
}
exit;
EOF


====================
2).進行資料庫restore
====================
$ chmod +x /home/oracle/upgrdtools/restore_std_database.sh
$ nohup /home/oracle/upgrdtools/restore_std_database.sh &
[1]     6422544
$ tail -f nohup.out
$ tail -f /home/oracle/upgrdtools/restore_std_database.log


====================
3).進行資料庫recover
====================
RMAN> reocver database;
--恢復到日誌不夠的報錯無需處理


==================================================
四.配置工作
==================================================
4.1.日誌檔案處理
--------------------------------------------------
1).初始化standby logfile
====================
SQL> alter database clear logfile group 11;
SQL> alter database clear logfile group 12;
SQL> alter database clear logfile group 13;
SQL> alter database clear logfile group 14;
SQL> alter database clear logfile group 15;
SQL> alter database clear logfile group 16;
SQL> alter database clear logfile group 17;
SQL> alter database clear logfile group 18;
SQL> alter database clear logfile group 19;
SQL> alter database clear logfile group 31;
SQL> alter database clear logfile group 32;
SQL> alter database clear logfile group 33;
SQL> alter database clear logfile group 34;
SQL> alter database clear logfile group 35;
SQL> alter database clear logfile group 36;
SQL> alter database clear logfile group 37;
SQL> alter database clear logfile group 38;
SQL> alter database clear logfile group 39;


====================
2).初始化online log
====================
SQL> alter database clear logfile group  1;
SQL> alter database clear logfile group  2;
SQL> alter database clear logfile group  3;
SQL> alter database clear logfile group  4;
SQL> alter database clear logfile group  5;
SQL> alter database clear logfile group  6;
SQL> alter database clear logfile group  7;
SQL> alter database clear logfile group  8;
SQL> alter database clear logfile group 21;
SQL> alter database clear logfile group 22;
SQL> alter database clear logfile group 23;
SQL> alter database clear logfile group 24;
SQL> alter database clear logfile group 25;
SQL> alter database clear logfile group 26;
SQL> alter database clear logfile group 27;
SQL> alter database clear logfile group 28;


--------------------------------------------------
4.2.備庫以standy database方式重啟
--------------------------------------------------
1).轉換引數檔案並關庫
====================
SQL> create spfile from pfile='/orastg/rmanbk/initaddr.ora';
SQL> shutdown immediate;


====================
2).以standby database啟動(如果有節點不能正常連線,可能是密碼檔案問題,先嚐試同步密碼檔案)
====================
SQL> startup nomount;
SQL> create pfile from spfile;
SQL> alter database mount standby database;


--------------------------------------------------
4.3.啟用主庫歸檔路徑
--------------------------------------------------
SQL> alter system set log_archive_dest_state_2='enable' scope=both sid='*';


--------------------------------------------------
4.4.確認日誌傳送是否正常進行
--------------------------------------------------
1).主庫切換日誌
====================
SQL> alter system archive log current;


====================
2).備庫確認歸檔日誌數量是否有增加
====================
SQL> select count(1) from v$archived_log;


--------------------------------------------------
4.5.備庫啟用恢復
--------------------------------------------------
1).啟動
====================
SQL> alter database recover managed standby database disconnect from session;


====================
2.確認恢復是否正常
====================
--確認還沒應用的日誌有多少,是否滿足要求
SQL> select thread#,sequence#,applied from v$archived_log where applied='NO';


--確認程序狀態,以及程序的處理進度
SQL> select process,status,thread#,sequence#,block#,blocks from v$managed_standby;


--在主庫確認standby應用到哪個redo(以redo的next_change#標示在APPLIED_SCN)
SQL> SELECT DEST_ID, APPLIED_SCN FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY';


====================
3).停止應用日誌(不用做)
====================
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;