久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle參數的查詢和修改方法

150次閱讀
沒有評論

共計 9210 個字符,預計需要花費 24 分鐘才能閱讀完成。

這篇文章主要講解了“Oracle 參數的查詢和修改方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Oracle 參數的查詢和修改方法”吧!

測試環境

DB Version: oracle 11.2 RAC

OS: RHEL 6.x

v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparameter 的區別

Oracle 11g 里主要的查詢參數的視圖有 v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparameter, dba_hist_parameter

v$parameter 和 v$parameter2 有什么區別呢?就跟 v$system_parameter 和 v$system_parameter2 的區別是一樣的。呵呵,具體為:

v$parameter 里存的是每個 parameter 的 value, 一個 parameter 一條記錄。v$parameter2 也存的是每個 parameter 的 value, 不過在 v$parameter2 里是每行的 name 只會存一個 value。以 control_files 為例,這個 parameter 會對應至少兩個值,那么在 v$parameter 里只會有一條記錄,而在 v$parameter2 里卻會有 2 條記錄。其實真想不明白 oracle 為啥要設計出一個這樣的視圖來,使用場景在哪?歡迎有知道的童鞋告訴我下

v$parameter 和 v$system_parameter 的區別:v$parameter 是存儲當前 session 的 parameter/value, 而 v$system_parameter 存儲的是當前 instance 級別的 parameter/value; 也就是說一個新建立的 session,v$parameter 和 v$system_parameter 里面的 parameter/value 是一致的; 因為 session level parameter 是從 instance level parameter 繼承來的; 然后通過 alter session 可以修改 v$parameter 的值,但是并不會修改 v$system_parameter data

我嘗試從 session1 執行一個 alter session, 然后再 session1 看到 v$parameter 值是變化了,打開 session2, 看到的 v$parameter 的值還是老的值,這我就困惑了,不是說 v$parameter 能看到 alter session 之后的值嗎?為啥 session1 和 session2 看到的結果不一樣呢? 這就是因為 v$parameter 顯示的是當前 session 的 parameter name/value 呀.

v$spparameter 和 v$system_parameter: 這兩個 view 的區別在于: v$spparameter 用于存儲 spfile 里的 parameter name/value, 而 v$system_parameter 用于存儲 instance level 當前的 parameter name/value; 體現在哪呢?

例子

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

———— 執行 alter session 之后三張表的查詢結果

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

從這里可以看到通過 alter session 修改之后,當前 session1 里查 v$parameter, cursor_sharing 已經改成了 FORCE, 但是另外一個 session 的 v$parameter 里的值并沒有改變; 通過 v$system_parameter 和 v$spparameter 里的值也沒有改變;

例子 2:

僅僅修改 v$spparameter

通過 alter system set … scope=spfile,這樣修改的參數就只會進入 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,表示這個 parameter value 在 spfile 里沒有設置,但是 v$system_parameter 里又有值,這是因為系統會根據一定的規則自己計算出一個值來

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. 這說明什么問題?說明如果一個參數沒有執行 alter session, 那么這個參數的值在 v$parameter 和 v$system_parameter 里的值是一樣的;

當然也可以通過 alter system set … scope=BOTH sid= * 讓改動在 v$spparameter 和 v$system_parameter 里都能看到; 這也就是 scope=BOTH/MEMORY/SPFILE 的區別

oracle 11G 里有 355 個 parameter, 那到底哪個是可以通過 alter session 修改的,哪個是可以通過 alter system 修改的呢?以及那些不可以修改的呢?這個通過 v$system_parameter 就可以知道;

isses_modifiable: 是否能通過 alter session 修改. 這只有兩個值: TRUE/FALSE

issys_modifiable: 是否能通過 alter system 修改: 這有三個值: IMMEDIATE/DEFERRED/FALSE  (IMMEDIATE 表示立即生效,在當前 session 就生效; DEFFERED: 表示對所有當前正在連接的 session 都不生效,只有對這之后的連接才生效. FALSE 就表示不允許 alter system 修改)

對于 ISSYS_MODIFIABLE=DEFERRED 的參數,必須通過 alter system …. deferred 才能修改; 否則都會報錯 ORA-02096

ORA-02096: specified initialization parameter is not modifiable with this option

當使用 ASMM 或者 AMM 的時候,很多 parameter value 都是系統自動調整的,當你修改了某個參數之后又想把這個參數交回給系統自動來管理,那怎么辦呢?其實也就是恢復默認值??梢酝ㄟ^ SQL: alter system reset name= value scope=… 注意這里使用的是 RESET 命令。reset 的命令的意思其實就是不設置了,也就是把一個 item 從 spfile 里刪除,那么如果要刪除,就一定要現有這個 item, 所以如果你要 reset 一個不存在的 parameter 的時候也會報錯?;蛘咴?RAC 里,如果設置的時候是 instance by instance 設置的,而 reset 的時候通過 alter system reset … sid= * 也會報錯;

SQL select name, value from v$spparameter where name= db_file_multiblock_read_count

NAME   VALUE

————————————————– ————————————————–

db_file_multiblock_read_count

在 v$spparameter 里找不到這個 parameter value, 說明沒有設置

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

這里報錯了

這是一種情況, 對于 RAC 來說,你可以 instance by instance 設置參數信息

這里看到每個 instnace 的 parameter value 不一樣。即使 value 一樣你也可以 instance by instance 設置

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

這里還是出錯了

隱含參數

Oracle 還有另外一種參數,稱為隱含參數,隱含參數的名字以下劃線_打頭。默認情況下隱含參數不會出現在上面的幾張表里,除非你修改了這些參數的值;

例子

alter system set _undo_autotune =TRUE;

這個語句修改了隱含參數_undo_autotune 的值; 這里涉及到注意點:

1) 修改隱含參數的時候,隱含參數名字需要用雙引號 括起來

2) 對于這種后面沒帶 scope 的,scope 的默認值是 BOTH

3) 對于這種后面沒帶 sid 的,sid 的默認值是 *

更新之后的值如下:

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

也就是說,所有修改過的并且當前生效的參數都可以在 v$parameter 里看到, 不管是隱含的還是非隱含的。那么如何查詢哪些沒有修改過的隱含參數呢?使用一下 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; 這個通過查詢 x$fixed_view_definition 就能看到了

2. oracle snapshot 也會記錄下這些 parameter value,所以從這里也能看到是否有變化;

3. 當修改任何一個 parameter 的時候,都會在 alert log 里有記錄,所以從這里也能看到所有被改變的 parameter;

感謝各位的閱讀,以上就是“Oracle 參數的查詢和修改方法”的內容了,經過本文的學習后,相信大家對 Oracle 參數的查詢和修改方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計9210字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 卓资县| 郧西县| 德阳市| 如东县| 四川省| 兴海县| 锡林郭勒盟| 赤峰市| 清新县| 黄陵县| 邹城市| 穆棱市| 饶河县| 固镇县| 遂川县| 海盐县| 吴江市| 平原县| 洛南县| 竹山县| 浙江省| 迁安市| 都安| 汝阳县| 子长县| 泗阳县| 息烽县| 威信县| 库尔勒市| 德令哈市| 石渠县| 云梦县| 阿拉善盟| 射洪县| 沛县| 海伦市| 四平市| 新乡市| 宁明县| 新田县| 乌鲁木齐市|