您的位置:首页 > 其它

Spfile & pfile 切换 ---- (顺便研究一下control file 的设置)

2011-04-12 14:28 399 查看
闲来无事,看了篇帖子,拿来试验下。废话少说开始:

1,spfile缺省目录:
--unix下:$oracle_home/dbs/
--NT下:%oracle_home%/database

2,spfile的搜索顺序:
1)spfile<oracle_sid>.ora,
2)spfile.ora,
3)init<oracle_sid>.ora,
创建了spfile,重新启动数据库,oracle会按顺序搜索以上目录,spfile就会自动生效。

3,在widows系统下,虽然创建数据库时,默认会将spfile创建到%oracle_home%/dbs/目录下,但这个目录不是缺省目录。如果spfile发生变化后,也不会再到此目录下查找了,还是会到spfile缺省目录下查找spfile。
(我就是被这一点给搞糊涂了,总以为oracle会到%oracle_home%/dbs/目录下去找spfile,所以将生成的spfile也放到此目录下了。然后删除pfile,启动DB时报错,找不到pfile……)

4,当我们用命令由spfile创建pfile,或者由pfile创建spfile时,新的文件也会生成到缺省目录下。

明确了以上问题,数据库使用pfile和spfile的转换也就很容易了。

1,如果当前使用的是spfile,使用命令创建pfile,然后删除或更名缺省目录下的spfile,然后重新启动,数据库就会默认使用pfile启动。

2,如果当前使用的是pfile,使用命令创建spfile,然后删除或更名缺省目录下的pfile,然后重新启动,数据库就会默认使用spfile启动。

验证由SPFILE - > PFILE

$ sqlplus /nolog
SQL*Plus: Release 9.2.0.5.0 - Production on Tue Apr 12 13:37:56 2011
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL> conn sys/sys as sysdba
Connected.
SQL> show parameter spfile;  //查看当前用的是spfile,如下
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      ?/dbs/spfile@.ora
SQL> shutdown abort;
ORACLE instance shut down.
$ pwd   //验证路径
/home/ora_test/karldb/dbs
$ ls
initkarl.ora        lkKARL              spfilekarl.ora      tmp
initkarl.ora.bck    orapwkarl           spfilekarl.ora.bck
$ rm spfilekarl.ora
SQL> startup nomount;
ORACLE instance started.
Total System Global Area  320309728 bytes
Fixed Size                   731616 bytes
Variable Size             285212672 bytes
Database Buffers           33554432 bytes
Redo Buffers                 811008 bytes
SQL> show parameter spfile;  //发现已经没有VALUE,则当前使用PFILE
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile                               string
验证成功!


验证由PFILE 中更改CONTROL FILE 参数路径

]$ ls
initkarl.ora        lkKARL              spfilekarl.ora      tmp
initkarl.ora.bck    orapwkarl           spfilekarl.ora.bck
$ rm spfilekarl.ora  //删除SPFILE,然后重启DB,看使用的是什么
$ pwd
/home/ora_test/karldb/dbs
$ ls
initkarl.ora        lkKARL              spfilekarl.ora.bck
initkarl.ora.bck    orapwkarl           tmp

SQL> startup nomount;
ORACLE instance started.
Total System Global Area  320309728 bytes
Fixed Size                   731616 bytes
Variable Size             285212672 bytes
Database Buffers           33554432 bytes
Redo Buffers                 811008 bytes
SQL> show parameter spfile; //发现没有VALUE值,说明当前使用的是PFILE
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile                               string
SQL> alter database mount; //进一步验证。到MOUNT状态看controlFILE位置。
Database altered.
SQL> select * from v$controlfile;
STATUS
-------
NAME
--------------------------------------------------------------------------------
/home/ora_test/oradata/karl/control01.ctl

/home/ora_test/oradata/karl/control02.ctl

/home/ora_test/oradata/karl/control03.ctl
//关闭DB,修改pfile 的control file 参数路径,重复以上步骤,看最后controlfile是否更改,进一步验证使用的是当前的pfile文件。
//添加control_files参数 新路径'/home/ora_test/oradata_bck/control.ctl.bck'
//此时仍然没有SPIFLE
SQL> startup mount;
ORACLE instance started.
Total System Global Area  320309728 bytes
Fixed Size                   731616 bytes
Variable Size             285212672 bytes
Database Buffers           33554432 bytes
Redo Buffers                 811008 bytes
ORA-00214: controlfile '/home/ora_test/oradata/karl/control01.ctl' version
21373 inconsistent with file '/home/ora_test/oradata_bck/control.ctl.bck'
version 21365
//不一致嘛。21373 inconsistent 重新一份就OK。
SQL> startup mount;
ORACLE instance started.
Total System Global Area  320309728 bytes
Fixed Size                   731616 bytes
Variable Size             285212672 bytes
Database Buffers           33554432 bytes
Redo Buffers                 811008 bytes
Database mounted.  //顺利到MOUNT状态。
SQL> select * from v$controlfile;
STATUS
-------
NAME
--------------------------------------------------------------------------------
/home/ora_test/oradata/karl/control01.ctl

/home/ora_test/oradata/karl/control02.ctl

/home/ora_test/oradata/karl/control03.ctl

STATUS
-------
NAME
--------------------------------------------------------------------------------
/home/ora_test/oradata_bck/control.ctl.bck  //验证成功。


验证由PFILE -> SPFILE

SQL> startup nomount;
ORACLE instance started.
Total System Global Area  320309728 bytes
Fixed Size                   731616 bytes
Variable Size             285212672 bytes
Database Buffers           33554432 bytes
Redo Buffers                 811008 bytes
SQL> create spfile from pfile;  //创建SPFILE
File created.
$ ls
initkarl.ora        lkKARL              spfilekarl.ora //发现产生SPFILE
initkarl.ora.bck    orapwkarl
SQL> shutdown immediate;
SQL> startup open; //重启嘛
ORACLE instance started.
SQL> show parameter spfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      ?/dbs/spfile@.ora //切换SPIFLE成功
//验证内容
SQL> select * from v$controlfile;
STATUS
-------
NAME
--------------------------------------------------------------------------------
/home/ora_test/oradata/karl/control01.ctl

/home/ora_test/oradata/karl/control02.ctl

/home/ora_test/oradata/karl/control03.ctl

STATUS
-------
NAME
--------------------------------------------------------------------------------
/home/ora_test/oradata_bck/control.ctl.bck //有新添加的该文件路径,说明SPFILE已更新。


OK 验证完毕,喝杯茶休息下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐