《使用SQL來分析數據庫參數(一)》要點:
本文介紹了使用SQL來分析數據庫參數(一),希望對您有用。如果有疑問,可以聯系我們。
對于10g,11g,12c中的參數變化有時候感覺就是使不上勁,因為參數好像很多,但是了解的又很少.隱含參數經常是碰到問題的時候關聯思考發現有這么一個隱含參數,有些問題可能有意識還會主動去查查,如果恍惚一下就算了.如此一來,其實對于數據庫參數而言我們很多人也還是一知半解.
怎么得到去分析數據庫參數的變化情況呢,突然想到使用SQL來分析是個不錯的方法.比如我現在希望解決下面的問題.
正式參數和隱含參數的數據情況
哪些參數是11g新增的?
那些是12c新增的?
哪些11g的隱含參數,在12c正式引入?
哪些是11g的隱含參數,在12c中被廢棄?
哪些是10g的隱含參數,在11g被廢棄?
哪些是10g的隱含參數,在11g被正式引入?
哪些是10g默認的參數,在11g有所變化?
哪些是11g默認的參數,在12c中有所變化?
看來我提出了不少的問題,但是解決起來純手工那是遙遙無期,還是使用SQL吧.
首先我們需要做一些基本的鋪墊,怎么得到對應的數據.
如果想得到一份完成的參數列表,可以參考v$parameter這個是正式公布的參數,還有一部分是隱含參數.他們的差別其實就是字段的過濾條件不同,基表是相同的,都是x$的內存表.
可以使用如下的SQL得到完整的參數列表,包含隱含參數和正式參數
spool all_param.lst
set pages 0
set linesiz 200
select
(select version from v$instance)||’|’||’ALL’||’|’||x.ksppinm||’|’||y.ksppstvl ||’|’||y.ksppstdf||’|’||decode(bitand(ksppilrmflg / 64, 1), 1, ‘TRUE’, ‘FALSE’)||’|’||ksppdesc
from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id = userenv(‘Instance’) and
y.inst_id = userenv(‘Instance’) and
x.indx = y.indx
order by
translate(x.ksppinm, ‘ _’, ‘ ‘);
spool off
可以使用如下的SQL得到公開的正式參數
spool db_param.lst
set pages 0
set linesize 200
select (select version from v$instance)||’|’||’GENERAL’||’|’||name||’|’||value||’|’||isdefault||’|’||isdeprecated||’|’||description from v$parameter ;
spool off
然后可以找幾個有針對性的環境,比如10g我是參考10.2.0.5.0,11g參考11.2.0.4.0,12c參考12.1.0.2.0
簡單的一個數據分布情況如下:
10g版本
共1620個參數
供260個公開參數,即v$parameter中可以查到的.
11g版本
共2914個參數
供352個公開參數,即v$parameter中可以查到的.
12c版本
共3978個參數
供382個公開參數,即v$parameter中可以查到的.
得到了參數的列表,我們可以導入到一個表中統一管理分析.可以創建一個表如下:
create table db_param_all (db_version varchar2(10),param_type varchar2(10),name varchar2(80),value varchar(512),isdefault varchar2(9),isdeprecated varchar2(5),description varchar2(255));
而怎么導入數據呢,還是SQL*Loader吧.
loaddata
infile*
appendintotabledb_param_all
fieldsterminatedby’|’
(db_version,param_type,name,value,isdefault,isdeprecated,description))
完成以上的步驟,就可以做一些基本的數據分析了,至少很多不確定的問題都可以自己找到答案.
作者:楊建榮
文章出處:楊建榮的學習筆記(訂閱號ID:jianrong-notes)