知识大全 无备份丢失部分数据文件和控制文件恢复
Posted 文件
篇首语:知识是为老年准备的最好食粮。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 无备份丢失部分数据文件和控制文件恢复相关的知识,希望对你有一定的参考价值。
前提:
需要有除丢失文件以外其他文件的备份
丢失的文件需要是在其他文件备份后创建的
所有其他文件备份后的归档都在存在
恢复步骤:
拷贝任一未丢失文件的备份回来
创建新控制文件 但控制文件不包括丢失的数据文件
进行恢复
碰到
ORA : recovery session canceled due to errors ORA : unnamed datafile(s) added to controlfile by media recovery ORA : data file : D:\\ORACLE\\ORADATA\\xxxx\\xxxx DBF
select name from v$datafile找出uname file
alter database create datafile D:\\ORACLE\\ORA \\DATABASE\\UNNAMEDxxxxx as D:\\ORACLE\\ORADATA\\ xxxx\\xxxx DBF ;
继续恢复
恢复完成 打开
可能会遇到的问题:
如果没有拷贝备份回来直接重建不包含丢失文件的控制文件时 可以打开数据库 但丢失的文件会显示成missingxxxx的file name 这时候就会不能恢复
试验过程:
Microsoft Windows XP [版本 ]
(C) 版权所有 Microsoft Corp
C:\\Documents and Settings\\qigong>oradim startup sid test
C:\\Documents and Settings\\qigong>sqlplus / as sysdba
SQL*Plus: Release Production on 星期三 月 : :
Copyright (c) Oracle All rights reserved
Connected to: Oracle Database g Enterprise Edition Release Production With the Partitioning OLAP and Data Mining options
SQL> shutdown immediate; Database closed Database dismounted ORACLE instance shut down SQL> exit Disconnected from Oracle Database g Enterprise Edition Release Producti With the Partitioning OLAP and Data Mining options
C:\\Documents and Settings\\qigong>sqlplus / as sysdba
SQL*Plus: Release Production on 星期三 月 : :
Copyright (c) Oracle All rights reserved
Connected to an idle instance
SQL> startup nomount; ORACLE instance started
Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes SQL> alter database mount; alter database mount * ERROR at line : ORA : error in identifying controlfile check alert log for more info
SQL> shutdown ORA : database not mounted
ORACLE instance shut down SQL> startup ORACLE instance started
Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes Database mounted Database opened SQL> alter system switch logfile;
System altered
SQL> /
System altered
SQL> /
System altered
SQL> create tablespace test datafile c:\\test dbf size m extent management local segment space management auto uniform size k;
Tablespace created
SQL> insert into testlost values( );
row created
SQL> mit;
Commit plete
SQL> create table testlost (a number) tablespace test ;
Table created
SQL> shutdown immediate; Database closed Database dismounted ORACLE instance shut down SQL> startup nomount ORACLE instance started
Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes
C:\\Documents and Settings\\qigong>rman
Recovery Manager: Release Production
Copyright (c) Oracle All rights reserved
RMAN> connect target
connected to target database: test (not mounted)
RMAN> restore controlfile from autobackup;
Starting restore at 月 using target database controlfile instead of recovery catalog allocated channel: ORA_DISK_ channel ORA_DISK_ : sid= devtype=DISK
recovery area destination: C:\\oracle\\product\\ \\flash_recovery_area database name (or lock name space) used for search: TEST channel ORA_DISK_ : autobackup found in the recovery area channel ORA_DISK_ : autobackup found: C:\\ORACLE\\PRODUCT\\ \\FLASH_RECOVERY_AREA\\TEST\\AUTOBACKUP\\ _ _ \\O _MF_S_ _ LOS FCX_ BKP channel ORA_DISK_ : controlfile restore from autobackup plete output filename=C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\CONTROL CTL output filename=C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\CONTROL CTL output filename=C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\CONTROL CTL Finished restore at 月
RMAN> exit
RMAN : WARNING: unable to generate V$RMAN_STATUS or V$RMAN_OUTPUT row RMAN : WARNING: disabling update of the V$RMAN_STATUS and V$RMAN_OUTPUT rows
SQL> alter database mount; alter database mount * ERROR at line : ORA : invalid password file C:\\oracle\\product\\ \\Db_ \\DATABASE\\PWDtest ORA
SQL> DECLARE devtype varchar ( ); done boolean; BEGIN devtype:=sys dbms_backup_restore deviceAllocate (type=> ident=> ); sys dbms_backup_restore restoreSetDatafile; sys dbms_backup_restore restoreDatafileTo(dfnumber=> toname=> c:\\test DBF ); sys dbms_backup_restore restoreBackupPiece(done=>done handle=> C:\\ FUAT K_ _ _ sys dbms_backup_restore deviceDeallocate; END; /
PL/SQL procedure successfully pleted
SQL> shutdown immediate; ORA : database not open Database dismounted ORACLE instance shut down SQL> startup nomount ORACLE instance started
Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes SQL> CREATE CONTROLFILE REUSE DATABASE TEST NORESETLOGS ARCHIVELOG MAXLOGFILES MAXLOGMEMBERS MAXDATAFILES MAXINSTANCES MAXLOGHISTORY LOGFILE GROUP C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\REDO LOG SIZE M GROUP C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\REDO LOG SIZE M GROUP C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\REDO LOG SIZE M STANDBY LOGFILE DATAFILE C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\SYSTEM DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\UNDOTBS DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\SYSAUX DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\USERS DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\EXAMPLE DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TEST DBF CHARACTER SET ZHS GBK ;
Control file created
SQL> recover database; ORA : change generated at / / : : needed for thread ORA : suggestion : C:\\ORACLE\\ARCHIVE\\ARC _ ORA : change for thread is in sequence #
Specify log: <RET>=suggested | filename | AUTO | CANCEL auto ORA : recovery session canceled due to errors ORA : unnamed datafile(s) added to controlfile by media recovery ORA : data file : C:\\TEST DBF
ORA : media recovery not started
SQL> select name from v$datafile;
NAME C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\SYSTEM DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\UNDOTBS DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\SYSAUX DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\USERS DBF C:\\ORACLE\\PRODUCT\\ \\ORADATA\\TEST\\EXAMPLE DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF C:\\TBS DBF
NAME C:\\TBS DBF C:\\TBS DBF C:\\TEST DBF C:\\WINDOWS\\SYSTEM \\UNNAMED
rows selected
SQL> alter database create datafile C:\\WINDOWS\\SYSTEM \\UNNAMED as c:\\test db
Database altered
SQL> recover database; Media recovery plete SQL> alter database open;
Database altered
SQL> select * from testlost ;
no rows selected
SQL> select * from testlost;
A 在上面这个试验里面我们可能还会有一个疑问 既然控制文件里面记载的是unamedxxxxxxx的文件名 数据字典的里面的filename也是 unamedxxxxxxx(实际上数据字典里面不保存文件名 所有的文件名都只包含在控制文件当中) 日志里也是没有记载文件名 那么当我们 recover database的时候为什么会出现
ORA : recovery session canceled due to errors
ORA : unnamed datafile(s) added to controlfile by media recovery
ORA : data file : C:\\TEST DBF
ORA : media recovery not started
Oracle他是从哪里得到这个unamedxxxxxxx文件的真实文件是 C:\\TEST DBF 呢?
先来看看日志里记载了什么东西
用logminer查一下
EXECUTE DBMS_LOGMNR_D BUILD(dictionary_filename => l_dictionary ora dictionary_location => /disk /oradata/ );
EXECUTE DBMS_LOGMNR ADD_LOGFILE( LogFileName => /disk /oradata/redo log Options => dbms_logmnr NEW);
EXECUTE DBMS_LOGMNR START_LOGMNR(DictFileName => /disk /oradata/l_dictionary ora );
SELECT sql_redo FROM V$LOGMNR_CONTENTS where upper(sql_redo) like %TEST% ;
SQL_REDO create tablespace test datafile c:\\test dbf size m reuse extent management local segment space management auto uniform size k; 只发现了这句ddl 并没有往数据字典里插入文件名
再来看create tablespace的trace文件 …… insert into ts$ (ts# name online$ contents$ undofile# undoblock# blocksize dflmaxext dflinit dflincr dflextpct dflminext dflminlen inc# owner# scnwrp scnbas pitrscnwrp pitrscnbas dflogging affstrength bitmapped plugged directallowed flags spare spare ) values (: : : : : : : : : : : : : : : : : : : : : : : : )
insert into file$ (file# blocks ts# status$ relfile# maxextend inc crscnwrp crscnbas spare ) values (: : DECODE(: NULL : ) : DECODE(: NULL : ) : : : : DECODE(: NULL : )) ……
这两条语句说明了oracle在ts$ file$分别插入了新创建表空间和文件的信息 但并不包括文件名
看起来好像这个文件名是无出处的 即不直接取至日志 也不存在于数据字典 控制文件中则存在着错误的文件名 那他究竟从哪里来呢?
看下控制文件中包含这个文件的dump 信息
DATA FILE # : (name # ) C:\\WINDOWS\\SYSTEM \\UNNAMED creation size= block size= status= x head= tail= dup= tablespace index= krfil= prev_file= unrecoverable scn: x / / : : Checkpoint cnt: scn: x d e / / : : Stop scn: x d e / / : : Creation Checkpointed at scn: x c / / : :
cha138/Article/program/Oracle/201311/16821相关参考
非归档 数据能恢复到最后一次备份 只能做全部恢复不能做部分恢复 只能脱机备份 归档 数据能恢复到失败点无数据丢失 可以热备份 完全恢复和部分恢复都行部分恢复文件中不一致的检查点可以用
如果您目前拥有一个冷备份但是缺少了其中的一个数据文件但你目前存在所有的归档如果您要恢复数据文件可以参考以下的示例 [oracle@jumpereygle]$sqlplus/assysdba S
一RMAN是Oracle提供的一个数据库备份和恢复工具 特点 )备份和恢复数据库表空间控制文件数据文件和归档文件 )校验备份数据集 )通过备份检查损坏块 )增量备份 )脚本能力 )备
在没有控制文件备份的情况下重新创建控制文件也是其中一个选择本文旨在帮助初学者学习之用谢谢!! 如何恢复一个只有完好数据文件的数据库? 本文欲将此数据文件恢复成数据库TTI实例名TTI $ORAC
[测试]数据库在非归档模式数据库MOUNT数据文件丢失有表空间备份 RMAN>backuptablespaceusers; 启动backup于月分配的通道:ORA_DISK_通道ORA_
系统环境 操作系统WindowsServer机器内存M 数据库 OracleiR()forNT企业版 安装路径C:\\ORACLE 模拟现象 可通过重建数据文件来恢复前提是归档日
本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例详细内容请大家参考下文 具体案例 一个磁盘损坏了并且丢失了一个数据库文件从一周前的热
oracle从备份的控制文件进行完全恢复 SYS@orcl#shutdownabort; ORACLE例程已经关闭 SYS@orcl# oracle@oracle:~/product//d
这里是Oracle使用其硬线路的位置由于转储的数据文件不能恢复到与其他文件一致的位置所以可能存在中断的数据并且Oracle不允许正常打开数据库 第步设置未文档化的实例参数并打开数据库 在初始化
步骤 修改trc文件(或者编写)你的createcontrolfile的脚本(或sql语句) 类似下面的例如保存到aaasql CREATECONTROLFILEREUSEDATABASES