General Use
- {USER_NAME } というユーザのオブジェクト権限確認
SELECT grantee, table_name, privilege FROM dba_tab_privs WHERE grantee = 'USER_NAME';
- SYSDBA権限をもつユーザ確認
SELECT * FROM V$PWFILE_USERS;
- 初期化パラメータの一覧
SELECT name,display_value,default_value,isdefault,description FROM V$PARAMETER;
- 隠しパラメータを調べる
select ksppinm as "parameter",
ksppstvl as "value"
from x$ksppi join x$ksppcv using (indx)
where ksppinm = '{隠しパラメータ名}';
- アクセスできるテーブル一覧
SELECT * FROM ALL_TABLES ORDER BY OWNER,TABLE_NAME;
Specific Use
Parameter
- 気になるパラメータチェック
SELECT name,display_value,default_value,isdefault,description FROM V$PARAMETER WHERE name IN ('client_statistics_level') OR name like '_optim%';
- 気になる隠しパラメータ
select ksppinm as "parameter",
ksppstvl as "value"
from x$ksppi join x$ksppcv using (indx)
where ksppinm IN ('_optimizer_use_stats_on_conventional_dml','_optimizer_gather_stats_on_conventional_dml');
SQL Tuning
- 特定のSQL_IDのActualの実行計画を確認する
SHOW parameter statistics_level;でstatistics_levelがtypicalの場合:
- ALTER SESSION SET statistics_level=all;
- <<対象のSQLを実行>>
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(`上記で実行したSQLのSQL_ID`, format=>``'ALL ALLSTATS LAST'``));
補足:
statistics_level
をALLに変えてから SQLを再実行するのが重要SQLを再実行する際に、全く同じテキストだとSQL_IDが変わらず
statistics_level = typical
の情報しか得られないのでコメントを入れるなどして別のSQLとして認識させることでActualの情報が取れる最後のSQLを実行した際に、A-Rows, A-Timeのカラムが表示されていればActualの情報が取れている。
実行したSQLのSQL_IDを調べる SQL文にコメントを入れて
v$sql
から探す
SELECT * FROM AREA WHERE STORE = '117666' /* FINDME */; -- Sample SQL to find
SELECT SQL_ID,FIRST_LOAD_TIME,SQL_TEXT FROM v$sql WHERE SQL_TEXT LIKE '%FINDME%';
実行された時刻(FIRST_LOAD_TIME)を使って `v$sql` から探す
SELECT SQL_ID,FIRST_LOAD_TIME,SQL_TEXT FROM v$sql ORDER BY FIRST_LOAD_TIME DESC;