Oracle――不完全恢复步骤(二)
do03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/u01/oradata/wilson/system01.dbf',
'/u01/oradata/wilson/sysaux01.dbf',
'/u01/oradata/wilson/undotbs01.dbf',
'/u01/oradata/wilson/users01.dbf',
'/u01/oradata/wilson/example01.dbf',
'/u01/oradata/wilson/app1_01.dbf',
'/u01/oradata/wilson/smallundo1.dbf'
CHARACTER SET AL32UTF8
;
注意上面语句之间能有空格行,
中间略..........
下面语句是脚本中的,也删除了,可以手工执行,
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'
SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'
SIZE 104857600 REUSE AUTOEXTEND OFF;
执行脚本,
SQL> @/tmp/wilson.sql
执行下面语句,因为联机重做日志丢失,所以恢复到某个日志切换序列号处,
SQL> recover database using backup controlfile until cancel;
提示,输入cancel
打开数据库,
SQL> alter database open resetlogs;
然后执行恢复临时表空间,
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'
SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'
SIZE 104857600 REUSE AUTOEXTEND OFF;
是脚本中的语句。
为什么删除脚本最后的四条语句? 因为没有了联机重做日志文件,所以脚本中RECOVER DATABASE USING BACKUP CONTROLFILE命令会出错,必须要使用until cancel进行人工干预。
6.查看表Dave.sunny
SQL> select * from sunny;
ID NAME
---------- ----------
3 memory
1 Jasper
可以看到没有了记录(4,’king’),这是因为记录(3,’memory’)被存放到了归档日志文件中,而记录4没有,所以只能是不完全的恢复。
五.基于
系统更改号的恢复
找到需要指定恢复的SCN号,然后使用命令recover database until change 号即可;
方法和上面说明的差不多。
六.RMAN的不完全恢复
它和用户管理的不完全恢复差不多,只是是使用RMAN来进行的,下面来举个例子来说明一下,
1.在Dave用户下,创建表和插入数据,
SQL> create table test (id int,name char(10));
Table created.
SQL> insert into test values(0,'heihei');
1 row created.
SQL> commit;
写到数据文件中
SQL> alter system checkpoint;
System altered.
2.RMAN连接上数据库,备份数据文件
RMAN> backup database format '/u01/backup/rman_hot_%U';
3.记录时间和删除表
SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2013-09-06:00:53:43
SQL> drop table test;
Table dropped.
现在怎么恢复表? 在10g版本引用了闪回技术,可以使不完全恢复更方便。
4.在这里数据库进入mount状态,RMAN连接数据执行脚本
RMAN> run{
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> allocate channel c3 type disk;
5> set until time “2013-09-06:00:53:43';
6> restore database;
7> recover database;
8> alter database open resetlogs;}
即可。
RMAN的不完全恢复还可以指定日志文件的sequence号,命令如下,
Set until sequence 120 thread 1;