DataGuard搭建

leixue0906發表於2015-05-19
一、前提條件
1.主庫是歸檔模式
2.從庫只安裝資料庫軟體,資料庫不安裝
3.主從庫硬體一致,oracle資料庫版本一致
記憶體:1-2G,swap1.5倍;2-16G,1倍,超過16G,設定為16G
/tmp空間大於1G
4.配置環境資料庫使用者必須有sysdba許可權
5.主備庫例項名稱一樣,都是orcl,db_unique_name不同
****************************************************************************************
二、配置:
1.判斷DG是否已安裝
select * from v$option where parameter ='Oracle Data Guard';
2.主庫開啟強制記錄日誌
alter database force logging;
check:
select name,force_logging from v$database;
3.在主庫新增或刪除檔案時,在備庫也會新增刪除
alter system set standby_file_management='AUTO';
****************************************************************************************
三、建立standby logfiles
1.standby logfiles的大小和redo logfiles一樣
2.standby redo日誌檔案組數比primary資料庫的online redo日誌組數至少多一個
一個推薦的公式為:(每節點的日誌組數+1)*最大節點數,如一個節點計算:(3+1)*1=4
3.不建議組號group#緊挨著redo的,因為後續redo可能調整,建議從10往後推
cd $ORACHOE_HOME/oradata/orcl
mkdir dg
chown oracle:dba dg
alter database add standby logfile group 11 '/opt/oracle/oradata/starboss/dg/standby11.log' size 50M;
alter database add standby logfile group 12 '/opt/oracle/oradata/starboss/dg/standby12.log' size 50M;
alter database add standby logfile group 13 '/opt/oracle/oradata/starboss/dg/standby13.log' size 50M;
alter database add standby logfile group 14 '/opt/oracle/oradata/starboss/dg/standby14.log' size 50M;
************************************************************************************************
四、密碼檔案和控制檔案建立傳輸
1.檢查密碼檔案是否存在,名稱格式owapwSID
2.檢查REMOTE_LOGIN_PASSWORDFILE值是否為EXCLUSIVE
show parameter REMOTE_LOGIN_PASSWORDFILE
3.密碼檔案scp到從庫
 scp orapworcl oracle@192.168.215.102:/opt/oracle/11.2/dbs 提示輸入yes 
4.控制檔案
1)生成standby控制檔案
shutdown immediate
startup mount
alter database create standby controlfile as '/tmp/standby_control01.ctl';
startup open;
2)在備庫建立對應的目錄並授權
cd $ORACLE_BASE/oradata/;mkdir orcl;chown oracle:oinstall orcl
cd $ORACLE_BASE/flash_recovery_area;mkdir orcl;chown oracle:oinstall orcl
scp命令把控制檔案複製到備庫
scp control01.ctl oracle@192.168.215.102:/opt/oracle/oradata/orcl
scp control02.ctl oracle@192.168.215.102:/opt/oracle/flash_recovery_area/orcl/
*********************************************************************************
五、db_name和db_unique_name
預設兩者是一致的
但是,在DG中主庫和從庫的db_unique_name不能一致
show parameter db_unique_name
需要顯示設定,否則在spfile中無法顯示
alter system set db_unique_name=orcl scope=spfile;
************************************************************************************
六、閃回資料庫
建議開始閃回特性
1)配置閃回恢復區
查詢:
show parameter db_recovery_file_dest
先設定大小:
alter system set db_recovery_file_dest_size=400G;
再設定位置:
alter system set db_recovery_file_dest='/opt/oracle/app/flash_recovery_area/'
2)啟用
select flashback_on from v$database;
alter database flashback on;


如果你碰到 ORA-01153 報錯,那一定是在備庫進行此操作。你需要先取消重做日誌應用,啟用閃回日誌,然後重新啟用日誌應用。
在主庫啟用閃回日誌,不會同步備庫也啟用。你必須手動在主庫和備庫上均啟用閃回日誌。
如果不啟用閃回日誌,當出現故障轉移時,你將需要完全重新開始建立一個備庫。
**********************************************************************************
七、SQL*NET配置
1)主庫監聽
#vi $ORACLE_HOME/network/admin/listener.ora 加入內容


  雖然可以透過netca來進行配置,但是除了這個預設的外,我們還需要一個靜態註冊SID_LIST_LISTENER,如果沒有此從引數而且
  dataguard啟動順序不正確,主庫會報PING[ARC1]:Heartbeat failed to connect to standby '***'.Error is 12514導致歸檔無法完成
  配置如下:
SID_LIST_LISTENER=
     (SID_LIST =
  (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /opt/oracle/11.2)
      (SID_NAME = orcl)
  )
     )
          LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = primaryDB)(PORT = 1521))
     )
   )


2)配置tnsnames
        #vi $ORACLE_HOME/network/admin/tnsnames.ora


ORCL =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.101)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = orcl)
     )
   )
 
 ORCLDG =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.102)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = orcldg)
     )
   )


3)傳輸到備庫並修改listener.ora和tnsnames.ora
  
scp $ORACLE_HOME/network/admin/listener.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
          
--listener.ora:
          SID_LIST_LISTENER
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = orcldg)
        (ORACLE_HOME = /opt/oracle/11.2)
        (SID_NAME = orcl)
      )
    )




 LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = standbyDB)(PORT = 1521))
     )
   )


  tnsnames.ora:不需要修改


*************************************************************************************
八、重做日誌傳輸配置
1)配置歸檔日誌位置
查詢已經設定的歸檔路徑sql:
archive log list;
show parameter log_archive_dest_1;


如果沒有,則需要新增:
alter system set log_archive_dest_1='LOCATION=/mjx/test valid_for=(all_logfiles,primary_role)
 db_unique_name=orcl' scope=spfile; 


  還可以使用快速恢復區作為歸檔目錄,如LOCATION=use_db_recovery_file_dest
     官方文件裡說使用 valid_for=(online_logfiles, all_roles),這將導致備庫無法歸檔備用日誌檔案,因為它們不是線上日誌。
     但如果使用 all_logfiles 選項,主備庫將都能歸檔線上以及備用日誌。
     如果你想在備庫進行備份,並同時備份歸檔日誌的話,必須使用 all_logfiles。


2)配置重做日誌到備庫
alter system set log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role)   
db_unique_name=orcldg';


3))要注意STANDBY_ARCHIVE_DEST 引數不需要,已經被官方棄用。設定此引數後啟動資料庫,只會報 ORA-32004: 
     obsolete or deprecated parameter(s) specified for RDBMS instance 錯。


*************************************************************************************************
九、配置FAL_SERVER
    這個引數指定當日誌傳輸出現問題時,備庫到哪裡去找缺少的歸檔日誌。它用在備庫接收的到的重做日誌間有缺口的時候。
    這種情況會發生在日誌傳輸出現中斷時,比如你需要對備庫進行維護操作。在備庫維護期間,沒有日誌傳輸過來,這時缺口就出現了。
    設定了這個引數,備庫就會主動去尋找那些缺少的日誌,並要求主庫進行傳輸。
    你是主庫,就填寫:
      fal_server=從庫
    從庫上就反過來:
       fal_server=主庫
 注意:FAL_CLIENT在11g中已經廢棄,雖然可以配置但是已經不起作用了。


 sql>alter system set FAL_SERVER='orcldg';


*********************************************************************************
十、DG配置裡的另外一個庫的名字
 sql> alter system set log_archive_config = 'dg_config=(orcl,orcldg)';


   以上的辦法是我們採用alter system的方式線上修改,還有一種比較方便的辦法(但是容易出錯,所以方便和安全什麼時候都不可兼得)
   sql>create pfile from spfile;
   # 手工修改pfile
   sql>create spfile from pfile;
   然後用pfile生成spfile 同時傳輸pfile到從庫修改後生成spfile


&&&注意手工增加:
   *.log_archive_dest_state_1=enable
   *.log_archive_dest_state_2=enable


vi initorcl.ora


orcl.__db_cache_size=180355072
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=264241152
orcl.__sga_target=494927872
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=289406976
orcl.__streams_pool_size=8388608
*.audit_file_dest='/opt/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/opt/oracle/oradata/orcl/control01.ctl','/opt/oracle/flash_recovery_area/orcl/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/opt/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='/opt/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_server='orcldg'
*.job_queue_processes=1000
*.log_archive_config='dg_config=(orcl,orcldg)'
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcldg'
*.log_archive_format='orcl_%t_%s_%r.dbf'
*.memory_target=756023296
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'


複製引數檔案到備庫
scp initorcl.ora oracle@192.168.215.102:/opt/oracle/11.2/dbs/
修改備庫的initorcl.ora 修改引數如下:




*.db_name='orcl'
*.db_unique_name='orcldg'
*.fal_server='orcl'
*.log_archive_config='dg_config=(orcldg,orcl)'
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcldg'
*.log_archive_dest_2='SERVICE=orcl lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl'


然後sql>create spfile from pfile;


**********************************************************************
十一、傳輸主庫資料到備庫
1)scp -l 8192 -rp /opt/oracle/oradata/orcl/ oracle@192.168.215.102:/opt/oracle/oradata/
            注意目的地不要加orcl 會自動建立目錄的
            -l是limit限制,這樣最大是8192/8=1M速度,是為了解決stalled問題
            -rp 迴圈子目錄檔案
2)建立spfile中需要的目錄
       如/opt/oracle/admin/orcl/adump dpdump pfile


********************************************************************
十二、啟用物理備庫
  sql>startup nomount
       sql>alter database mount standby database;
       (1)啟動 redo 應用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  啟動實時應用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
          這個命令指示備庫開始使用備用日誌檔案進行恢復。它也告訴備庫命令完成後回到命令列介面


   SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
   此時只是暫時 redo 應用,並不是停止 Standby 資料庫,standby 仍會保持接收只不過不會再應用
                 接收到的歸檔,直到你再次啟動 redo 應用為止


        (2)停止standby
           正常情況下,首先
     SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    然後再sql>shutdown immediate
    當然也可以直接shutdown immediate


        (3)備用伺服器的管理模式與只讀模式
    <1>.啟動到管理模式


SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;


    <2>.啟動到只讀方式    


SQL>shutdown immediate;
 SQL>startup nomount;
 SQL>alter database mount standby database;
 SQL>alter database open read only;


     <3>如果在管理恢復模式下到只讀模式


SQL> recover managed standby database cancel;
 SQL> alter database open read only;


      這個時候,可以給資料庫增加臨時資料檔案(這個在熱備份的時候是沒有備份過來的)
      如alter tablespace temp add tempfile '/u02/oradata/test/temp01.dbf' size 100M;


     <4>.從只讀方式到管理恢復方式
     SQL> recover managed standby database disconnect from session;


         (4)應用物理備庫的幾點監控
      如果上面出了問題或者我們不知道成功了沒有,可以用下面的方法檢測


     <1>確認主備庫裡的歸檔目的地配置都是有效的
        select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
        目的地狀態status應該顯示為 VALID,注意如果上面沒有執行redo應用會有一條error資訊


     <2>確認重做日誌是否真的被應用了,在主庫執行
        select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = 'JED2' order by FIRST_TIME;
        如果歸檔和日誌應用均正常,APPLIED 和 ARCHIVED 列都應該是 YES。(如果沒有應用redo,applied應該是NO)
        很多教程裡都讓這個查詢以 SEQUENCE# 列排序,但我不推薦。如果以 SEQUENCE# 列排序,當你做了一次故障轉移後,序列號會再從1開始,
        這時使用這個查詢,你將不能在結果最後看到最新的記錄。我曾經很奇怪為什麼查不到新記錄,其實是因為新記錄不是出現在最後,
        我沒看到。所以,這個查詢都是以 FIRST_TIME 列排序.


     <3>主庫上檢查是否有重做日誌缺口
        如果你發現日誌沒有被應用,那可能是重做日誌有了缺口,這種情況下備庫無法進行日誌應用。但如果你的 FAL_SERVER 引數設定正確,這應該不會有問題
        select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
        如果一切正常,應該返回 VALID 和 NO GAP .切記啟用redo應用才能顯示No GAP


     <4>在主備庫上執行以下查詢檢視資料庫狀態
         select * from V$DATAGUARD_STATUS order by TIMESTAMP;


     <5>檢查是否成功:
        主庫上檢視日誌傳送情況:
        sql>select dest_name,status,error from v$archive_dest;
        應該log_archive_dest_1和2狀態應該是valid
        切換幾次日誌:
        sql>alter system switch logfile;
                      檢視日誌序號:
        sql>select sequence# from v$archived_log;
                      備庫驗證:
        sql>select sequence#,applied from v$archived_log;


*******************************************************************************************
十三、dataguard啟動關閉順序
       (1)監聽
          先啟從庫再起主庫
   #lsnrctl start
       (2)啟動
          先啟從庫:
   sql>startup nomount
   sql>alter database mount standby database;
   sql>alter database recover managed standby database using current logfile disconnect from session;
   在啟主庫
   sql>startup
        (3)關閉:和開啟正好相反
           先關主庫:
    sql>shutdown immediate
    再關從庫:
    sql>alter database recover managed standby database cancel;
    sql>shutdown immediate;






###############################################################################################
DG配置第二份文件參考
###############################################################################################


# 動態引數 
11. fal_server和fal_client,FAL即Fetch Archive Log,其值為Oracle Net service name,即tnsnames.ora中的服務名。
設定這兩個引數可以用來解決Archive Gaps。
一旦產生了gap,fal_client會自動向fal_server請求傳輸gap的archivelog。
設定了這2個引數,就不需要在產生gap時手動向standby註冊歸檔日誌了。
所需要做的就是確認主庫有這些歸檔日誌,並且主庫的控制檔案中有這些日誌的註冊資訊。
fal_client設定為資料庫自身的service name,fal_server設定為遠端資料庫的service name。
fal_server可以設定多個值,用逗號隔開。
primary:
*.fal_server='dev01dg'
*.fal_client='dev01'


standby:
*.fal_server='dev01'
*.fal_client='dev01dg'



***********************************************************************************************
主庫配置 


1. 強制產生日誌 
alter database force logging; 
驗證 select force_logging from v$database; 
2. 改歸檔資料庫 
starup mount; 
alter database archivelog; 
alter database open; 
驗證 archive log list; 
3. 建立pfile便於修改引數 
create pfile from spfile; 
編輯pfile 新增 
# dg primary 
*.db_unique_name='primary' 
--這個引數不可 scope=memory 更改 
*.log_archive_config='DG_CONFIG=(primary,standby)' 
*.log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles,all_roles) db_unique_name=primary' 
*.LOG_ARCHIVE_DEST_2='SERVICE=standby delay=1440 arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' 
*.log_archive_dest_state_1=enable 
*.log_archive_dest_state_2=enable 
*.fal_server=standby
*.fal_client=primary 
*.db_file_name_convert='standby','primary' 
*.log_file_name_convert='standby','priamry' 
-- 以上兩引數不可 scope=memory 更改,切換才需要. 
*.standby_file_management=auto 
# end 
說明: 
db_unique_name # 必要引數,每個資料的唯一標識. 
log_archive_config # 必要引數 
log_archive_dest_1 # 必要引數 本地歸檔路徑 
LOG_ARCHIVE_DEST_2 # 必要引數 遠端歸檔日誌 其中delay=1440 指明只傳送歸檔,24小時後再應用. 
fal_server || fal_client # 主庫可選引數 備庫必要引數 定義主庫和備庫的net服務名 
db_file_name_convert || db_file_name_convert # 雖算不上必要引數 但沒有會報ORA-00367和ORA-19527 錯誤,建議加上 
standby_file_management # 使主庫增刪資料檔案的修改,備庫能夠自動同步 


4. 建立相應歸檔目錄 啟庫到mount 
mkdir /home/oracle/arc1 
startup mount 
5. 建立主庫密碼檔案 
orapwd file=$ORACLE_HOME/dbs/orapwSID password=HxHs1027CeCis entries=10 force=y ignorecase=Y 
11G 需要加 ignorecase=Y 
6. 建立備庫控制檔案 
alter database create standby controlfile as '/home/oracle/rman_backup/standby01.ctl'; 
或用rman 建立: 
copy current controlfile for standby to '/home/oracle/rman_backup/standby01.ctl'; 
7. 用rman全備主庫 
run { 
CONFIGURE CONTROLFILE AUTOBACKUP ON; 
allocate channel t1 type disk; 
allocate channel t2 type disk; 
backup as compressed backupset database format '/home/oracle/rman_backup/full_db_%s'; 
release channel t1; 
release channel t2; 

或 
backup as compressed backupset full format '/home/oracle/rman_backup/full_db_%s' database ; 
# 記住控制檔案在哪個備份片裡 
8. 將主庫的全備\standby控制檔案\pfile引數檔案\密碼檔案 傳到備庫OS上. 



***********************************************************************************************
listener.ora 配置: 


LISTENER = 
(DESCRIPTION_LIST = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test01)(PORT = 1521)) 
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 




ADR_BASE_LISTENER = /opt/oracle 


SID_LIST_LISTENER = 


(SID_LIST = 


(SID_DESC = 


(SID_NAME = PLSExtProc) 


(ORACLE_HOME = /opt/oracle/product/11g/) 


(PROGRAM = extproc) 





(SID_DESC = 


(GLOBAL_DBNAME = test) 


(ORACLE_HOME =/opt/oracle/product/11g/) 


(SID_NAME = test) 








tnsnames.ora 配置 


standby = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test02)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = test) 
(SERVER = DEDICATED) 


primary = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test01)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = test) 
(SERVER = DEDICATED) 






***********************************************************************************************
備庫配置 

1. 修改引數檔案 
# dg standby 
*.db_unique_name='standby' 
*.log_archive_config='DG_CONFIG=(primary,standby)' 
*.log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles,all_roles) db_unique_name=standby' 
*.LOG_ARCHIVE_DEST_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary' 
*.log_archive_dest_state_1=enable 
*.log_archive_dest_state_2=enable 
*.fal_server=primary
*.fal_client=standby 
*.db_file_name_convert='primary','standby' 
*.log_file_name_convert='priamry','standby' 
*.standby_file_management=auto 
# end 


2. 從rman中恢復資料庫 
rman target /; 
startup nomout; 
restore controlfile from '/home/oracle/rman_backup/full_db_2'; 
startup mount; 
restore database; 
shutdown immediate; 
3. 修改pfile引數 應用standby控制檔案 
*.control_files='/u02/oradata/orcl/standby01.ctl' 
4. 配置主備庫的TNS連線 
vi $ORACLE_HOME/network/admin/tnsname.ora 
primary= 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.10)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = primary) 






standby = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = standby) 


用 tnsping 檢查 tnsping primary 5 | standby 5,主機/etc/hosts 檔案也要寫明主備資訊 


5. 建立standby logfile 
日誌大小與主庫redolog大小一致.至少比主庫redolog多一個. 
alter database add standby logfile group 4 ('/u02/oradata/orcl/dglog04a.log') size 50m, 
.... 



***********************************************************************************************
應用測試 最好開啟 tail -f alert.log 觀察是否有錯誤. 


1. 啟動主庫 startup open; 
啟動備庫處於應用歸檔狀態 
alter database recover managed standby database disconnect from session; 
或略延遲引數應用現有日誌. 
alter database recover managed standby database nodelay disconnect from session; 
主庫切換日誌 
alter system switch logfile; 
如果主庫從不過來歸檔,可以透過在主庫側手工修改引數如下: 
ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=MEMORY; 
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY; 


FAQ 
FOR 11G ORA-16191 
Data Collected 
============== 
ORA-16191: Primary log shipping client not logged on standby 


Support Update 
============== 
The issue seems to be because of password mismatch between primary and 
standby. 
The password file has to have identical authentication info for both 
primary and standby 


If you change or create the password file using orapwd for SYS,it will 
not work in 11G. 




Action Plan 
=========== 


Turn off the case sensitivity option by changing init.ora parameter 
SEC_CASE_SENSITIVE_LOGON=FALSE. 


Create password files on both servers using the same password and pass 
ignorecase=Y to orapwd utility. 


Make sure you use identical options during password file creation for 
both primary and standby 








***********************************************************************************************
用RMAN快速建立備庫.主庫業務不停. 


1.連線主庫RMAN,做備份,並且生成standby ctl. 
RMAN> backup as compressed backupset full format='/oracle/backup_script/for_dg_%u_%s.RMN' database include current controlfile for standby; 
2.將備份集複製到備庫,要與主庫的備份目錄一致. 
3.配置好備庫的standby引數,啟動到nomount.設定備庫的監聽為靜態監聽,讓主庫可以登陸到備庫的nomount. 
4.在主庫同時登陸主庫和備庫 
$ rman target / auxiliary sys/Hxhs2008@dgcecis
RMAN> duplicate target database for standby nofilenamecheck; 


恢復完成後,redo不能建立.把主庫的redo檔案cp到備庫對應位置.recover managed standby database;會自動清除redo內容. 
RMAN-05535: WARNING: All standby logfiles were not created 
Finished Duplicate Db at 10-JUL-08 
5.到備庫.開啟standby.開始測試. 




指定恢復點 


SYS@cecis > alter database recover automatic standby database until time '2008-12-23 08:00:00'; 




***********************************************************************************************
切換 


switchover 
1、主變從 
select open_mode,database_role,switchover_status,protection_mode from v$database; 
如果是to standby 表可以正常切換. 
直接執行 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 
否則執行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; 


shutdown immediate; 
startup mount; 
alter database recover managed standby database nodelay disconnect from session; 




2、從變主 


影響切換的因素: 
1 job列隊引數 job_queue_processes 將其設定為 0 ,scope=memory 不要改spfile. 
2 aq_tm高階列隊管理器 aq_tm_processes 其值改 0 ,scope=memory 不要改spfile. 
3 dbsnmp oem的代理,將其停止 emctl stop agent. 




alter system set job_queue_processes=0 scope=memory; 
alter system set aq_tm_processes=0 scope=memory; 
select open_mode,database_role,switchover_status,protection_mode from v$database; 
如果是to_primary 表可以正常切換. 
執行:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 
否則執行: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; 
或者 recover managed standby database finish; 
遇到ORA-16173: incompatible archival network connections active 
重新傳送一個新日誌,再手動應用即可.再切換 


shutdown immediate; 
startup; 


然後觀察主備庫日誌,如果正常的話會看到備庫會自動應用日誌. 




***********************************************************************************************
failover 


如果主庫還可以開啟,檢查兩庫的歸檔. 
1 確認standby資料的歸檔檔案是否連續 
select * from v$archive_gap; 
如果有記錄,按照列出的記錄號複製對應的歸檔到standby資料庫,並講歸檔檔案註冊到字典 
必須確保所有已生成的歸檔檔案均已存在於standby伺服器. 
alter database register physical logfile '/path/arc_log_name'; 


2 檢查歸檔檔案是否完整 
分別在主和從庫執行 
select distinct thread#,max(sequence#) from v$archived_log group by thread#; 


3 啟動 failover 
alter database recover managed standby database finish force; 
此命令後臺操作: 
applying standby redo logs. 
Incomplete recovery applied all redo ever generated. 
Resetting standby activation ID 
Background Media Recovery process shutdown 
Completed: alter database recover managed standby database finish force 
應用已有日誌,並停止rfs程式. 


4 切換到primary 
alter database commit to switchover to primary; 


完善dg 新建從庫.因為原主庫已經不在是DG的一部分了. 






***********************************************************************************************
管理. 


standby_file_managment=auto 時不能自動應用到standby,需要手動參與的操作. 
1 臨時檔案的建立 
2 redo logs的建立,在primary建立online redo後一定要在備機手動建立相同的,否則切換後,新的primary執行歸檔的頻率會比standby高很多.這就是standby redolog與online redolog之間 


的關係,要保證standby redolog比online redolog至少多一組. 
3 修改表空間狀態 RW,RO,ONLINE,OFFLINE.重命令資料檔案 










***********************************************************************************************
FAQ 
SWITCHOVER_STATUSVARCHAR2(18)Indicates whether switchover is allowed: 


■NOT ALLOWED - Either this is a standby database and the primary 
database has not been switched first or this is a primary database 
and there are no standby databases. 
■NOT ALLOWED - 這是一個standby資料庫而且主庫沒有被首先選中(switched??)或者這是一個主庫而且沒有standby資料庫. 


■SESSIONS ACTIVE - Indicates that there are active SQL sessions 
attached to the primary or standby database that need to be 
disconnected before the switchover operation is permitted. Query 
the V$SESSION view to identify the specific processes that need to 
be terminated. 
■SESSIONS ACTIVE - 表示正有活動的sql會話連線在主庫或者是standby上,而這個會話需要首先斷掉然後swithover這個操作才被允許.可以透過檢視v$session來辨認出需要被終止的特殊的 


連結. 


■SWITCHOVER PENDING - This is a standby database and the 
primary database switchover request has been received but not 
processed. 
■SWITCHOVER PENDING - 有一個standby資料庫而且主庫的switchover請求已經被接受到,但是沒有被處理. 


■SWITCHOVER LATENT - The switchover was in pending mode, 
but did not complete and went back to the primary database. 
■SWITCHOVER LATENT - switchover處在pending模式,但是沒有文成而且返回了主庫. 


■TOPRIMARY - This is a standby database and is allowed to switch 
over to a primary database. 
■TOPRIMARY - 這是一個standby資料庫而且switchover到主庫的請求被允許. 


■RECOVERY NEEDED - This is a standby database that has not 
received the switchover request. 
■RECOVERY NEEDED - 這是一個standby資料庫而且沒有接受到switchover的請求 

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

相關文章