Oracle用户管理的不完全恢复2:基于取消的恢复
模拟生产库场景
1.1关闭数据库
1 SQL> shutdown immediate 2 Database closed. 3 Database dismounted. 4 ORACLE instance shut down. 5 SQL>
1.2.冷备
1 -bash-3.00$ cp /u01/oradata/sunbak/* . 2 -bash-3.00$ ls -l 3 total 2214344 4 -rw-r----- 1 oracle oinstall 7389184 Jan 25 23:36 control01.ctl 5 -rw-r----- 1 oracle oinstall 7389184 Jan 25 23:37 control02.ctl 6 -rw-r----- 1 oracle oinstall 7389184 Jan 25 23:37 control03.ctl 7 -rw-r----- 1 oracle oinstall 104865792 Jan 25 23:37 example01.dbf 8 -rw-r----- 1 oracle oinstall 52429312 Jan 25 23:37 redo01.log 9 -rw-r----- 1 oracle oinstall 52429312 Jan 25 23:38 redo02.log 10 -rw-r----- 1 oracle oinstall 52429312 Jan 25 23:38 redo03.log 11 -rw-r----- 1 oracle oinstall 10493952 Jan 25 23:38 sun01_1.dbf 12 -rw-r----- 1 oracle oinstall 10493952 Jan 25 23:38 sun02_1.dbf 13 -rw-r----- 1 oracle oinstall 5251072 Jan 25 23:38 sun03_1.dbf 14 -rw-r----- 1 oracle oinstall 262152192 Jan 25 23:38 sysaux01.dbf 15 -rw-r----- 1 oracle oinstall 503324672 Jan 25 23:39 system01.dbf 16 -rw-r----- 1 oracle oinstall 20979712 Jan 25 23:39 temp01.dbf 17 -rw-r----- 1 oracle oinstall 31465472 Jan 25 23:39 undotbs01.dbf 18 -rw-r----- 1 oracle oinstall 5251072 Jan 25 23:39 users01.dbf 19 -bash-3.00$
1.3.开启数据库插入数据
1 SQL> startup 2 ORACLE instance started. 3 4 Total System Global Area 289406976 bytes 5 Fixed Size 1279820 bytes 6 Variable Size 79694004 bytes 7 Database Buffers 205520896 bytes 8 Redo Buffers 2912256 bytes 9 Database mounted. 10 Database opened. 11 SQL>
1.4 插入数据
1 SQL> select * from t order by 1; 2 3 ID NAME 4 ---------- ---------------- 5 0 oracle 6 1 oracle 7 2 oracle 8 3 oracle 9 4 oracle 10 5 oracle 11 6 oracle 12 13 7 rows selected. 14 15 SQL> insert into t values (8,'mysql'); 16 17 1 row created. 18 19 SQL> commit; 20 21 Commit complete. 22 23 SQL>
1.5“mysql”写入数据文件
1 SQL> alter system checkpoint; 2 3 System altered. 4 5 SQL> 6 -bash-3.00$ strings /u01/oradata/sunbak/sun01_1.dbf |grep mysql 7 mysql, 8 -bash-3.00$
1.6 归档(“mysql”已经被归档)
1 SQL> alter system switch logfile; 2 3 System altered. 4 5 SQL> 6 -bash-3.00$ strings 1_4_805672882.dbf|grep mysql 7 mysql 8 -bash-3.00$ 9 10 此时"mysql"存在两种类型文件中
1.7 再插入数据("mysql01")
1 SQL> insert into t values(9,'mysql01'); 2 3 1 row created. 4 5 SQL> commit; 6 7 Commit complete. 8 9 SQL>
1.8 将数据写入数据文件
1 SQL> alter system checkpoint; 2 3 System altered. 4 5 SQL> 6 -bash-3.00$ strings sun01_1.dbf|grep mysql01 7 myslq01, 8 -bash-3.00$ 9 10 #此时mysql01并未写入归档日志文件中
1.9 备份控制文件
1 SQL> alter database backup controlfile to trace as '/u01/admin/sun/udump/ctl20130129.sql'; 2 3 Database altered. 4 5 SQL>
2.模拟破坏场景
2.1 删除数据文件,控制文件,日志文件,归档日志文件保留("myslq"还存在,"mysql01"已不存在)
1 -bash-3.00$ pwd 2 /u01/oradata/sunbak 3 -bash-3.00$ ls -l 4 total 2215712 5 -rw-r----- 1 oracle oinstall 7389184 Jan 26 00:14 control01.ctl 6 -rw-r----- 1 oracle oinstall 7389184 Jan 26 00:14 control02.ctl 7 -rw-r----- 1 oracle oinstall 7389184 Jan 26 00:14 control03.ctl 8 -rw-r----- 1 oracle oinstall 104865792 Jan 26 00:02 example01.dbf 9 -rw-r----- 1 oracle oinstall 52429312 Jan 26 00:14 redo01.log 10 -rw-r----- 1 oracle oinstall 52429312 Jan 25 23:57 redo02.log 11 -rw-r----- 1 oracle oinstall 52429312 Jan 25 23:53 redo03.log 12 -rw-r----- 1 oracle oinstall 10493952 Jan 26 00:02 sun01_1.dbf 13 -rw-r----- 1 oracle oinstall 10493952 Jan 26 00:02 sun02_1.dbf 14 -rw-r----- 1 oracle oinstall 5251072 Jan 26 00:02 sun03_1.dbf 15 -rw-r----- 1 oracle oinstall 262152192 Jan 26 00:14 sysaux01.dbf 16 -rw-r----- 1 oracle oinstall 503324672 Jan 26 00:14 system01.dbf 17 -rw-r----- 1 oracle oinstall 20979712 Jan 25 22:02 temp01.dbf 18 -rw-r----- 1 oracle oinstall 31465472 Jan 26 00:09 undotbs01.dbf 19 -rw-r----- 1 oracle oinstall 5251072 Jan 26 00:02 users01.dbf 20 -bash-3.00$ rm -f * 21 -bash-3.00$
2.2 关闭数据库
1 SQL> shutdown abort 2 ORACLE instance shut down. 3 SQL>
2.3 将备份数据库文件拷贝过来
1 -bash-3.00$ pwd 2 /u01/oradata/sunbak 3 -bash-3.00$ 4 -bash-3.00$ cp /tmp/cold/* . 5 -bash-3.00$
2.4将数据库开到mount
1 SQL> startup mount 2 ORACLE instance started. 3 4 Total System Global Area 289406976 bytes 5 Fixed Size 1279820 bytes 6 Variable Size 79694004 bytes 7 Database Buffers 205520896 bytes 8 Redo Buffers 2912256 bytes 9 Database mounted. 10 SQL>
2.5 恢复
1 SQL> recover database using backup controlfile until cancel; 2 ORA-00279: change 697462 generated at 01/25/2013 23:34:43 needed for thread 1 3 ORA-00289: suggestion : /u01/admin/sun/arch/1_3_805672882.dbf 4 ORA-00280: change 697462 for thread 1 is in sequence #3 5 6 #注 查看 7 #-bash-3.00$ ls -l /u01/admin/sun/arch/1_3_805672882.dbf 8 #-rw-r----- 1 oracle oinstall 299520 Jan 25 23:53 /u01/admin/sun/arch/1_3_805672882.dbf 9 #-bash-3.00$ 10 #Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 11 12 ORA-00279: change 698002 generated at 01/25/2013 23:53:32 needed for thread 1 13 ORA-00289: suggestion : /u01/admin/sun/arch/1_4_805672882.dbf 14 ORA-00280: change 698002 for thread 1 is in sequence #4 15 ORA-00278: log file '/u01/admin/sun/arch/1_3_805672882.dbf' no longer needed 16 for this recovery 17 18 #此时 /u01/admin/sun/arch/1_4_805672882.dbf 文件不存在,故cancel 19 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 20 cancel 21 Media recovery cancelled. 22 SQL>
3.开启数据库
1 SQL> alter database open resetlogs; 2 3 Database altered. 4 5 SQL>
4.查看结果
1 SQL> select * from user1.t order by 1; 2 3 ID NAME 4 ---------- ---------------- 5 0 oracle 6 1 oracle 7 2 oracle 8 3 oracle 9 4 oracle 10 5 oracle 11 6 oracle 12 7 oracle 13 8 mysql 14 15 8 rows selected. 16 17 SQL>