oracle文件冲突,关于学习oracle控制文件时遇到的问题总结

在看042题库中有几个对于控制文件丢失或设置出错后如何恢复的操作步骤:

1.关闭数据库 -> 2.copy正确的control.ctl文件(一般为3个)-> 3.startup nomount 修改control_files参数 4.启动即可。

我在实验过程中在一个移动硬盘中增加一个CONTOL04.CTL,然后手动将移动硬盘G拔掉,这时数据库会crash掉。

然后按如下步骤进行操作,出现错误:

控制文件错误

版本:

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

SQL> alter session set nls_language=american;

Session altered.

SQL> alter database mount;

alter database mount

*

ERROR at line 1:

ORA-00205: error in identifying control file, check alert log for more info

alertlog中:

Thu Mar 05 17:53:27 2009

ORA-205 signalled during: alter database mount...

Thu Mar 05 17:54:10 2009

alter database mount

Thu Mar 05 17:54:10 2009

ORA-00202: control file: 'G:\CONTROL04.CTL'

ORA-27041: unable to open file

OSD-04002: 无法打开文件

O/S-Error: (OS 3) 系统找不到指定的路径。

Thu Mar 05 17:54:13 2009

ORA-205 signalled during: alter database mount...

我将control04.ctl存在移动硬盘G中,然后我手动断开G盘,所以出现如上错误,我的疑问是:

我在nomount状态下:

SQL> alter system set control_files='D:\oracle\oradata\orcl\CONTROL01.CTL','D:\oracle\oradata\orcl\C

ONTROL02.CTL','D:\oracle\oradata\orcl\CONTROL03.CTL' scope=spfile;

System altered.

然后我觉得重启后,就应该可以了,但仍报如下错误,不知为何

SQL> startup force;

ORA-32004: obsolete and/or deprecated parameter(s) specified

ORACLE instance started.

Total System Global Area   96468992 bytes

Fixed Size                  1247468 bytes

Variable Size              67110676 bytes

Database Buffers           20971520 bytes

Redo Buffers                7139328 bytes

ORA-00205: ?????????, ??????, ???????

于是我将G盘再连上,执行如下操作:

SQL> alter database mount;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select * from v$controlfile;

STATUS  NAME

------- ------------------------------------------------------------------------

D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL

D:\ORACLE\ORADATA\ORCL\CONTROL02.CTL

D:\ORACLE\ORADATA\ORCL\CONTROL03.CTL

G:\CONTROL04.CTL

SQL> alter system set control_files='D:\oracle\oradata\orcl\CONTROL01.CTL','D:\oracle\oradata\orcl\C

ONTROL02.CTL','D:\oracle\oradata\orcl\CONTROL03.CTL' scope=spfile;

系统已更改。

SQL> startup force;

ORA-32004: obsolete and/or deprecated parameter(s) specified

ORACLE 例程已经启动。

Total System Global Area   96468992 bytes

Fixed Size                  1247468 bytes

Variable Size              67110676 bytes

Database Buffers           20971520 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

数据库已经打开。

SQL> select * from v$controlfile;

STATUS  NAME

------- ------------------------------------------------------------------------

D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL

D:\ORACLE\ORADATA\ORCL\CONTROL02.CTL

D:\ORACLE\ORADATA\ORCL\CONTROL03.CTL

G:\CONTROL04.CTL

参数并未修改,控制文件仍包括control04,并不是我修改后的,为什么呢?

有网友回复说,貌似并未从spfile启动,或者有些参数不对,所以首先处理:

ORA-32004: obsolete and/or deprecated parameter(s) specified

这个错误。

处理:查看alert.log文件发现:

Deprecated system parameters with specified values:

sql_trace

End of deprecated system parameter listing

这说明sql_trace在这里是无效的或过时的参数

alter system reset sql_trace scope=spfile sid='*';

然后startup force则不会出现ORA-32004的信息。

然后startup nomount,这时没有出现如上错误。

下一步,我的想法是创建pfile,通过修改pfile来进行数据库的启动,然后再创建spfile,再从spfile进行数据库的启动:

于是第一步:

sql>create pfile from spfile;

sql>create pfile from spfile;生成的pfile文件如下:

orcl.__db_cache_size=20971520

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=58720256

orcl.__streams_pool_size=0

*._awr_flush_threshold_metrics=TRUE

*.audit_trail='DB'

*.resource_limit=TRUE

*.control_files='D:\oracle\oradata\orcl\CONTROL01.CTL','D:\oracle\oradata\orcl\CONTROL02.CTL','D:\oracle\oradata\orcl\CONTROL03.CTL'

*.sga_target=92274688

*.SPFILE='E:\oracle\product\10.2.0\db_1/dbs/spfileorcl.ora'

查看此文件,我觉得pfile仍然是从spfile进行启动的,但只是control_files参数并未生效,所以将

control_files这一行移到最后,initorcl.ora变成如下:

sql>create pfile from spfile;生成的pfile文件如下:

orcl.__db_cache_size=20971520

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=58720256

orcl.__streams_pool_size=0

*._awr_flush_threshold_metrics=TRUE

*.audit_trail='DB'

*.resource_limit=TRUE

*.sga_target=92274688

*.SPFILE='E:\oracle\product\10.2.0\db_1/dbs/spfileorcl.ora'

*.control_files='D:\oracle\oradata\orcl\CONTROL01.CTL','D:\oracle\oradata\orcl\CONTROL02.CTL','D:\oracle\oradata\orcl\CONTROL03.CTL'

这时再重新启动oracle,数据库正常启动。

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup pfile='E:\oracle\product\10.2.0\db_1\database\INITorcl.ORA';

ORACLE instance started.

Total System Global Area   96468992 bytes

Fixed Size                  1247468 bytes

Variable Size              67110676 bytes

Database Buffers           20971520 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

数据库已经打开。

然后根据最初的想法,重新创建pfile

SQL> create spfile from pfile;

文件已创建。

SQL> create pfile='E:\init.ora' from spfile;

文件已创建。

这次再查看新创建的pfile可以看到如下内容:

orcl.__db_cache_size=25165824

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=54525952

orcl.__streams_pool_size=0

*.audit_file_dest='D:\oracle/admin/orcl/adump'

*.background_dump_dest='D:\oracle/admin/orcl/bdump'

*.compatible='10.2.0.1.0'

*.control_files='D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL','D:\ORACLE\ORADATA\ORCL\CONTROL02.CTL','D:\ORACLE\ORADATA\ORCL\CONTROL03.CTL','G:\CONTROL04.CTL'

*.core_dump_dest='D:\oracle/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='D:\oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=10

*.local_listener='LISTENER_ORCL'

*.open_cursors=300

*.pga_aggregate_target=202375168

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=96468992

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='D:\oracle/admin/orcl/udump'

这里显示的control文件包括“'G:\CONTROL04.CTL'

然后去掉这个,shutdown 数据库

令数据据从新修改的init.ora启动

SQL> startup pfile='E:\oracle\product\10.2.0\db_1\database\INITorcl.ora';

ORACLE instance started.

Total System Global Area   96468992 bytes

Fixed Size                  1247468 bytes

Variable Size              62916372 bytes

Database Buffers           25165824 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

数据库已经打开。

然后再重新创新spfile文件

SQL> create spfile from pfile;

文件已创建。

SQL> create pfile='E:\initorcl.ora' from spfile;

文件已创建。

SQL> startup force;

ORACLE 例程已经启动。

Total System Global Area   96468992 bytes

Fixed Size                  1247468 bytes

Variable Size              62916372 bytes

Database Buffers           25165824 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

数据库已经打开。

至此数据库从spfile也正常启动

SQL> show parameter control_files;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      D:\ORACLE\ORADATA\ORCL\CONTROL

01.CTL, D:\ORACLE\ORADATA\ORCL

\CONTROL02.CTL, D:\ORACLE\ORAD

ATA\ORCL\CONTROL03.CTL

至此完成,来来回回的折腾了几次:(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值