正确答案:D
一、模拟上题的错误:
1、删除4号文件
- [oracle@mydb ~]$ cd /u01/app/oracle/oradata/ocm/
- [oracle@mydb ocm]$ rm -rf users01.dbf
2、数据库宕机
- sys@OCM> shutdown abort;
- ORACLE instance shut down.
3、启动数据库报错,与上题报错一样
- sys@OCM> startup
- ORACLE instance started.
- Total System Global Area 839282688 bytes
- Fixed Size 2233000 bytes
- Variable Size 583011672 bytes
- Database Buffers 247463936 bytes
- Redo Buffers 6574080 bytes
- Database mounted.
- ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
- ORA-01110: data file 4: '/u01/app/oracle/oradata/ocm/users01.dbf'
4、如果试图在没有执行advise failure命令时使用repair failure命令,将出现如下错误:
- [oracle@mydb ~]$ rman target /
- RMAN> repair failure;
- using target database control file instead of recovery catalog
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of repair command at 09/01/2013 23:15:16
- RMAN-06954: REPAIR command must be preceded by ADVISE command in same session
主要原因是:在运行repairfailure之前,要先运行advise failure,让rman列出错误,并且生成修复脚本,之后运行repair failure修复错误。
一、正确的恢复的过程如下:
1、 启动RMAN客户机,并使用前一节介绍的数据库修复命令来解决丢失数据问题,我们从list failure命令开始:
- RMAN> list failure;
- List of Database Failures
- =========================
- Failure ID Priority Status Time Detected Summary
- ---------- -------- --------- ------------- -------
- 2002 HIGH OPEN 01-SEP-13 One or more non-system datafiles are missing
2、advisefailure命令对记录在自动诊断信息库中的所有故障给出建议。默认时,此命令只列出具有critical或high优先级的那些故障。除了产生所有输入故障的摘要外,此命令还对每个故障提供一个建议修复选项。通常,advise failure命令同时给出自动和手动修复选项。在advisefailure命令输出结束时,RMAN生成一个脚本,列出建议的修复选项的细节。如果你想自己进行修复,可以直接使用这个脚本,或者对它进行修改。
- RMAN> advise failure;
- List of Database Failures
- =========================
- Failure ID Priority Status Time Detected Summary
- ---------- -------- --------- ------------- -------
- 2002 HIGH OPEN 01-SEP-13 One or more non-system datafiles are missing
- analyzing automatic repair options; this may take some time
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: SID=10 device type=DISK
- analyzing automatic repair options complete
- Mandatory Manual Actions
- ========================
- no manual actions available
- Optional Manual Actions
- =======================
- 1. If file /u01/app/oracle/oradata/ocm/users01.dbf was unintentionally renamed or moved, restore it
- Automated Repair Options
- ========================
- Option Repair Description
- ------ ------------------
- 1 Restore and recover datafile 4
- Strategy: The repair includes complete media recovery with no data loss
- Repair script: /u01/app/oracle/diag/rdbms/ocm/ocm/hm/reco_3275375759.hm
3、利用advise failure命令提供的建议,epair failure根据建议修复错误。
- RMAN> repair failure;
- Strategy: The repair includes complete media recovery with no data loss
- Repair script: /u01/app/oracle/diag/rdbms/ocm/ocm/hm/reco_3275375759.hm
- contents of repair script:
- # restore and recover datafile
- restore datafile 4;
- recover datafile 4;
- sql 'alter database datafile 4 online';
- Do you really want to execute the above repair (enter YES or NO)? Y
- executing repair script
- Starting restore at 01-SEP-13
- using channel ORA_DISK_1
- channel ORA_DISK_1: starting datafile backup set restore
- channel ORA_DISK_1: specifying datafile(s) to restore from backup set
- channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/ocm/users01.dbf
- channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/11.2.0/dbs/0uoiptgq_1_1
- channel ORA_DISK_1: piece handle=/u01/app/oracle/product/11.2.0/dbs/0uoiptgq_1_1 tag=TAG20130901T230250
- channel ORA_DISK_1: restored backup piece 1
- channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
- Finished restore at 01-SEP-13
- Starting recover at 01-SEP-13
- using channel ORA_DISK_1
- starting media recovery
- media recovery complete, elapsed time: 00:00:01
- Finished recover at 01-SEP-13
- sql statement: alter database datafile 4 online
- repair failure complete
- Do you want to open the database (enter YES or NO)? Y
- database opened