Ruishine  
Oracle 参数文件
参数文件主要用来记录数据库的配置,是 Oracle 中非常重要的文件。Instance 在启动阶段读取参数文件 ,并根据参数文件中的参数设置来配置数据库。

参数文件分类

  • pfile :(parameter file)静态参数文件。
    1)文本文件,可以使用vi,vim等编辑器修改参数。
    2)修改参数下次重启实例才生效。
    3)pfile 参数文件可以不在 database server 上。
    4)命名方式:init+SID.ora 。
  • spfile :(system parameter file) 动态参数文件。
    1)二进制文件,不可以通过编辑器修改,可以使用 EM 或指令来修改(alter system|session set parameter_name = values <>)。
    2)Linux 下 strings 可以查看。
    3)必须在 database server 端的指定路径($ORACLE_HOME/dbs)下。
    4)支持RMAN备份。
    5)命名方式: spfile+SID.ora 。

在这里插入图片描述
参数文件优先级

Oracle 启动时读取参数文件的顺序为:

spfilesid.ora --> spfile.ora -->initsid.ora

如果3个文件都不存在,则会报错。

参数文件之间相互生成

  • 由 spfile 生成 pfile
create pfile from spfile //执行完毕后,pfile 将保存为$ORACLE_HOME/dbs/init$ORACLE_SID.ora

也可指定 pfile 的路径

create pfile = '<dir>' from spfile;

例:

SQL>create pfile='/oradata/oracle/app/oracle/product/12.1.0/dbhome_1/dbs/wind.ora' from spfile;
  • 由 pfile 生成 spfile
create spfile from pfile////执行完毕后,pfile 将保存为$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora

指定 pfile 路径

create spfile from pfile = '<dir>'

指定 pfile 路径及生成的 spfile 存放路径

create spfile = '<dir>' from pfile = '<dir>'

参数文件示例

$ cat initstudy.ora
study.__data_transfer_cache_size=0
study.__db_cache_size=1375731712
study.__java_pool_size=16777216
study.__large_pool_size=33554432
study.__oracle_base='/oradata/oracle/app/oracle'#ORACLE_BASE set from environment
study.__pga_aggregate_target=1325400064
study.__sga_target=1962934272
study.__shared_io_pool_size=100663296
study.__shared_pool_size=419430400
study.__streams_pool_size=0
*._catalog_foreign_restore=FALSE
*.audit_file_dest='/oradata/oracle/app/oracle/admin/study/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='/oradata/oracle/app/oracle/oradata/study/control01.ctl','/oradata/oracle/app/oracle/fast_recovery_area/study/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='study'
*.db_recovery_file_dest='/oradata/oracle/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4560m
*.diagnostic_dest='/oradata/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=studyXDB)'
*.enable_pluggable_database=true
*.memory_target=3128m
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

参数详解可参考:http://blog.itpub.net/17203031/viewspace-697335/

Oracle 参数
上文已经通过 initstudy.ora 文件的内容向大家展示了 Oracle 的一些参数。下面将进一步讲解。

Oracle 参数分类

  • 动态参数
    在 spfile 读到内存后,有一部分参数可以直接在内存中修改,并对当前 instance 立即生效,这样的参数叫动态参数。动态参数在 instance 关闭后失效。
  • 静态参数
    除了动态参数都是静态参数。静态参数需要修改 spfile 文件。静态参数需重启 Instance 才生效。
    在这里插入图片描述

修改 spfile 文件的方法:

alter system set 参数=值 [scope=memory|spfile|both] 
alter system reset 参数 [scope=memory|spfile|both] SID='*' //恢复缺省值

scope=memory :参数修改后立刻生效,但不修改 spfile 文件。
scope=spfile :修改了 spfile 文件,重启后生效。
scope=both :前两种都要满足。
如果不写 scope,即缺省,缺省值为scope=both 。

注意:不修改 spfile,是无法更改静态参数的呦。

参数修改

Oracle中,有些参数可以在 session 级别修改,有些则必须在 system 级别修改,有些参数不需要重启就能马上生效,有些参数必须重启才能生效。

那要如何知道这些信息呢?又该如何修改这些参数呢?视图 v$parameter 提供了这些信息。

SQL> desc v$parameter;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NUM                                                NUMBER
 NAME                                               VARCHAR2(80)
 TYPE                                               NUMBER
 VALUE                                              VARCHAR2(4000)
 DISPLAY_VALUE                                      VARCHAR2(4000)
 DEFAULT_VALUE                                      VARCHAR2(255)
 ISDEFAULT                                          VARCHAR2(9)
 ISSES_MODIFIABLE                                   VARCHAR2(5)
 ISSYS_MODIFIABLE                                   VARCHAR2(9)
 ISPDB_MODIFIABLE                                   VARCHAR2(5)
 ISINSTANCE_MODIFIABLE                              VARCHAR2(5)
 ISMODIFIED                                         VARCHAR2(10)
 ISADJUSTED                                         VARCHAR2(5)
 ISDEPRECATED                                       VARCHAR2(5)
 ISBASIC                                            VARCHAR2(5)
 DESCRIPTION                                        VARCHAR2(255)
 UPDATE_COMMENT                                     VARCHAR2(255)
 HASH                                               NUMBER
 CON_ID                                             NUMBER

重点介绍该视图的以下几列:
ISSYS_MODIFIABLE :这一列标志该参数是否可以在system级别被修改,对应 alter session 命令。

SQL> select distinct issys_modifiable from v$parameter;

ISSYS_MOD
---------
IMMEDIATE  //对应 scope=memory
FALSE      //只能 scope=spfile,即修改 spfile 文件,下次启动才生效。
DEFERRED   //其他 session 有效

其中有三个值:

  • IMMEDIATE —— 表示修改之后立即生效;
  • DEFERRED —— 表示下个 session 才生效,当前 session 尚未生效;
  • FALSE —— 表示实例重启后才能生效。

ISSES_MODIFIABLE :这一列标志该参数是否可以在 session 级别被修改,对应 alter system 命令。

SQL> select distinct isses_modifiable from v$parameter;

ISSES
-----
TRUE  //表示可以修改 
FALSE //表示不能修改

其中有两个值:
TRUE —— 表示可以修改;
FALSE —— 表示不能修改。

为了更好的理解上面的内容,下面通过4个典型参数做进一步说明。

SQL>  select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name in ('workarea_size_policy','audit_file_dest','sga_target','sga_max_size');

在这里插入图片描述
1)workarea_size_policy 可在 session 级别修改,可以通过 alter session 修改,修改后立即生效。

先查看当前配置:

SQL>  show parameter workarea_size_policy

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy                 string      AUTO

在session级别修改:

SQL> alter session set workarea_size_policy=MANUAL;
Session altered.

在当前 session 查看,可以发现修改已经生效:

SQL> show parameter workarea_size_policy
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------
workarea_size_policy                 string      MANUAL

2)sga_target 可在 system 级别修改,可以通过 alter system 修改,修改后立即生效。

先查看当前配置:

SQL> show parameter sga_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------
sga_target                           big integer 1000M

在 system 级别修改:

SQL> alter system set sga_target=1500M;
System altered.

用alter system修改后立即生效:

SQL> show parameter sga_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------
sga_target                           big integer 1500M

3) audit_file_dest 可在 system 级别修改,可以通过 alter system 修改,下个session才生效。

先查看当前配置:

SQL> show parameter audit_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /oradata/oracle/app/oracle/admin/study/adump

在 system 级别修改:

SQL> alter system set audit_file_dest='/oradata/oracle/app/oracle/admin/study/adump/test' deferred;
System altered.

注意:后面必须得加关键字 deferred,否则会报错。

在当前 session 查询,还是原值:

SQL> show parameter audit_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /oradata/oracle/app/oracle/admin/study/adump

重新开个session,在新的 session 中查询,是修改后路径:

SQL> show parameter audit_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /oradata/oracle/app/oracle/admin/study/adump/test

4)sga_max_size 可在 system 级别修改,可以通过 alter system 修改,需重启实例才能生效。

先查看当前配置:

SQL> show parameter sga_max_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 3136M

在 system 级别修改:

SQL> alter system set sga_max_size=3200 scope=spfile;
System altered.

注意:后面必须得加scope=spfile,否则会报错。

实例重启之前查看,该参数还是原来值:

SQL> show parameter sga_max_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 3136M

重启实例:

SQL> shutdown immediate
SQL> startup

再次查看,该参数值已更新:

SQL> show parameter sga_max_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 3200M

参考:http://blog.itpub.net/17203031/viewspace-697335/

posted on 2021-02-09 13:35  夜光兔  阅读(423)  评论(0编辑  收藏  举报