Oracle区分参数是动态、静态
1、oracle参数文件概述
每一个数据库中都有一个操作系统文件叫参数文件,也叫初始化文件,该文件决定数据库的物理结构、内存、数据库的极限及系统大量的默认值,是进行数据库设计与性能调整的重要文件。
在Oracle9i中,首次引入了服务器参数文件SPFILE(Server Parameter File),该文件是存储于服务器端的二进制文件,从而解决了Oracle数据库中一直无法解决的技术难题,即不能在线修改数据库参数这一问题(ALTER SYSTEM所设定的参数可以直接保存在SPFILE中,不像以前那样需要手工更改参数文件才可以使改动永久生效),并且降低了手动修改参数文件容易发生的错误。
在Oracle9i及其后续版本中可以使用传统的参数文件Pfile及二进制服务器端参数文件Spfile。
1.1 Pfile文件
①Pfile(Parameter File)文件格式:文件是基于文本格式的参数文件,含有数据库及例程的参数和配置。
②Pfile默认名称和路径(10g):
默认名称:init<SID>.ora
默认路径:$ORACLE_BASE\db_1\database\init<SID>.ora。该参数文件实际只是起到一个指向作用,它的内容为包含了真实参数文件路径。
③初始化参数文件使用:
Startup pfile='$ORACLE_BASE\admin\<SID>\pfile\init.ora'(实际的参数文件)
Startup pfile='$ORACLE_BASE\db_1\database\init<SID>.ora'(内容指向init.ora)
以上两种方法都可以正常启动数据库,最后都是打开实际的参数文件
1.2 Spfile文件
①Spfile(Server Parameter File,服务器参数文件)文件格式:是基于二进制格式的参数文件,含有数据库及例程的参数和数值,不能用文本编辑工具打开。
②Spfile默认名称和路径:
默认名称:spfile<SID>.ora
默认路径:$ORACLE_BASE\db_1\database
1.3 参数文件启动顺序
startup 命令重新启动数据库,Oralce默认按照以下顺序在缺省目录中搜索参数文件:
1.spfile${ORACLE_SID}.ora
UNIX默认目录:${ORACLE_HOME}/dbs/
NT默认目录: ${ORACLE_HOME}\database
2.spfile.ora
UNIX默认目录:${ORACLE_HOME}/dbs/
NT默认目录:${ORACLE_HOME}\database
3.init${ORACLE_SID}.ora
UNIX默认目录:${ORACLE_HOME}/dbs/
NT默认目录:${ORACLE_HOME}\database or
${ORACLE_HOME}\admin\db_name\pfile\
加载参数文件的优先级如下:
Spfile<SID>.ora――>Spfile.ora――>Init<SID>.ora
1.4 Spfile和Pfile文件比较
Spfile和Pfile文件的比较
比较内容 | Spfile | Pfile |
格式 | 二进制格式 | 文本格式 |
编辑方式 | 1、利用OEM修改 2、在SQL Plus里使用alter system语句进行修改 | 1、利用OEM修改(重启失效) 2、利用文本工具直接进行修改 |
默认名称 | spfile<SID>.ora | init<SID>.ora |
默认路径 | $ORACLE_BASE\db_1\database | $ORACLE_BASE\db_1\database $ORACLE_BASE\admin\<SID>\pfile\init.ora |
启动次序 | Spfile优于Pfile | Pfile低于Spfile |
2、查看数据库以什么文件启动
方法一:
SQL>selectdistinct ISSPECIFIED from v$spparameter;
ISSPECIFIED
-----------
TRUE
FALSE
备注:如果只有FALSE,使用的是PFILE启动,如果有TRUE,说明用的是SPFILE启动
方法二:
SQL>showparameters spfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string /u01/app/oracle/product/10.2/d
b_1/dbs/spfilexmlgis.ora
备注:如果有值说明使用spfile启动,反之pfile
3、pfile和spfile相互转换
Spfile转Pfile:
Create Spfile From Pfile
Create Spfile[=′路径+文件名′]From Pfile[=′路径+文件名′]
Pfile 转Spfile:
Create Pfile From Spfile
Create Pfile[=′路径+文件名′] FromSpfile[=′路径+文件名′]
4、Oracle 参数修改
动态参数是指可以使用AlterSession或Alter System在数据库运行时进行修改并能立即生效的参数。
静态参数是指只能通过修改参数文件而且数据库必须要重新启动才能生效的参数。
参数修改命令:
SQL>Alter Session Set Parameter_Name = Value;
SQL>Alter System Set Parameter_Name = Value [Deferred];
Alter Session | 修改的参数只限于本次会话,退出会话再进入时修改失效 |
Alter System | 修改的参数适用于数据库实例的所有会话,数据库关闭则修改失效。有特权用户和DBA可以执行 |
Alter System Deferred | 修改是延迟修改,退出会话,下次进入会话时生效。有特权用户和DBA可以执行 |
5、Oracle 参数分类
参数的相关信息保存在视图V$SYSTEM_PARAMETER(v$parameter)中。
Displaysinformation about the initialization parameters that are currently in effectfor the instance. A new session inherits parameter values from theinstance-wide values.
SQL>desc V$PARAMETER;
Name Type Nullable Default Comments
---------------------------------- -------- ------- --------
NUM NUMBER Y Parameternumber
NAME VARCHAR2(80) Y Name of the parameter
TYPE NUMBER Y Parametertype
VALUE VARCHAR2(512) Y Instance-wide parametervalue(session或实例值)
DISPLAY_VALUE VARCHAR2(512) Y 显示名称
ISDEFAULT VARCHAR2(9) Y Indicates whether theparameter is set to the default value (TRUE) or the parameter value wasspecified in the parameter file (FALSE) (参数默认值)
ISSES_MODIFIABLE VARCHAR2(5) Y Indicates whether theparameter can be changed with ALTER SESSION (TRUE) or not (FALSE)(参数值是否可以session级可更改)
ISSYS_MODIFIABLE VARCHAR2(9) Y Indicateswhether the parameter can be changed with ALTER SYSTEM and when the changetakes effect(参数在实例启动后是否可由实例修改)
ISINSTANCE_MODIFIABLEVARCHAR2(5) Y
ISMODIFIED VARCHAR2(10) Y 实例启动后参值是否被修改,session级修改(alter session),值为MODIFIED;实例级修改(alter system),则值为SYS_MODIFIED。
根据v$system_parameter里面的issys_modifiable可以得到其中FLASE:静态参数,IMMEDIATE:动态参数,DEFERREDLEVEL级别动态参数(即只对后续session会话生效).
DEFERRED ----->也是动态参数,对于当前session无效,下一个session生效
FALSE ----->静态参数,需要重启db才能生效
IMMEDIATE ----->动态参数,立即生效
SQL> select count(*) from v$system_parameter whereissys_modifiable='FALSE';
SQL> select count(*) from v$system_parameter whereissys_modifiable='IMMEDIATE';
SQL> select count(*) from v$system_parameter whereissys_modifiable='DEFERRED';
静态参数举例:
SQL> alter system set processes=151;
alter system set processes=151
*
ERROR at line 1:
ORA-02095: specified initializationparameter cannot be modified
动态参数举例:
SQL> alter system set undo_retention=10800scope=both;
System altered.
动态参数(deferred)举例
deferred指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修改的会话)。默认情况下,ALTER SYSTEM命令会立即生效,但是有些参数不能“立即”修改,只能为新建立的会话修改这些参数。
SQL> alter system set sort_area_size = 65536;
alter system set sort_area_size = 65536
ERROR at line 1:
ORA-02096: specified initializationparameter is not modifiable with this option
SQL> alter system set sort_area_size = 65536 deferred;
System altered.
6、Oracle 参数变更生效范围
AlterSystem Set Parameter_Name = Value Scope=(Spfile、Menory、Both)
参数 | 取值 | 结果 | 动态参数 | 静态参数 |
SCOPE | Spfile | 表示该修改只对服务器参数有效 | 数据库重启时有效,永久有效 | 同动态参数,静态参数只适于这种情况 |
Menory | 表示该修改只对内存有效 | 立即有效,但不产生永久效果,因为没有修改服务器参数 | 不允许使用 | |
Both | 表示该修改对上述两种都有效 | 立即有效,永久有效 | 不允许使用 |
使用BOTH选项实际上等同于不带参数的ALTER SYSTEM语句