頻道欄目
首頁 > 資訊 > Oracle > 正文

oracle中spfile和pfile的定義、作用及使用實例

18-02-02        來源:[db:作者]  
收藏   我要投稿

1.參數文件的定義、作用

oracle數據庫通過一系列參數來對數據庫進行配置。這些參數是以鍵-值對的形式來表 示的,如:

MAXLOGFILES=50

BACKGROUND_DUMP_DEST=C:/DUMP

其中,等號左邊是參數名,右邊是對應的參數的值,值的類型有多種,典型的如數字和 字符串.

參數文件就是存儲這些參數的地方,oracle在啟動時會從參數文件中讀取相關的配置。

2.參數文件的分類

在9i之前,參數文件只有一種,它是文本格式的,稱為pfile,在9i及以后的版本中,新 增了服務器參數文件,稱為spfile,它是二進制格式的。這兩種參數文件都是用來存儲參 數配置以供oracle讀取的,但也有不同點,注意以下幾點:

第一,pfile是文本文件,spfile是二進制文件;

第二,對于參數的配置,pfile可以直接以文本編輯器打開手工配置,而spfile不行,必 須在數據庫啟動后,通過sql命令進行在線修改。

第三,pfile配置改變后,要使用其生效,必須重新啟動數據庫,spfile的配置生效時限 和作用域可以由修改參數的sql命令指定,可以立即生效,也可以不立即生效。當然有些 參數的修改必須重啟數據庫才能生效;

第四,可用sql命令由pfile創建spfile,也可以由spfile創建pfile;

第五,如果是手動創建數據庫而不是通過DBCA,則開始創建數據庫時,你只能定義pfile 。因為它是文本格式的;

第六,oracle數據庫只使用一個參數文件,要么是pfile,要么是spfile,即么如何判斷 數據庫當前使用的是哪一個參數文件呢?一種方法是能過create pfile來鑒別,如果當 前使用的不是spfile,則相應格式的create pfile會產生錯誤。另一種方法是show parameter spfile命令,用來顯示spfile的位置,如果顯示的值為空,則表示使用的是pfile。

3.參數文件的動作原理

oracle實例在啟動時,會去讀取參數文件中的配置,這個過程是這樣的:

數據庫的startup命令中可以指定以哪個pfile來啟動,但是請注意,只能指定pfile,不 能指定spfile。

當使用不帶pfile 子句的startup 命令時,Oracle 將從平臺指定的默認位置上的服務器 參數文件(spfile) 中讀取初始化參數。Oracle查找spfile或者創通的init.ora的順序 是:在平臺指定的默認位置上,Oracle首先查找名為spfileORACLESID.ora的文件,如果沒有就查找spfile.ora文件,還沒有的話,就找init" role="presentation">ORACLESID.ora的文件,如果沒有就查找spfile.ora文件,還沒有的話,就找initORACLESID.ora的文件,如果沒有就查找spfile.ora文件,還沒有的話,就找initORACLE_SID.ora文件。

在ORACLEBASE/admin/dbname/spfile下,你很可能可以看到一個類似這樣init.ora.192003215317]名字的文件,這就是初始化參數文件,只是跟上了時間戳。對于Oracle920,缺省的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個文件創建而來,你可以去掉這個長后綴,就是標準的pfile文件了。對于WindowsNT和Windows2000,其位置是:" role="presentation">ORACLEBASE/admin/dbname/spfile下,你很可能可以看到一個類似這樣init.ora.192003215317]名字的文件,這就是初始化參數文件,只是跟上了時間戳。對于Oracle920,缺省的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個文件創建而來,你可以去掉這個長后綴,就是標準的pfile文件了。對于WindowsNT和Windows2000,其位置是:ORACLEBASE/admin/dbname/spfile下,你很可能可以看到一個類似這樣init.ora.192003215317]名字的文件,這就是初始化參數文件,只是跟上了時間戳。對于Oracle920,缺省的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個文件創建而來,你可以去掉這個長后綴,就是標準的pfile文件了。對于WindowsNT和Windows2000,其位置是:ORACLE_HOME/database/spfileORACLESID.ora! 祿䦷煸趩雍,參數的配置值可以通過查詢數據字典v" role="presentation">ORACLESID.ora! 祿䦷煸趩雍,參數的配置值可以通過查詢數據字典vORACLESID.ora! 祿䦷煸趩雍,參數的配置值可以通過查詢數據字典vparameter得到。

4.參數文件的修改方法

分為手動修改和在線修改。

手動修改用于修改pfile,直接用文本編輯打開pfile修改。要使用修改生效,須重 啟數據庫。

在線修改是在數據庫運行時,用alter system命令進行修改,命令如下(詳細的命令 語句請參考oracle官方參考文檔):

sql>alter system set job_queue_processed=50 scope=MEMORY

注意,scope=MEMORY表示應用范圍,取值如下:

SPFILE:修改只對SPFILE有效,不影響當前實例,需要重啟數據庫才能生效;

MEMORY:修改只對內存有效,即只對當前實例有效,且立即生效,但不會保存到SPFILE, 數據庫重啟后此配置丟失;

BOTH:顧名思義,包含以上兩種,立即生效,且永久生效。

對于ALTER SYSTEM的參數修改命令,請注意以下幾點:

第一,如果當前實例使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯 誤;

第二,如果實例以pfile啟動,則scope的默認值為MEMORY,若以spfile啟動,則默認值為 BOTH;

第三,可以使用DEFERRED表示所作修改只適用于將來的會話,還可以使用COMMENT寫入注 釋,如:ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=” 注釋”

第四,刪除參數的方法如下:ALTER SYSTEM SET PARAMETER=”;

5.創建參數文件

對于pfile,你可以用文本編輯器直接手工編輯一個,也可以使用create pfile命令 從spfile創建,如:CREATE PFILE=’C:/PFILE/MYPFILE.ORA’ FROM SPFILE=’D:/SPFILE/MYSPFILE.ORA’,或者從當前實例所使用的spfile創建:create pfile=’c:/pfile/mypfile.ora’ from spfile。

創建spfile的命令如下:CREATE SPFILE FROM PFILE=’C:/PFILE/MYPFILE’。

上面這個介紹是參考別人的;下面的例子是原創的:

例子:

我的環境是oracle11g

比如現在:插表:

create table t7 as

select rownum as id,(rownum+1) id2 from dual connect by rownum<5000000;

這里寫圖片描述

看下當前的sga內存,內存不足

show parameter sga

這里寫圖片描述

再看下當前實例是以pfile還是spfile啟動的

show parameter spfile

這里寫圖片描述

發現是spfile;

那么應該可以直接修好生效對吧,因為默認為both

先修改sga_max_szie

alter system set sga_max_size=4000M;

這里寫圖片描述

為啥報錯了,是不是很意外,因為雖然是spfile,但是有些參數的修改必須重啟數據庫,這個應該就是的,所以此時只能使用:

alter system set sga_max_size=4000M scope=spfile;

執行后重啟才能生效

SQL> shutdown immediate;

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> startup;

ORA-00844: Parameter not taking MEMORY_TARGET into account

ORA-00851: SGA_MAX_SIZE 4194304000 cannot be set to more than MEMORY_TARGET 3405774848.

又報錯,好緊張,原來11g新增了個參數MEMORY_TARGET,其大小等于PGA+SGA,當sga的大小大于MEMORY_TARGET就會報如上錯誤。

當初出現sga_max_size的時候,也是為了能夠自動管理sga中library cache size、java pool、dic size這些區域的,而memory_max_size就是用來自動管理sga和pga兩大塊內存區域的。

在oracle11g的內存調整順序應該是:

tmpfs> MEMORY_MAX_TARGET>MEMORY_TARGET > sga_max_size>sga_target

唉,趕快修改:

SQL> conn sys/orcl as xxx

已連接到空閑例程。

SQL> create pfile=’F:\oracle11g\ysy\product\11.2.0\dbhome_1\dbs\init.ora’ from spfile;

文件已創建。

此時修改init.ora的MEMORY_TARGET參數

然后再創建spfile

SQL> create spfile from pfile=’F:\oracle11g\ysy\product\11.2.0\dbhome_1\dbs\init.ora’;

文件已創建。

SQL> startup

ORACLE 例程已經啟動。

Total System Global Area 3390558208 bytes

Fixed Size 2180464 bytes

Variable Size 956304016 bytes

Database Buffers 2415919104 bytes

Redo Buffers 16154624 bytes

數據庫裝載完畢。

數據庫已經打開。

SQL>

重新再改:

SQL> alter system set MEMORY_MAX_TARGET =6000M scope=spfile;

系統已更改。

SQL> alter system set MEMORY_TARGET =5500M scope=spfile;

系統已更改。

SQL> alter system set sga_max_size=4500M scope=spfile;

再重啟

shutdown immediate;

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> startup

ORACLE 例程已經啟動。

Total System Global Area 4710043648 bytes

Fixed Size 2183632 bytes

Variable Size 2281705008 bytes

Database Buffers 2399141888 bytes

Redo Buffers 27013120 bytes

數據庫裝載完畢。

數據庫已經打開。

SQL> show parameter sga

NAME TYPE VALUE

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 4512M

sga_target big integer 3008M

可以看到sga_max_size 已經修改好了

終于可以創建那個表了

附:用做恢復的pfile內容(第一次修改后的)

orcl.__db_cache_size=2415919104

orcl.__java_pool_size=16777216

orcl.__large_pool_size=16777216

orcl.__oracle_base=’F:\oracle11g\ysy’#ORACLE_BASE set from environment

orcl.__pga_aggregate_target=251658240

orcl.__sga_target=2013265920

orcl.__shared_io_pool_size=0

orcl.__shared_pool_size=671088640

orcl.__streams_pool_size=0

*.audit_file_dest=’F:\oracle11g\ysy\admin\orcl\adump’

*.audit_trail=’db’

*.compatible=’11.2.0.0.0’

*.control_files=’F:\oracle11g\ysy\oradata\orcl\control01.ctl’,’F:\oracle11g\ysy\flash_recovery_area\orcl\control02.ctl’

*.db_block_size=8192

*.db_domain=”

*.db_name=’orcl’

*.db_recovery_file_dest=’F:\oracle11g\ysy\flash_recovery_area’

*.db_recovery_file_dest_size=4102029312

*.diagnostic_dest=’F:\oracle11g\ysy’

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

*.local_listener=’LISTENER_ORCL’

*.log_buffer=15000000

*.memory_target=3390046208

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile=’EXCLUSIVE’

*.sga_max_size=3390046207

*.sga_target=3154116608

*.undo_tablespace=’UNDOTBS1’

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片