我在为控制文件修改路径的时候遇见一个这样的问题。
本来三个控制文件的位置是:
E:ORACLEORADATAORA10CONTROL01.CTL,
E:ORACLEORADATAORA10CONTROL02.CTL,
E:ORACLEORADATAORA10CONTROL03.CTL'
我现在将控制文件的路径修改为:
E:CONTROL01.CTL,
E:ORACLEORADATAORA10CONTROL02.CTL,
E:ORACLEORADATAORA10CONTROL03.CTL'
我开始做的时候是这样的
SQL> alter system set control_files='E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL' scope=spfile; 系统已更改。 |
修改spfile文件中的control_files参数,然后重启数据块。问题出现了。
SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 159383552 bytes Fixed Size 1247876 bytes Variable Size 79693180 bytes Database Buffers 75497472 bytes Redo Buffers 2945024 bytes ORA-00205: ?????????, ??????, ??????? |
alert文件的错误是:
ALTER DATABASE MOUNT
Wed May 09 08:07:44 2007
ORA-00202: control file: 'E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。
无法找到控制文件,这时候,我的控制文件已经在自己的目录上。spfile不行,我就使用pfile文件。
SQL> create pfile from spfile; 文件已创建。 |
看看pfile文件中的control_files的内容:
*.control_files=’E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL’ |
正确的,启动数据库:
SQL> shutdown immediate ORA-01109: 数据库未打开 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount pfile=e:oracleora10databaseinitora10.ora ORACLE 例程已经启动。 Total System Global Area 159383552 bytes Fixed Size 1247876 bytes Variable Size 79693180 bytes Database Buffers 75497472 bytes Redo Buffers 2945024 bytes ORA-00205: ?????????, ??????, ??????? |
还是有问题。
查看一下Oracle的文档,文档上说:
To Multiplex or Move Additional Copies of the Current Control Files 1) Shut down the database. 2) Copy an existing control file to a different location, using operating system commands. 3) Edit the CONTROL_FILES parameter in the database's initialization parameter file to add the new control file's name, or to change the existing control filename. 4) Restart the database. |
文档上说是修改修改参数文件中的CONTROL_FILES参数,我就是这样做的啊?问题出在哪里啊?很是郁闷。后来看到文档上有这样的格式。
CONTROL_FILES = (/u01/oracle/prod/control01.ctl, /u02/oracle/prod/control02.ctl, /u03/oracle/prod/control03.ctl) |
我抱着试试看的态度,将pfile文件上的control_files修改为:
*.control_files=(E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL) |
重新启动一下:更郁闷的事情发生了,数据库居然起来了。
SQL> startup mount pfile=e:oracleora10databaseinitora10.ora ORACLE 例程已经启动。 Total System Global Area 159383552 bytes Fixed Size 1247876 bytes Variable Size 79693180 bytes Database Buffers 75497472 bytes Redo Buffers 2945024 bytes 数据库装载完毕。 SQL> SQL> show parameter control NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string E:CONTROL01.CTL, E:ORACLEOR ADATAORA10CONTROL02.CTL, E: ORACLEORADATAORA10CONTROL03 .CTL SQL> |
那么从pfile生成spfile看看:
SQL> create spfile from pfile; 文件已创建。 SQL> shutdown immediate ORA-01109: 数据库未打开 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 159383552 bytes Fixed Size 1247876 bytes Variable Size 79693180 bytes Database Buffers 75497472 bytes Redo Buffers 2945024 bytes 数据库装载完毕。 SQL> |
郁闷,居然没有问题。
总结一下:
为了更改控制文件的目录,使用alter system修改参数control_files到spfile中。然后将spfile生成pfile文件,关闭数据库,这时候无论使用spfile还是pfile都无法启动数据库,错误是指定的控制文件的路径不正确。这时候pfile文件的写法是:
*.control_files=’E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL’
修改这个参数的写法:
*.control_files=(E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL)
这样就没有问题了。
问题出来了,我这个参数使用的是oracle的命令修改的spfile文件,而且使用的是oracle命令生成的pfile文件。为什么oracle自己生成的东西会有问题那?还需要手工修改他的格式?
在深入一下:
我将正常运行的数据库的参数文件spfile生成为pfile。这时候pfile文件中的control_files参数的格式还是为:
*.control_files='E:ORACLEORADATAORA10CONTROL01.CTL','E:ORACLEORADATAORA10CONTROL02.CTL','E:ORACLEORADATAORA10CONTROL03.CTL' |
但是这时候,使用这个文件还是能够正常启动:
SQL> shutdown immediate ORA-01109: 数据库未打开 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount pfile=e:oracleora10databaseinitora10.ora ORACLE 例程已经启动。 Total System Global Area 159383552 bytes Fixed Size 1247876 bytes Variable Size 79693180 bytes Database Buffers 75497472 bytes Redo Buffers 2945024 bytes 数据库装载完毕。 SQL> |
大家说说这是为什么,难道我有什么做错的地方吗?
我的数据库版本是:
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 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/222350/viewspace-914125/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/222350/viewspace-914125/