SQL> startup
ORACLE 例程已经启动。
ORACLE 例程已经启动。
Total System Global Area 838860800 bytes
Fixed Size 1293336 bytes
Variable Size 427820008 bytes
Database Buffers 402653184 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Fixed Size 1293336 bytes
Variable Size 427820008 bytes
Database Buffers 402653184 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 838860800 bytes
Fixed Size 1293336 bytes
Variable Size 432014312 bytes
Database Buffers 398458880 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
ORA-01113: 文件 2 需要介质恢复
ORA-01110: 数据文件 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF'
Fixed Size 1293336 bytes
Variable Size 432014312 bytes
Database Buffers 398458880 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
ORA-01113: 文件 2 需要介质恢复
ORA-01110: 数据文件 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF'
SQL> recover datafile 2;
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> select file#,name from v$datafile;
FILE#
----------
NAME
--------------------------------------------------------------------------------
----------
NAME
--------------------------------------------------------------------------------
1
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
2
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
3
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
FILE#
----------
NAME
--------------------------------------------------------------------------------
4
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
SQL> alter database datafile 4 offline drop;
数据库已更改。
SQL>
SQL>
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
SQL>
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 838860800 bytes
Fixed Size 1293336 bytes
Variable Size 436208616 bytes
Database Buffers 394264576 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
SQL> recover until cancel;
完成介质恢复。
SQL> alter database open resetlogs;
Fixed Size 1293336 bytes
Variable Size 436208616 bytes
Database Buffers 394264576 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
SQL> recover until cancel;
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> alter database datafile 4 online;
alter database datafile 4 online
*
第 1 行出现错误:
ORA-01190: 控制文件或数据文件 4 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 4: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF'
alter database datafile 4 online
*
第 1 行出现错误:
ORA-01190: 控制文件或数据文件 4 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 4: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF'
SQL>
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount pfile=E:\oracle\product\10.2.0\db_1\database\inittest.ora
ORACLE 例程已经启动。
Total System Global Area 838860800 bytes
Fixed Size 1293336 bytes
Variable Size 281019368 bytes
Database Buffers 549453824 bytes
Redo Buffers 7094272 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF',
14 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF',
15 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF',
16 --'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS NOARCHIVELOG
*
第 1 行出现错误:
ORA-01503: CREATE CONTROLFILE ??
ORA-01163: SIZE ???? 12800 (?), ????? 32000 ??
ORA-01110: ???? 3: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF'
Fixed Size 1293336 bytes
Variable Size 281019368 bytes
Database Buffers 549453824 bytes
Redo Buffers 7094272 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF',
14 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF',
15 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF',
16 --'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS NOARCHIVELOG
*
第 1 行出现错误:
ORA-01503: CREATE CONTROLFILE ??
ORA-01163: SIZE ???? 12800 (?), ????? 32000 ??
ORA-01110: ???? 3: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;
ORA-01507: ??????
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF',
14 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF',
15 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF'
16 --'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;
ORA-00279: ?? 566765 (? 05/07/2010 11:22:53 ??) ???? 1 ????
ORA-00289: ??:
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_05_07\O1_MF_1_
ORA-00279: ?? 566765 (? 05/07/2010 11:22:53 ??) ???? 1 ????
ORA-00289: ??:
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_05_07\O1_MF_1_
1_%U_.ARC
ORA-00280: ?? 566765 (???? 1) ??? #1 ?
ORA-00280: ?? 566765 (???? 1) ??? #1 ?
指定日志: {
cancel
介质恢复已取消。
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00004
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00004
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0
0004' to 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.dbf';
0004' to 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.dbf';
数据库已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount pfile=E:\oracle\product\10.2.0\db_1\database\inittest.ora
ORACLE 例程已经启动。
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount pfile=E:\oracle\product\10.2.0\db_1\database\inittest.ora
ORACLE 例程已经启动。
Total System Global Area 838860800 bytes
Fixed Size 1293336 bytes
Variable Size 281019368 bytes
Database Buffers 549453824 bytes
Redo Buffers 7094272 bytes
SQL> alter database mount;
Fixed Size 1293336 bytes
Variable Size 281019368 bytes
Database Buffers 549453824 bytes
Redo Buffers 7094272 bytes
SQL> alter database mount;
数据库已更改。
SQL> recover until cancel;
完成介质恢复。
SQL> alter database datafile 4 online;
完成介质恢复。
SQL> alter database datafile 4 online;
数据库已更改。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select status from v$datafile;
STATUS
-------
SYSTEM
ONLINE
ONLINE
ONLINE
-------
SYSTEM
ONLINE
ONLINE
ONLINE
SQL>
总结:1190或1189错误的主要原因是数据文件头的CHECKPOINT_CHANGE#恢复到控制文件中记录的CHECKPOINT_CHANGE#跨越了两个incardination,为了解决这个问题,重建控制文件使得控制文件中对这个文件记录的CHECKPOINT_CHANGE#恢复到0,这样只需要恢复到数据文件头记录的那个scn就可以了,在allow corruption的条件下,open resetlog的时候会将scn恢复到最新的db CHECKPOINT_CHANGE#
不仅是1190 1189,如果单个文件没法恢复到最新,也同样可以采取这样的操作来完成。