Oracle 引數檔案(轉)

ningzi82發表於2010-09-17
-========================

--&gtOracle 引數檔案

--========================

/*

引數檔案(10g中的引數檔案)

主要用來記錄資料庫的配置檔案,在資料庫啟動時,Oracle讀取引數檔案,並根據引數檔案中的引數設定來配置資料庫。

如記憶體池的分配,允許開啟的程式數和會話數等。

兩類引數檔案:

pfile:文字檔案的引數檔案,可以使用vi,vim等編輯器修改,檔名通常為init.ora

spfile:二進位制的引數檔案,不能直接修改,只能存放在Oracle伺服器端,可以使用EM或指令來修改

(alter system|session set parameter_name = values <>),

檔名通常為spfile.ora,支援RMAN備份。

優先順序別:

Oracle 啟動讀取引數檔案的順序,如果個檔案都不存在,則Oracle會報錯

spfile.ora --&gt spfile.ora --&gtinit.ora

引數檔案的路徑:*/

spfle:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora

pfile(9i):$ORALCE_HOME/dbs/init$ORALCE_SID.ora /*10g以後一般不用init.ora*/

pfile(10g):$ORALCE_BASE/admin/$ORACLE_SID/pfile /*僅當資料庫初始化時使用*/

pfile$ORACLE_HOME/dbs/init.ora /*預設*/

/*

引數檔案之間的轉化

spfile 轉化為pfile

pfile 轉換為spfile

spfile來生成pfile

create pfile from spfile ,執行完畢後,pfile 將儲存為$ORACLE_HOME/dbs/init$ORACLE_SID.ora

也可以指定pfile 的路徑:create pfile = '

' from spfile;

pfile 生成spfile

create spfile from pfile

create spfile from pfile = '

'

create spfile = '

' from pfile

11g中的新指令,從memeory中生成

create spfile = '

' from memeory */

/*

演示:*/

[@more@]

spfile --&gt pfile

SQL> create pfile from spfile;

File created.

SQL> ho ls -al /u01/app/oracle/10g/dbs/

total 56

drwxr-x--- 2 oracle oinstall 4096 Apr 8 13:49 .

drwxr-x--- 55 oracle oinstall 4096 Apr 7 09:48 ..

-rw-r----- 1 oracle oinstall 1544 Apr 6 12:06 hc_orcl.dat

-rw-r----- 1 oracle oinstall 8385 Sep 11 1998 init.ora

-rw-r----- 1 oracle oinstall 12920 May 3 2001 initdw.ora

-rw------- 1 oracle oinstall 1155 Apr 8 13:49 initorcl.ora

-rw-r----- 1 oracle oinstall 24 Apr 6 12:06 lkORCL

-rw-r----- 1 oracle oinstall 1536 Apr 7 15:50 orapworcl

-rw-r----- 1 oracle oinstall 3584 Apr 8 11:15 spfileorcl.ora

SQL> ho cat /u01/app/oracle/10g/dbs/initorcl.ora

orcl.__db_cache_size=251658240

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=142606336

orcl.__streams_pool_size=0

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

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

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl', '/u01/app/oracle/oradata/orcl/control03.ctl'

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

*.db_block_size=8192

*.db_create_file_dest='/u01/app/oracle/oradata/orcl'

*.db_create_online_log_dest_1='/u01/app/oracle/disk1'

*.db_create_online_log_dest_2='/u01/app/oracle/disk2'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

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

*.job_queue_processes=10

*.open_cursors=300

*.pga_aggregate_target=135266304

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=406847488

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'

pfile --&gt spfile

SQL> create spfile from pfile; /*使用該命令的時候不能轉換,如下報錯,因為當前的spfile正在使用*/

create spfile from pfile

*

ERROR at line 1:

ORA-32002: cannot create SPFILE already being used by the instance

SQL> create spfile = '/u01/app/oracle/spfileorcl.ora' from pfile;

File created.

SQL> ho cat /u01/app/oracle/spfileorcl.ora;

a*orcl.__db_cache_size=251658240

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=142606336

orcl.__streams_pool_size=0

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

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

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'

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

*.db_block_size=8192

*.db_create_file_dest='/u01/app/oracle/oradata/orcl'

*.db_create_online_log_dest_1='/u01/app/oracle/disk1'

*.db_create_online_log_dest_2='/u01/app/oracle/disk2'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

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

*.job_queue_processes=10

*.open_cursors=300

*.pga_aggregate_target=135266304

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=406847488

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'

/*

轉換後的使用:

假定修改了initorcl.ora中的引數,但Oracle啟動是先讀取spfile ,故可以在啟動的時候指定用initorcl.ora

初始化引數,啟動完畢後,可以建立spfile,則下一次啟動就可以使用新的spfile.

假定我們對initorcl.ora作如下修改:*/

open_cursors=600

processes=250

/*

則關閉資料庫後指定以initorcl.ora引數來啟動資料庫*/

SQL> startup pfile = '/u01/app/oracle/10g/dbs/initorcl.ora';

ORACLE instance started.

Total System Global Area 406847488 bytes

Fixed Size 1219688 bytes

Variable Size 150995864 bytes

Database Buffers 251658240 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SQL> create spfile from pfile; /*修改的內容將會更新到spfile*/

File created.

--檢視引數檔案的名字

SQL> show parameter service_name

NAME TYPE VALUE

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

service_names string orcl

--檢視當前使用的哪個引數檔案啟動的

SQL> select distinct isspecified from v$spparameter;

ISSPEC

------

FALSE

/*

如果第一個值是FALSE還是TRUE,如果是FALSE,則是pfile,否則則是spfile.

也可以嘗試修改spfile ,如果報錯則可以判斷是從pfile啟動,當然所修改的引數必須是可以修改的*/

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

--強制啟動Oracle後再檢視是使用的哪個引數啟動的。

SQL> startup force

ORACLE instance started.

Total System Global Area 406847488 bytes

Fixed Size 1219688 bytes

Variable Size 150995864 bytes

Database Buffers 251658240 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SQL> select distinct isspecified from v$spparameter;

ISSPEC

------

TRUE

FALSE

/*

第一行為TRUE可知,是從spfile啟動的,有兩行,其中第二行為FALSE,表示有兩個引數檔案,一個是spfile,一個是pfile

再次嘗試看看能否修改spfile: */

SQL> alter system set sga_target = 380m scope = spfile; /*修改成功*/

System altered.

/*

引數檔案的修改:

如果是pfile ,直接使用vi,vim來修改即可

如果是spfile ,則使用 */

alter system|session set parametername = values scope = memory | spfile |both sid = 'sid' |*;

scope

memory : 只對當前例項有效,下次啟動則失效

spfile : 只對spfile 修改,必須經過下一次啟動才生效,當前的例項沒有修改

both :記憶體與引數檔案都將修改,當不指定scope時,預設為both.

system | session

system :

-- 查詢檢視:v$parameter

isses_modifiable 可以被alter session修改

isssy_modifiable 可以被alter system修改

-- sid

sid :只對某一個例項

* :對所有的例項修改

SQL> show parameter sga_ /*檢視與sga有關的引數*/

NAME TYPE VALUE

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

sga_max_size big integer 388M

sga_target big integer 388M

SQL> alter system set sga_max_size = 350m; /*特殊的引數不能被修改*/

alter system set sga_max_size = 350m

*

ERROR at line 1:

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

相關文章