Oracle数据库数据恢复与数据修复

丢失非系统非当前活动回滚段表空间中的一个数据文件

首先是做一次热备份(因为上次已经做了不完全恢复resetlogs)
Microsoft Windows 2000 [Version 5.00.2195]

E:\>sqlplus internal
SQL>archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\BACKUPDB\archive
最早的概要信息日志序列 0
下一个存档日志序列 1
当前日志序列 1
SQL> @e:\backupdb\other\aa
TO_CHAR(SYSDATE,'' ………………..YY'2002-10-21 08:10:22'
SQL> @e:\backupdb\other\backup_ts.sql
SQL> set echo off head off feedback off pagesize 0;
21-10月-02

BEGINING ARCHIVE LOG NUMBER IS :
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\BACKUPDB\archive
最早的概要信息日志序列 0
下一个存档日志序列 1
当前日志序列 1

Begin Backup Tablespace SYSTEM.'D:\BACKUPDB\SYSTEM01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace RBS.'D:\BACKUPDB\RBS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace USERS.'D:\BACKUPDB\USERS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace TEMP.'D:\BACKUPDB\TEMP01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace TOOLS.'D:\BACKUPDB\TOOLS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .

Begin Backup Tablespace INDX.'D:\BACKUPDB\INDX01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .

Begin Backup CONTROLFILE 'D:\BACKUPDB\CONTROL01.CTL' ...
Successed End Backup The CONTROLFILE .

Begin Backup CONTROLFILE To Trace ...
Successed End Backup The CONTROLFILE .

Before Switch Log, The Current Log is:
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\BACKUPDB\archive
最早的概要信息日志序列 0
下一个存档日志序列 1
当前日志序列 1

Begin Backup Switch Current Log ...
Successed End Switch Log .

After Switch Log, The Ending Archive Log Number Is :
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\BACKUPDB\archive
最早的概要信息日志序列 1
下一个存档日志序列 2
当前日志序列 2
21-10月-02
SQL> --set termout on;
SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual;
'2002-10-21 08:10:54'

数据准备工作1
从下面的情况看,因为改变了数据库的结构,所以,首先需要一个热备或者冷备才能进行恢复。如果已经备份,可以找回数据insert into test2 values(2);,因为2是几经commit;的,3是没有commit的,所以能找会到2。3则会丢失。

SQL> alter tablespace system add datafile 'D:\BACKUPDB\SYSTEM02.DBF' size 10M;
表空间已更改。
SQL> alter tablespace users add datafile 'D:\BACKUPDB\USERS02.DBF' size 10M;
表空间已更改。
SQL> create tablespace test datafile 'D:\BACKUPDB\test01.dbf' size 10M;
表空间已创建。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\BACKUPDB\archive
最早的概要信息日志序列 1
下一个存档日志序列 2
当前日志序列 2
SQL> alter user lunar quota 10m on test;
SQL> create table test2(a number) tablespace test;
SQL> insert into test2 values(1);
SQL> alter system switch logfile;
系统已更改。
SQL> conn lunar/lunar
SQL> select * from tab;
TESTBACKUP3 TABLE

SQL> insert into test2 values(2);
SQL> insert into test2 values(3);
以上改动后需要作一次热备或者冷备,否则数据文件丢失后不能恢复(增加表空间,数据文件都要备份数据库)
SQL> conn internal
SQL> @e:\backupdb\other\aa
SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual;
'2002-10-21 08:10:05'
SQL> set termout off
SQL> @e:\backupdb\other\backup_ts.sql
SQL> --set termout off;
SQL> set echo off head off feedback off pagesize 0;
21-OCT-02
BEGINING ARCHIVE LOG NUMBER IS :
Database log mode Archive Mode
Automatic archival Enabled
Archive destination d:\BACKUPDB\archive
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence 5

Begin Backup Tablespace SYSTEM.'D:\BACKUPDB\SYSTEM01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace RBS.'D:\BACKUPDB\RBS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace USERS.'D:\BACKUPDB\USERS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace TEMP.'D:\BACKUPDB\TEMP01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace TOOLS.'D:\BACKUPDB\TOOLS01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace INDX.'D:\BACKUPDB\INDX01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace SYSTEM.'D:\BACKUPDB\SYSTEM02.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace USERS.'D:\BACKUPDB\USERS02.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup Tablespace TEST.'D:\BACKUPDB\TEST01.DBF' ...
已复制 1 个文件。
Successed End Backup This File .
Begin Backup CONTROLFILE 'D:\BACKUPDB\CONTROL01.CTL' ...
Successed End Backup The CONTROLFILE .
Begin Backup CONTROLFILE To Trace ...
Successed End Backup The CONTROLFILE .
Before Switch Log, The Current Log is:
Database log mode Archive Mode
Automatic archival Enabled
Archive destination d:\BACKUPDB\archive
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence 5

Begin Backup Switch Current Log ...
Successed End Switch Log .

After Switch Log, The Ending Archive Log Number Is :
Database log mode Archive Mode
Automatic archival Enabled
Archive destination d:\BACKUPDB\archive
Oldest online log sequence 4
Next log sequence to archive 6
Current log sequence 6
21-OCT-02

SQL> --set termout on;
SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual;
'2002-10-21 08:10:31'
1 row selected.

数据准备工作2
可以找回数据insert into test2 values(4);,因为4是几经commit;的,5是没有commit的,所以能找会到2。3则会丢失。
SQL> conn lunar/lunar
SQL> insert into test2 values(4);
SQL> commit;
SQL> insert into test2 values(5);
1 row created.

Shutdow abort,然后删除test01.dbf,模拟数据文件丢失
SQL> conn internal
SQL> shutdown abort
ORACLE instance shut down.

删除test01.dbf,把备份的数据文件test01.dbf拷贝过来
Mount数据库
SQL> startup mount;
………………

Database mounted.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 9 needs media recovery
ORA-01110: data file 9: 'D:\BACKUPDB\TEST01.DBF'

在打开数据库的时候,提示'D:\BACKUPDB\TEST01.DBF'需要介质恢复,因为他和其他的文件时间点不一致。

恢复数据文件(把最近的热备的文件拷贝过来)
SQL> recover datafile 'D:\BACKUPDB\TEST01.DBF';
Media recovery complete.
打开数据库
SQL> alter database open;
验证恢复结果:完全恢复
SQL> conn lunar/lunar
SQL> select * from test2;
说明:
? 首先是做一次热备(因为上次已经做了不完全恢复resetlogs)
? 以上改动后需要作一次热备或者冷备,否则数据文件丢失后不能恢复(增加表空间,数据文件都要备份数据库)

1. Shutdow abort,然后删除test01.dbf,模拟数据文件丢失
2. 删除test01.dbf,把备份的数据文件test01.dbf拷贝过来
3. Mount数据库
4. 恢复数据文件(把最近的热备的文件拷贝过来)
5. 打开数据库

shutdown abort的情况,恢复全部数据文件(不包括control和redo)

用热备的数据文件恢复(把热备的数据文件拷贝回来,不包括control和redo)
SQL> conn internal
SQL> shutdown abort
ORACLE instance shut down.

复制全部热备的数据文件过来(完全恢复成功!)
mount数据库
SQL> startup mount
ORACLE instance started.

完全恢复数据库
SQL> recover database;
ORA-00279: change 424112 generated at 10/20/2002 20:40:52 needed for thread 1
ORA-00289: suggestion : D:\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC
ORA-00280: change 424112 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 424125 generated at 10/20/2002 20:44:14 needed for thread 1
ORA-00289: suggestion : D:\BACKUPDB\ARCHIVE\BACKUPT001S00002.ARC
ORA-00280: change 424125 for thread 1 is in sequence #2
ORA-00278: log file 'D:\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC' no longer needed
for this recovery
…………………………………………………
Log applied.
Media recovery complete.

打开数据库
SQL> alter database open;
Database altered.
验证恢复结果:完全恢复
SQL> conn lunar/lunar
SQL> select * from test1;
完全恢复成功!

说明:
1. 复制全部热备的数据文件过来
2. mount数据库
3. 完全恢复数据库
4. 打开数据库

这篇文章现在暂无评论

*请不要发布广告、病毒连接以及违反祖国法律的言论!发表评论

打开表情 因为垃圾评论和广告评论的缘故,需要一段时间才能显示,请谅解

XHTML: 您可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>