ORACLE 11G DataGuard Failover後如何修複standby庫,dataguardfailover

來源:互聯網
上載者:User

ORACLE 11G DataGuard Failover後如何修複standby庫,dataguardfailover


failover後的問題情境:
由於做failover測試,一個standby已經被我變成了primary庫,如何將這個新的primary庫(原來的standby)變回來重新成為standby
兩個都是primary,p1,p2,如何將一個primary庫1設定成p1,而另外一個primary庫p2設定成p1的standby庫呢?


1,問題描述
原來的primary庫:
SQL> select open_mode,database_role from v$database;


OPEN_MODE    DATABASE_ROLE
-------------------- ----------------
READ WRITE    PRIMARY


SQL> 


新的做了failover變成了primary(原來是standby庫)p2,
SQL>  select open_mode,database_role from v$database;


OPEN_MODE    DATABASE_ROLE
-------------------- ----------------
READ WRITE    PRIMARY


SQL>
除了重新clone做standby外,還有別的辦法將p2重新變成p1的standby呢?


比較簡單的方法是,備庫開啟flashback database
然後在failover以後,通過flashback回退到切換前的時間點
如果沒有開啟的話,大概只能重新複製做備庫了


2,解決方案
去standby上查看下資料庫是否開啟了,
SQL> SELECT FLASHBACK_ON FROM v$database;


FLASHBACK_ON
------------------
NO


SQL> 
閃回沒有開啟,物理dg一般不開閃回,而且一般oracle資料庫預設閃回都不開啟,需要手動開啟。
物理dg方便重建,但是redo應用不能及時更新。

只能重新進行clone重建。


3,選擇clone重新搭建standby
3.1,先確認primary庫處于歸檔模式

SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     362
Next log sequence to archive   364
Current log sequence      364
SQL> 


3.2,添加standby檔案
因為以前已經是dg模式,所以standby檔案一直處於工作狀態
select * from v$logfile order by 1;


3.3 產生參數檔案
 產生pfile
create pfile from spfile;
shutdown immediate;
檢查參數檔案,因為是在曾經的dg環境重建,所以參數檔案不需要做太大的修改,例行檢查一下OK。
vim $ORACLE_HOME/dbs/initpowerdes.ora
*.db_unique_name=pdunq
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=powerdesXDB)'
*.fal_client='pdunq'
*.fal_server='pdunq_dg'
*.standby_file_management='AUTO'
*.db_file_name_convert='/home/oradata/powerdes','/home/oradata/pwerdes'
*.log_file_name_convert='/home/oradata/powerdes','/home/oradata/powerdes'
*.log_archive_config='DG_CONFIG=(pdunq,pdunq_dg)'
*.log_archive_dest_2='SERVICE=pdunq_dg  lgwr sync affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pdunq_dg'
*.log_archive_dest_state_2='ENABLE'


慣例產生新的spfile
shutdown 
create pfile from spfile;
startup 


3.4,重新註冊監聽模式
按照慣例的修改primary上的listener.ora以及tnsnames.ora都不需要修改了,因為原來的dg環境都已經配置好了。
配置最大可用模式:
配置最大可用模式:
SQL>startup
SQL>alter database set standby database to maximize availability;
  
3.5,在新的primary上備份資料庫
RMAN> backup database plus archivelog;
RMAN> backup current controlfile for standby;
RMAN> exit


3.6,備份組合、參數檔案、控制檔案同步
包括dump檔案目錄,資料檔案目錄,通過show parameter dest;,由於standby原來就有,所以各種目錄都不用重建立立,這一步驟省略


從從primary上copy資料檔案到standby上
在primary庫上執行:
ps:在primary上執行
copy閃回區內容
copy閃迴文件
cd /oracle/app/oracle/flash_recovery_area/
scp -r ./* 192.168.121.218:/oracle/app/oracle/flash_recovery_area/


copy參數檔案
cd /oracle/app/oracle/product/11.2.0/dbhome_1/dbs
scp -r ./* 192.168.121.218:/oracle/app/oracle/product/11.2.0/dbhome_1/dbs


copy監聽檔案,由於原來的dg環境已經有了,所以不必copy過去,下面的步驟可以省略。
cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
scp -r ./* 192.168.121.218:/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/


PS:至此以下操作基本在standby上操作,如有額外會有提示


4,在standby上修改設定檔
在standby庫 修改設定檔 在standby上修改,主要修改db_unique_name以及log_archive_dest_2,其它參數可以不變化,保持原狀,如下所示:
[oracle@powerlong5 admin]$ vim listener.ora 
*.db_unique_name='pdunq_dg'  #這裡填寫的是standby的db_unique_name名字
*.log_archive_dest_2='SERVICE=pdunq_dg  lgwr sync affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pdunq' # 這裡填寫的是primary的db_unique_name,主要是為了switchover的時候用。
PS:將*.log_archive_dest_2=後面的DB_UNIQUE_NAME改成primary的DB_UNIQUE_NAME值改為pdunq,這樣在做switchover的時候,新的primary能通過這個將redo日誌傳到新的standby上面去。
log_archive_dest_N 目的是告訴資料庫,把歸檔放到那裡去可選項,首先是本地,然後考慮遠端從庫,所以,假設A是主庫,B是從庫,切換之後B是主庫,A是從庫,所以,log_archive_dest_N需要設定為對方


4.1,重啟監聽 standby上
lsnrctl stop;
lsnrctl start;


4.2,恢複資料庫
在standby上面操作
先關閉oracle,產生參數檔案,然後將oracle啟動到nomount狀態,然後rman操作恢複
 SQL> shutdown immediate;
 SQL> create pfile from spfile;
 SQL> startup nomount
[oracle@powerlong5 admin]$ rman target sys/syspl1758@pdunq_dg auxiliary / 
RMAN> run {
allocate auxiliary channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
duplicate target database for standby nofilenamecheck dorecover;
release channel c1;
release channel c2;
}


4.3,關閉oracle
shutdown immediate
啟動資料庫
startup nomount;
alter database mount standby database;
alter database add standby logfile;
alter database add standby logfile;
alter database add standby logfile;
alter database recover managed standby database using current logfile disconnect from session;


4.4,primary、standby上驗證redo日誌應用狀態
archive log list;
standby庫上異常如下所示:
SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     0
Next log sequence to archive   0
Current log sequence      0
SQL>
redo日誌沒有被傳輸過來


4.5,查看歸檔參數,重新設定下:
alter system set log_archive_dest_2='SERVICE=pdunq_dg  lgwr sync affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pdunq_dg';
select open_mode , database_role from v$database;


然後再去看primary上的alert日誌,有如下資訊:
***********************************************************************


Fatal NI connect error 12514, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.121.218)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=pdunq_dg)(CID=(PROGRAM=oracle)(HOST=powerlong4)(USER=oracle))))


  VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 10-FEB-2015 16:11:34
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12564
    
TNS-12564: TNS:connection refused
    ns secondary err code: 0
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
Error 12514 received logging on to the standby
Errors in file /oracle/app/oracle/diag/rdbms/pdunq/powerdes/trace/powerdes_arc3_6627.trc:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
PING[ARC3]: Heartbeat failed to connect to standby 'pdunq_dg'. Error is 12514.


4.6,去check standby庫 ,查看name狀況,發現db_unique_name沒有設定對,如下所示
SQL> show parameter name;


NAME    TYPEVALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert    string/home/oradata/powerdes, /home/
oradata/powerdes
db_name     stringpowerdes
db_unique_name    stringpdunq
global_names    booleanFALSE
instance_name    stringpowerdes
lock_name_space     string
log_file_name_convert    string/home/oradata/powerdes, /home/
oradata/powerdes
service_names    stringpdtest
SQL> 
standby庫的db_unique_name不對,需要修改。


4.7,去standby庫上修改spfile參數
SQL> create pfile from spfile;
SQL> shutdown immediate;
[oracle@powerlong5 dbs]$ cp $ORACLE_HOME/dbs/initpowerdes.ora $ORACLE_HOME/dbs/initpowerdes.ora.bak
[oracle@powerlong5 dbs]$ vim $ORACLE_HOME/dbs/initpowerdes.ora
*.db_unique_name='pdunq_dg'
SQL> create spfile from pfile;
SQL> startup mount;


4.8,再check standby歸檔情況,正常,如下所示:
SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     31
Next log sequence to archive   0
Current log sequence      32
SQL> 
check下primary歸檔情況,如下所示:
SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     30
Next log sequence to archive   32
Current log sequence      32
SQL> 


OK,現在可以將standby庫open起來


5,開啟資料庫,啟動redo應用
alter database open;
啟動redo 應用
alter database recover managed standby database using current logfile disconnect ; 


primary庫做alter system switch logfile;操作,檢查standby是否有新的日誌。
primary庫:
SQL> alter system switch logfile;


System altered.


SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     31
Next log sequence to archive   33
Current log sequence      33
SQL> 

standby庫:
SQL> archive log list;
Database log mode      Archive Mode
Automatic archival      Enabled
Archive destination      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     32
Next log sequence to archive   0
Current log sequence      33
SQL> 


ok,歸檔日誌及時傳遞到standby庫,failover後新的standby的重建工作順利完成。
 ----------------------------------------------------------------------------------------------------------------
<著作權,文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!>
原部落格地址:        http://blog.itpub.net/26230597/viewspace-1433720/
原作者:黃杉 (mchdba)
----------------------------------------------------------------------------------------------------------------

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.