数据库控制文件问题
来源:互联网 发布:大数据性能 编辑:程序博客网 时间:2024/04/30 11:37
我在为控制文件修改路径的时候遇见一个这样的问题。
本来三个控制文件的位置是:
E:\ORACLE\ORADATA\ORA10\CONTROL01.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
我现在将控制文件的路径修改为:
E:\CONTROL01.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
我开始做的时候是这样的
SQL> alter system set control_files='E:\CONTROL01.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL’
正确的,启动数据库:
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL)
重新启动一下:更郁闷的事情发生了,数据库居然起来了。(重装操作系统后,用备份的oracle相关文件替换后,打不开数据库,按修改后就可以了)
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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:\ORACLE\OR
ADATA\ORA10\CONTROL02.CTL, E:\
ORACLE\ORADATA\ORA10\CONTROL03
.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL’
修改这个参数的写法:
*.control_files=(E:\CONTROL01.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL)
这样就没有问题了。
问题出来了,我这个参数使用的是oracle的命令修改的spfile文件,而且使用的是oracle命令生成的pfile文件。为什么oracle自己生成的东西会有问题那?还需要手工修改他的格式?
在深入一下:
我将正常运行的数据库的参数文件spfile生成为pfile。这时候pfile文件中的control_files参数的格式还是为:
*.control_files='E:\ORACLE\ORADATA\ORA10\CONTROL01.CTL','E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL','E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
但是这时候,使用这个文件还是能够正常启动:
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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
本来三个控制文件的位置是:
E:\ORACLE\ORADATA\ORA10\CONTROL01.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
我现在将控制文件的路径修改为:
E:\CONTROL01.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL,
E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
我开始做的时候是这样的
SQL> alter system set control_files='E:\CONTROL01.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL’
正确的,启动数据库:
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL)
重新启动一下:更郁闷的事情发生了,数据库居然起来了。(重装操作系统后,用备份的oracle相关文件替换后,打不开数据库,按修改后就可以了)
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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:\ORACLE\OR
ADATA\ORA10\CONTROL02.CTL, E:\
ORACLE\ORADATA\ORA10\CONTROL03
.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:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL’
修改这个参数的写法:
*.control_files=(E:\CONTROL01.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL, E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL)
这样就没有问题了。
问题出来了,我这个参数使用的是oracle的命令修改的spfile文件,而且使用的是oracle命令生成的pfile文件。为什么oracle自己生成的东西会有问题那?还需要手工修改他的格式?
在深入一下:
我将正常运行的数据库的参数文件spfile生成为pfile。这时候pfile文件中的control_files参数的格式还是为:
*.control_files='E:\ORACLE\ORADATA\ORA10\CONTROL01.CTL','E:\ORACLE\ORADATA\ORA10\CONTROL02.CTL','E:\ORACLE\ORADATA\ORA10\CONTROL03.CTL'
但是这时候,使用这个文件还是能够正常启动:
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount pfile=e:\oracle\ora10\database\initora10.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
- 数据库控制文件问题
- 数据库版本控制问题
- 数据库版本控制问题
- 数据库版本控制问题
- 控制文件扩展问题
- 增加数据库控制文件命令
- 创建oracle数据库控制文件
- 单机数据库添加控制文件
- Oracle数据库控制文件损坏
- Oracle数据库控制文件相关资料
- 重建控制文件修复数据库的步骤
- 控制文件丢失时数据库的恢复
- 旧控制文件恢复新数据库结构
- 数据库 中的控制文件的添加移动
- 使用旧的控制文件恢复数据库
- 使用备份控制文件恢复数据库
- 数据库控制文件中的SCN详解
- 使用旧的控制文件恢复数据库
- poj1704(变形Nim博弈)
- 这样解决浏览器不兼容问题
- hdu 2795 Billboard
- Android Binder设计与实现 – 设计篇
- 开发者必备的6款源码搜索引擎
- 数据库控制文件问题
- 实现游戏对象之间的通信
- 友元-----练习
- web.xml详细配置
- wp8
- configure samba
- HDU4544 湫湫系列故事――消灭兔子
- Resolving “error: failed to attach to process ID 0″ in Xcode
- 利用dispatch_once创建单例