Oracle案例:损坏数据文件的恢复方法

简介:

一:非归档模式下丢失或者损坏数据文件
在非归档模式下损坏或者丢失数据文件,如果有相应的备份,在一定程度上是可以恢复的,但是如果oracle过多的读写操作记录信息而导致redo重写的时候,恢复就会停滞,非归档下系统能自动恢复的仅仅限于redo中存在的记录。
 

可以成功恢复案例
SQL> startup
ORACLE instance started.

Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened
SQL> create table test(a int);
Table created.
SQL> insert into test values(1);
1 row created.
SQL> /
1 row created.
SQL> /
1 row created.
SQL> /
1 row created.
SQL> commit;
Commit complete.
SQL> exit;
[oracle@www oradata]$ cd cicro/
[oracle@www cicro]$ ls
control01.ctl  cwmlite01.dbf  indx01.dbf  redo02.log    temp01.dbf     users01.dbf  control02.ctl  drsys01.dbf    odm01.dbf   redo03.log    tools01.dbf  xdb01.dbf control03.ctl  example01.dbf  redo01.log  system01.dbf  undotbs01.dbf
[oracle@www cicro]$ pwd
/opt/oracle/oradata/cicro
[oracle@www cicro]$ sqlplus "/as sysdba"
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>exit;
[oracle@www cicro]$ cp ./*.dbf  ../
[oracle@www cicro]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jul 25 19:44:31 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 – Production
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> insert into test values(3333);
1 row created.
SQL> /
1 row created.
SQL> /
1 row created.
SQL> /
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
         A
----------
         1
         1
         1
         1
      3333
      3333
      3333
      3333
8 rows selected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>exit;
[oracle@www cicro]$ rm –rf ./*.dbf
[oracle@www cicro]$ sqlplus "/as sysdba"
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/cicro/system01.dbf'
SQL> quit
[oracle@www cicro]$ mv ../*.dbf  .
[oracle@www cicro]$ ls
control01.ctl cwmlite01.dbf  indx01.dbf  redo02.log    temp01.dbf     users01.dbf control02.ctl  drsys01.dbf    odm01.dbf   redo03.log    tools01.dbf xdb01.dbf control03.ctl  example01.dbf  redo01.log  system01.dbf  undotbs01.dbf
[oracle@www cicro]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jul 25 17:56:06 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL> select * from test;
         A
----------
         1
         1
         1
         1
     33333
     33333
     33333
     33333
8 rows selected.
至此,恢复成功!


不完全恢复的案例


基本操作与上面相同,还是首先建立一张表,然后插入数据:
1:建表,写入数据,然后关闭数据库
SQL> create table gaojf1 as select * from all_objects;
Table created.
SQL> insert into gaojf1 select * from gaojf1;
29614 rows created.
SQL> /
59228 rows created. (即为现在此表数据有118456列)
SQL>commit;
SQL>shutdown immediate
2:备份所有的数据文件
3:启动数据库继续插入数据
[oracle@www cicro]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jul 25 18:07:19 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production
SQL> insert into gaojf1 select * from gaojf1;
118456 rows created.
SQL> /
236912 rows created.
SQL> /
473824 rows created.
SQL> /
947648 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from gaojf1;

  COUNT(*)
----------
   1895296
SQL> /
1895296 rows created.
SQL> /
3790592 rows created.(如果能够完全恢复,此表应该有3790592*2列)
SQL> commit;
Commit complete.
期间,查看日志信息如下:
Wed Jul 26 13:02:54 2006
Thread 1 opened at log sequence 1
  Current log# 3 seq# 1 mem# 0: /opt/oracle/oradata/cicro/redo03.log
Successful open of redo thread 1.

Wed Jul 26 13:03:56 2006
Thread 1 advanced to log sequence 2
  Current log# 1 seq# 2 mem# 0: /opt/oracle/oradata/cicro/redo01.log

Wed Jul 26 13:05:41 2006
Thread 1 advanced to log sequence 3
  Current log# 2 seq# 3 mem# 0: /opt/oracle/oradata/cicro/redo02.log

Wed Jul 26 13:09:04 2006
Thread 1 advanced to log sequence 4
  Current log# 3 seq# 4 mem# 0: /opt/oracle/oradata/cicro/redo03.log

Wed Jul 26 13:09:29 2006
Thread 1 advanced to log sequence 5
  Current log# 1 seq# 5 mem# 0: /opt/oracle/oradata/cicro/redo01.log
可以看到,redo文件在不断的循环重写,当一个redo写完后继续写第二个redo,然后是第三个,当第三个写完后继续回来重写第一个,依此类推。此时sequence也在不断的增加。
从上面的时间可以看出,redo的切换频率,但是不能单纯看上面的两个时间间隔就确定redo的切换频率是多少,redo切换的频率应该是个平均值,不是看单纯的两个redo之间的切换时间来计算,应看应用的环境,业务的繁忙程度。
一般建议redo的正常切换频率为20-30分钟切换一次。
因此应该根据业务的大小,合理的设计redo文件的大小,保证正常的切换频率!

4:关闭数据库,删除现有的所有数据文件。
5:重新启动数据库,进行恢复测试
[oracle@www cicro]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jul 25 18:15:57 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/opt/oracle/oradata/cicro/system01.dbf'
SQL> recover database;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
此时由于没有arch1_98.dbf归档文件,所以这样恢复输入auto显然不行,那么只有输入CANCEL
SQL> recover database;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/opt/oracle/oradata/cicro/system01.dbf'
仍然不能打开数据库,还是提示system01.dbf'需要恢复。
输入此时的在线日志试试看。
SQL> recover database;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/opt/oracle/oradata/cicro/redo01.log
ORA-00310: archived log contains sequence 104; sequence 98 required
ORA-00334: archived log: '/opt/oracle/oradata/cicro/redo01.log'

SQL> recover database;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/opt/oracle/oradata/cicro/redo02.log
ORA-00310: archived log contains sequence 105; sequence 98 required
ORA-00334: archived log: '/opt/oracle/oradata/cicro/redo02.log'

SQL> recover database;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/opt/oracle/oradata/cicro/redo03.log
ORA-00310: archived log contains sequence 106; sequence 98 required
ORA-00334: archived log: '/opt/oracle/oradata/cicro/redo03.log'
看来现在的情况是redo文件的中记录的sequence值大于需要的sequence值98,所以恢复也是不成功的。
由此可知,redo文件每写满一个文件,sequence号码就会增加一次,然后覆盖原来信息从头开始继续写入,如果是归档模式,则把写满的redo文件备份归档,然后sequence值增加一次,继续下一轮的写redo操作。因为上面的insert语句操作记录很大,导致redo文件覆盖重写了3次,sequence也从原来的redo03的98上升到redo03的106,这个就是没有归档导致redo重写,丢失数据是在所难免的。但是现在的问题是要如何打开数据库。
6:重新关闭数据库,修改数据库启动参数initsid.ora参数,加入以下隐含参数:
_allow_resetlogs_corruption=true
然后用initsid.ora参数启动数据库。
7:进行不完全恢复
[oracle@www cicro]$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jul 25 18:15:57 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/opt/oracle/oradata/cicro/system01.dbf'
数据库在加入隐含参数后,只是告诉oracle,启动时候不再检测文件的一致性,但是如果有文件损坏,文件要进行恢复等等,还会有不能open的报错提示,此时可以根据情况,如果报错的文件不存在或者不能修复,就offline掉,如果能恢复就输入恢复命令,然后用resetlogs打开数据库。
SQL> recover database until cancel;
ORA-00279: change 19476655 generated at 07/25/2006 17:54:46 needed for thread 1
ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch1_98.dbf
ORA-00280: change 19476655 for thread 1 is in sequence #98
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
输入cancel
Media recovery cancelled.
SQL>alter database open resetlogs (进行不完全恢复)
SQL>select count(*) from gaojf1;

  COUNT(*)
----------
     118456
这样基本就可以打开数据库了,但是原来的表gaojf1中的数据有一部分丢失了,存在的仅仅为备份数据时刻的信息。

  追究丢失的原因,就是由于数据库没有归档,导致redo文件被覆盖重写,数据丢失。

打开数据库后要马上备份数据,然后去掉刚才加入的隐含参数。最好重新建库,把数据重新导入。


二:归档模式下丢失或损坏一个数据文件


首先就using bakcup controlfile的使用简单说明如下:
(1):如果你的redo和archive log都正常的话,可以作用
1. CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS
2. RECOVER DATABASE 
3. ALTER DATABASE OPEN
(2):如果是redo和/或archive log损坏,而数据库恢复又必需的话,才用
1. CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS
2. RECOVER DATABASE USING BACKUP CONTROLFILE
3. ALTER DATABASE OPEN RESETLOGS
如果你用了 using backup controlfile,就必须用resetlogs同步。
 

OS备份恢复方案


在归档方式下损坏或丢失一个数据文件,如果存在相应的备份与该备份以来的归档日志,恢复还是比较简单的,可以作到尽量少的Down机时间,并能做到数据库的完全恢复。
1、连接数据库,创建测试表并插入记录
SQL*Plus: Release 8.1.6.0.0 - Production on Tue May 6 13:46:32 2003
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
SQL> connect internal/password as sysdba;
Connected.
SQL> create table test(a int) tablespace users;
Table created
SQL> insert into test values(1);
1 row inserted
SQL> commit;
Commit complete

2、备份数据库
热备脚本hotbak.sql如下:
rem     script:hotbak.sql
rem     creater:gaojf
rem     date:5.8.2003
rem     desc:backup all database datafile in archive

--connect database
connect /as sysdba;

--archive
alter system archive log current;
--start

alter tablespace system begin backup;
!cp /opt/oracle/oradata/gaojf/system01.dbf  /opt/oracle/oradata.bak;
alter tablespace system end backup;

alter tablespace users begin backup;
!cp /opt/oracle/oradata/gaojf/users01.dbf /opt/oracle/oradata.bak;
alter tablespace users end backup;

alter tablespace tools begin backup;
!cp /opt/oracle/oradata/gaojf/tools01.dbf /opt/oracle/oradata.bak;
alter tablespace tools end backup;

alter tablespace indx begin backup;
!cp /opt/oracle/oradata/gaojf/indx01.dbf /opt/oracle/oradata.bak;
alter tablespace indx end backup;

alter tablespace indx begin backup;
!cp /opt/oracle/oradata/gaojf/gaojfdb.dbf /opt/oracle/oradata.bak;
alter tablespace indx end backup;

alter tablespace indx begin backup;
!cp /opt/oracle/oradata/gaojf/temp01.dbf /opt/oracle/oradata.bak;
alter tablespace indx end backup;

alter tablespace indx begin backup;
!cp /opt/oracle/oradata/gaojf/undotbs01.dbf /opt/oracle/oradata.bak;
alter tablespace indx end backup;
--end

--bak control file
--binary
alter database backup controlfile to '/opt/oracle/oradata.bak/controlfile.000';
--ascii
alter database backup controlfile to trace;

执行此脚本
SQL> @hotbak.sql 或在DOS下 svrmgrl @hotbak.sql

3、继续在测试表中插入记录
SQL> insert into test values(2);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
                         A
---------------------------------------
                         1
                         2
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.

4、关闭数据库,模拟丢失数据文件
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down
C:\>del D:\ORACLE\ORADATA\TEST\USERS01.DBF
模拟媒体毁坏

5、启动数据库错误,脱机该数据文件
SQL> startup
ORACLE instance started.

Total System Global Area  102020364 bytes
Fixed Size                    70924 bytes
Variable Size              85487616 bytes
Database Buffers           16384000 bytes
Redo Buffers                  77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF'
还可以查看报警文件(见上一个恢复案例)或动态视图v$recover_file
如SQL> select * from v$recover_file;

     FILE# ONLINE  ERROR                 CHANGE# TIME
---------- ------- ------------------ ---------- -----------
         3 ONLINE                        1013500 2003-05-07

脱机数据文件
SQL> alter database datafile 3 offline drop;
Database altered.

6、打开数据库,拷贝备份回来(restore),恢复(recover)该数据文件,并联机
SQL> alter database open;
Database altered.

拷贝备份从备份处
copy d:\databak\users01.dbf  d:\oracle\oradata\test;
恢复该数据文件
SQL> recover datafile 3;(对某个数据文件进行恢复)
ORA-00279: change 1053698 generated at 05/07/2003 17:51:26 needed for thread 1
ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC
ORA-00280: change 1053698 for thread 1 is in sequence #304

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 1053701 generated at 05/07/2003 17:51:39 needed for thread 1
ORA-00289:suggestion:D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00305.ARC
ORA-00280: change 1053701 for thread 1 is in sequence #305
ORA-00278:logfile'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC' nolonger needed for this recovery

Log applied.
Media recovery complete.
恢复成功,联机该数据文件
SQL> alter database datafile 3 online;
Database altered.

SQL> alter database datafile 3 offline drop; 
Database altered.

SQL> alter database datafile 3 online;
alter database datafile 3 online
*
ERROR at line 1:
ORA-01113: file 3 needs media recovery
ORA-01110: data file 3: ''D:\ORACLE\ORADATA\TEST\USERS01.DBF'
如果是单纯的offline datafile,那么将不会触发文件检查点,只有针对offline tablespace的时候才会触发文件检查点,这就是上面为什么online datafile需要media recovery。而online tablespace不需要。
进行recover 恢复:
SQL> recover datafile 3;
Media recovery complete.
SQL> alter database datafile 3 online;
Database altered.

7、检查数据库的数据(完全恢复)
SQL> select * from test;
                         A
---------------------------------------
                         1
                         2
说明:
1、采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从备份后到数据库崩溃时的数据都不会丢失。
2、可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件,如只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率)
3、如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法(第5步中需要对数据文件一一脱机,第6步中需要对数据文件分别恢复),也可以采用整个数据库的恢复方法。
4、如果是系统表空间的损坏,不能采用此方法

三:丢失多个数据文件,实现整个数据库的恢复
OS备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复


1、连接数据库,创建测试表并插入记录
SQL*Plus: Release 8.1.6.0.0 - Production on Tue May 6 13:46:32 2003
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
SQL> connect internal/password as sysdba;
Connected.
SQL> create table test(a int);
Table created
SQL> insert into test values(1);
1 row inserted
SQL> commit;
Commit complete

2、备份数据库,备份除临时数据文件后的所有数据文件
SQL> @hotbak.sql 或在DOS下 svrmgrl @hotbak.sql

3、继续在测试表中插入记录
SQL> insert into test values(2);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
                         A
---------------------------------------
                         1
                         2
SQL> 
System altered.
SQL> alter system switch logfile;
System altered.

4、关闭数据库,模拟丢失数据文件
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down

C:\>del D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF
C:\>del D:\ORACLE\ORADATA\TEST\INDX01.DBF
C:\>del D:\ORACLE\ORADATA\TEST\TOOLS01.DBF
C:\>del D:\ORACLE\ORADATA\TEST\RBS01.DBF
模拟媒体毁坏(这里删除多个数据文件)

5、启动数据库,检查错误
SQL> STARTUP
ORACLE instance started.
Total System Global Area  102020364 bytes
Fixed Size                    70924 bytes
Variable Size              85487616 bytes
Database Buffers           16384000 bytes
Redo Buffers                  77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF'

详细信息可以查看报警文件
ORA-1157 signalled during: ALTER DATABASE OPEN...
Thu May 08 09:39:36 2003
Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003
Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: 'D:\ORACLE\ORADATA\TEST\RBS01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003
Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003
Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: 'D:\ORACLE\ORADATA\TEST\INDX01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

通过查询v$recover_file可以看到
SQL> select * from v$recover_file;

     FILE# ONLINE  ERROR                 CHANGE# TIME
---------- ------- ------------------ ---------- -----------
         1 ONLINE  FILE NOT FOUND              0 
         2 ONLINE  FILE NOT FOUND              0 
         5 ONLINE  FILE NOT FOUND              0 
         6 ONLINE  FILE NOT FOUND              0
有四个数据文件需要恢复

6、拷贝备份回到原地点(restore),开始恢复数据库(recover)
restore过程:
C:\>copy D:\DATABAK\SYSTEM01.DBF D:\ORACLE\ORADATA\TEST\
C:\>copy D:\DATABAK\TEST\INDX01.DBF D:\ORACLE\ORADATA\TEST\
C:\>copy D:\DATABAK\TEST\TOOLS01.DBF D:\ORACLE\ORADATA\TEST\
C:\>copy D:\DATABAK\TEST\RBS01.DBF.DBF D:\ORACLE\ORADATA\TEST\

Recover过程:
SQL> recover database;(全库恢复)
ORA-00279: change 1073849 generated at 05/08/2003 08:58:35 needed for thread 1
ORA-00289:suggestion D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC
ORA-00280: change 1073849 for thread 1 is in sequence #311
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 1073856 generated at 05/08/2003 09:03:27 needed for thread 1
ORA-00289:suggestion :D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC
ORA-00280: change 1073856 for thread 1 is in sequence #312
ORA-00278:logfile'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC' nolonger needed for this recovery

ORA-00279: change 1073858 generated at 05/08/2003 09:11:43 needed for thread 1
ORA-00289:suggestion:D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC
ORA-00280: change 1073858 for thread 1 is in sequence #313
ORA-00278:logfile'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC' nolonger needed for this recovery

ORA-00279: change 1073870 generated at 05/08/2003 09:11:46 needed for thread 1
ORA-00289:suggestion:D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00314.ARC
ORA-00280: change 1073870 for thread 1 is in sequence #314
ORA-00278:logfile'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC' nolonger needed for this recovery

Log applied.
Media recovery complete.

7、打开数据库,检查数据库的数据(完全恢复)
SQL> alter database open;
Database altered.
SQL> select * from test;
                         A
---------------------------------------
                         1
                         2

说明:
1、只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据)
2、适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复
3、恢复过程在mount下进行,如果恢复成功,再打开数据库,down机时间可能比较长一些。


















本文转自南非蚂蚁51CTO博客,原文链接: http://blog.51cto.com/ixdba/558261,如需转载请自行联系原作者



相关文章
|
6天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
1月前
|
Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
10 0
|
6天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
6天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
6天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
6天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据&quot;瘦身&quot;;热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的&quot;透视&quot;工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
6天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。

相关实验场景

更多

推荐镜像

更多