程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 關於10gDG中的ORA-19527和ORA-00312錯誤解決示例

關於10gDG中的ORA-19527和ORA-00312錯誤解決示例

編輯:Oracle教程

關於10gDG中的ORA-19527和ORA-00312錯誤解決示例


這幾天在搭建10g DG Windows 2008 R2的測試環境,主要是明天要去給一客戶重新搭建一套生產庫的DG,其中發現一些問題,特此記錄一下

由於將要部署到生產環境,所以考慮在線搭建DG的方案,即不停庫的情況下,而問題主要就是出在不停庫時,用RAMN創建STANDBY的時候

通常在線搭建DG,主要是下面幾個步驟:

1. 確保主庫開啟歸檔,並開啟force logging模式

2. 主庫在線修改spifle,alter system set .... scope=both;並創建pfile

首先要確保所需修改的參支持在線修改,可以查看視圖v$parameter

SQL> select distinct issys_modifiable from v$parameter;


ISSYS_MODIFIABLE
---------------------------
DEFERRED
FALSE
IMMEDIATE

說明:
DFERRED:動態參數,修改後對當前活躍的session無效
FALSE:靜態參數,修改後需重啟數據庫
IMMEDIATE:動態參數,修改後立即對所有session生效

SQL> select name,issys_modifiable,value from v$parameter where name='xxxx'; xxxx為要修改的參數名

在需要改的幾個參數中,只有db_unique_name不支持在線修改

SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora10gpd,ora10gst)' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora10gpd' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=ora10gst LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10gst' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;
SQL> alter system set FAL_SERVER=ora10gst scope=both;
SQL> alter system set FAL_CLIENT=ora10gpd scope=both;
SQL> alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;

所以如果生產庫想不停庫搭建DG的話,那麼就要使用原有的db_unique_name,通常和db_name是同一個名字

修改完spfile以後,用它創建一個pfile,供備庫使用,create pfile from spfile;

3. 主庫創建standby redo logfile,alter database add standby logfile group # datafile ('xxxx') size 50M; xxxx指定路徑和文件名

4.創建listener.ora和tnsnames.ora,把生成的文件復制到備庫相應位置並修改

5. 主庫創建備庫控制文件、數據文件、歸檔日志文件備份集

rman target /
RMAN> backup full database format 'c:\backup\full_%d_%I_%U' include current controlfile for standby plus archivelog format 'c:\backup\arc_%d_%I_%U';
或者:
run
{
allocate channel d1 type disk;
backup format 'C:\backup\df_%d_%I_%U' database;
sql 'alter system archive log current';
backup format 'C:\backup\al_%d_%I_%U' archivelog all;
backup current controlfile for standby format 'C:\backup\cf_%d_%I_%U';
release channel d1;
}

6. 把pfile參數文件,密碼文件,拷貝到備庫%ORACLE_HOME%\database\下

7. 創建備庫實例(ora10g)及相關目錄

C:\Users\Administrator>oradim -new -sid ora10g

C:\oracle\product\10.2.0\fast_recovery_area
C:\oracle\product\10.2.0\admin\
C:\oracle\product\10.2.0\admin\adump
C:\oracle\product\10.2.0\admin\bdump
C:\oracle\product\10.2.0\admin\cdump
C:\oracle\product\10.2.0\admin\dpdump
C:\oracle\product\10.2.0\admin\pfile
C:\oracle\product\10.2.0\admin\udump

8. 把主庫備份集拷貝到備庫並進行恢復,主要是3個步驟

① nomount狀態下恢復備庫控制文件, RMAN> restore controlfile from 'C:\backup\xxxx'; xxxx為含有備庫控制文件的備份片名稱

② mount狀態下恢復數據庫,RMAN> restore database;

③ 恢復備庫歸檔日志文件,RMAN> restore archivelog all;

或在做完第①步後,在主庫open,備庫nomount狀態下連接到RMAN執行:
rman target sys/oracle@ora10gpd auxiliary /
run
{
allocate channel C1 device type disk;
allocate auxiliary channel C2 device type disk;
duplicate target database for standby nofilenamecheck;
release channel C1;
release channel C2;
}

9. 備庫創建standby redo logfile,大小位置需和主庫一致

10. 完成恢復並啟動mpr0進程,即啟用redo apply,alter database recover managed standby database disconnect from session;

如果一切順利,那麼此時備庫就會開始逐一應用主庫傳過來的歸檔日志文件

但,事實沒有這麼簡單,在我實際做下來的結果是,主庫的redo log日志文件無法傳遞到備庫,備庫的alert log日志會報 ORA-19527 和 ORA-00312 錯誤,如下:

ORA-19527: 必須重命名物理備用重做日志
ORA-00312: 聯機日志 1 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG'

這是由於10g以後,oracle為了加快swtichover的速度,在can become a primary之前就去clear the online logfiles了,而如果沒有設置log_file_name_convert,這個時候oracle可能就不能識別哪怕是冷備copy過來的路徑文件名都一模一樣的redo logfile,解決方案就是在主庫參數中添加log_file_name_convert,原來沒有用這個參數,是因為主備庫的log日志文件路徑都一樣(因為用了同一個數據庫實例名ora10g)

SQL> alter system set log_file_name_convert='C:\oracle\product\10.2.0\oradata\ora10g','C:\oracle\product\10.2.0\oradata\ora10g' scope=spfile;


log_file_name_convert 這個參數非在線可修改,必須重啟後才能生效:

\

這就有點尴尬,生產庫就必須重啟一下,也就是說必須停一下庫,哪怕只是幾分鐘,不過當設置完成,重啟standby,apply日志以後,看到alert log日志中果然可以看到clear online logfiles了,問題得到解決

備庫alert log日志會提示以下內容:

Thu Jul 17 10:49:21 2014
alter database recover managed standby database disconnect from session
MRP0 started with pid=16, OS id=2548
Managed Standby Recovery not using Real Time Apply
parallel recovery started with 2 processes
Thu Jul 17 10:49:26 2014
Waiting for all non-current ORLs to be archived...
Thu Jul 17 10:49:26 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\Z喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcmExMGdfbXJwMF8yNTQ4LnRyYzo8YnI+Ck9SQS0wMDMxMzogzt63qLTyv6rI1da+1+kgMSAo08PT2s/fs8wgMSkgtcSzydSxPGJyPgpPUkEtMDAzMTI6IMGqu/rI1da+IDEgz9+zzCAxOiA="C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Thu Jul 17 10:49:26 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 1 (用於線程 1) 的成員
ORA-00312: 聯機日志 1 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Clearing online redo logfile 1 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG--開始清除REDO01.LOG
Clearing online log 1 of thread 1 sequence number 64
Thu Jul 17 10:49:26 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 1 (用於線程 1) 的成員
ORA-00312: 聯機日志 1 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Thu Jul 17 10:49:27 2014
Completed: alter database recover managed standby database disconnect from session
Thu Jul 17 10:49:27 2014
Clearing online redo logfile 1 complete --清除online redo logfile 'REDO01.LOG' 完畢,此時會在oradata目錄生成一個REDO01.LOG文件
Thu Jul 17 10:49:27 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 2 (用於線程 1) 的成員
ORA-00312: 聯機日志 2 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO02.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Thu Jul 17 10:49:27 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 2 (用於線程 1) 的成員
ORA-00312: 聯機日志 2 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO02.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Clearing online redo logfile 2 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO02.LOG --開始清除REDO02.LOG
Clearing online log 2 of thread 1 sequence number 65
Thu Jul 17 10:49:27 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 2 (用於線程 1) 的成員
ORA-00312: 聯機日志 2 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO02.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Clearing online redo logfile 2 complete --清除online redo logfile 'REDO02.LOG' 完畢,此時會在oradata目錄生成一個REDO02.LOG文件
Thu Jul 17 10:49:28 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 3 (用於線程 1) 的成員
ORA-00312: 聯機日志 3 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO03.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Thu Jul 17 10:49:28 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 3 (用於線程 1) 的成員
ORA-00312: 聯機日志 3 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO03.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Clearing online redo logfile 3 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO03.LOG--開始清除REDO03.LOG
Clearing online log 3 of thread 1 sequence number 66
Thu Jul 17 10:49:28 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\bdump\ora10g_mrp0_2548.trc:
ORA-00313: 無法打開日志組 3 (用於線程 1) 的成員
ORA-00312: 聯機日志 3 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO03.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


Clearing online redo logfile 3 complete --清除online redo logfile 'REDO03.LOG' 完畢,此時會在oradata目錄生成一個REDO03.LOG文件
Media Recovery Waiting for thread 1 sequence 66

Thu Jul 17 10:51:25 2014

注意看備庫告警日志中提示的開始清除redo logfile的時間和下圖window目錄中這幾個文件創建的時間,就是在清除在線日志文件的你那一刻,在備庫生成了相應的文件。

也就是說,當啟用redo apply 的時候,備庫先會提示無法讀取參數中配置的在線日志文件,那後就會去清除該日志,並自動生成該文件,就是這麼個過程

\ \

當然,alert log還會繼續提示也不存在sandby redo logfile,如下:

Media Recovery Waiting for thread 1 sequence 66
Thu Jul 17 10:51:25 2014
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[2]: Assigned to RFS process 2100
RFS[2]: Identified database type as "physical standby'
Primary database is in MAXIMUM PERFORMANCE mode
Primary database is in MAXIMUM PERFORMANCE mode
Thu Jul 17 10:51:25 2014
Errors in file c:\oracle\product\10.2.0\admin\ora10g\udump\ora10g_rfs_2100.trc:
ORA-00313: 無法打開日志組 4 (用於線程 1) 的成員
ORA-00312: 聯機日志 4 線程 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\STDREDO04.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。

這個standby redo logfile和online redo logfile又有些不同,如果碰到無法打開,數據庫不會去清除並自動創建,而是需要我們手動去創建

但可以從v$log視圖中發現,該文件是已經存在於備庫控制文件中的(因為主庫在創建備庫控制文件備份的時候,就已經創建好了嘛),那就無法用語句再創建一次,會提示該文件已存在(而實際上物理並不存在),可以先drop掉,再重新創建,如果添加或刪除主庫online redo logfile,那麼需要先把standby_file_management參數的值改為manual,之後再改回auto

如果standby redo logfile配置有問題,那麼當切換保護模式到maximize availability或maximize protection時,會報:

ORA-16072: a minimum of one standby database destination is required

此時即使已經配置了LOG_ARCHIVE_DEST_2中已經配置了LGWR SYNC AFFIRM,open數據庫時會報:

ORA-03113: end-of-file on communication channel

這是因為,最高可用和最大保護這兩種模式必須使用LGWR進程來寫到standby redo logfile,如果這個條件不能保證,那麼就無法打開數據庫,強制斷開與數據庫的鏈接,以提供對數據庫的最大范圍的安全保護

等這些日志都順利在備庫建立後,備庫就可以開始同步應用主庫歸檔日志了:

Thu Jul 17 10:51:25 2014
RFS[1]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_66_9WGGKFWB_.ARC'
Thu Jul 17 10:51:30 2014
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_66_9WGGKFWB_.ARC
Thu Jul 17 10:51:50 2014
RFS[2]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_67_9WGGKFVT_.ARC'
Primary database is in MAXIMUM PERFORMANCE mode
Thu Jul 17 10:52:16 2014
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_67_9WGGKFVT_.ARC
Media Recovery Waiting for thread 1 sequence 68 (in transit)
Thu Jul 17 10:57:20 2014
RFS[2]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_68_9WGGL635_.ARC'
Primary database is in MAXIMUM PERFORMANCE mode
Thu Jul 17 10:57:22 2014
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_68_9WGGL635_.ARC
Media Recovery Waiting for thread 1 sequence 69 (in transit)
Thu Jul 17 10:57:35 2014
RFS[2]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_69_9WGGWJCK_.ARC'
Primary database is in MAXIMUM PERFORMANCE mode
Thu Jul 17 10:57:38 2014
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_69_9WGGWJCK_.ARC
Media Recovery Waiting for thread 1 sequence 70 (in transit)
Thu Jul 17 10:57:51 2014
RFS[2]: Archived Log: 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_70_9WGGWZ9C_.ARC'
Primary database is in MAXIMUM PERFORMANCE mode
Thu Jul 17 10:57:53 2014
Media Recovery Log C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10GST\ARCHIVELOG\2014_07_17\O1_MF_1_70_9WGGWZ9C_.ARC
Media Recovery Waiting for thread 1 sequence 71 (in transit)


可以看到,此時 sequence 70已經在備庫上應用,在等待主庫傳sequence 71的日志了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved