SQL> startup ORACLE 例程已经启动。 Total System Global Area 105978600 bytes Fixed Size 453352 bytes Variable Size 79691776 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> select * from a; select * from a * ERROR 位于第 1 行: ORA-00942: 表或视图不存在 已用时间: 00: 00: 00.00 SQL> create table a (a int) tablespace users; 已用时间: 00: 00: 00.02 SQL> insert into a values (10) 2 ; 已用时间: 00: 00: 00.00 SQL> commit; 已用时间: 00: 00: 00.00 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:oracleoradatartestarchive 最早的概要日志序列 1 下一个存档日志序列 2 当前日志序列 2 SQL> alter system switch logfile; 已用时间: 00: 00: 00.00 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:oracleoradatartestarchive 最早的概要日志序列 2 下一个存档日志序列 3 当前日志序列 3 SQL> alter system switch logfile; 已用时间: 00: 00: 03.00 SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; 已用时间: 00: 00: 00.00 SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; 已用时间: 00: 00: 00.00 SQL> select * from a; 已用时间: 00: 00: 00.00 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:oracleoradatartestarchive 最早的概要日志序列 4 下一个存档日志序列 5 当前日志序列 5 RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default 这里是CONFIGURE CONTROLFILE AUTOBACKUP OFF RMAN> run { 2> allocate channel C1 type disk; 3> backup full tag 'FullBackup' format 'D:backupfull%d_%u_%s_%p.dbf' database include current controlfile; 4> sql ' alter system archive log current'; 5> release channel C1; 6> } 备份集列表 =================== BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 1 Full 191M DISK 00:00:21 09-6月 -06 BP 关键字: 1 状态: AVAILABLE 标记:FULLBACKUP 段名:D:BACKUPFULLRTEST_02HL6K65_2_1.DBF 包含的 SPFILE: 修改时间: 08-6月 -06 备份集 1 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 Full 69776 09-6月 -06 D:ORACLEORADATARTESTSYSTEM01.DBF 2 Full 69776 09-6月 -06 D:ORACLEORADATARTESTUNDOTBS01.DBF 3 Full 69776 09-6月 -06 D:ORACLEORADATARTESTUSERS01.DBF 注意这里的SCN,以后要恢复到这个SCN.这里没有用backup filesperset 3 archivelog all delete input;命令备份归档文件.如果这个执行了这个命令那么在最后恢复的时候要restore归档文件. 3.删表空间 SQL> drop tablespace users including contents; 已用时间: 00: 00: 01.02 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:oracleoradatartestarchive 最早的概要日志序列 4 下一个存档日志序列 5 当前日志序列 5 SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; SQL> startup nomount; ORACLE 例程已经启动。 Total System Global Area 105978600 bytes Fixed Size 453352 bytes Variable Size 79691776 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes RMAN> restore controlfile from 'D:backupFULL02HL6FFO_2_1'; 6.用dbms_backup_restore还原所有数据文件.注意是所有的数据文件,而不单是users表空间的数据文件. SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1'); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'D:oracleo radatartestSYSTEM01.DBF'); 8 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'D:oracleo radatartestUNDOTBS01.DBF'); 9 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'D:oracleo radatartestUSERS01.DBF'); 10 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:backupFU LLRTEST_02HL6K65_2_1.DBF', params=>null); 11 sys.dbms_backup_restore.deviceDeallocate; 12 END; 13 / 已用时间: 00: 00: 02.02 /这时已经有D:oracleoradatartestUSERS01.DBF文件了. SQL> startup force mount; ORACLE 例程已经启动。 Total System Global Area 105978600 bytes Fixed Size 453352 bytes Variable Size 79691776 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 7.不完全恢复数据库到scn=69776时,注意这里要做不完全恢复,如果用until cancel,就恢复不了users表空间 RMAN> Recover database until scn 69776; 启动 recover 于 09-6月 -06 使用通道 ORA_DISK_1 存档日志线程 1 序列 4 已作为文件 D:ORACLEORADATARTESTREDO01.LOG 存在于磁盘上 存档日志文件名 =D:ORACLEORADATARTESTREDO01.LOG 线程 =1 序列 =4 完成介质的恢复 完成 recover 于 09-6月 -06 (如果开始备份了归档文件,并删除了,那么要先用dbms_backup_restore.restoreSetArchivedLog来恢复归档文件,如果直接执行RMAN>restore ARCHIVELOG ALL会报错RMAN-20242: specification does not match any archive log in the recovery catalog) DECLARE devtype varchar2(256); done boolean; BEGIN devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1'); sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'D:ORACLEORADATAARCHIVELOG'); sys.dbms_backup_restore.restoreArchivedLogRange; sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:TESTRMANFULL_LOG_03HKHN39_1_1.BAK', params=>null); sys.dbms_backup_restore.deviceDeallocate; END; / 8.打开数据库 SQL> alter database open; alter database open * ERROR 位于第 1 行: ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 已用时间: 00: 00: 00.04 SQL> alter database open resetlogs; 已用时间: 00: 00: 06.07 SQL> select * from a; 最初想通过rman来恢复数据文件,但是发现不行,全备中控制文件的备份没有记录备份的信息,如果是CONFIGURE CONTROLFILE AUTOBACKUP ON,那么通过 控制文件单独备份的备份集来恢复控制文件,那么就可以rman来恢复数据文件. |