Oracle动态和静态参数文件

2021/11/12 2:13:26

本文主要是介绍Oracle动态和静态参数文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、pfile和spfile

Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件。它们是在数据库实例启动时候加载的,决定了数据库的物理 结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。可以分为两种类型:

pfile: 初始化参数文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用pfile方式存储初始化参数,pfile 默认的名称为“init+例程名.ora”文件路径:/data/app/oracle/product/12.1.0/dbhome_1/dbs,这是一个文本文件,可以用任何文本编辑工具打开。

spfile:服务器参数文件(Server Parameter Files),从Oracle 9i开始,Oracle引入了Spfile文件,spfile 默认的名称为“spfile+例程名.ora”文件路径:/data/app/oracle/product/12.1.0/dbhome_1/dbs 以二进制文本形式存在,不能用vi编辑器对其中参数进行修改,只能通过SQL命令在线修改。

 

从操作系统上可以看到这两者的区别,初始化参数文件为ASCII文本文件,Spfile为数据文件。

复制代码
[oracle@xqzt ~]$ cd /data/app/oracle/product/12.1.0/dbhome_1/dbs/
[oracle@xqzt dbs]$ ls
hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora
[oracle@xqzt dbs]$ file init.ora 
init.ora: ASCII English text
[oracle@xqzt dbs]$ file spfileorcl.ora 
spfileorcl.ora: data
[oracle@xqzt dbs]$
复制代码

2、使用spfile的好处

1、spfile改正了pfile管理混乱的问题,在多结点的环境里,pfile会有多个image,启动时候需要跟踪最新的image。这是个烦琐的过程。用spfile以后,所有参数改变都写到spfile里面(只要定义scope=spfile或both),参数配置有个权威的来源。

2、9i以前一般都是要备份pfile后再来做参数的修改,而且pfile的修改必须重启实例才能生效。非常的不方便;在9i以后的spfile就可以同通过命令修改指定的参数了,而且有很多参数都不用重启数据库,能够在线生效,这个在线生效的参数会随着数据库的版本增高而增加。如果参数修改有问题数据库起不来了可以在 nomount状态下创建成pfile再修改回来即可。)

3、如何查看Spfilepfile的目录位置?

方法一:

复制代码
SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
DISPLAY_VALUE
--------------------------------------------------------------------------------
spfile
/data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora
/data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora
复制代码

方法二: Show parameter spfile

clip_image001

4、判断Oracle启动时使用spfile还是pfile

1、 通过v$spparameter视图

使用spfile启动数据库,我们可以看到查询出来的结果是spfile

SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified ='TRUE';

DECODE
------
spfile

2、 通过查看spfilepfile参数

系统当前为从spfile启动,在查看show parameter pfile和show parameter spfile 都能看到spfile参数文件的路径。

clip_image001[1]

关闭数据库,从pfile启动,startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';  再次执行上述的两个语句

clip_image002

我们在这里可以很明显的发现,使用pfile启动的数据库,我们无论是查看show parameter pfile还是show parameter spfile 都无法看到pfile参数文件的路径。

5、pfile和spfile的互相创建

create spfile[='xxxxx'] from pfile[='xxxx'];

create pfile[='xxxxx'] from spfile[='xxxx'];

SQL> create pfile from spfile ;

File created.

SQL>

通过spfile创建pfile文件(此时会在$ORACLE_HOME/dbs目录下生成pfile:initorcl.ora),当然你也可以指定参数文件的位置。

[oracle@xqzt dbs]$ pwd
/data/app/oracle/product/12.1.0/dbhome_1/dbs
[oracle@xqzt dbs]$ ls
hc_orcl.dat  lkORCL     spfileorcl.ora
init.ora     initorcl.ora  orapworcl  

 

6、使用pfile/spfile 启动数据库

1、startup 启动次序 spfile优先于pfile。查找文件的顺序是 spfileSID.ora-〉spfile.ora-〉initSID.ora-〉init.ora(spfile优先于pfile)。

2、startup pfile='文件目录'      使用pfile启动,则需指定完整路径,或删除spfile.

复制代码
SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';

ORACLE instance started.

Total System Global Area 2466250752 bytes

Fixed Size 2927384 bytes

Variable Size 1426064616 bytes

Database Buffers 1023410176 bytes

Redo Buffers 13848576 bytes

Database mounted.

Database opened.

SQL>
复制代码

3、 如果在数据库的$ORACLE_HOME/dbs/目录下既有spfile又有pfile,使用spfile启动数据库,不需要指定参数文件路径(因为数据库会优先选择spfile启动),

4、 如果参数文件不在$ORACLE_HOME/dbs/目录下,无论是通过spfile或pfile启动均需要指定完整路径。

7、spfile参数的三种scope:

1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效。适用于动态和静态初始化参数。

2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效。在重启DB后会丟失,会复原为修改前的参数值。

3. scope=both:   对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项

 

参数类型

spfile

memory

both

静态参数

可以,重启服务器生效

不可以

不可以

动态参数

可以,重启服务器生效

可以,立即生效,重启服务失效

可以,立即生效,重启服务器仍然有效果

 

 

 

 

 

如果使用了服务器参数文件,则在执行alter system语句时,scope=both是default的选项。

如果沒有使用服务器参数文件,而在执行alter system语句时指定scope=spfile|both都会出错。

8、修改参数例子

scope=both: 对于动态参数立即生效 

复制代码
SQL> show parameter pga;

NAME                                   TYPE               VALUE

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

pga_aggregate_limit big                  integer            2G

pga_aggregate_target big                 integer          500M

SQL> alter system set pga_aggregate_target = 600m scope=both;


System altered.


SQL> show parameter pga;


NAME                                    TYPE                 VALUE

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

pga_aggregate_limit big                integer                 2G

pga_aggregate_target big               integer                600M

复制代码

对静态参数不能使用scope=both

复制代码
SQL>  alter system set processes = 100 scope=both;
 alter system set processes = 100 scope=both
                  *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL>
复制代码

静态参数 scope=spfile 修改完后重启数据库能生效

复制代码
SQL> show parameter processes


NAME                                     TYPE                VALUE

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

aq_tm_processes                         integer                1

db_writer_processes                     integer                1

gcs_server_processes                    integer                0

global_txn_processes                    integer                1

job_queue_processes                     integer                1000

log_archive_max_processes               integer                4

processes                               integer                300

SQL> alter system set processes = 100 scope=spfile;


System altered.


SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 2466250752 bytes

Fixed Size 2927384 bytes

Variable Size 1358955752 bytes

Database Buffers 1090519040 bytes

Redo Buffers 13848576 bytes

Database mounted.

Database opened.

SQL> show parameter processes


NAME                                    TYPE                VALUE

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

aq_tm_processes                        integer                1

db_writer_processes                    integer                1

gcs_server_processes                   integer                0

global_txn_processes                   integer                1

job_queue_processes                    integer                1000

log_archive_max_processes              integer                4

processes                              integer                100
复制代码

scope=memory  对于动态参数,可以实现立即生效,下次启动失效。

SQL> alter system set pga_aggregate_target = 600m scope=memory;

System altered.

SQL>

如果使用的是pfile,则无法通过命令进行修改,会报ORA-0209532001错误。

复制代码
SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';

ORACLE instance started.

Total System Global Area 2466250752 bytes

Fixed Size 2927384 bytes

Variable Size 1426064616 bytes

Database Buffers 1023410176 bytes

Redo Buffers 13848576 bytes

Database mounted.

Database opened.

SQL> alter system set processes = 100;

alter system set processes = 100

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

SQL> alter system set processes = 100 scope=spfile;

alter system set processes = 100 scope=spfile

*

ERROR at line 1:

ORA-32001: write to SPFILE requested but no SPFILE is in use

SQL> alter system set processes = 100 scope=both;

alter system set processes = 100 scope=both

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

SQL> alter system set processes = 100 scope=memory;

alter system set processes = 100 scope=memory

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

 

原档案路径:https://www.cnblogs.com/xqzt/p/4832597.html



这篇关于Oracle动态和静态参数文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程