Oracle―用户管理的完全恢复(二)(二)
ver datafile 1;
Media recovery complete.
SQL> recover datafile 12;
Media recovery complete.
或者使用recover database;
可以再查看一下 视图v$recover_file已经没有内容了,
SQL> select * from v$recover_file;
no rows selected
5.打开数据库,查看表Dave.t的内容是否恢复,
SQL> alter database open;
Database altered.
SQL> select * from Dave.t;
ID NAME
---------- ----------
0 Dave.Sun
1 sunshine
2 sunny
可以看到表Dave.t中的数据已经恢复回来了。
五.实验二
在数据库打开的状态时,数据文件丢失或者损坏(非系统表空间和undo表空间里的文件),在数据库打开时怎么恢复。
1.在表Dave.t中插入一行数据,备份中是不含有这条记录的,1如下,
SQL> insert into t values(3,'wound');
1 row created.
SQL> commit;
Commit complete.
切换日志,可以将内存中的数据写入数据文件中和把当前联机重做日志文件进行归档。
SQL> alter system switch logfile;
System altered.
2.将数据文件app1_01.dbf 删除,然后查看视图v$recover_file,
[oracle@oracle11g wilson]$ rm -f app1_01.dbf
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
12 OFFLINE OFFLINE FILE NOT FOUND 0
可以看到12号文件已经not found了,关于12号文件的文件名是什么,可以查看视图v$datafile;
SQL> select file#,name from v$datafile;
FILE# NAME
---------- -----------------------------------
1 /u01/oradata/wilson/system01.dbf
2 /u01/oradata/wilson/sysaux01.dbf
3 /u01/oradata/wilson/undotbs01.dbf
4 /u01/oradata/wilson/users01.dbf
5 /u01/oradata/wilson/example01.dbf
8 /u01/oradata/wilson/smallundo1.dbf
12 /u01/oradata/wilson/app1_01.dbf
3.恢复数据文件,因为正在打开数据库的状态下,所以先要将有问题的数据文件offline。
SQL> alter database datafile 12 offline;
Database altered.
或者使用文件名也行。
4.将备份的数据文件复制到/u01/oradata/wilson下(还原数据文件),
[oracle@oracle11g wilson]$ cp /u01/ubackup/hot/app1_01.dbf /u01/oradata/wilson/
如果是复制到新的目录下,那么还需要如下命令,
alter database rename file ‘........’ to ‘.........’;来修改控制文件。
5.恢复数据文件,将其状态改为online,
SQL> recover datafile 12;
Media recovery complete.
SQL> alter database datafile 12 online;
Database altered.
6.查看表Dave.t中的数据是否恢复,
SQL> select * from Dave.t order by 1;
ID NAME
---------- ----------
0 Dave.Sun
1 sunshine
2 sunny
3 wound
可以看到数据已经恢复了。
六.实验三
数据库在关闭状态文件损坏(不能是系统表空间中的文件),业务需求要先打开数据库,再进行恢复。
1.先打开数据库,在表Dave.t中添加一行数据,新添加的数据在原先备份中是没有的,把这些数据放到归档日志文件或者联机重做日志文件中,最后查看是否恢复了。
SQL> insert into t values(4,'mm');
1 row created.
SQL> commit;
Commit complete.
把当前联机重做日志文件归档,
SQL> alter system archive log current;
System altered.
2.关闭数据库,模拟损坏app1_01.dbf文件,
[oracle@oracle11g wilson]$ rm -f app1_01.dbf (模拟损坏文件)
这个时候可以在数据库关闭的情况下恢复这个数据文件,但是现在因为业务要求,需要先打开数据库,
3.打开数据库,自动进入了mount状态了,查看视图v$recover_file,
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
12 ONLINE ONLINE FILE NOT FOUND 0
可以看到12号文件是not found了,同样也可以查看视图v$datafile来找到文件名。
4.先将12号文件offline,然后直接打开数据库
SQL> alter database datafile 12 offline;
Database altered.
SQL> al