Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142467
  • 博文数量: 12
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 14:36
文章分类

全部博文(12)

文章存档

2011年(1)

2008年(11)

我的朋友

分类: Oracle

2008-05-07 16:26:11

Oracle9i中,一个新的文件被引入-spfile,spfile用于服务器端,管理初始化参数。

 

9i以前,Oracle使用pfile存储初始化参数设置,这些参数在实例启动时被读取,任何修改需要重起实例才能生效;使用spfile你可以使用ALTER SYSTEM或者ALTER SESSION来动态修改那些可动态修改的参数,所有更改可以立即生效,你可以选择使更改只应用于当前实例还是同时应用到spfile。这就使得所有对spfile的修改都可以在命令行完成,我们可以彻底告别手工修改初始化参数文件,这就大大减少了人为错误的发生。

 

SPFILE是一个二进制文件,可以使用RMAN进行备份,这样实际上Oracle把参数文件也纳入了备份恢复管理。

 

除了第一次启动数据库需要PFILE(然后可以根据PFILE创建SPFILE,我们可以不再需要PFILE,ORACLE强烈推荐使用spfile,应用其新特性来存储和维护初始化参数设置。

SPFILE

缺省的,ORACLE使用PFILE启动数据库,SPFILE必须由PFILE创建,新创建的SPFILE在下一次启动数据库时生效,CREATE SPFILE需要SYSDBA或者SYSOPER的权限:

语法如下:

CREATE SPFILE[=’SPFILE-NAME’] FROM PFILE[=’PFILE-NAME’]

 

例:

SQL> create spfile from pfile;

 

缺省的,spfile创建到系统缺省目录

(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\database)

 

如果SPFILE已经存在,那么创建会返回以下错误:

SQL> create spfile from pfile;

create spfile from pfile

*

ERROR 位于第 1 :

ORA-32002: 无法创建已由例程使用的 SPFILE


这也可以用来判断当前是否使用了SPFILE文件。

然而意外的时,Oracle并没有向其他文件一样,在运行期间保持锁定,让我们作以下试验:

SQL> host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK

SQL> alter system set db_cache_size=24M scope=both;

系统已更改。

SQL> host dir *.ora

 驱动器 E 中的卷是 Doc

 卷的序列号是 980C-8EFF

 

 E:\Oracle\Ora9iR2\database 的目录

 

2003-02-10  14:35                2,048 PWDeyglen.ORA

               1 个文件          2,048 字节

               0 个目录    150,347,776 可用字节

 

SQL> alter system set db_cache_size=24M scope=spfile;

alter system set db_cache_size=24M scope=spfile

*

ERROR 位于第 1 :

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

 

SQL> host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA

 

SQL> alter system set db_cache_size=24M scope=spfile;

系统已更改。

SQL>

估计Oracle以后会想办法来锁定这个文件。

SPFILE

重新启动数据库,使用startup命令,Oralce将会按照以下顺序在缺省目录中搜索参数文件:

a.        spfile${ORACLE_SID}.ora   

缺省目录 UNIX: ${ORACLE_HOME}/dbs/                            NT:   ${ORACLE_HOME}\database

b.       spfile.ora              

缺省目录 UNIX: ${ORACLE_HOME}/dbs/                            NT:   ${ORACLE_HOME}\database

c.      init${ORACLESID}.ora       

缺省目录 UNIX: ${ORACLE_HOME}/dbs/                            NT:   ${ORACLE_HOME}\database or     ${ORACLE_HOME}\admin\db_name\pfile\

创建了spfile,重新启动数据库,Oracle会按顺序搜索以上目录,spfile就会自动生效。


 

 

pfile/spfile启动数据库

如果你想使用pfile启动数据库,你可以在启动时指定pfile或者删除spfile.

SQL> startup pfile='E:\Oracle\admin\eyglen\pfile\init.ora';

你不能以同样的方式指定spfile,但是可以创建一个包含spfile参数的pfile文件,指向spfile.

SPFILE是一个自Oracle9i引入的初始化参数,类似于IFILE参数。 SPFILE参数用于定义非缺省路径的spfile文件。

你可以在PFILE链接到SPFILE文件,同时在PFILE中定义其他参数,如果参数重复设置,后读取的参数将取代先前的设置。

PFILE参数的使用,例如:

这是我们使用SPFILE启动的情况,

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。


SQL> SHOW parameter log_archive_start

 

NAME                                 TYPE           VALUE

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

log_archive_start                    boolean        TRUE

SQL> SHOW parameter spfile

 

NAME                 TYPE       VALUE

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

spfile               string     %ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA

SQL>

我们修改PFILE文件内容如下:

#Pfile link to SPFILE

SPFILE= 'E:\Oracle\Ora9iR2\database\SPFILEEYGLEN.ORA'

log_archive_start = false


可以预见这个log_archive_start参数设置将会代替SPFILE中的设置:

SQL> startup  pfile='e:\initeyglen.ora'

ORACLE 例程已经启动。

 

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。


SQL> show parameter spfile

 

NAME               TYPE    VALUE

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

spfile             string  E:\Oracle\Ora9iR2\database\SPFLEEYGLEN.ORA


SQL> SHOW parameter log_archive_start


NAME                                 TYPE       VALUE

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

log_archive_start                    boolean    FALSE


然后我们可以使用ALTER SYSTEM方式将修改固定到SPFILE.

SQL> ALTER SYSTEM SET log_archive_start=FALSE SCOPE=spfile;

 

系统已更改。

 

所以你也可以通过如上方式在启动时修改初始化参数。比我们在本文最后介绍的导入导出方法要简便的多。


 

 

 

可以通过ALTER SYSTEM或者导入导出来更改SPFILE的内容。

ALTER SYSTEM增加了一个新选项:SCOPESCOPE参数有三个可选值:MEMORY SPFILE BOTH

MEMORY:只改变当前实例运行

SPFILE:只改变SPFILE的设置

BOTH:改变实例及SPFILE

1. SCOPE=MEMORY

SQL> SHOW parameter timed_statistics

NAME                                 TYPE     VALUE

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

timed_statistics                     boolean  TRUE

SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=MEMORY;

 

系统已更改。

 

SQL> SHOW parameter timed_statistics

 

NAME                                 TYPE     VALUE

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

timed_statistics                     boolean  FALSE

 

SQL> SHUTDOWN immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> show parameter timed_statistics

 

NAME                                 TYPE       VALUE

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

timed_statistics                     boolean    TRUE

 

2. SCOPE=SPFILE

SQL> show parameter timed_statistics

 

NAME                                 TYPE       VALUE

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

timed_statistics                     boolean    TRUE

 

SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=SPFILE;

 

系统已更改。

 

SQL> show parameter timed_statistics

 

NAME                                 TYPE       VALUE

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

timed_statistics                     boolean    TRUE

SQL> SHUTDOWN immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> STARTUP

ORACLE 例程已经启动。

 

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。


SQL> SHOW parameter timed_statistics

 

NAME                                 TYPE       VALUE

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

timed_statistics                     boolean    FALSE

SQL>

 

3 SCOPE = BOTH

使用BOTH选项实际上等同于不带参数的ALTER SYSTEM语句。

注意:如果修改静态参数,那么需要指定SPFILE参数,否则将会报错。

SQL> SHOW parameter timed_statistics

NAME                                TYPE      VALUE

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

timed_statistics                    boolean   FALSE

SQL> ALTER SYSTEM SET timed_statistics=TRUE SCOPE=BOTH;

系统已更改。

SQL> SHOW parameter timed_statistics

NAME                                 TYPE       VALUE

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

timed_statistics                     boolean    TRUE

SQL> SHUTDOWN immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL>STARTUP

ORACLE 例程已经启动。

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> SHOW parameter timed_statistics

NAME                                 TYPE        ALUE

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

timed_statistics                     boolean     TRUE

SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH;

ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH

                 *

ERROR 位于第 1 :

ORA-02095: 无法修改指定的初始化参数

SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE;

系统已更改。

 

4.你也可以在数据库shutdown时创建和修改spfile,例如:

SQL> show sga

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

 

SQL> SHUTDOWN immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

 

SQL> create pfile from spfile;

文件已创建。

SQL> create spfile from pfile;

文件已创建。

SQL>

 

阅读(564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~