這篇文章主要講解了“Oracle參數(shù)的查詢和修改方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Oracle參數(shù)的查詢和修改方法”吧!
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司提供網(wǎng)站設(shè)計(jì)和自適應(yīng)建站服務(wù)。團(tuán)隊(duì)由有經(jīng)驗(yàn)的網(wǎng)頁(yè)設(shè)計(jì)師、程序員和市場(chǎng)專家組成,能夠提供從H5高端網(wǎng)站建設(shè),網(wǎng)站制作,廣告投放平臺(tái),模板建站到小程序定制開(kāi)發(fā)等全方位服務(wù)。 以客戶為中心,致力于為客戶提供創(chuàng)新、高效的解決方案,幫助您打造成功的企業(yè)網(wǎng)站。
測(cè)試環(huán)境
DB Version: oracle 11.2 RAC
OS: RHEL 6.x
Oracle 11g里主要的查詢參數(shù)的視圖有v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparameter, dba_hist_parameter
v$parameter和v$parameter2有什么區(qū)別呢?就跟v$system_parameter和v$system_parameter2的區(qū)別是一樣的。呵呵,具體為:
v$parameter里存的是每個(gè)parameter的value, 一個(gè)parameter一條記錄。v$parameter2也存的是每個(gè)parameter的value, 不過(guò)在v$parameter2里是每行的name只會(huì)存一個(gè)value。以control_files為例,這個(gè)parameter會(huì)對(duì)應(yīng)至少兩個(gè)值,那么在v$parameter里只會(huì)有一條記錄,而在v$parameter2里卻會(huì)有2條記錄。其實(shí)真想不明白o(hù)racle為啥要設(shè)計(jì)出一個(gè)這樣的視圖來(lái),使用場(chǎng)景在哪?歡迎有知道的童鞋告訴我下
v$parameter和v$system_parameter的區(qū)別: v$parameter是存儲(chǔ)當(dāng)前session的parameter/value, 而v$system_parameter存儲(chǔ)的是當(dāng)前instance級(jí)別的parameter/value; 也就是說(shuō)一個(gè)新建立的session, v$parameter和v$system_parameter里面的parameter/value是一致的; 因?yàn)閟ession level parameter是從instance level parameter繼承來(lái)的; 然后通過(guò)alter session可以修改v$parameter的值,但是并不會(huì)修改v$system_parameter data
我嘗試從session1執(zhí)行一個(gè)alter session, 然后再session1看到v$parameter值是變化了,打開(kāi)session2, 看到的v$parameter的值還是老的值,這我就困惑了,不是說(shuō)v$parameter能看到alter session之后的值嗎?為啥session1和session2看到的結(jié)果不一樣呢? 這就是因?yàn)関$parameter顯示的是當(dāng)前session的parameter name/value呀.
v$spparameter和v$system_parameter: 這兩個(gè)view的區(qū)別在于: v$spparameter用于存儲(chǔ)spfile 里的parameter name/value, 而v$system_parameter用于存儲(chǔ)instance level當(dāng)前的parameter name/value; 體現(xiàn)在哪呢?
例子
SQL> select name, value from v$system_parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$spparameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
------------執(zhí)行alter session之后三張表的查詢結(jié)果
Session 1:
SQL> select userenv('sid') from dual;
USERENV('SID')
--------------
569
SQL> alter session set cursor_sharing='FORCE';
Session altered.
SQL> select name, value from v$parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing FORCE
SQL> select name, value from v$spparameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$system_parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
Session 2:
SQL> select userenv('sid') from dual;
USERENV('SID')
--------------
853
SQL> select name, value from v$parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$spparameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$system_parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
從這里可以看到通過(guò)alter session修改之后,當(dāng)前session1里查v$parameter, cursor_sharing已經(jīng)改成了FORCE, 但是另外一個(gè)session的v$parameter里的值并沒(méi)有改變; 通過(guò)v$system_parameter和v$spparameter里的值也沒(méi)有改變;
例子2:
僅僅修改v$spparameter
通過(guò)alter system set ... scope=spfile, 這樣修改的參數(shù)就只會(huì)進(jìn)入spfile里,所以只有v$spparameter才能看到;
修改前
SQL> select name, value from v$parameter where name='cursor_sharing';
NAME VALUE
------------------------------ ------------------------------
cursor_sharing EXACT
SQL> select name, value from v$parameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 500
SQL> select name, value from v$system_parameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 500
SQL> select name, value from v$spparameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 500
修改后
SQL> alter system set open_cursors=3000 scope=spfile sid='*';
System altered.
SQL> select name, value from v$system_parameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 500
SQL> select name, value from v$spparameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 3000
SQL> select name, value from v$parameter where name='open_cursors';
NAME VALUE
------------------------------ ------------------------------
open_cursors 500
例子3
只修改v$system_parameter
修改前
SQL> select name, value from v$spparameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count
注意這里顯示的是NULL,表示這個(gè)parameter value在spfile里沒(méi)有設(shè)置,但是v$system_parameter里又有值,這是因?yàn)橄到y(tǒng)會(huì)根據(jù)一定的規(guī)則自己計(jì)算出一個(gè)值來(lái)
SQL> select name, value from v$system_parameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count 128
SQL> select name, value from v$parameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count 128
修改后
SQL> alter system set db_file_multiblock_read_count=256 scope=memory sid='*';
System altered.
SQL> select name, value from v$spparameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count
SQL> select name, value from v$system_parameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count 256
SQL> select name, value from v$parameter where name='db_file_multiblock_read_count';
NAME VALUE
------------------------------ ------------------------------
db_file_multiblock_read_count 256
v$spparameter里的值仍然為空,v$system_parameter的值改為了256, 并且 并且 v$parameter里的值也是256. 這說(shuō)明什么問(wèn)題?說(shuō)明如果一個(gè)參數(shù)沒(méi)有執(zhí)行alter session, 那么這個(gè)參數(shù)的值在v$parameter和v$system_parameter里的值是一樣的;
當(dāng)然也可以通過(guò)alter system set ... scope=BOTH sid='*' 讓改動(dòng)在v$spparameter和v$system_parameter里都能看到; 這也就是scope=BOTH/MEMORY/SPFILE的區(qū)別
oracle 11G里有355個(gè)parameter, 那到底哪個(gè)是可以通過(guò)alter session修改的,哪個(gè)是可以通過(guò)alter system修改的呢?以及那些不可以修改的呢?這個(gè)通過(guò)v$system_parameter就可以知道;
isses_modifiable: 是否能通過(guò)alter session修改. 這只有兩個(gè)值: TRUE/FALSE
issys_modifiable: 是否能通過(guò)alter system修改: 這有三個(gè)值: IMMEDIATE/DEFERRED/FALSE (IMMEDIATE表示立即生效,在當(dāng)前session就生效; DEFFERED: 表示對(duì)所有當(dāng)前正在連接的session都不生效,只有對(duì)這之后的連接才生效. FALSE就表示不允許alter system修改)
對(duì)于ISSYS_MODIFIABLE=DEFERRED的參數(shù),必須通過(guò)alter system .... deferred才能修改; 否則都會(huì)報(bào)錯(cuò)ORA-02096
ORA-02096: specified initialization parameter is not modifiable with this option
當(dāng)使用ASMM或者AMM的時(shí)候,很多 parameter value都是系統(tǒng)自動(dòng)調(diào)整的,當(dāng)你修改了某個(gè)參數(shù)之后又想把這個(gè)參數(shù)交回給系統(tǒng)自動(dòng)來(lái)管理,那怎么辦呢?其實(shí)也就是恢復(fù)默認(rèn)值。可以通過(guò)SQL: alter system reset name=<value> scope=... 注意這里使用的是RESET命令。 reset的命令的意思其實(shí)就是不設(shè)置了,也就是把一個(gè)item從spfile里刪除,那么如果要?jiǎng)h除,就一定要現(xiàn)有這個(gè)item, 所以如果你要reset一個(gè)不存在的parameter的時(shí)候也會(huì)報(bào)錯(cuò)?;蛘咴赗AC里,如果設(shè)置的時(shí)候是instance by instance設(shè)置的,而reset的時(shí)候通過(guò)alter system reset ... sid='*'也會(huì)報(bào)錯(cuò);
SQL> select name, value from v$spparameter where name='db_file_multiblock_read_count';
NAME VALUE
-------------------------------------------------- --------------------------------------------------
db_file_multiblock_read_count
在v$spparameter里找不到這個(gè)parameter value, 說(shuō)明沒(méi)有設(shè)置
SQL> alter system reset db_file_multiblock_read_count scope=spfile sid='*';
alter system reset db_file_multiblock_read_count scope=spfile sid='*'
ERROR at line 1:
ORA-32010: cannot find entry to delete in SPFILE
這里報(bào)錯(cuò)了
這是一種情況, 對(duì)于RAC來(lái)說(shuō),你可以instance by instance設(shè)置參數(shù)信息
這里看到每個(gè)instnace的parameter value不一樣。即使value一樣你也可以instance by instance設(shè)置
SQL> select sid, name, value from v$spparameter where name='db_file_multiblock_read_count';
SID NAME VALUE
-------------------------------------------------------------------------------- ----------------------------------
racaaweb1 db_file_multiblock_read_count 64
racaaweb2 db_file_multiblock_read_count 256
SQL> alter system reset db_file_multiblock_read_count scope=spfile sid='*';
alter system reset db_file_multiblock_read_count scope=spfile sid='*'
ERROR at line 1:
ORA-32010: cannot find entry to delete in SPFILE
這里還是出錯(cuò)了
隱含參數(shù)
Oracle還有另外一種參數(shù),稱為隱含參數(shù),隱含參數(shù)的名字以下劃線_打頭。默認(rèn)情況下隱含參數(shù)不會(huì)出現(xiàn)在上面的幾張表里,除非你修改了這些參數(shù)的值;
例子
alter system set "_undo_autotune"=TRUE;
這個(gè)語(yǔ)句修改了隱含參數(shù)_undo_autotune的值; 這里涉及到注意點(diǎn):
1) 修改隱含參數(shù)的時(shí)候,隱含參數(shù)名字需要用雙引號(hào)""括起來(lái)
2) 對(duì)于這種后面沒(méi)帶scope的,scope的默認(rèn)值是BOTH
3) 對(duì)于這種后面沒(méi)帶sid的,sid的默認(rèn)值是'*'
更新之后的值如下:
SQL> select name, value from v$spparameter where name='_undo_autotune';
NAME VALUE
-------------------------------------------------- --------------------------------------------------
_undo_autotune TRUE
SQL> select name, value from v$system_parameter where name='_undo_autotune';
NAME VALUE
-------------------------------------------------- --------------------------------------------------
_undo_autotune TRUE
也就是說(shuō),所有修改過(guò)的并且當(dāng)前生效的參數(shù)都可以在v$parameter里看到, 不管是隱含的還是非隱含的。那么如何查詢哪些沒(méi)有修改過(guò)的隱含參數(shù)呢?使用一下SQL:
Hidden Parameter
set linesize 1000
SET VERIFY OFF
COLUMN parameter FORMAT a37
COLUMN description FORMAT a50 WORD_WRAPPED
COLUMN session_value FORMAT a10
COLUMN instance_value FORMAT a10
SELECT a.ksppinm AS parameter,
a.ksppdesc AS description,
b.ksppstvl AS session_value,
c.ksppstvl AS instance_value
FROM x$ksppi a,
x$ksppcv b,
x$ksppsv c
WHERE a.indx = b.indx
AND a.indx = c.indx
AND a.ksppinm LIKE '%'||LOWER('&1')||'%' ESCAPE '/'
ORDER BY a.ksppinm;
1: x$ksppi: 這里存的是所有的parameter name; x$ksppcv存的是session level的parameter value, x$ksppsv存的是instance level的parameter value; 這個(gè)通過(guò)查詢x$fixed_view_definition就能看到了
2. oracle snapshot也會(huì)記錄下這些parameter value,所以從這里也能看到是否有變化;
3. 當(dāng)修改任何一個(gè)parameter的時(shí)候,都會(huì)在alert log里有記錄,所以從這里也能看到所有被改變的parameter;
感謝各位的閱讀,以上就是“Oracle參數(shù)的查詢和修改方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Oracle參數(shù)的查詢和修改方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文名稱:Oracle參數(shù)的查詢和修改方法
當(dāng)前網(wǎng)址:http://aaarwkj.com/article28/jejdcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、虛擬主機(jī)、、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)