oracle用户管理的完全恢复6:控制文件损坏(控制文件前后内容改变)

场景描述:控制文件损坏(控制文件内容变化)

1.1.备份

1 SQL> alter database backup controlfile to '/u01/admin/sun/udump/c.bin';

2 

3 Database altered.

4 

5 SQL> 

1.2.查看当前表空间

 1 SQL> select ts#,name from v$tablespace order by 1;

 2 

 3        TS# NAME

 4 ---------- ------------------------------

 5          0 SYSTEM

 6          1 UNDOTBS1

 7          2 SYSAUX

 8          3 TEMP

 9          4 USERS

10          6 EXAMPLE

11          7 SUN01

12          8 SUN02

13 

14 8 rows selected.

15 

16 SQL>

2模拟场景
2.1.创建表空间sun03 (控制文件能容将被修改)

1 SQL> create tablespace sun03 datafile '/u01/oradata/sunbak/sun03_1.dbf' size 5M

2   2  extent management local uniform

3   3  segment space management auto;

4 

5 Tablespace created.

6 

7 SQL> 

2.2在sun03上建表 插入数据

 1 SQL> conn user1/user1

 2 Connected.

 3 SQL> create table t4 (id int,name varchar2(16)) tablespace sun03;

 4 

 5 Table created.

 6 

 7 SQL> insert into t4 values(0,'oracle');

 8 

 9 1 row created.

10 

11 SQL> commit;

12 

13 Commit complete.

14 

15 SQL> 

2.3损坏当前控制文件

 1 -bash-3.00$ pwd

 2 /u01/oradata/sunbak

 3 -bash-3.00$ ls -l

 4 total 2195216

 5 -rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control01.ctl

 6 -rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control02.ctl

 7 -rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control03.ctl

 8 -rw-r-----   1 oracle   oinstall 104865792 Jan 25 18:33 example01.dbf

 9 -rw-r-----   1 oracle   oinstall 52429312 Jan 25 18:17 redo01.log

10 -rw-r-----   1 oracle   oinstall 52429312 Jan 25 19:13 redo02.log

11 -rw-r-----   1 oracle   oinstall 52429312 Jan 25 18:17 redo03.log

12 -rw-r-----   1 oracle   oinstall 10493952 Jan 25 18:33 sun01_1.dbf

13 -rw-r-----   1 oracle   oinstall 10493952 Jan 25 18:33 sun02_1.dbf

14 -rw-r-----   1 oracle   oinstall 5251072 Jan 25 19:09 sun03_1.dbf

15 -rw-r-----   1 oracle   oinstall 251666432 Jan 25 19:13 sysaux01.dbf

16 -rw-r-----   1 oracle   oinstall 503324672 Jan 25 19:13 system01.dbf

17 -rw-r-----   1 oracle   oinstall 20979712 Jan 23 04:03 temp01.dbf

18 -rw-r-----   1 oracle   oinstall 31465472 Jan 25 19:13 undotbs01.dbf

19 -rw-r-----   1 oracle   oinstall 5251072 Jan 25 18:33 users01.dbf

20 -bash-3.00$ rm -f control*

21 -bash-3.00$ 

3.关闭数据库

1 SQL> shutdown abort

2 ORACLE instance shut down.

3 SQL>

4恢复
4.1.将备份的控制文件拷贝过来

1 -bash-3.00$ pwd

2 /u01/oradata/sunbak

3 -bash-3.00$ 

4 -bash-3.00$ cp /u01/admin/sun/udump/c.bin control01.ctl

5 -bash-3.00$ cp /u01/admin/sun/udump/c.bin control02.ctl

6 -bash-3.00$ cp /u01/admin/sun/udump/c.bin control03.ctl

7 -bash-3.00$

4.2 开启到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              92276916 bytes

 7 Database Buffers          192937984 bytes

 8 Redo Buffers                2912256 bytes

 9 Database mounted.

10 SQL> 

11 #查看当前表空间,此时sun03不存在

12 SQL> select ts#,name from v$tablespace order by 1;

13 

14        TS# NAME

15 ---------- ------------------------------

16          0 SYSTEM

17          1 UNDOTBS1

18          2 SYSAUX

19          3 TEMP

20          4 USERS

21          6 EXAMPLE

22          7 SUN01

23          8 SUN02

24 

25 8 rows selected.

26 

27 SQL>

4.3 恢复

 1 SQL> recover database using backup controlfile;

 2 ORA-00279: change 687115 generated at 01/25/2013 18:33:51 needed for thread 1

 3 ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf

 4 ORA-00280: change 687115 for thread 1 is in sequence #26

 5 #此时恢复提示需要归档日志文件1_26_805319563.dbf,到归档目录查看不存在此归档日志文件

 6 #说明1_26_805319563.dbf的内容在redo日志文件中,目前不确定在哪一个文件中,只能一个个尝试

 7 #-bash-3.00$ ls -ltr

 8 #total 111836

 9 ..............

10 #-rw-r-----   1 oracle   oinstall    3584 Jan 23 04:35 1_23_805319563.dbf

11 #-rw-r-----   1 oracle   oinstall   87552 Jan 25 11:26 1_24_805319563.dbf

12 #-rw-r-----   1 oracle   oinstall 9251840 Jan 25 18:17 1_25_805319563.dbf

13 

14 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

15 /u01/oradata/sunbak/redo01.log

16 ORA-00310: archived log contains sequence 25; sequence 26 required

17 ORA-00334: archived log: '/u01/oradata/sunbak/redo01.log'

18 

19 

20 SQL> 

21 #说明数据不再redo01.log中

4.4再次执行恢复

 1 SQL> recover database using backup controlfile;

 2 ORA-00279: change 687115 generated at 01/25/2013 18:33:51 needed for thread 1

 3 ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf

 4 ORA-00280: change 687115 for thread 1 is in sequence #26

 5 

 6 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

 7 /u01/oradata/sunbak/redo02.log

 8 ORA-00283: recovery session canceled due to errors

 9 ORA-01244: unnamed datafile(s) added to control file by media recovery

10 ORA-01110: data file 8: '/u01/oradata/sunbak/sun03_1.dbf'

11 

12 

13 ORA-01112: media recovery not started

14 

15 

16 SQL> 

17 #此时/u01/oradata/sunbak/sun03_1.dbf文件名 已经加入到了控制文件中

18 #-bash-3.00$ strings control01.ctl |grep sun

19 #/u01/oradata/sunbak/sun03_1.dbf

4.5查看alter日志

 1 ALTER DATABASE RECOVER    LOGFILE '/u01/oradata/sunbak/redo02.log'  

 2 Fri Jan 25 19:38:28 2013

 3 Media Recovery Log /u01/oradata/sunbak/redo02.log

 4 File #8 added to control file as 'UNNAMED00008'. Originally created as:

 5 '/u01/oradata/sunbak/sun03_1.dbf'

 6 Some recovered datafiles maybe left media fuzzy

 7 Media recovery may continue but open resetlogs may fail

 8 Fri Jan 25 19:38:32 2013

 9 Media Recovery failed with error 1244

10 ORA-283 signalled during: ALTER DATABASE RECOVER    LOGFILE '/u01/oradata/sunbak/redo02.log'  ...

11 Fri Jan 25 19:38:32 2013

12 ALTER DATABASE RECOVER CANCEL 

13 ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ...

4.6 继续恢复(此步骤可忽略)

 1 SQL> recover database using backup controlfile;

 2 ORA-00283: recovery session canceled due to errors

 3 ORA-01111: name for data file 8 is unknown - rename to correct file

 4 ORA-01110: data file 8: '/u01/oracle/dbs/UNNAMED00008'

 5 ORA-01157: cannot identify/lock data file 8 - see DBWR trace file

 6 ORA-01111: name for data file 8 is unknown - rename to correct file

 7 ORA-01110: data file 8: '/u01/oracle/dbs/UNNAMED00008'

 8 

 9 SQL> 

10 

11     报错显示:不能识别8号文件,需要重命名.现在查看两个视图:

12 SQL> select * from v$recover_file;

13 

14      FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME

15 ---------- ------- ------- -------------------- ---------- ---------

16          8 ONLINE  ONLINE  FILE MISSING                  0

17 

18 SQL>

19 #8号文件是需要被恢复的

20 SQL> select file#,name from v$datafile; 

21 

22      FILE# NAME

23 ---------- ----------------------------------------

24          1 /u01/oradata/sunbak/system01.dbf

25          2 /u01/oradata/sunbak/undotbs01.dbf

26          3 /u01/oradata/sunbak/sysaux01.dbf

27          4 /u01/oradata/sunbak/users01.dbf

28          5 /u01/oradata/sunbak/example01.dbf

29          6 /u01/oradata/sunbak/sun01_1.dbf

30          7 /u01/oradata/sunbak/sun02_1.dbf

31          8 /u01/oracle/dbs/UNNAMED00008

32 

33 8 rows selected.

34 

35 SQL> 

36 #8号文件为/u01/oracle/dbs/UNNAMED00008

4.7重命名8号文件

1 SQL> alter database rename file '/u01/oracle/dbs/UNNAMED00008' to '/u01/oradata/sunbak/sun03_1.dbf';

2 

3 Database altered.

4 

5 SQL>

4.8 继续恢复

 1 SQL> recover database using backup controlfile ;

 2 ORA-00279: change 688614 generated at 01/25/2013 19:09:32 needed for thread 1

 3 ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf

 4 ORA-00280: change 688614 for thread 1 is in sequence #26

 5 

 6 

 7 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

 8 /u01/oradata/sunbak/redo01.log

 9 ORA-00310: archived log contains sequence 25; sequence 26 required

10 ORA-00334: archived log: '/u01/oradata/sunbak/redo01.log'

11 

12 

13 SQL> recover database using backup controlfile ;

14 ORA-00279: change 688614 generated at 01/25/2013 19:09:32 needed for thread 1

15 ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf

16 ORA-00280: change 688614 for thread 1 is in sequence #26

17 

18 

19 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

20 /u01/oradata/sunbak/redo02.log

21 Log applied.

22 Media recovery complete.

23 SQL>

5.打开数据库

1 SQL> alter database open resetlogs;

2 

3 Database altered.

4 

5 SQL> 

 

你可能感兴趣的:(oracle)