ORACLE初始化参数文件(转载收藏)

      1.简介

      在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的。这两种参数文件都是用来存储参数配置以供oracle读取的,但也有不同点,注意以下几点:
      1)pfile是文本文件,spfile是二进制文件;
      2)对于参数的配置,pfile可以直接以文本编辑器打开手工配置,而spfile不行,必须在数据库启动后,通过sql命令进行在线修改,当然spfile也可用文本编辑器打开,把里面文本的内容复制出来放在pfile中,但决对不可以直接修改,直接修改后会使文件无法读取。
      3)pfile配置改变后,要使用其生效,必须重新启动数据库,spfile的配置生效时限和作用域可以由修改参数的sql命令指定,可以立即生效,也可以不立即生效。当然有些参数的修改必须重启数据库才能生效;
      4)可以用sql命令由pfile创建spfile,也可以由spfile创建pfile;
      5)如果是手动创建数据库而不是通过DBCA,则开始创建数据库时,你只能定义pfile 。因为它是文本格式的;


      现在一般普通生产库都采用spfile启动数据库,pfile确实没有用的理由了,感觉只有以下情况才会使用pfile:
      1)入门学习时,为了理解初始化参数
      2)创建数据库时,因为这时还没spfile
      3)恢复数据库时
      4)采用RAC的生产库中如果要共用spfile,可以建一个初始的pfile,然后在pfile指定spfile为共享设备文件

      2.创建spfile和pfile语法
      创建SPFILE(只能建在数据库所在的机器上)

      CREATE SPFILE [= 'spfile_name'] FROM PFILE [= 'pfile_name'];

      如果命令中未指定spfile的路径则会在缺省路径创建spfile文件(%ORACLE_HOME%\database\spfile.ora)
      这个与spfile参数无关(rac中共享spfile时要注意)

      创建PFILE

      CREATE PFILE [= 'pfile_name'] FROM SPFILE [= 'spfile_name'];
      如果命令中未指定spfile的路径则会从缺省路径(%ORACLE_HOME%\database\spfile.ora)创建pfile文件


      注:语法中创建和指定的spfile和pfile都是服务器路径
      注:不能创建已经由数据库实例启动的spfile(在nomount状态下也不行)
      3.数据库启动时spfile和pfile的加载顺序

      初始化参数是在数据库实例启动时(startup nomount)加载。

      如果startup命令中未指定pfile参数,在windows系统中数据库启动时会按如下顺序查找启动参数文件:

      %ORACLE_HOME%\database\SPFILE.ora
      %ORACLE_HOME%\database\SPFILE.ora
      %ORACLE_HOME%\database\init.ora

      在unix或linux系统中数据库启动时会按如下顺序查找启动参数文件:

      %ORACLE_HOME%\dbs\SPFILE.ora
      %ORACLE_HOME%\dbs\SPFILE.ora
      %ORACLE_HOME%\dbs\init.ora


      也就是说先找spfile.ora文件,如果spfile.ora没有则找spfile.ora文件,最后才会去找init.ora的pfile文件.


      使用指定pfile启动数据库则数据库会使用指定的pfile来加载数据库参数:
      命令如下:
      startup pfile=''

      注:以pfile启动的实例,修改初始化参数时不能使用scope=spfile的语法

      如果参数文件(不管是pfile还是spfile)中指定了spfile的参数,则还会从指定的spfile中再读取配置的参数,这样数据库的参数就包括了两个文件的内容.
      4.数据库启动参数的加载顺序

      加载顺序按文件中顺序读取
      如果文件中有两个相同的参数名则以最后出现的为准,以下例子说明了这个问题。

      如有一个spfile文件(myspfile.ora),包括两个参数:

      sessions=150
      processes=200

      另外有一个pfile文件(mypfile.ora),里面包括三个参数,其中指定了spfile为前面的spfile文件

      processes=100
      sessions=100
      spfile='myspfile.ora'
      processes=180

      当使用mypfile.ora启动数据库时,会按如下顺序读取参数

      1)processes=100
      2) sessions=100
      3) spfile='myspfile.ora'
              3.1) sessions=150(重新加载)
              3.2) processes=200(重新加载)
      4)processes=180(再次重新加载)


      最后加载的数据库参数为
      sessions=150
      spfile='myspfile.ora'
      processes=180
      5.关于show parameter spfile时显示的内容

      如果是采用pfile指定了spfile参数,则显示指定的spfile
      如果是采用缺省的spfile启动,则显示缺省的spfile文件名,不管spfile还有没有指定其它的spfile文件。
      6.关于spfile递归调用
      如果出现spfile递归调用,则ORACLE启动时会报错:
      SQL> startup nomount;
      ORA-03113: 通信通道的文件结束
      SQL>

      spfile递归调用就是指
      spfile1.spfile='spfile2'
      spfile2.spfile='spfile1'
      这样的参数配置
      7.初始化参数的修改方法
        分为手动修改和在线修改。
        手动修改用于修改pfile,直接用文本编辑打开pfile修改。要使用修改生效,须重启数据库。
        在线修改是在数据库运行时,用alter system命令进行修改,命令如下(详细的命令 语句请参考oracle官方参考文档):

      alter system set parameter_name = parameter_value [, parameter_value ]...
        [ COMMENT 'text' ]
        [ DEFERRED ]
        [ SCOPE = { MEMORY | SPFILE | BOTH } ]
        [ SID = { 'sid' | * } ]

      注:
      [ COMMENT 'text' ] :表示可以加注释,如 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50
      SCOPE=BOTH DEFERRED COMMENT="  2008-05-19"
      [ DEFERRED
      ]:表示所作修改只适用于将来的会话,对当前已有的会话不影响,这个参数只对少数参数有用,具体可使用的参数可以查看v$parameter视图
      select * from v$parameter where issys_modifiable='DEFERRED'
      [ SCOPE = { MEMORY | SPFILE | BOTH } ]:
      SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;
      MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
      BOTH:顾名思义,包含以上两种,立即生效,且永久生效。

      所有的参数都可以使用spfile,部份参数可以使用memory,可以使用如下SQL查询不能使用memory方式修改的参数
      select * from v$parameter where issys_modifiable='FALSE'

        对于ALTER SYSTEM的参数修改命令,请注意以下几点:
      1)如果当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误;
      2)如果实例以pfile启动,则scope的默认值为MEMORY,若以spfile启动,则默认值为BOTH;

      [ SID = { 'sid' | * } ]
      指定修改参数的作用实例号,如果为*则表示所有实例,这个选项用于RAC数据库
      8.删除初始化参数:

      alter system reset parameter_name
        [ SCOPE = { MEMORY | SPFILE | BOTH } ]
        [ SID = 'sid' ]

      对于有些参数也可以使用 ALTER SYSTEM SET PARAMETER=''达到相同的效果;
      8.初始化参数的相关系统视图

      8.1v$parameter
      8.2v$parameter
      8.3v$system_parameter
      8.4v$system_parameter2
      8.5gv$parameter
      8.6gv$parameter2
      8.7gv$system_parameter
      8.8gv$system_parameter2


      SQL> desc v$parameter;
      Name             Type          Nullable Default Comments
      ---------------- ------------- -------- ------- --------
      NUM              NUMBER        Y        编号                 
      NAME             VARCHAR2(64)  Y        参数名称                 
      TYPE             NUMBER        Y        参数类型
                                              (
                                              1 - Boolean
                                              2 - String
                                              3 - Integer
                                              4 - Parameter file
                                              5 - Reserved
                                              6 - Big integer
                                              )
      VALUE            VARCHAR2(512) Y        参数值                 
      ISDEFAULT        VARCHAR2(9)   Y        是否为缺省值                 
      ISSES_MODIFIABLE VARCHAR2(5)   Y        是否允许会话级动态调整(alter session set...)  
                   
      ISSYS_MODIFIABLE VARCHAR2(9)   Y        是否允许使用动态调整(alter system set...)
                                              (
                                              IMMEDIATE:可以调整且修改会立即生效;
                                              DEFERRED:可以调整,但是在新建的会话中才生效;
                                              FALSE:不可调整;
                                              )                  
      ISMODIFIED       VARCHAR2(10)  Y        参数在实例启动后是否被修改过              
      ISADJUSTED       VARCHAR2(5)   Y        参数是否被调整
                                             
      (对于有一些参数,如规范要求是素数,但是参数里设置了合数,则ORACLE会自动调整成下一个素数)      
      DESCRIPTION      VARCHAR2(64)  Y        参数功能描述                
      UPDATE_COMMENT   VARCHAR2(255) Y        最近的参数更新备注                

      以下是ORACLE官方文档关于V$PARAMETER的解释

      V$PARAMETER displays information about the initialization parameters that
      are currently in effect for the session. A new session inherits parameter
      values from the instance-wide values displayed by the V$SYSTEM_PARAMETER
      view.

      以下是字段说明:

      NUM
      NUMBER
      Parameter number

      NAME
      VARCHAR2(64)
      Name of the parameter

      TYPE
      NUMBER
      Parameter type:

      1 - Boolean
      2 - String
      3 - Integer
      4 - Parameter file
      5 - Reserved
      6 - Big integer

      VALUE
      VARCHAR2(512)
      Parameter value for the session (if modified within the session);
      otherwise, the instance-wide parameter value

      ISDEFAULT
      VARCHAR2(9)
      Indicates whether the parameter is set to the default value (TRUE) or the
      parameter value was specified in the parameter file (FALSE)

      ISSES_MODIFIABLE
      VARCHAR2(5)
      Indicates whether the parameter can be changed with ALTER SESSION (TRUE)
      or not (FALSE)

      ISSYS_MODIFIABLE
      VARCHAR2(9)
      Indicates whether the parameter can be changed with ALTER SYSTEM and when
      the change takes effect:

      IMMEDIATE - Parameter can be changed with ALTER SYSTEM regardless of the
      type of parameter file used to start the instance. The change takes effect
      immediately.
      DEFERRED - Parameter can be changed with ALTER SYSTEM regardless of the
      type of parameter file used to start the instance. The change takes effect
      in subsequent sessions.
      FALSE - Parameter cannot be changed with ALTER SYSTEM unless a server
      parameter file was used to start the instance. The change takes effect in
      subsequent instances.

      ISMODIFIED
      VARCHAR2(10)
      Indicates whether the parameter has been modified after instance startup:

      MODIFIED - Parameter has been modified with ALTER SESSION
      SYSTEM_MOD - Parameter has been modified with ALTER SYSTEM (which causes
      all the currently logged in sessions' values to be modified)
      FALSE - Parameter has not been modified after instance startup

      ISADJUSTED
      VARCHAR2(5)
      Indicates whether Oracle adjusted the input value to a more suitable value
      (for example, the parameter value should be prime, but the user input a
      non-prime number, so Oracle adjusted the value to the next prime number)

      DESCRIPTION
      VARCHAR2(64)
      Description of the parameter

      UPDATE_COMMENT
      VARCHAR2(255)
      Comments associated with the most recent update


      V$PARAMETER2与V$PARAMETER的区别是当某个参数有多个值时,会显示多行,最典型的就是参数control_files,一般的数据库都会指定多个控制文件,在V$PARAMETER中只显示一行,但在V$PARAMETER2会显示多行,如下所示:
      SQL> select name,value from V$PARAMETER where name='control_files';

      NAME                                                             VALUE
      -----------------
      --------------------------------------------------------------------------------
      control_files     H:\oracle\oradata\ydgl\control01.ctl,
      H:\oracle\oradata\ydgl\control02.ctl, H:\oracle\oradata\ydgl\control03.ctl


      SQL> select name,value,ORDINAL from V$PARAMETER2 where
      name='control_files';

      NAME                      VALUE                                           
           ORDINAL
      -------------------
      ----------------------------------------------------------- ----------
      control_files    H:\oracle\oradata\ydgl\control01.ctl                     
              1
      control_files    H:\oracle\oradata\ydgl\control02.ctl                     
              2
      control_files    H:\oracle\oradata\ydgl\control03.ctl'                    
              3


      V$PARAMETER2多了一个ORDINAL字段,表示顺序。

      SQL> desc v$parameter2;
      Name             Type          Nullable Default Comments
      ---------------- ------------- -------- ------- --------
      NUM              NUMBER        Y                        
      NAME             VARCHAR2(64)  Y                        
      TYPE             NUMBER        Y                        
      VALUE            VARCHAR2(512) Y                        
      ISDEFAULT        VARCHAR2(6)   Y                        
      ISSES_MODIFIABLE VARCHAR2(5)   Y                        
      ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
      ISMODIFIED       VARCHAR2(10)  Y                        
      ISADJUSTED       VARCHAR2(5)   Y                        
      DESCRIPTION      VARCHAR2(64)  Y                        
      ORDINAL          NUMBER        Y                        
      UPDATE_COMMENT   VARCHAR2(255) Y                        


      V$SYSTEM_PARAMETER
      和V$PARAMETER的区别是,V$PARAMETER显示的是当前系统的初始化参数,V$SYSTEM_PARAMETER显示的是新会话将使用的初始化参数。
      例如下例中,使用deferred参数修改了sore_area_size,在V$PARAMETER显示的老值,而V$SYSTEM_PARAMETER显示的是新值:

      SQL> show parameter sort_area_size;

      NAME                                 TYPE        VALUE
      ------------------------------------ -----------
      ------------------------------
      sort_area_size                       integer     524288

      SQL> alter system set sort_area_size=603213 deferred;

      System altered

      SQL> select name,value from v$parameter where name='sort_area_size';

      NAME                                                             VALUE
      --------------------------------
      --------------------------------------------------------------------------------
      sort_area_size                                                   524288

      SQL> select name,value from v$system_parameter where
name='sort_area_size';

      NAME                                                             VALUE
      --------------------------------
      --------------------------------------------------------------------------------
      sort_area_size                                                   603213

      SQL>



      SQL> desc v$system_parameter;
      Name             Type          Nullable Default Comments
      ---------------- ------------- -------- ------- --------
      NUM              NUMBER        Y                        
      NAME             VARCHAR2(64)  Y                        
      TYPE             NUMBER        Y                        
      VALUE            VARCHAR2(512) Y                        
      ISDEFAULT        VARCHAR2(9)   Y                        
      ISSES_MODIFIABLE VARCHAR2(5)   Y                        
      ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
      ISMODIFIED       VARCHAR2(8)   Y                        
      ISADJUSTED       VARCHAR2(5)   Y                        
      DESCRIPTION      VARCHAR2(64)  Y                        
      UPDATE_COMMENT   VARCHAR2(255) Y 


      gv$parameter和v$parameter的区别的是gv$parameter多一个INST_ID字段(实例号),这个用于RAC数据库系统中,INST_ID用于标识是哪个实例的信息,其实所有以gv$和以v$开始的系统视图的区别都是这样的。

      SQL> desc gv$parameter;
      Name             Type          Nullable Default Comments
      ---------------- ------------- -------- ------- --------
      INST_ID          NUMBER        Y                        
      NUM              NUMBER        Y                        
      NAME             VARCHAR2(64)  Y                        
      TYPE             NUMBER        Y                        
      VALUE            VARCHAR2(512) Y                        
      ISDEFAULT        VARCHAR2(9)   Y                        
      ISSES_MODIFIABLE VARCHAR2(5)   Y                        
      ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
      ISMODIFIED       VARCHAR2(10)  Y                        
      ISADJUSTED       VARCHAR2(5)   Y                        
      DESCRIPTION      VARCHAR2(64)  Y                        
      UPDATE_COMMENT   VARCHAR2(255) Y
      9.废弃参数
      Oracle数据库中,系统提供了几个视图可以查看系统参数的情况。视图V$OBSOLETE_PARAMETER中含有所有的过时(obsolete)和强调(underscored)参数。这里首先说明一下什么是Oracle的过时(obsolote)和强调(underscored)参数,过时参数,顾名思义就是在Oracle以前的版本中存在,但在新版本中已经淘汰了的参数,已经不再使用;而强调参数,是指那些在新版本中保留了下来,但是除非特殊需要不希望用户使用的那些参数。在视图V$OBSOLETE_PARAMETER中,包含这些参数的名称和一个标志字ISSPECIFIED,该标志字用来指出这个参数是否在init.ora文件中已实际设置。


      下面的SQL脚本列出了当前系统中所有的过时参数名称以及它们是否在当前系统中设定。


      SQL> SELECT name, isspecified FROM v$obsolete_parameter;

      上面谈到,Oracle系统并没有将V$OBSOLETE_PARAMETER视图中的所有参数均丢弃,而是将其中的一部分转换为强调参数,下面就来讨论如何查看这些参数是已被丢弃还是被转换。这可以通过系统视图X$KSPPO来查看,该视图中包含一个名为KSPPOFLAG的字段,用来指明该参数在当前版本中是被丢弃还是被强调,如果该值为1,则表示该参数已被丢弃,该值为2,则表明该参数现为强调参数。


      SELECT kspponm,
      DECODE(ksppoflg, 1,'Obsolete', 2, 'Underscored')
      FROM x$ksppo
      ORDER BY kspponm;

      注:该视图只在sys用户下可以看到。
      10.隐藏参数

      数据库初始化总共有近千个,可见的只有两三百个,其它的都是隐藏参数。
      隐藏参数的参数名都是以下划线开头,比较少用,一般用于进行ORACLE故障诊断或恢复数据库,或者是进行一些不成熟功能的测试。

      使用如下SQL可以查询到所有的初始化参数。

      --用户需要有访问内核表的权限,一般为sys用户登录
      select a.indx,
             a.inst_id,
             a.ksppinm name,
             a.ksppity type,
             a.ksppdesc DESCRIPTION,
             a.ksppiflg FLAG,
             b.ksppstvl value,
             b.ksppstdf ISDEFAULT,
             b.ksppstvf ORDINAL,
             b.ksppstcmnt UPDATE_COMMENT
        from sys.x$ksppi a, sys.x$ksppcv b
      where a.indx = b.indx

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15011739/viewspace-606441/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15011739/viewspace-606441/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值