oracle 關於--引數檔案

邱東陽發表於2014-03-26

引數檔案就是來定義資料庫啟動的時候一些相關配置,要根據引數檔案中的引數設定來分配記憶體,允許開啟程式,會話等等一些資訊。要想讓資料庫啟動,必須先讀取引數檔案。引數檔案中的引數,通常稱為初始化引數,簡稱為引數。


引數檔案區別

Linux 環境

 

引數檔案一共有兩大類:

Pfile

Spfile

檔案預設位置:

Pfile: $ORACLE_HOME/dbs/init$ORACLE_SID.ora   9i 與之前版本,10g後就不用pfile

Pfile$ORACLE_BASE/admin/$ORACLE_SID/pfile/init.ora.

Spfile$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora

區別:

其中pfile 是文字檔案 ,可以通過vi編輯   

 

Spfile 是二進位制檔案,是伺服器引數,所以只能存放在伺服器端. 可以被RMAN備份

可以登入資料庫alter system|session  set parameter_name=values  scope=memory|spfile|both 修改 

 

Oracle啟動讀取引數檔案優先順序別

首先讀取spfile.ora 如果未找到

讀取 spfile.ora  如果未找到

讀取init.ora 如果未找到啟動失敗

 

 

 

 

引數檔案的轉化

Pfilespfile是可以相互轉化的

 

建立內容為spfilepfile

Create pfile from spfile;(預設路徑$ORACLE_HOME/dbs/init$ORACLE_SID.ora

可以指定pfile路徑

Create pfile =’/u01/app….’  from spfile

建立spfile

Create spfile from pfile;

指定路徑

Create spfile=’/u01/app/..’ from pfile=’/u01/app/..’;

 

11g中可以直接轉化記憶體

Create spfile’/u01/app..’  from memory

 

如何判斷當前資料庫使用的是那麼引數檔案啟動

 

SQL> show parameter service_name

 

NAME                                 TYPE        VALUE

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

service_names                        string      fengzi

SQL> select distinct isspecified from v$spparameter;

 

ISSPEC

------

TRUE

FALSE

 

SQL>

 

如果第一個值為FALSE 就是使用pfile

如果第一個值為TRUE 就是使用的spfile

 

還有一種方法:修改一個正確的引數

SQL> alter system set sga_target=200m scope=spfile;

alter system set sga_target=200m scope=spfile

*

ERROR at line 1:

ORA-32001: write to SPFILE requested but no SPFILE specified at startup

 

 

SQL>

如果修改成功就為spfile啟動,報錯32001就為pfile啟動。

 

修改pfile引數使其生效(需要關閉資料庫)

 

[oracle@dongyang ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 24 13:15:18 2014

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

建立pfile

SQL> create pfile from spfile;

 

File created.

 

SQL>

[oracle@dongyang dbs]$ pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@dongyang dbs]$ ls

ab_+ASM.dat    init+ASM.ora  initfengzi.ora  orapw+ASM        spfile+ASM.ora

hc_+ASM.dat    init.ora      lk+ASM          orapwfengzi

hc_fengzi.dat  initdw.ora    lkFENGZI        snapcf_fengzi.f

[oracle@dongyang dbs]$

編輯 pfile 修改引數  修改其中的某些值

[oracle@dongyang dbs]$ vi initfengzi.ora

 

fengzi.__db_cache_size=402653184

fengzi.__java_pool_size=16777216

fengzi.__large_pool_size=16777216

fengzi.__shared_pool_size=150994944

fengzi.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/fengzi/adump' 

*.background_dump_dest='/u01/app/oracle/admin/fengzi/bdump'

*.compatible='10.2.0.1.0'

*.control_file_record_keep_time=20

*.control_files='+DATA/fengzi/controlfile/current.269.842186993','+DATA/fengzi/controlfile/current.270.842186999'

*.core_dump_dest='/u01/app/oracle/admin/fengzi/cdump'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='fengzi'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=fengziXDB)'

*.job_queue_processes=10

*.log_archive_dest_1='LOCATION=+DATA/fengzi/'

*.log_archive_format='%t_%s_%r.dbf'

*.open_cursors=1000

*.pga_aggregate_target=199229440

*.processes=300

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_max_size=1074790400

關閉資料庫使用pfile啟動庫並更新spfile

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initfengzi.ora';

ORACLE instance started.

 

Total System Global Area 1090519040 bytes

Fixed Size                  2020160 bytes

Variable Size             671091904 bytes

Database Buffers          402653184 bytes

Redo Buffers               14753792 bytes

Database mounted.

Database opened.

SQL> create spfile from pfile;      (因為引數檔案的優先順序別,所以修改pfile一定要更新spfile

 

File created.

 

SQL>

 

修改spfile引數

alter system|session  set parameter_name=values  scope=memory|spfile|both  sid=’sid’|’*’

system---系統的

session—會話的

判斷該使用哪個修改需檢視檢視v$parameter

 

其中ISSES_MODIFIABLE為被alter session修改

     ISSYS_MODIFIABLE為被 alter system 修改

值為TURE 可以被修改

值為FALSE  表示為靜態引數,不能直接修改到記憶體 需要scope=spfile修改

值為IMMEDIATE 表示為動態引數,可以直接修改到記憶體 可以scope=both

值為DEFERRED 表示為會話引數 只對當前例項生效 下次啟動無效

SQL> select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE  from v$parameter;

NAME                                   ISSES         ISSYS

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

tracefile_identifier                        TRUE        FALSE

lock_name_space                       FALSE         FALSE

processes                              FALSE         FALSE

sessions                                FALSE        FALSE

timed_statistics                          TRUE        IMMEDIATE

timed_os_statistics                       TRUE        IMMEDIATE

resource_limit                            FALSE      IMMEDIATE

license_max_sessions                     FALSE       IMMEDIATE

license_sessions_warning                 FALSE        IMMEDIATE

cpu_count                              FALSE        IMMEDIATE

instance_groups                         FALSE         FALSE

event                                  FALSE          FALSE

sga_max_size                           FALSE          FALSE

…………

 

 

memory--- 表示只修改當前例項記憶體 下次啟動不生效

spfile---表示 只對spfile修改 下次啟動才會生效 當前例項記憶體是沒有修改

both-----表示 當前例項記憶體與spfile都修改

其中both為預設值。

 

Sid=’sid’ 為指定例項名

Sid=’*’ 為所有例項

單例項狀態下無需使用,只有在RAC情況下可以選擇使用

例子:

 

首先要確認要修改引數的數值

SQL> show parameter sga_

 

NAME                                 TYPE        VALUE

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

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 1040M

sga_target                           big integer 576M

SQL>

嘗試預設scope=both方式修改

SQL> alter system set sga_max_size=1060m;

alter system set sga_max_size=1060m

                 *

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

當前的引數是初始化引數不能被修改。

只能改到引數檔案中使下次啟動生效

使用scope=spfile修改

SQL> alter system set sga_max_size=1060m scope=spfile;

 

System altered.

 

SQL>

使用scope=memory修改引數

SQL> show parameter pga

 

NAME                                 TYPE        VALUE

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

pga_aggregate_target                 big integer 190M

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

 

System altered.

可以使用cope=both方式修改

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

 

System altered.

 

SQL>

關於隱藏引數

 

檢視隱藏引數

SQL> desc x$ksppi                                                

 Name                                      Null?    Type

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

 ADDR                                               RAW(8)

 INDX                                               NUMBER

 INST_ID                                            NUMBER

 KSPPINM                                            VARCHAR2(80)

 KSPPITY                                            NUMBER

 KSPPDESC                                           VARCHAR2(255)

 KSPPIFLG                                           NUMBER

 KSPPILRMFLG                                        NUMBER

 KSPPIHASH                                          NUMBER

 

SQL> desc x$ksppcv

 Name                                      Null?    Type

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

 ADDR                                               RAW(8)

 INDX                                               NUMBER

 INST_ID                                            NUMBER

 KSPPSTVL                                           VARCHAR2(512)

 KSPPSTDVL                                          VARCHAR2(512)

 KSPPSTDF                                           VARCHAR2(9)

 KSPPSTVF                                           NUMBER

 KSPPSTCMNT                                         VARCHAR2(255)

 

SQL> select a.ksppinm,b.ksppstvl from x$ksppi a,x$ksppcv b where a.indx=b.indx;

 

KSPPINM

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

KSPPSTVL

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

_ash_sample_all

FALSE

 

_ash_dummy_test_param

0

 

_threshold_alerts_enable

1

 

 

KSPPINM

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

KSPPSTVL

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

_addm_auto_enable

TRUE

 

_addm_version_check

TRUE

 

_addm_skiprules

……

……

 

刪除引數

刪除一個引數也就是將引數改回初始化設定的預設值。

 

如果使用的是pfile 直接編輯刪除就好了。

 

使用spfile

SQL> show parameter pga

 

NAME                                 TYPE        VALUE

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

pga_aggregate_target                 big integer 200M

SQL> alter system reset pga_aggregate_target scope=spfile sid='*';

 

System altered.

 

SQL>

刪除一個引數必須要指定sid=’*’

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29532781/viewspace-1130083/,如需轉載,請註明出處,否則將追究法律責任。

相關文章