最近按照书上的例子敲命令,部分是对控制文件的操作,可是谁料将控制文件移动之后,就出问题了。。。老是提醒我“文件比控制文件更新 - 旧的控制文件”,弄得我没法用数据库。
******************************************************************************************************************************************************************************************************
1.SQL> connect /as sysdba
2.SQL> shutdown abort 如果数据库是打开状态,强行关闭
3.SQL> startup
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248624 bytes
Variable Size 121635472 bytes
Database Buffers 167772160 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1:
'F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCLDW\SYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件
4.SQL> alter database backup controlfile to trace as 'e:\controlfile';
数据库已更改。
5.SQL> shutdown immediate 如果数据库是打开状态,则关闭
ORA-01109: 数据库未打开
已经卸载数据库
6.SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 105979576 bytes
Fixed Size 454328 bytes
Variable Size 79691776 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
7.Editplus之类的编辑器打开在第4步生成的e:\controlfile'文件;
其实在这个文件中的已经告诉你咋样恢复你的数据库了,找到STARTUP NOMOUNT字样(有好几处),然后下面可以看到类似语句,这个文件有好几个类似的生成控制文件语句,主要针对不同的环境执行不同的语句,象我的数据库没有做任何备份,也不是在归档模式,就执行这句(删除其中的注释行,删除不需要的数据文件,中间不要有任何空行; 碰到错误执行SQL> shutdown abort ;SQL> startup nomount; )
SQL>
CREATE CONTROLFILE REUSE DATABASE "ZFXFZB" RESETLOGS NOARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 680
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\ZFXFZB\REDO01.LOG' SIZE 100M,
GROUP 2 'E:\ORACLE\ORADATA\ZFXFZB\REDO02.LOG' SIZE 100M,
GROUP 3 'E:\ORACLE\ORADATA\ZFXFZB\REDO03.LOG' SIZE 100M
DATAFILE
'E:\ORACLE\ORADATA\ZFXFZB\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\CWMLITE01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\DRSYS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\EXAMPLE01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\INDX01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\ODM01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\TOOLS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\USERS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\XDB01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\ZFXFZB.ORA'
CHARACTER SET ZHS16GBK
;
执行上面这段语句,这个语句重建控制文件,然后你可以看着e:\controlfile'文件完成下面的恢复工作了,
8.SQL>RECOVER DATABASE (恢复指定表空间、数据文件或整个数据库) ; 即使出现错误也可以正常使用。
SQL>ALTER DATABASE OPEN resetlogs; 。
9.SQL>ALTER DATABASE OPEN; 打开数据库 。******************************************************************************************************************************************************************************************************以上内容是从网上找的,事实是,我按照上面的内容执行的时候,第7点的命令,出现了许多问号而且SQL> shutdown abort ;SQL> startup nomount;之后,问号也没消失。于是我没有管问号,把第7点的命令执行了之后,就按照e:\controlfile中的命令执行,还是有问号,还是没有管,而执行完了之后,依旧不能用scott连接。
于是SQL>exit从数据库断开,我觉得可能是因为我改过控制文件的路径,于是执行了下列命令:
1.SQL> alter system set control_files =
2 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL01.CTL',
3 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL02.CTL',
4 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL03.CTL' SCOPE=SPFILE;
系统已更改。
2.SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已经关闭。
3.SQL> startup pfile='F:\Oracle\product\10.2.0\db_1\database\initorcl.ora';
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 96469672 bytes
Database Buffers 188743680 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
******************************************************************************************************************************************************************************************************
这里,问题又来了,于是,在网上查了哈,原因如下:
日志是连续的,而我做了不完全恢复,这样之后,数据库就无法使用未使用过的日志,无法在未使用过的日志基础上继续日志序列。
解决:
SQL> alter database open resetlogs;
数据库已更改。
更改之后,用scott登陆试试,
SQL> conn scott/tiger
已连接。
到此,一切OK了。。