【指令碼】隱含引數及註釋資訊的查詢方法
在文章《【檢視】深入探究V$PARAMETER的底層查詢內幕》http://space.itpub.net/519536/viewspace-630542中得到一個重要的結論:構造V$PARAMETER的查詢使用到了兩個X$表,它們是“x$ksppi”和“x$ksppcv”。
為什麼V$PARAMETER只能查詢到“一般”的引數,無法查詢到資料庫的隱含引數(Oracle的隱含引數是以下劃線開頭的引數)?
如何檢視那些隱含引數及它們的說明資訊?
深入研究“x$ksppi”和“x$ksppcv”後,我們便會得到有效地指導,並對上面的問題給出一一的解答。
1.透過“x$ksppi”和“x$ksppcv”構造V$PARAMETER的SQL語句
SELECT x.inst_id,
x.indx + 1,
ksppinm,
ksppity,
ksppstvl,
ksppstdvl,
ksppstdf,
DECODE (BITAND (ksppiflg / 256, 1), 1, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppiflg / 65536, 3),
1, 'IMMEDIATE',
2, 'DEFERRED',
3, 'IMMEDIATE',
'FALSE'),
DECODE (BITAND (ksppiflg, 4),
4, 'FALSE',
DECODE (BITAND (ksppiflg / 65536, 3), 0, 'FALSE', 'TRUE')),
DECODE (BITAND (ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE'),
DECODE (BITAND (ksppstvf, 2), 2, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppilrmflg / 64, 1), 1, 'TRUE', 'FALSE'),
ksppdesc,
ksppstcmnt,
ksppihash
FROM x$ksppi x, x$ksppcv y
WHERE (x.indx = y.indx)
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
OR (ksppstdf = 'FALSE')
OR (BITAND (ksppstvf, 5) > 0)))
/
2.使用V$PARAMETER無法查詢到隱含引數的真實原因
注意觀察SQL語句中的Where子句中有如下的限制:
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
就是因為這個限制,導致以下劃線開頭的引數被過濾掉了。
3.查詢隱含引數及其說明資訊方法
既然知道了引數描述資訊的源頭是“x$ksppi”和“x$ksppcv”兩個X$表,我們便可以編寫一個指令碼,使用這個指令碼可以查詢到幾乎所有的系統引數(普通引數和隱含引數)。
簡單編寫指令碼如下:
$ cat parameter.sql
col name for a32
col value for a24
col description for a70
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
from x$ksppi a,x$ksppcv b
where a.inst_id = USERENV ('Instance')
and b.inst_id = USERENV ('Instance')
and a.indx = b.indx
and upper(a.ksppinm) LIKE upper('%¶m%')
order by name
/
4.指令碼使用效果
查詢一下包含“shared_pool”關鍵字的引數資訊
sys@ora10g> @parameter
Enter value for param: shared_pool
old 6: and upper(a.ksppinm) LIKE upper('%¶m%')
new 6: and upper(a.ksppinm) LIKE upper('%shared_pool%')
NAME VALUE DESCRIPTION
-------------------------------- ----------- ----------------------------------------------------------------------
__shared_pool_size 2466250752 Actual size in bytes of shared pool
_dm_max_shared_pool_pct 1 max percentage of the shared pool to use for a mining model
_enable_shared_pool_durations TRUE temporary to disable/enable kgh policy
_io_shared_pool_size 4194304 Size of I/O buffer pool from SGA
_shared_pool_max_size 0 shared pool maximum size when auto SGA enabled
_shared_pool_minsize_on FALSE shared pool minimum size when auto SGA enabled
_shared_pool_reserved_min_alloc 4400 minimum allocation size in bytes for reserved area of shared pool
_shared_pool_reserved_pct 5 percentage memory of the shared pool allocated for the reserved area
shared_pool_reserved_size 142606336 size in bytes of reserved area of shared pool
shared_pool_size 0 size in bytes of shared pool
10 rows selected.
5.小結
在瞭解原理的基礎上,深入一下,很多縈繞在心頭的問題便會迎刃而解,隨之而來的就是豁然開朗之悅。
想一想還有沒有其他的收穫。
Good luck.
secooler
10.03.27
-- The End --
為什麼V$PARAMETER只能查詢到“一般”的引數,無法查詢到資料庫的隱含引數(Oracle的隱含引數是以下劃線開頭的引數)?
如何檢視那些隱含引數及它們的說明資訊?
深入研究“x$ksppi”和“x$ksppcv”後,我們便會得到有效地指導,並對上面的問題給出一一的解答。
1.透過“x$ksppi”和“x$ksppcv”構造V$PARAMETER的SQL語句
SELECT x.inst_id,
x.indx + 1,
ksppinm,
ksppity,
ksppstvl,
ksppstdvl,
ksppstdf,
DECODE (BITAND (ksppiflg / 256, 1), 1, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppiflg / 65536, 3),
1, 'IMMEDIATE',
2, 'DEFERRED',
3, 'IMMEDIATE',
'FALSE'),
DECODE (BITAND (ksppiflg, 4),
4, 'FALSE',
DECODE (BITAND (ksppiflg / 65536, 3), 0, 'FALSE', 'TRUE')),
DECODE (BITAND (ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE'),
DECODE (BITAND (ksppstvf, 2), 2, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppilrmflg / 64, 1), 1, 'TRUE', 'FALSE'),
ksppdesc,
ksppstcmnt,
ksppihash
FROM x$ksppi x, x$ksppcv y
WHERE (x.indx = y.indx)
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
OR (ksppstdf = 'FALSE')
OR (BITAND (ksppstvf, 5) > 0)))
/
2.使用V$PARAMETER無法查詢到隱含引數的真實原因
注意觀察SQL語句中的Where子句中有如下的限制:
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
就是因為這個限制,導致以下劃線開頭的引數被過濾掉了。
3.查詢隱含引數及其說明資訊方法
既然知道了引數描述資訊的源頭是“x$ksppi”和“x$ksppcv”兩個X$表,我們便可以編寫一個指令碼,使用這個指令碼可以查詢到幾乎所有的系統引數(普通引數和隱含引數)。
簡單編寫指令碼如下:
$ cat parameter.sql
col name for a32
col value for a24
col description for a70
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
from x$ksppi a,x$ksppcv b
where a.inst_id = USERENV ('Instance')
and b.inst_id = USERENV ('Instance')
and a.indx = b.indx
and upper(a.ksppinm) LIKE upper('%¶m%')
order by name
/
4.指令碼使用效果
查詢一下包含“shared_pool”關鍵字的引數資訊
sys@ora10g> @parameter
Enter value for param: shared_pool
old 6: and upper(a.ksppinm) LIKE upper('%¶m%')
new 6: and upper(a.ksppinm) LIKE upper('%shared_pool%')
NAME VALUE DESCRIPTION
-------------------------------- ----------- ----------------------------------------------------------------------
__shared_pool_size 2466250752 Actual size in bytes of shared pool
_dm_max_shared_pool_pct 1 max percentage of the shared pool to use for a mining model
_enable_shared_pool_durations TRUE temporary to disable/enable kgh policy
_io_shared_pool_size 4194304 Size of I/O buffer pool from SGA
_shared_pool_max_size 0 shared pool maximum size when auto SGA enabled
_shared_pool_minsize_on FALSE shared pool minimum size when auto SGA enabled
_shared_pool_reserved_min_alloc 4400 minimum allocation size in bytes for reserved area of shared pool
_shared_pool_reserved_pct 5 percentage memory of the shared pool allocated for the reserved area
shared_pool_reserved_size 142606336 size in bytes of reserved area of shared pool
shared_pool_size 0 size in bytes of shared pool
10 rows selected.
5.小結
在瞭解原理的基礎上,深入一下,很多縈繞在心頭的問題便會迎刃而解,隨之而來的就是豁然開朗之悅。
想一想還有沒有其他的收穫。
Good luck.
secooler
10.03.27
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-630549/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隱含引數的查詢
- Oracle隱含引數的查詢Oracle
- Oracle隱形引數查詢指令碼Oracle指令碼
- 隱含引數的查詢x$ksppi,x$ksppcv
- 常用指令碼:獲取隱含引數指令碼
- oracle 檢視隱含引數指令碼Oracle指令碼
- 查詢資料庫隱含引數的sql語句資料庫SQL
- 獲取Oracle隱含引數資訊Oracle
- 隱藏引數查詢sqlSQL
- 查詢oracle中的隱形引數Oracle
- Oracle 隱含引數Oracle
- ORACLE隱含引數Oracle
- [20170502]11G查詢隱含引數檢視.txt
- Oracle的隱含引數(zt)Oracle
- 隱藏引數查詢和dictionary viewView
- [20171109]檢視隱含引數指令碼.txt指令碼
- oracle會話阻塞查詢指令碼及對應欄位含義Oracle會話指令碼
- 獲取oracle的隱含引數Oracle
- oracle的一個隱含引數Oracle
- Oracle 中所有隱含的 引數Oracle
- Oracle 資料字典及註釋查詢Oracle
- oracle獲取隱含引數Oracle
- 【parameter】oracle的隱含引數的檢視Oracle
- Shell指令碼對ps命令隱藏引數指令碼
- 查詢初始化引數的方法(二)
- 查詢初始化引數的方法(一)
- 查詢初始化引數的方法(七)
- 查詢初始化引數的方法(六)
- 查詢初始化引數的方法(五)
- 查詢初始化引數的方法(四)
- 查詢初始化引數的方法(三)
- oracle隱含引數的檢視與修改Oracle
- 查詢等待事件及處理指令碼事件指令碼
- 探究隱含引數_fairness_thresholdAI
- oracle 11g常用隱含引數Oracle
- [zt] 如何檢視Oracle 隱含引數Oracle
- IDEA自定義類註釋和方法註釋(自定義groovyScript方法實現多行引數註釋)Idea
- 如何在linux中建立特定的指令碼註釋資訊Linux指令碼