ORACLE資料庫一主多備DG環境(一對多)主備切換
ORACLE資料庫一主多備DG環境(一對多)主備切換
Mar282016 作者:dbdream 釋出:2016-03-28 18:14 分類:Oracle,oracle 10g,oracle 11g 搶沙發本文主要分享一對多(一主多備)的DG環境主備切換的案例,我們的一套生產環境,一主四備,其中3個備庫承載著查詢業務,還有一個DG沒有任務業務,由於主庫的儲存效能不給力,公司採購了新的儲存,這個DG就是為了切換到新儲存而搭建的,資料量1.5TB。
本文是在測試環境操作,之前並沒有切換過一對多的DG環境,而且網上基本沒有關於一對多DG環境切換的資料,官方文件也只是說自己選擇切換到哪個DG,也沒有詳細的介紹和案例。本文測試環境為一主兩備,版本為11.2.0.4.0。
以下是主庫的幾個主要引數的配置資訊:
01 |
NAME TYPE VALUE |
02 |
------------------------------------ ----------- ------------------------------ |
03 |
fal_client string |
04 |
fal_server string |
05 |
log_archive_config string dg_config=(orac2,orastd1,orastd2) |
06 |
log_archive_dest_1 string location=/u01/app/oracle/orada |
07 |
ta/arch valid_for=(all_logfile |
08 |
s,all_roles) db_unique_name=or |
09 |
ac2 |
10 |
log_archive_dest_2 string service=orastd1 lgwr async val |
11 |
id_for=(online_logfiles,primar |
12 |
y_role) db_unique_name=orastd1 |
13 |
log_archive_dest_3 string service=orastd2 lgwr async val |
14 |
id_for=(online_logfiles,primar |
15 |
y_role) db_unique_name=orastd2 |
以下是ORASTD1備庫的主要引數設定:
01 |
NAME TYPE VALUE |
02 |
------------------------------------ ----------- ------------------------------ |
03 |
log_archive_config string dg_config=(orac2,orastd1) |
04 |
og_archive_dest_1 string location=/u01/app/oracle/orada |
05 |
ta/arch valid_for=(all_logfile |
06 |
s,all_roles) db_unique_name=or |
07 |
astd1 |
08 |
og_archive_dest_2 string service=orac2 lgwr async valid |
09 |
_for=(online_logfiles,primary_ |
10 |
role) db_unique_name=orac2 |
11 |
fal_client string ORASTD1 |
12 |
fal_server string ORAC2 |
以下是ORASTD2備庫的主要引數設定:
01 |
NAME TYPE VALUE |
02 |
------------------------------------ ----------- ------------------------------ |
03 |
fal_client string ORASTD2 |
04 |
fal_server string ORAC2 |
05 |
log_archive_config string dg_config=(orac2,orastd2) |
06 |
log_archive_dest_1 string location=/u01/app/oracle/orada |
07 |
ta/arch valid_for=(all_logfile |
08 |
s,all_roles) db_unique_name=or |
09 |
astd2 |
10 |
log_archive_dest_2 string service=orac2 lgwr async valid |
11 |
_for=(online_logfiles,primary_ |
12 |
role) db_unique_name=orac2 |
在DG切換之前,一定要檢查當前環境是否可以切換,我在做這個測試的時候,因為是剛剛搭建的測試環境,而且搭建時已經測試,所以在切換之前沒有檢查。我之前就做過類似的案例,差點死的很慘,這裡簡單說一嘴,那是航天系統的一套資料庫,當時負責人找我去做切換測試,他們的DBA已經離職,離職前寫了一個切換方案,我到客戶機房的時候,客戶給我看了下那個方案,很簡單的方案,只有切換的命令,並沒有檢查的相關資訊,我看完方案後,直接提出方案不完成,切換之前需要檢查,因為我是第一次接觸這個資料庫,操作之前必須仔細檢查,萬一掉坑裡怎麼辦?我在檢查時發現,備庫和主庫之間差了半年多的延遲,而且備庫並沒有接收到這半年來的歸檔,檢查發現,備庫在半年之前,主機重啟,並沒人起備庫的監聽和資料庫,導致主庫的日誌傳不到備庫,經檢查發現備庫少了將近三千多個歸檔,短時間很難追得上,還好那個資料庫只有20個GB,我直接選擇重新搭建備庫了,然後順利的進行了主備切換。
在切換時,在主庫上是不可以選擇我要切換到哪個備庫的,這個選擇是在備庫上選擇的,下面進行SWITCHOVER切換。
主庫(ORAC2):
1 |
SQL> alter database commit to switchover to physical standby with session shutdown; |
2 |
3 |
Database altered. |
切換後,這個資料庫已經備關閉,啟動資料庫,這個資料庫已經變為備庫,啟動MRP程序。
01 |
SQL> startup |
02 |
ORACLE instance started. |
03 |
04 |
Total System Global Area 835104768 bytes |
05 |
Fixed Size 2257840 bytes |
06 |
Variable Size 528485456 bytes |
07 |
Database Buffers 301989888 bytes |
08 |
Redo Buffers 2371584 bytes |
09 |
Database mounted. |
10 |
Database opened. |
11 |
12 |
SQL> alter database recover managed standby database using current logfile disconnect from session; |
13 |
14 |
Database altered. |
15 |
16 |
SQL> select open_mode from v$database; |
17 |
18 |
OPEN_MODE |
19 |
-------------------- |
20 |
READ ONLY WITH APPLY |
21 |
22 |
SQL> select database_role,switchover_status from v$database; |
23 |
24 |
DATABASE_ROLE SWITCHOVER_STATUS |
25 |
---------------- -------------------- |
26 |
PHYSICAL STANDBY TO PRIMARY |
將ORAC2資料庫的FAL修為為ORASTD1。
1 |
SQL> alter system set fal_server=ORASTD1; |
2 |
3 |
System altered. |
主庫切換後,兩個備庫均變為TO PRIMARY狀態,這時就要選擇切換哪個備庫為主庫了。
1 |
SQL> select database_role,switchover_status from v$database; |
2 |
3 |
DATABASE_ROLE SWITCHOVER_STATUS |
4 |
---------------- -------------------- |
5 |
PHYSICAL STANDBY TO PRIMARY |
這裡選擇ORASTD1這個備庫切換為主庫。
ORASTD1:
1 |
SQL> alter database commit to switchover to primary; |
2 |
3 |
Database altered. |
切換後資料庫變為MOUNT狀態,開啟資料庫。
01 |
SQL> select open_mode from v$database; |
02 |
03 |
OPEN_MODE |
04 |
-------------------- |
05 |
MOUNTED |
06 |
07 |
SQL> alter database open; |
08 |
09 |
Database altered. |
10 |
11 |
SQL> select database_role,switchover_status from v$database; |
12 |
13 |
DATABASE_ROLE SWITCHOVER_STATUS |
14 |
---------------- -------------------- |
15 |
PRIMARY NOT ALLOWED |
因為之前ORASTD1這個備庫的log_archive_config引數並沒有新增ORASTD2這個備庫,現在變成了主庫,需要新增上所有的資料庫。
1 |
SQL> alter system set log_archive_config='dg_config=(orac2,orastd1,orastd2)'; |
2 |
3 |
System altered. |
切換日誌發現,日誌並沒有傳到備庫(ORAC2)。
1 |
SQL> alter system switch logfile; |
2 |
3 |
System altered. |
修改相關的log_archive_dest_state引數,日誌可以成功傳送到備庫(ORAC2),備庫(ORAC2)也可以正常應用,備庫(ORAC2)開始和主庫(ORASTD1)同步資料。
1 |
SQL> alter system set log_archive_dest_state_2=enable; |
2 |
3 |
System altered. |
因為ORASTD2這個資料庫之前的主是ORAC2,現在已經變成了備庫,需要把ORASTD2的主改成ORASTD1。因為ORASTD1並沒有配ORASTD2的引數,需要把ORASTD2新增進來。
1 |
SQL> ALTER SYSTEM SET log_archive_dest_3='service=orastd2 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orastd2'; |
2 |
3 |
System altered. |
將當前主庫添加了歸檔到ORASTD2後,還需要將ORASTD2的遠端歸檔資訊改為ORASTD1。
ORASTD2:
1 |
SQL> ALTER SYSTEM SET log_archive_dest_2='service=orastd1 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orastd1'; |
2 |
3 |
System altered. |
ORASTD2的FAL資訊從ORAC2修改為ORASTD1。
1 |
SQL> alter system set fal_server=ORASTD1; |
2 |
3 |
System altered. |
此時整個DG切換就已經完成,ORASTD2資料庫無需做其他操作,MRP程序也不需要重新啟動,此時主庫(ORASTD1)切換日誌,會成功傳送到所有的備庫(ORAC2,ORASTD2),兩個備庫會直接應用。
ORAC2:
01 |
Completed: alter database recover managed standby database using current logfile disconnect from session |
02 |
Clearing online redo logfile 3 complete |
03 |
Media Recovery Waiting for thread 1 sequence 31 |
04 |
05 |
Mon Jan 25 17:49:54 2016 |
06 |
Using STANDBY_ARCHIVE_DEST parameter default value as /u01/app/oracle/oradata/arch |
07 |
RFS[1]: Assigned to RFS process 17703 |
08 |
RFS[1]: Opened log for thread 1 sequence 32 dbid 1800997619 branch 901820147 |
09 |
Archived Log entry 24 added for thread 1 sequence 32 rlc 901820147 ID 0x6b5ca155 dest 2: |
10 |
RFS[1]: Opened log for thread 1 sequence 33 dbid 1800997619 branch 901820147 |
11 |
Archived Log entry 25 added for thread 1 sequence 33 rlc 901820147 ID 0x6b5ca155 dest 2: |
12 |
Mon Jan 25 17:49:54 2016 |
13 |
RFS[2]: Assigned to RFS process 17705 |
14 |
RFS[2]: Opened log for thread 1 sequence 31 dbid 1800997619 branch 901820147 |
15 |
RFS[1]: Opened log for thread 1 sequence 34 dbid 1800997619 branch 901820147 |
16 |
Archived Log entry 26 added for thread 1 sequence 34 rlc 901820147 ID 0x6b5ca155 dest 2: |
17 |
Archived Log entry 27 added for thread 1 sequence 31 rlc 901820147 ID 0x6b5ca155 dest 2: |
18 |
RFS[2]: Selected log 10 for thread 1 sequence 35 dbid 1800997619 branch 901820147 |
19 |
Mon Jan 25 17:49:54 2016 |
20 |
Archived Log entry 28 added for thread 1 sequence 35 ID 0x6b5ca155 dest 1: |
21 |
Mon Jan 25 17:49:55 2016 |
22 |
Primary database is in MAXIMUM PERFORMANCE mode |
23 |
RFS[3]: Assigned to RFS process 17707 |
24 |
RFS[3]: Selected log 10 for thread 1 sequence 36 dbid 1800997619 branch 901820147 |
25 |
Mon Jan 25 17:49:55 2016 |
26 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_31_901820147.dbf |
27 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_32_901820147.dbf |
28 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_33_901820147.dbf |
29 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_34_901820147.dbf |
30 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_35_901820147.dbf |
31 |
Media Recovery Waiting for thread 1 sequence 36 (in transit) |
32 |
Recovery of Online Redo Log: Thread 1 Group 10 Seq 36 Reading mem 0 |
33 |
Mem # 0: /u01/app/oracle/oradata/orac2/st01.log |
34 |
Mon Jan 25 17:50:19 2016 |
35 |
Expanded controlfile section 11 from 28 to 280 records |
36 |
Requested to grow by 252 records; added 9 blocks of records |
37 |
Archived Log entry 29 added for thread 1 sequence 36 ID 0x6b5ca155 dest 1: |
38 |
Mon Jan 25 17:50:19 2016 |
39 |
Primary database is in MAXIMUM PERFORMANCE mode |
40 |
Mon Jan 25 17:50:19 2016 |
41 |
Media Recovery Waiting for thread 1 sequence 37 |
42 |
RFS[4]: Assigned to RFS process 17713 |
43 |
RFS[4]: Selected log 10 for thread 1 sequence 37 dbid 1800997619 branch 901820147 |
44 |
Recovery of Online Redo Log: Thread 1 Group 10 Seq 37 Reading mem 0 |
45 |
Mem # 0: /u01/app/oracle/oradata/orac2/st01.log |
46 |
Mon Jan 25 17:51:03 2016 |
47 |
ALTER SYSTEM SET log_archive_dest_state_3='ENABLE' SCOPE=BOTH; |
48 |
Mon Jan 25 17:53:46 2016 |
49 |
Archived Log entry 30 added for thread 1 sequence 37 ID 0x6b5ca155 dest 1: |
50 |
Mon Jan 25 17:53:46 2016 |
51 |
RFS[4]: Selected log 10 for thread 1 sequence 38 dbid 1800997619 branch 901820147 |
52 |
Mon Jan 25 17:53:46 2016 |
53 |
Media Recovery Waiting for thread 1 sequence 38 (in transit) |
54 |
Recovery of Online Redo Log: Thread 1 Group 10 Seq 38 Reading mem 0 |
55 |
Mem # 0: /u01/app/oracle/oradata/orac2/st01.log |
56 |
RFS[4]: Selected log 11 for thread 1 sequence 39 dbid 1800997619 branch 901820147 |
57 |
Mon Jan 25 17:53:49 2016 |
58 |
Archived Log entry 31 added for thread 1 sequence 38 ID 0x6b5ca155 dest 1: |
59 |
Media Recovery Waiting for thread 1 sequence 39 (in transit) |
60 |
Recovery of Online Redo Log: Thread 1 Group 11 Seq 39 Reading mem 0 |
61 |
Mem # 0: /u01/app/oracle/oradata/orac2/st02.log |
ORASTD2:
01 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_31_901820147.dbf |
02 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_32_901820147.dbf |
03 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_33_901820147.dbf |
04 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_34_901820147.dbf |
05 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_35_901820147.dbf |
06 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_36_901820147.dbf |
07 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_37_901820147.dbf |
08 |
Media Recovery Waiting for thread 1 sequence 38 |
09 |
RFS[6]: Opened log for thread 1 sequence 38 dbid 1800997619 branch 901820147 |
10 |
Archived Log entry 14 added for thread 1 sequence 38 rlc 901820147 ID 0x6b5ca155 dest 3: |
11 |
Mon Jan 25 23:30:17 2016 |
12 |
Primary database is in MAXIMUM PERFORMANCE mode |
13 |
RFS[8]: Assigned to RFS process 14397 |
14 |
RFS[8]: No standby redo logfiles created for thread 1 |
15 |
RFS[8]: Opened log for thread 1 sequence 39 dbid 1800997619 branch 901820147 |
16 |
Media Recovery Log /u01/app/oracle/oradata/arch/1_38_901820147.dbf |
17 |
Media Recovery Waiting for thread 1 sequence 39 (in transit) |
有些引數可以提前設定好,這樣可以減少切換的時間,比如,選擇切換ORASTD1資料庫,那麼可以先停掉ORASTD2資料庫,並修改相關的引數,從ORAC2切換到ORASTD1後,直接起ORASTD2就可以了。