您的位置:首页 > 数据库 > Oracle

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

2013-01-28 10:27 627 查看
场景描述:控制文件损坏(控制文件内容变化)

1.1.备份

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

Database altered.

SQL>


1.2.查看当前表空间

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

TS# NAME
---------- ------------------------------
0 SYSTEM
1 UNDOTBS1
2 SYSAUX
3 TEMP
4 USERS
6 EXAMPLE
7 SUN01
8 SUN02

8 rows selected.

SQL>


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

SQL> create tablespace sun03 datafile '/u01/oradata/sunbak/sun03_1.dbf' size 5M
2  extent management local uniform
3  segment space management auto;

Tablespace created.

SQL>


2.2在sun03上建表 插入数据

SQL> conn user1/user1
Connected.
SQL> create table t4 (id int,name varchar2(16)) tablespace sun03;

Table created.

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

1 row created.

SQL> commit;

Commit complete.

SQL>


2.3损坏当前控制文件

-bash-3.00$ pwd
/u01/oradata/sunbak
-bash-3.00$ ls -l
total 2195216
-rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control01.ctl
-rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control02.ctl
-rw-r-----   1 oracle   oinstall 7389184 Jan 25 19:14 control03.ctl
-rw-r-----   1 oracle   oinstall 104865792 Jan 25 18:33 example01.dbf
-rw-r-----   1 oracle   oinstall 52429312 Jan 25 18:17 redo01.log
-rw-r-----   1 oracle   oinstall 52429312 Jan 25 19:13 redo02.log
-rw-r-----   1 oracle   oinstall 52429312 Jan 25 18:17 redo03.log
-rw-r-----   1 oracle   oinstall 10493952 Jan 25 18:33 sun01_1.dbf
-rw-r-----   1 oracle   oinstall 10493952 Jan 25 18:33 sun02_1.dbf
-rw-r-----   1 oracle   oinstall 5251072 Jan 25 19:09 sun03_1.dbf
-rw-r-----   1 oracle   oinstall 251666432 Jan 25 19:13 sysaux01.dbf
-rw-r-----   1 oracle   oinstall 503324672 Jan 25 19:13 system01.dbf
-rw-r-----   1 oracle   oinstall 20979712 Jan 23 04:03 temp01.dbf
-rw-r-----   1 oracle   oinstall 31465472 Jan 25 19:13 undotbs01.dbf
-rw-r-----   1 oracle   oinstall 5251072 Jan 25 18:33 users01.dbf
-bash-3.00$ rm -f control*
-bash-3.00$


3.关闭数据库

SQL> shutdown abort
ORACLE instance shut down.
SQL>


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

-bash-3.00$ pwd
/u01/oradata/sunbak
-bash-3.00$
-bash-3.00$ cp /u01/admin/sun/udump/c.bin control01.ctl
-bash-3.00$ cp /u01/admin/sun/udump/c.bin control02.ctl
-bash-3.00$ cp /u01/admin/sun/udump/c.bin control03.ctl
-bash-3.00$


4.2 开启到mount状态

SQL> startup mount
ORACLE instance started.

Total System Global Area  289406976 bytes
Fixed Size                  1279820 bytes
Variable Size              92276916 bytes
Database Buffers          192937984 bytes
Redo Buffers                2912256 bytes
Database mounted.
SQL>
#查看当前表空间,此时sun03不存在
SQL> select ts#,name from v$tablespace order by 1;

TS# NAME
---------- ------------------------------
0 SYSTEM
1 UNDOTBS1
2 SYSAUX
3 TEMP
4 USERS
6 EXAMPLE
7 SUN01
8 SUN02

8 rows selected.

SQL>


4.3 恢复

SQL> recover database using backup controlfile;
ORA-00279: change 687115 generated at 01/25/2013 18:33:51 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf
ORA-00280: change 687115 for thread 1 is in sequence #26
5 #此时恢复提示需要归档日志文件1_26_805319563.dbf,到归档目录查看不存在此归档日志文件
6 #说明1_26_805319563.dbf的内容在redo日志文件中,目前不确定在哪一个文件中,只能一个个尝试
#-bash-3.00$ ls -ltr
#total 111836
..............
#-rw-r-----   1 oracle   oinstall    3584 Jan 23 04:35 1_23_805319563.dbf
#-rw-r-----   1 oracle   oinstall   87552 Jan 25 11:26 1_24_805319563.dbf
#-rw-r-----   1 oracle   oinstall 9251840 Jan 25 18:17 1_25_805319563.dbf

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/oradata/sunbak/redo01.log
ORA-00310: archived log contains sequence 25; sequence 26 required
ORA-00334: archived log: '/u01/oradata/sunbak/redo01.log'

SQL>
#说明数据不再redo01.log中


4.4再次执行恢复

SQL> recover database using backup controlfile;
ORA-00279: change 687115 generated at 01/25/2013 18:33:51 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf
ORA-00280: change 687115 for thread 1 is in sequence #26

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/oradata/sunbak/redo02.log
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 8: '/u01/oradata/sunbak/sun03_1.dbf'

ORA-01112: media recovery not started

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日志

ALTER DATABASE RECOVER    LOGFILE '/u01/oradata/sunbak/redo02.log'
Fri Jan 25 19:38:28 2013
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
Fri Jan 25 19:38:32 2013
Media Recovery failed with error 1244
ORA-283 signalled during: ALTER DATABASE RECOVER    LOGFILE '/u01/oradata/sunbak/redo02.log'  ...
Fri Jan 25 19:38:32 2013
ALTER DATABASE RECOVER CANCEL
ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ...


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

SQL> recover database using backup controlfile;
ORA-00283: recovery session canceled due to errors
ORA-01111: name for data file 8 is unknown - rename to correct file
ORA-01110: data file 8: '/u01/oracle/dbs/UNNAMED00008'
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01111: name for data file 8 is unknown - rename to correct file
ORA-01110: data file 8: '/u01/oracle/dbs/UNNAMED00008'

SQL>

报错显示:不能识别8号文件,需要重命名.现在查看两个视图:
SQL> select * from v$recover_file;

FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
---------- ------- ------- -------------------- ---------- ---------
8 ONLINE  ONLINE  FILE MISSING                  0

SQL>
19 #8号文件是需要被恢复的
SQL> select file#,name from v$datafile;

FILE# NAME
---------- ----------------------------------------
1 /u01/oradata/sunbak/system01.dbf
2 /u01/oradata/sunbak/undotbs01.dbf
3 /u01/oradata/sunbak/sysaux01.dbf
4 /u01/oradata/sunbak/users01.dbf
5 /u01/oradata/sunbak/example01.dbf
6 /u01/oradata/sunbak/sun01_1.dbf
7 /u01/oradata/sunbak/sun02_1.dbf
8 /u01/oracle/dbs/UNNAMED00008

8 rows selected.

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


4.7重命名8号文件

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

Database altered.

SQL>


4.8 继续恢复

SQL> recover database using backup controlfile ;
ORA-00279: change 688614 generated at 01/25/2013 19:09:32 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf
ORA-00280: change 688614 for thread 1 is in sequence #26

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/oradata/sunbak/redo01.log
ORA-00310: archived log contains sequence 25; sequence 26 required
ORA-00334: archived log: '/u01/oradata/sunbak/redo01.log'

SQL> recover database using backup controlfile ;
ORA-00279: change 688614 generated at 01/25/2013 19:09:32 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_26_805319563.dbf
ORA-00280: change 688614 for thread 1 is in sequence #26

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/oradata/sunbak/redo02.log
Log applied.
Media recovery complete.
SQL>


5.打开数据库

SQL> alter database open resetlogs;

Database altered.

SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐