关于Oracle 01122,01110,01207的错误和解决

阅读更多

原创于2007年04月12日,2009年10月15日迁移至此。


windows xp,数据库oracle 10.2.0。1
没有备份,基本上是默认安装,好像还不是归档模式

症状:sqlplus只有sysdba用户能进去,其他用户进去一概报:ora-01033:oracle正在初始化或关闭
而且sysdba用户进去之后能执行select sysdate from dual,但是执行select usernam from all_users就
报错了,ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

关闭数据库
shutdown abort

启动
sqlplus / as sysdba
startup

启动信息如下:
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:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWSYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件

在楼上兄弟们的帮助下终于把数据库恢复,再次感谢上面的兄弟们,和推荐我来这边的兄弟
以下将解决方法共享一下,其实楼上的兄弟们说的基本上都是对的,只是说的还不够详细和具体,因此对我这种菜菜还是有点困难的

ORA-01207:文件比控制文件更新 - 旧的控制文件
根据oracle文档的解释:
Cause: The control file change sequence number in the datafile is greater than the number in the control file. This implies that the wrong control file is being used. Note that repeatedly causing this error can make it stop happening without correcting the real problem. Every attempt to open the database will advance the control file change sequence number until it is great enough.
Action: Use the current control file or do BACKUP CONTROLFILE RECOVERY to make the control file current. Be sure to follow all restrictions on doing a BACKUP CONTROLFILE RECOVERY.

Solution:
1. Check alert file,kill monitor process
2. Startup mount,
3. “alter database backup control to trace”
4. Find the trace file,and open it
5. Startup nomount
6. recreate controlfile using resetlogs
7. “recover database using backup controlfile”
8. “alter database open resetlogs;”
9. “alter tablespace temp add tempfile '.dbf' reuse;”

其实跟楼上的兄弟们说的差不多,以下再详细步骤:

1.SQL>shutdown abort 如果数据库是打开状态,强行关闭

2.SQL>sqlplus / as sysdba

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:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWSYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件

4.SQL>alter database backup controlfile to trace as 'f:aa';
数据库已更改。

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之类的编辑器打开在第四步生成的f:aa文件;
其实在这个文件中的已经告诉你咋样恢复你的数据库了,找到STARTUP NOMOUNT字样,然后下面可以看到类似语句,这个文件有好几个类似的生成控制文件语句,主要针对不懂的环境执行不同的语句,象我的数据库没有做任何备份,也不是在归档模式,就执行这句
CREATE CONTROLFILE REUSE DATABASE "ORCLDW" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWREDO01.LOG' SIZE 50M,
GROUP 2 'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWREDO02.LOG' SIZE 50M,
GROUP 3 'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWREDO03.LOG' SIZE 50M
DATAFILE
'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWSYSTEM01.DBF',
'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWUNDOTBS01.DBF',
'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWSYSAUX01.DBF',
'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWUSERS01.DBF',
'F:ORACLEPRODUCT10.2.0DB_1ORADATAORCLDWEXAMPLE01.DBF'
CHARACTER SET ZHS16GBK
;
执行上面这段语句,这个语句重建控制文件,然后你可以看着f:aa文件完成下面的恢复工作了,

8.SQL>RECOVER DATABASE (恢复指定表空间、数据文件或整个数据库)

9.SQL>ALTER DATABASE OPEN 打开数据库


恭喜你,你的数据库出院了,itpub真是妙手回春阿

如果不行,那只能说明一个问题,你实在太背了, 赶紧发帖求医:)

(注意:
数据库的启动(STARTUP)
启动一个数据库需要三个步骤:

   1、 创建一个Oracle实例(非安装阶段)

   2、 由实例安装数据库(安装阶段)

   3、 打开数据库(打开阶段)

在Startup命令中,可以通过不同的选项来控制数据库的不同启动步骤。
1、STARTUP NOMOUNT
NONOUNT选项仅仅创建一个Oracle实例。读取init.ora初始化参数文件、启动后台进程、初始化系统全局区(SGA)。Init.ora文 件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。实例名根据Oracle_SID设置,不一定要与打开的数据库名称相同。当实例打 开后,系统将显示一个SGA内存结构和大小的列表
2.STARTUP MOUNT
该命令创建实例并且安装数据库,但没有打开数据库。Oracle系统读取控制文件中关于数据文件和重作日志文件的内容,但并不打开该文件。这种打开方式常 在数据库维护操作中使用,如对数据文件的更名、改变重作日志以及打开归档方式等。在这种打开方式下,除了可以看到SGA系统列表以外,系统还会给出"数据 库装载完毕"的提示。
3.STARTUP
该命令完成创建实例、安装实例和打开数据库的所有三个步骤。此时数据库使数据文件和重作日志文件在线,通常还会请求一个或者是多个回滚段。这时系统除了可 以看到前面Startup Mount方式下的所有提示外,还会给出一个"数据库已经打开"的提示。此时,数据库系统处于正常工作状态,可以接受用户请求。

  如果采用STARTUP NOMOUNT或者是STARTUP MOUNT的数据库打开命令方式,必须采用ALTER DATABASE命令来执行打开数据库的操作。例如,如果你以STARTUP NOMOUNT方式打开数据库,也就是说实例已经创建,但是数据库没有安装和打开。这是必须运行下面的两条命令,数据库才能正确启动。

ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;

  而如果以STARTUP MOUNT方式启动数据库,只需要运行下面一条命令即可以打开数据库:

    ALTER DATABASE OPEN.

4、其他打开方式

  除了前面介绍的三种数据库打开方式选项外,还有另外其他的一些选项。

  (1) STARTUP RESTRICT

  这种方式下,数据库将被成功打开,但仅仅允许一些特权用户(具有DBA角色的用户)才可以使用数据库。这种方式常用来对数据库进行维护,如数据的导入/导出操作时不希望有其他用户连接到数据库操作数据。

  (2) STARTUP FORCE

  该命令其实是强行关闭数据库(shutdown abort)和启动数据库(startup)两条命令的一个综合。该命令仅在关闭数据库遇到问题不能关闭数据库时采用。

  (3) ALTER DATABASE OPEN READ ONLY;

  该命令在创建实例以及安装数据库后,以只读方式打开数据库。对于那些仅仅提供查询功能的产品数据库可以采用这种方式打开。

你可能感兴趣的:(关于Oracle 01122,01110,01207的错误和解决)