Oracle
Allen 2010-03-24 14:13:39 44160 0 0 0 0

 

oracle9i,oracle10g如何切换使用spfile和pfile
 
首先,要明确以下几点:
 
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启动。
 
这样理解应该没有问题,实际测试也是这样的!
 
OK,又解决了我心中的一大疑问!
 
相关讨论:http://www.itpub.net/thread-1280993-1-1.html
 
转帖请注明:
本文源自TTT BLOG,原文地址:http://blog.chinaunix.net/u3/107265/showart_2198810.html
 
PS:
 
以上讨论的只是如何切换pfile和spfile,让数据库默认用pfile或spfile启动。
 
当然,还有许多其它的用法,例如:
 
1,启动时加pfile参数文件:
startup pfile='c:iniths01.bak'
注意,不能以这种方式指定spfile.
 
见实验一。
 
2,也可以将spfile路径放到pfile中,然后以及pfile启动数据库。
如,在默认使用的pfile文件中加入:spfile='E:oracleproduct10.2.0db_1dbsSPFILEHS01.ORA'
然后重启数据库,查看参数文件,显示使用的就是spfile.
 
这种方式,还有一点要注意,pfile中加入spfile路径,也可以定义其他参数,如果参数重复设置,后读取的参数将取代先前的设置。
(这种通过在pfile中调用spfile,使用后设置的参数覆盖spfile中的参数设置,是解决spfile中参数设置错误的一种方法。)
 
见实验二。
 
实验一:
 

SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ -----------------------------------------
spfile string E:ORACLEPRODUCT10.2.0DB_1
                                                 DATABASESPFILEHS01.ORA
SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ -----------------------------------------
optimizer_mode string CHOOSE

SQL> host type c:iniths01.bak
hs01.__db_cache_size=356515840
hs01.__java_pool_size=4194304
hs01.__large_pool_size=12582912
hs01.__shared_pool_size=230686720
hs01.__streams_pool_size=0
...
*.optimizer_mode='ALL_ROWS'
...

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup pfile='c:iniths01.bak'
ORACLE instance started.

Total System Global Area 612368384 bytes
Fixed Size 1373308 bytes
Variable Size 250219396 bytes
Database Buffers 356515840 bytes
Redo Buffers 4259840 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ -----------------------------------------
spfile string
SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ -----------------------------------------
optimizer_mode string ALL_ROWS
SQL>



实验二:

SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string E:ORACLEPRODUCT10.2.0DB_1
                                                 DATABASESPFILEHS01.ORA
SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string CHOOSE

SQL> host type c:iniths01.bak
hs01.__db_cache_size=356515840
hs01.__java_pool_size=4194304
hs01.__large_pool_size=12582912
hs01.__shared_pool_size=230686720
hs01.__streams_pool_size=0
...
*.optimizer_mode='ALL_ROWS'
...

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup pfile='c:iniths01.bak'
ORACLE instance started.

Total System Global Area 612368384 bytes
Fixed Size 1373308 bytes
Variable Size 250219396 bytes
Database Buffers 356515840 bytes
Redo Buffers 4259840 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS
SQL>

实验二:

SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string E:ORACLEPRODUCT10.2.0DB_1
                                                 DATABASESPFILEHS01.ORA
SQL> show parameter optimizer_mode;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string CHOOSE

--当前使用的是spfile,并且spfile中参数optimizer_mode=CHOOSE

SQL> host cd
E:oracleproduct10.2.0db_1database

SQL> host ren spfilehs01.ora spfilehs01.bak

--修改当前spfile名称,DB启动将报错。

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: 无法打开参数文件 'E:ORACLEPRODUCT10.2.0DB_1DATABASEINITHS01.ORA'

SQL> host echo spfile='E:oracleproduct10.2.0db_1databasespfilehs01.bak' >iniths01.ora

SQL> host echo *.optimizer_mode=all_rows >>iniths01.ora

SQL> host type iniths01.ora
spfile='E:oracleproduct10.2.0db_1databasespfilehs01.bak'
*.optimizer_mode=all_rows

--建立pfile,在其中指定spfile=E:oracleproduct10.2.0db_1databasespfilehs01.bak

--并在其后指定参数optimizer_mode=all_rows

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 612368384 bytes
Fixed Size 1373308 bytes
Variable 

Tag: Oracle Oracle基础 TTTBLOG
我也要发一个   ·   返回首页   ·   返回[Oracle]   ·   前一个   ·   下一个
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Oracle]   ·   返回顶部