oracle修改control路径,修改control_file的存放路径

control_file是oracle数据库中很重要的一部分,它存放了启动oracle数据库的必要信息,如:数据库名称、数据库创建信息、表空间信息、数据文件信息、日志文件信息、备份信息、检查点信息等......无论是启动数据库或者数据库在运行的时候这个文件都启着重要的作用,如果数据库找不到这个文件的位置,数据库将会报错,无法正常运行。

这里做一个简单的测试:

数据库环境如下:

图片

OS:

Redhat Enterprise Linux 6.3 x86_64

首先启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area  557842432 bytes

Fixed Size                  2085456 bytes

Variable Size             155192752 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

查看当前控制文件所在位置

SQL> show parameter control_files;

NAME                                 TYPE        VALUE

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

control_files                        string      /oracle/app/oradata/orcl/contr

ol01.ctl, /oracle/app/oradata/

orcl/control02.ctl, /oracle/ap

p/flash_recovery_area/ORCL/con

trol03.ctl

可以发现我们现在有三个控制文件,分别是control01.ctl、control02.ctl、control03.ctl,其中01和02控制文件放在了同一个目录下,03放在快速恢复区,现在我来给02控制文件改个名字使数据库找不到它,看看数据库报什么错。

先来到02所在的目录下

[oracle@ww ~]$ cd /oracle/app/oradata/orcl/

[oracle@ww orcl]$ pwd

/oracle/app/oradata/orcl

[oracle@ww orcl]$ ls -l control0*

-rw-r----- 1 oracle dba 7061504 Jan  5 21:05 control01.ctl

-rw-r----- 1 oracle dba 7061504 Jan  5 21:05 control02.ctl

修改control02.ctl名字

[oracle@ww orcl]$ mv control02.ctl control02.ctl.bak

[oracle@ww orcl]$ ls -l control0*

-rw-r----- 1 oracle dba 7061504 Jan  5 21:05 control01.ctl

-rw-r----- 1 oracle dba 7061504 Jan  5 21:05 control02.ctl.bak

修改成功~!

然后看看数据库这边的情况

连接到sysdba,随便查一个视图

SQL> conn / as sysdba

Connected.

SQL> select name from v$datafile;

select name from v$datafile

*

ERROR at line 1:

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/oracle/app/oradata/orcl/control02.ctl'

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

报错了~!

它说无法打开'/oracle/app/oradata/orcl/control02.ctl'这个文件

没有找到这个文件或目录

说明control02.ctl这个文件已经不存在,刚才以改control02.ctl名字的方式来模拟控制文件丢失成功,当前数据库已无法正常使用。

现在马上把名字改回去然后重新连接数据库就好了

[oracle@ww orcl]$ mv control02.ctl.bak control02.ctl

[oracle@ww orcl]$ ls -l control0*

-rw-r----- 1 oracle dba 7061504 Jan  5 21:15 control01.ctl

-rw-r----- 1 oracle dba 7061504 Jan  5 21:15 control02.ctl

重新连接数据库

SQL> conn / as sysdba

Connected.

SQL> select name from v$datafile;

NAME

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

/oracle/app/oradata/orcl/system01.dbf

/oracle/app/oradata/orcl/undotbs01.dbf

/oracle/app/oradata/orcl/sysaux01.dbf

/oracle/app/oradata/orcl/users01.dbf

/oracle/app/oradata/orcl/whj.dbf

控制文件是一个二进制文件,由oracle自行维护,一个Oracle数据库至少有一个控制文件,鉴于控制文件的重要性,在默认情况下,Oracle会有三份一模一样的控制文件进行冗余,三份文件的一致性由Oracle自行维护。建议控制文件至少有两份,分别放在不同磁盘下,以提高可用性。

下面我来模拟修改一下控制文件的路径:

先查看一下控制文件位置

SQL> show parameter control_files;

NAME                                 TYPE        VALUE

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

control_files                        string      /oracle/app/oradata/orcl/contr

ol01.ctl, /oracle/app/oradata/

orcl/control02.ctl, /oracle/ap

p/flash_recovery_area/ORCL/con

trol03.ctl

发现control01.ctl和control02.ctl还在同一个位置,我把control02.ctl换个位置,放到/home/oracle下

[oracle@ww orcl]$ mv control02.ctl /home/oracle/control02.ctl

[oracle@ww orcl]$ cd /home/oracle

[oracle@ww ~]$ ls -l control02.ctl

-rw-r----- 1 oracle dba 7061504 Jan  5 22:03 control02.ctl

查看刚才那个目录control02.ctl已经不存在

[oracle@ww orcl]$ ls -l control*

-rw-r----- 1 oracle dba 7061504 Jan  5 22:05 control01.ctl

[oracle@ww orcl]$ pwd

/oracle/app/oradata/orcl

然后关闭数据库

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

现在启动数据库肯定会报错

SQL> startup

ORACLE instance started.

Total System Global Area  557842432 bytes

Fixed Size                  2085456 bytes

Variable Size             155192752 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

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

检查到控制文件错误,让我们去检查报警日志文件信息

报警日志文件目录如下:

[oracle@ww bdump]$ pwd

/oracle/app/admin/orcl/bdump

跟踪一下报警日志文件

[oracle@ww bdump]$ tail -f alert_orcl.log

再次启动数据库报警日志显示以下错误

ORA-00202: control file: '/oracle/app/oradata/orcl/control02.ctl'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

Sun Jan  5 22:18:41 2014

ORA-205 signalled during: ALTER DATABASE   MOUNT...

无法获取文件 '/oracle/app/oradata/orcl/control02.ctl'

没有这个文件或目录

下面是解决方法:

[oracle@ww dbs]$ pwd

/oracle/app/product/10.2.0/db_1/dbs

[oracle@ww dbs]$ ll

total 6948

-rw-r----- 1 oracle dba     112 Dec  5 02:04 alert_orcl.log

-rw-rw---- 1 oracle dba    1552 Jan  5 22:18 hc_orcl.dat

-rw-r----- 1 oracle dba    8385 Sep 11  1998 init.ora

-rw-r--r-- 1 oracle dba   12920 May  3  2001 initdw.ora

-rw-r----- 1 oracle dba    2441 Jan  5 20:19 initorcl.ora

-rw-r----- 1 oracle dba      24 Nov 26 07:33 lkORCL

-rw-r----- 1 oracle dba    1536 Dec  5 02:37 orapworcl

-rw-r----- 1 oracle dba 7061504 Dec  6 07:31 snapcf_orcl.f

-rw-r----- 1 oracle dba    2560 Jan  5 20:57 spfileorcl.ora

/oracle/app/product/10.2.0/db_1/dbs目录下,有个spfile实例名.ora文件

将数据库启动到nomount状态

SQL> startup nomount;

ORACLE instance started.

Total System Global Area  557842432 bytes

Fixed Size                  2085456 bytes

Variable Size             155192752 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

以刚才的spfile生成一个pfile文件

SQL> create pfile='$ORACLE_HOME/dbs/pfileorcl.ora' from spfile='$ORACLE_HOME/dbs/spfileorcl.ora';

File created.

修改pfile

vi pfileorcl.ora

*.control_files='/oracle/app/oradata/orcl/control01.ctl','/oracle/app/oradata/orcl/control02.ctl','/oracle/app/flash_recovery_area/ORCL/control03.ctl'这项指定控制文件路径的参数,把第二个control02.ctl的路径改成/home/oracle/control02.ctl即可。

*.control_files='/oracle/app/oradata/orcl/control01.ctl','/home/oracle/control02.ctl','/oracle/app/flash_recovery_area/ORCL/control03.ctl'

保存退出~!

然后指定pfile文件路径启动数据库

SQL> startup pfile='$ORACLE_HOME/dbs/pfileorcl.ora'

ORACLE instance started.

Total System Global Area  557842432 bytes

Fixed Size                  2085456 bytes

Variable Size             155192752 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

OK数据库启动完毕~!

最后再将这个pfile生成一个spfile文件将以前的spfile覆盖

SQL> create spfile='$ORACLE_HOME/dbs/spfileorcl.ora' from pfile='$ORACLE_HOME/dbs/pfileorcl.ora';

File created.

重启数据库

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area  557842432 bytes

Fixed Size                  2085456 bytes

Variable Size             155192752 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

重启正常

再查看控制文件位置

SQL> show parameter control_files;

NAME                                 TYPE        VALUE

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

control_files                        string      /oracle/app/oradata/orcl/contr

ol01.ctl, /home/oracle/control

02.ctl, /oracle/app/flash_reco

very_area/ORCL/control03.ctl

control02.ctl文件位置已经更换到/home/oracle下

测试成功~!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28834607/viewspace-1295266/,如需转载,请注明出处,否则将追究法律责任。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值