單例項環境利用備份恢復RAC資料庫(四)

yangtingkun發表於2010-02-14

在另外一臺伺服器上利用備份恢復RAC資料庫的過程。

這一篇描述資料庫恢復過程中碰到的錯誤。

單例項環境利用備份恢復RAC資料庫(一):http://yangtingkun.itpub.net/post/468/496756

單例項環境利用備份恢復RAC資料庫(二):http://yangtingkun.itpub.net/post/468/496775

單例項環境利用備份恢復RAC資料庫(三):http://yangtingkun.itpub.net/post/468/496780

 

 

前面描述了整個恢復過程,在恢復過程中難免會碰到一些錯誤。有些錯誤很簡單,而有些錯誤的解決相對比較複雜。這裡簡單描述一下恢復過程中碰到的錯誤,以及這些錯誤對應的解決方法。

碰到的第一個錯誤是在使用sqlplus嘗試開啟資料庫時碰到的:

SQL> startup mount pfile=/export/home/oracle/inittradedb1.ora
ORA-00439: feature not enabled: Real Application Clusters
ORA-01078:
處理系統引數失敗

當時對應的初始化引數資訊為:

*.audit_file_dest='/data/oracle/admin/tradedb/adump'
*.background_dump_dest='/data/oracle/admin/tradedb/bdump'
*.cluster_database=true
*.cluster_database_instances=2
*.compatible='10.2.0.1.0'
*.control_files='+DATA/tradedb/control01.ctl'
*.core_dump_dest='/data/oracle/admin/tradedb/cdump'
*.db_block_size=16384
*.db_domain='us.oracle.com'
*.db_file_multiblock_read_count=16
*.db_name='tradedb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=tradedbXDB)'
*.global_names=TRUE
tradedb1.instance_number=1
tradedb2.instance_number=2
*.job_queue_processes=50
tradedb1.local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.62)(PORT = 1521))'
tradedb2.local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.63)(PORT = 1521))'
*.log_archive_dest_1='LOCATION=+DATA/tradedb/'
tradedb2.log_archive_dest_1='LOCATION=/data/oradata/tradedb/archivelog2'
tradedb2.log_archive_dest_2='SERVICE=tradedb1'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_local_first=FALSE
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=5000
*.pga_aggregate_target=1098907648
*.processes=300
*.remote_listener='LISTENERS_TRADEDB'
*.remote_login_passwordfile='EXCLUSIVE'
*.session_max_open_files=20
*.sessions=335
*.sga_target=4395630592
*.streams_pool_size=50331648
tradedb1.thread=1
tradedb2.thread=2
*.undo_management='AUTO'
*.undo_retention=10800
tradedb1.undo_tablespace='UNDOTBS1'
tradedb2.undo_tablespace='UNDOTBS2'
*.user_dump_dest='/data/oracle/admin/tradedb/udump'

由於當前是一個單例項環境,而初始化引數中設定了CLUSTER_DATABASETRUE,導致了上面的錯誤,只要將這個引數修改為FALSE,即可避免上面的錯誤。不過對於單例項環境而言,例項2對應的引數沒有意義,因此應該將所有例項2上對應的引數去掉。

下面這個錯誤仍然是啟動是碰到的:

SQL> startup mount pfile=/export/home/oracle/inittradedb1.ora
ORA-00119: invalid specification for system parameter REMOTE_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENERS_TRADEDB'
ORA-01078:
處理系統引數失敗

錯誤對應的初始化引數為:

*.audit_file_dest='/data/oracle/admin/tradedb/adump'
*.background_dump_dest='/data/oracle/admin/tradedb/bdump'
*.cluster_database=false
*.cluster_database_instances=1
*.compatible='10.2.0.1.0'
*.control_files='+DATA/tradedb/control01.ctl'
*.core_dump_dest='/data/oracle/admin/tradedb/cdump'
*.db_block_size=16384
*.db_domain='us.oracle.com'
*.db_file_multiblock_read_count=16
*.db_name='tradedb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=tradedbXDB)'
*.global_names=TRUE
*.job_queue_processes=50
*.log_archive_dest_1='LOCATION=+DATA/tradedb/'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_local_first=FALSE
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=5000
*.pga_aggregate_target=1098907648
*.processes=300
*.remote_listener='LISTENERS_TRADEDB'
*.remote_login_passwordfile='EXCLUSIVE'
*.session_max_open_files=20
*.sessions=335
*.sga_target=4395630592
*.streams_pool_size=50331648
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/data/oracle/admin/tradedb/udump'

這個錯誤是引數REMOTE_LISTENER導致的,由於沒有在tnsnames.ora中配置LISTENERS_TRADEDB資訊,導致啟動報錯。由於顯然不是RAC環境,完全沒有必要設定這個引數,直接將其從初始化引數檔案中去掉即可。

下面這個錯誤是在恢復時碰到的:

RMAN> restore database;

啟動 restore 07-8 -09
使用目標資料庫控制檔案替代恢復目錄
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore
命令 ( 08/07/2009 10:24:20 ) 失敗
RMAN-12001:
無法開啟通道 ORA_DISK_1
RMAN-10008:
無法建立通道上下文
RMAN-10003:
無法連線到目標資料庫
ORA-12154: TNS:
無法解析指定的連線識別符號

這時對應的RMAN配置資訊為:

RMAN> show all;

RMAN 配置引數為:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT '*' FORMAT   '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT '*' FORMAT   '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data/oracle/product/10.2/dbs/snapcf_tradedb1.f'; # default

由於控制檔案中保留了源資料庫環境的配置,導致恢復報錯。

解決方法很簡單,利用CONFIGURE命令清除掉控制檔案中的配置即可。當然也可以透過run的方式手工分配CHANNEL來執行恢復。

下面這個錯誤資訊最簡單:

SQL> recover database until cancel;
ORA-00283:
恢復會話因錯誤而取消
ORA-01610:
使用 BACKUP CONTROLFILE 選項的恢復必須已完成

在恢復資料庫的時候需要指定USING BACKUP CONTROLFILE語句,例如:

SQL> recover database until cancel using backup controlfile;
ORA-00279:
更改 1112442604608 ( 08/02/2009 00:18:15 生成) 對於執行緒 2 是必需的
ORA-00289:
建議: +DATA/tradedb/2_1466_620234770.dbf
ORA-00280:
更改 1112442604608 (用於執行緒 2) 在序列 #1466


指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。

最後一個錯誤發生在資料庫的開啟過程中:

SQL> alter database open resetlogs;
alter database open resetlogs
*
1 行出現錯誤:
ORA-00344:
無法重新建立聯機日誌 '/dev/vx/rdsk/datadg/tradedb_redo1_1_1_1g'
ORA-27040:
檔案建立錯誤, 無法建立檔案
SVR4 Error: 2: No such file or directory

由於當前是ASM磁碟組作為儲存介質,所以必須更改控制檔案中REDO日誌檔案的路徑和名稱。

利用型別下面的語句修改所有的redo檔案的路徑,就可以解決這個錯誤:

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_1_1_1g'
  2  to '+DATA/tradedb/tradedb_redo1_1_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_1_2_1g'
  2  to '+DATA/tradedb/tradedb_redo1_1_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_2_1_1g'
  2  to '+DATA/tradedb/tradedb_redo1_2_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_2_2_1g'
  2  to '+DATA/tradedb/tradedb_redo1_2_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_3_1_1g'
  2  to '+DATA/tradedb/tradedb_redo1_3_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_3_2_1g'
  2  to '+DATA/tradedb/tradedb_redo1_3_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_4_1_1g'
  2  to '+DATA/tradedb/tradedb_redo1_4_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo1_4_2_1g'
  2  to '+DATA/tradedb/tradedb_redo1_4_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_1_1_1g'
  2  to '+DATA/tradedb/tradedb_redo2_1_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_1_2_1g'
  2  to '+DATA/tradedb/tradedb_redo2_1_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_2_1_1g'
  2  to '+DATA/tradedb/tradedb_redo2_2_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_2_2_1g'
  2  to '+DATA/tradedb/tradedb_redo2_2_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_3_1_1g'
  2  to '+DATA/tradedb/tradedb_redo2_3_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_3_2_1g'
  2  to '+DATA/tradedb/tradedb_redo2_3_2_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_4_1_1g'
  2  to '+DATA/tradedb/tradedb_redo2_4_1_1g';

資料庫已更改。

SQL> alter database rename file '/dev/vx/rdsk/datadg/tradedb_redo2_4_2_1g'
  2  to '+DATA/tradedb/tradedb_redo2_4_2_1g';

資料庫已更改。

SQL> alter database open resetlogs;

資料庫已更改。

 

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

相關文章