在另外一台服务器上利用备份恢复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_DATABASE为TRUE,导致了上面的错误,只要将这个参数修改为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 中
指定日志: {
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博客 ” ,链接:https://blog.itpub.net/4227/viewspace-627259/ ,如需转载,请注明出处,否则将追究法律责任。