################################
# [1.5] 有trace,活动在线日志损坏
################################
################################
# [1.5.1] 有trace,活动在线日志损坏,正常shutdown或是当前的数据文件
################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 YES ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> shutdown --正常关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
此时模拟删除当前在线日志组3
SQL>
SQL>
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
6166 no
12332 ok
-->>没有丢失任何数据,因为你的数据都已经写到数据文件里了
#########################################
# [1.5.2] 有trace,活动在线日志损坏,shutdown abort 或是非当前的数据文件
,当前在线日志文件损坏
#########################################
####################################################
[测试1] shutdown abort,备份控制文件或者resetlog的trace,
没有数据文件备份,采用强制打开数据库的方法
####################################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 YES ACTIVE
2 3 NO CURRENT
3 1 YES INACTIVE
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'C:ORACLEORADATATESTDBREDO01.LOG'
ORA-27047: 无法读取文件的标题块
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 38) 到达文件结尾。
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志1
ORA-00312: 联机日志 1 线程 1: 'C:ORACLEORADATATESTDBREDO01.LOG'
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 70123 (? 02/28/2005 15:22:05 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 70123 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
ORA-01112: ???????
我们看到如果是abort DOWN机的话,打开数据库都需要应用在线活动日志
这时必须加隐含参数强制打开数据库,并进行导出,重建数据库,导入业务数据
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
spfile string %ORACLE_HOME%DATABASESPFILE
ORACLE_SID%.ORA
SQL> create pfile='pfiletest.ora' from spfile;
文件已创建。
SQL> create pfile='c:pfiletest.ora' from spfile;
文件已创建。
编辑c:pfiletest.ora
增加三个参数
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=true
_offline_rollback_segments=true
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL> startup pfile='c:pfiletest.ora'
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
SQL>
SQL>
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开
C:>sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 14:03:09 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已连接到空闲例程。
SQL> startup pfile='c:pfiletest.ora'
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>
####################################################
# [测试2] shutdown abort,resetlog的trace,
# 有数据文件备份,当前在线日志损坏,控制文件损坏,有trace
####################################################
SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES ACTIVE
3 4 NO ACTIVE
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01192: ??????????
~~~~~~~~~~~~~~~~~~~~~~
如果是NORESETLOGS,那么他要检查当前的在线日志,而现在没有了
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:ORACLEORADATAtestdbREDO01.LOG'??? -->>这个文件不在了
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-00200: ????????
ORA-00202: ????: 'C:oracleoradatatestdbcontrol01.ctl' --这个文件不能被覆盖,删除三个控制文件
ORA-27086: skgfglk: ?????? - ?????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 5) >>x7CNJ!#
SQL> shutdown
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
控制文件已创建
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69616 (? 03/02/2005 16:53:52 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_4.DBF
ORA-00280: ?? 69616 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_3.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_4.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: ???????? 'C:ORACLEORADATATESTDBARCHIVE1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok --还原了部分数据,但不能还原在线日志中的数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果数据库是abort或者老的数据文件备份,那么就涉及到控制文件和数据文件不一致,需要恢复,就涉及到当前被破坏的在线日志,
,启动时仍然需要用在线活动日志进行恢复.如果是正常的shutdown,而且没有用老的数据备份,那么控制文件和数据文件是一致的,
不需要当前在线日志.而在abort或者老的数据文件备份在这种情况下,只能用备份的datafile和备份的controlfile来做不完
全恢复,都将造成数据丢失。因此多重controlfile 和 online redo log file 很重要。通常情况下是在正常运行数据库时,
当前在线日志被破坏的,此时马上会数据库不正常DOWN机,也就出现1.5.2的情景
我们知道如果是abort关闭的,那么有些事务是不完整的或者有些事务没有被写到数据文件,在数据文件中有这样的标识,这样,用
create controlfile ... noresetlogs或者resetlogs创建时读取数据文件头信息,该文件在控制文件信息,比如结束SCN设置为无穷大)
打开时就需要当前在线日志恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####################################################
# [测试3] shutdown abort,控制文件损坏,备份控制文件,
# 当前在线日志损坏,有数据文件备份
####################################################
还原原来备份的数据文件,控制文件
SQL> shutdown
ORA-01109: 数据库未打开
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:oracleora92DATABASEPWDtestdb.ORA'
SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69572 (? 03/02/2005 17:07:43 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_4.DBF
ORA-00280: ?? 69572 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_3.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_4.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: ???????? 'C:ORACLEORADATATESTDBARCHIVE1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok
######################################################
# [1.5.3] 控制文件损坏,如果trace不是最新的数据库结构,如少了个数据文件
######################################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 NO ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> alter tablespace tools add datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf'
size 10m;
表空间已更改。
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
模拟控制文件丢失
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open;
数据库已更改。
SQL> select name,status from v$datafile;
NAME STATUS
-------------------------------------- -------
C:ORACLEORADATATESTDBSYSTEM01.DBF SYSTEM
C:ORACLEORADATATESTDBUNDOTBS01.DBF ONLINE
C:ORACLEORADATATESTDBINDX01.DBF ONLINE
C:ORACLEORADATATESTDBTOOLS01.DBF ONLINE
C:ORACLEORADATATESTDBUSERS01.DBF ONLINE
C:ORACLEORA92DATABASEMISSING00006 RECOVER --这个文件现在是recover状态
已选择6行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们发现C:ORACLEORA92DATABASEMISSING00006并不存在,只不过是个标记而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORADATATESTDBTOOLS02.dbf'; --MISSING00006不要加路径
数据库已更改。
SQL> recover datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf';
完成介质恢复。
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf' online;
数据库已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~
如果用备份控制文件,且备份
控制文件少了新增加的两个文件
,恢复时会提示错误,我们可以
用rename来解决
~~~~~~~~~~~~~~~~~~~~~~~~~
使用备份控制文件
recover AUTOMATIC database using backup controlfile until cancel
...
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'
ORA-01110: data file 2: '/oracle/dbs/db3.f'
~~~~~~~~~~~~~~~~~~~~
这是因为前滚时发现file#中
有两个文件,但控制文件没有
我们可以在v$datafile中看到
所以恢复中断
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;
FILE# NAME
--------------- ----------------------
1 /oracle/dbs/db1.f
2 /oracle/dbs/UNNAMED00002
3 /oracle/dbs/UNNAMED00003
这时对文件进行改名就可以了
ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';
RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
######################################################
# [1.5.4] 控制文件损坏,如果trace不是最新的数据库结构,如少了个只读数据文件
######################################################
SQL> alter tablespace tools add datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf'
size 10m ;
表空间已更改。
SQL> alter tablespace tools read only;
表空间已更改。
SQL> select name,ENABLED
2 from v$datafile;
NAME ENABLED
--------------------------------------- ----------
C:ORACLEORADATATESTDBSYSTEM01.DBF READ WRITE
C:ORACLEORADATATESTDBUNDOTBS01.DBF READ WRITE
C:ORACLEORADATATESTDBINDX01.DBF READ WRITE
C:ORACLEORADATATESTDBTOOLS01.DBF READ ONLY
C:ORACLEORADATATESTDBUSERS01.DBF READ WRITE
C:ORACLEORADATATESTDBTOOLS02.DBF READ ONLY
已选择6行。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> select name from v$datafile;
NAME
---------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
SQL> alter database open;
数据库已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
C:ORACLEORA92DATABASEMISSING00006 --OPEN时增加了不认识的文件名
已选择6行。
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORA92DATABASETOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:ORACLEORA92DATABASETOOLS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:ORACLEORA92DATABASETOOLS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:ORACLEORA92DATABASEMISSING00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:ORACLEORADATATESTDBTOOLS01.DBF'
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS01.DBF' offline;
数据库已更改。
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.DBF' offline;
alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.DBF' offline
*
ERROR 位于第 1 行:
ORA-01516: ????????, ????????? 'C:ORACLEORADATATESTDBTOOLS02.DBF'
SQL> alter database open ;
数据库已更改。
SQL> alter database datafile 'MISSING00006' offline; -->>注意只读表空间必须先offline,而且注意MISSING00006不能写全路径
数据库已更改。
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORADATATESTDBTOO
LS02.DBF';
数据库已更改。
SQL> alter tablespace tools online;
表空间已更改。
方法2
SQL> SHUTDOWN
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbTOOLS02.DBF', --创建语句中加入该数据文件
19 'C:ORACLEORADATAtestdbUSERS01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
控制文件已创建
SQL> SELECT NAME FROM V$DATAFILE;
NAME
---------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
C:ORACLEORADATATESTDBTOOLS02.DBF
已选择6行。
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:ORACLEORADATATESTDBTOOLS01.DBF'
SQL> RECOVER TABLESPACE TOOLS;
完成介质恢复。
SQL> ALTER DATABASE OPEN;
数据库已更改。
##################################
# [1.6] 使用备份的控制文件进行恢复
#
##################################
前面有很多例子[@more@]
# [1.5] 有trace,活动在线日志损坏
################################
################################
# [1.5.1] 有trace,活动在线日志损坏,正常shutdown或是当前的数据文件
################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 YES ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> shutdown --正常关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
此时模拟删除当前在线日志组3
SQL>
SQL>
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
6166 no
12332 ok
-->>没有丢失任何数据,因为你的数据都已经写到数据文件里了
#########################################
# [1.5.2] 有trace,活动在线日志损坏,shutdown abort 或是非当前的数据文件
,当前在线日志文件损坏
#########################################
####################################################
[测试1] shutdown abort,备份控制文件或者resetlog的trace,
没有数据文件备份,采用强制打开数据库的方法
####################################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 YES ACTIVE
2 3 NO CURRENT
3 1 YES INACTIVE
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'C:ORACLEORADATATESTDBREDO01.LOG'
ORA-27047: 无法读取文件的标题块
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 38) 到达文件结尾。
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志1
ORA-00312: 联机日志 1 线程 1: 'C:ORACLEORADATATESTDBREDO01.LOG'
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 70123 (? 02/28/2005 15:22:05 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 70123 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
ORA-01112: ???????
我们看到如果是abort DOWN机的话,打开数据库都需要应用在线活动日志
这时必须加隐含参数强制打开数据库,并进行导出,重建数据库,导入业务数据
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
spfile string %ORACLE_HOME%DATABASESPFILE
ORACLE_SID%.ORA
SQL> create pfile='pfiletest.ora' from spfile;
文件已创建。
SQL> create pfile='c:pfiletest.ora' from spfile;
文件已创建。
编辑c:pfiletest.ora
增加三个参数
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=true
_offline_rollback_segments=true
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL> startup pfile='c:pfiletest.ora'
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
SQL>
SQL>
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开
C:>sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 14:03:09 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已连接到空闲例程。
SQL> startup pfile='c:pfiletest.ora'
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>
####################################################
# [测试2] shutdown abort,resetlog的trace,
# 有数据文件备份,当前在线日志损坏,控制文件损坏,有trace
####################################################
SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES ACTIVE
3 4 NO ACTIVE
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01192: ??????????
~~~~~~~~~~~~~~~~~~~~~~
如果是NORESETLOGS,那么他要检查当前的在线日志,而现在没有了
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:ORACLEORADATAtestdbREDO01.LOG'??? -->>这个文件不在了
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-00200: ????????
ORA-00202: ????: 'C:oracleoradatatestdbcontrol01.ctl' --这个文件不能被覆盖,删除三个控制文件
ORA-27086: skgfglk: ?????? - ?????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 5) >>x7CNJ!#
SQL> shutdown
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
10 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
14 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
15 'C:ORACLEORADATAtestdbINDX01.DBF',
16 'C:ORACLEORADATAtestdbTOOLS01.DBF',
17 'C:ORACLEORADATAtestdbUSERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
控制文件已创建
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69616 (? 03/02/2005 16:53:52 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_4.DBF
ORA-00280: ?? 69616 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_3.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_4.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: ???????? 'C:ORACLEORADATATESTDBARCHIVE1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok --还原了部分数据,但不能还原在线日志中的数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果数据库是abort或者老的数据文件备份,那么就涉及到控制文件和数据文件不一致,需要恢复,就涉及到当前被破坏的在线日志,
,启动时仍然需要用在线活动日志进行恢复.如果是正常的shutdown,而且没有用老的数据备份,那么控制文件和数据文件是一致的,
不需要当前在线日志.而在abort或者老的数据文件备份在这种情况下,只能用备份的datafile和备份的controlfile来做不完
全恢复,都将造成数据丢失。因此多重controlfile 和 online redo log file 很重要。通常情况下是在正常运行数据库时,
当前在线日志被破坏的,此时马上会数据库不正常DOWN机,也就出现1.5.2的情景
我们知道如果是abort关闭的,那么有些事务是不完整的或者有些事务没有被写到数据文件,在数据文件中有这样的标识,这样,用
create controlfile ... noresetlogs或者resetlogs创建时读取数据文件头信息,该文件在控制文件信息,比如结束SCN设置为无穷大)
打开时就需要当前在线日志恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####################################################
# [测试3] shutdown abort,控制文件损坏,备份控制文件,
# 当前在线日志损坏,有数据文件备份
####################################################
还原原来备份的数据文件,控制文件
SQL> shutdown
ORA-01109: 数据库未打开
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:oracleora92DATABASEPWDtestdb.ORA'
SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69572 (? 03/02/2005 17:07:43 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_4.DBF
ORA-00280: ?? 69572 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_3.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:ORACLEORADATATESTDBARCHIVE1_4.DBF'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: ???????? 'C:ORACLEORADATATESTDBARCHIVE1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:ORACLEORADATATESTDBSYSTEM01.DBF'
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:ORACLEORADATATESTDBARCHIVE1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok
######################################################
# [1.5.3] 控制文件损坏,如果trace不是最新的数据库结构,如少了个数据文件
######################################################
SQL> create table arch (status varchar(2));
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 NO ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> alter tablespace tools add datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf'
size 10m;
表空间已更改。
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
模拟控制文件丢失
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open;
数据库已更改。
SQL> select name,status from v$datafile;
NAME STATUS
-------------------------------------- -------
C:ORACLEORADATATESTDBSYSTEM01.DBF SYSTEM
C:ORACLEORADATATESTDBUNDOTBS01.DBF ONLINE
C:ORACLEORADATATESTDBINDX01.DBF ONLINE
C:ORACLEORADATATESTDBTOOLS01.DBF ONLINE
C:ORACLEORADATATESTDBUSERS01.DBF ONLINE
C:ORACLEORA92DATABASEMISSING00006 RECOVER --这个文件现在是recover状态
已选择6行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们发现C:ORACLEORA92DATABASEMISSING00006并不存在,只不过是个标记而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORADATATESTDBTOOLS02.dbf'; --MISSING00006不要加路径
数据库已更改。
SQL> recover datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf';
完成介质恢复。
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf' online;
数据库已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~
如果用备份控制文件,且备份
控制文件少了新增加的两个文件
,恢复时会提示错误,我们可以
用rename来解决
~~~~~~~~~~~~~~~~~~~~~~~~~
使用备份控制文件
recover AUTOMATIC database using backup controlfile until cancel
...
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'
ORA-01110: data file 2: '/oracle/dbs/db3.f'
~~~~~~~~~~~~~~~~~~~~
这是因为前滚时发现file#中
有两个文件,但控制文件没有
我们可以在v$datafile中看到
所以恢复中断
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;
FILE# NAME
--------------- ----------------------
1 /oracle/dbs/db1.f
2 /oracle/dbs/UNNAMED00002
3 /oracle/dbs/UNNAMED00003
这时对文件进行改名就可以了
ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';
RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
######################################################
# [1.5.4] 控制文件损坏,如果trace不是最新的数据库结构,如少了个只读数据文件
######################################################
SQL> alter tablespace tools add datafile 'C:ORACLEORADATATESTDBTOOLS02.dbf'
size 10m ;
表空间已更改。
SQL> alter tablespace tools read only;
表空间已更改。
SQL> select name,ENABLED
2 from v$datafile;
NAME ENABLED
--------------------------------------- ----------
C:ORACLEORADATATESTDBSYSTEM01.DBF READ WRITE
C:ORACLEORADATATESTDBUNDOTBS01.DBF READ WRITE
C:ORACLEORADATATESTDBINDX01.DBF READ WRITE
C:ORACLEORADATATESTDBTOOLS01.DBF READ ONLY
C:ORACLEORADATATESTDBUSERS01.DBF READ WRITE
C:ORACLEORADATATESTDBTOOLS02.DBF READ ONLY
已选择6行。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> select name from v$datafile;
NAME
---------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
SQL> alter database open;
数据库已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
C:ORACLEORA92DATABASEMISSING00006 --OPEN时增加了不认识的文件名
已选择6行。
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORA92DATABASETOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:ORACLEORA92DATABASETOOLS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:ORACLEORA92DATABASETOOLS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:ORACLEORA92DATABASEMISSING00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:ORACLEORADATATESTDBTOOLS01.DBF'
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS01.DBF' offline;
数据库已更改。
SQL> alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.DBF' offline;
alter database datafile 'C:ORACLEORADATATESTDBTOOLS02.DBF' offline
*
ERROR 位于第 1 行:
ORA-01516: ????????, ????????? 'C:ORACLEORADATATESTDBTOOLS02.DBF'
SQL> alter database open ;
数据库已更改。
SQL> alter database datafile 'MISSING00006' offline; -->>注意只读表空间必须先offline,而且注意MISSING00006不能写全路径
数据库已更改。
SQL> alter database rename file 'MISSING00006' to 'C:ORACLEORADATATESTDBTOO
LS02.DBF';
数据库已更改。
SQL> alter tablespace tools online;
表空间已更改。
方法2
SQL> SHUTDOWN
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:ORACLEORADATAtestdbREDO01.LOG' SIZE 100M,
10 GROUP 2 'C:ORACLEORADATAtestdbREDO02.LOG' SIZE 100M,
11 GROUP 3 'C:ORACLEORADATAtestdbREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATAtestdbSYSTEM01.DBF',
15 'C:ORACLEORADATAtestdbUNDOTBS01.DBF',
16 'C:ORACLEORADATAtestdbINDX01.DBF',
17 'C:ORACLEORADATAtestdbTOOLS01.DBF',
18 'C:ORACLEORADATAtestdbTOOLS02.DBF', --创建语句中加入该数据文件
19 'C:ORACLEORADATAtestdbUSERS01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
控制文件已创建
SQL> SELECT NAME FROM V$DATAFILE;
NAME
---------------------------------------------------------------------------
C:ORACLEORADATATESTDBSYSTEM01.DBF
C:ORACLEORADATATESTDBUNDOTBS01.DBF
C:ORACLEORADATATESTDBINDX01.DBF
C:ORACLEORADATATESTDBTOOLS01.DBF
C:ORACLEORADATATESTDBUSERS01.DBF
C:ORACLEORADATATESTDBTOOLS02.DBF
已选择6行。
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:ORACLEORADATATESTDBTOOLS01.DBF'
SQL> RECOVER TABLESPACE TOOLS;
完成介质恢复。
SQL> ALTER DATABASE OPEN;
数据库已更改。
##################################
# [1.6] 使用备份的控制文件进行恢复
#
##################################
前面有很多例子[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/257699/viewspace-815188/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/257699/viewspace-815188/