Oracle―用户管理的完全恢复(二)(三)

2014-11-24 16:56:11 · 作者: · 浏览: 2
ter database open;
Database altered.
现在数据库可以使用了,但是不能访问有损坏的数据文件。
5.恢复数据文件,查看表Dave.t中的数据是否恢复,
还原数据文件
[oracle@oracle11g wilson]$ cp /u01/ubackup/cold/app1_01.dbf /u01/oradata/wilson/
恢复数据文件
SQL> recover datafile 12;
Media recovery complete.
把数据文件状态改为online,
SQL> alter database datafile 12 online;
Database altered.
查看表Dave.t中的数据,
SQL> select * from Dave.t order by 1;
ID NAME
---------- ----------
0 Dave.Sun
1 sunshine
2 sunny
3 wound
4 mm
可以看到在备份中的数据和在联机重做日志文件或者归档日志文件中的数据都已经恢复了。
七.实验四
数据文件没有备份,但是丢失了,怎么使用联机重做日志和归档日志文件进行恢复。
这样的情况下,有几个条件需要满足才能完成恢复:
(1)数据文件不能是系统表空间中的文件,因为重做日志不能应用于它。
(2)在这个数据文件创建之后,所有的归档日志文件都在。
(3)在数据文件损坏后,控制文件没有重新创建,还包含着被损坏文件的文件名。
1.先创建个表空间和数据文件,然后在用户Dave下创建表和插入数据,
SQL> create tablespace app2 datafile '/u01/oradata/wilson/app2_01.dbf' size 10m;
Tablespace created.
在Dave用户下,
SQL> create table t2 (id int,name char(10)) tablespace app2;
Table created.
SQL> insert into t2 values(0,'Dave');
1 row created.
SQL> commit;
Commit complete.
让内存中的数据写到数据文件中,
SQL> alter system checkpoint;
System altered.
即表t2中的数据写到了app2_01.dbf数据文件上。
2.删除app2_01.dbf数据文件,模拟文件损坏,
[oracle@oracle11g wilson]$ rm -f app2_01.dbf
查看视图v$recover_file会看到没有记录,怎么回事?
SQL> select * from v$recover_file;
no rows selected
这是因为数据库还没有发现有文件丢失,等到要使用这个数据文件时才能发现。
等一会发现,
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
6 OFFLINE OFFLINE FILE NOT FOUND 0
再通过视图v$datafile可以看到6号文件对应的数据文件名。
3.将有问题的数据文件offline,然后从新创建一个,
SQL> alter database datafile 6 offline;
Database altered.
新建个app2_01.dbf数据文件,这个时候这个文件还是空的,
SQL> alter database create datafile '/u01/oradata/wilson/app2_01.dbf';
Database altered.
4.恢复文件,查看结果
SQL> recover datafile 6;
Media recovery complete.
SQL> alter database datafile 6 online;
Database altered.
SQL> select * from Dave.t2;
ID NAME
---------- -----------------------------------
0 Dave
可以看到完成了数据恢复。