忍者ブログ

OracleDBAの技術メモ

最近物覚えが悪くなったので 仕事中に調べた後々役立つ情報をメモしております。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

外部表と内部表について

ネステッド・ループ結合は以下のようなルーチンによって処理される。



内部表検索時(内部ループ)に全表スキャンが繰り返されるとパフォーマンスが低下しやすいので、
内部表の結合列にインデックスがあるとよい。
PR

有効期限切れユーザ復旧

Oracle11gからはデフォルトでユーザパスワードの有効期限が180日に設定されるとのこと。
その有効期限が切れてしまった場合の復旧方法

(1)プロファイルのPASSWORD_LIFE_TIME(パスワード有効期限)を無期限に変更
   これを変更すると変更対象のプロファイルが設定されているユーザのEXPIRY_DATEも追従して変更される。
   (UNLIMITEDに変更すればユーザのEXPIRY_DATEはNULLになり
    特定の日数に変更すれば、最後にパスワードを変更した日から設定した日数後の日付に変更される)

alter profile プロファイル名 limit password_life_time unlimited;


(2)パスワードを変更
   パスワードを変更することによりパスワードの有効期限(EXPIRY_DATE)をリセットできる。
   他のパスワード制限がかかっていなければ前回と同じパスワードに変更することも可能。

alter user ユーザ名 identified by 新パスワード;


(3)ユーザのロックを解除

alter user ユーザ名 account unlock;




以下、情報確認

・プロファイルの確認

select user, profile from dba_users;



・パスワード有効期限の確認

select username, expiry_date from dba_users;



・プロファイルの有効期限設定の確認

select * from dba_profiles
where resource_name = 'PASSWORD_LIFE_TIME';



・パスワード変更日の確認

select user#, name, ptime from user$;

特定ユーザのSQLトレース取得(まるパクり)


ログオントリガー作成

CREATE OR REPLACE TRIGGER ユーザ名.TRI_SQL_TRACE
ALTER LOGON ON ユーザ名.SCHEMA
    BEGIN
        EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRADE = TRUE;
    END;



これを有効にするにはユーザにALTER SESSION権限が必要。

解除するには、ALTER SESSION権限の剥奪とトリガーの削除が必要。

<<ソース>>
■特定ユーザのSQLトレース取得
http://otn.oracle.co.jp/otn_pl/otn_tool/code_detail?n_code_id=110

Statspack解析方法

1.セッション数チェック

DB Timeは期間内の全てのセッション時間の合計なので、
セッション数が大きく変わると DB Time が変動し各種待機時間の割合に影響する。
そのため、一応確認しておくとよい。


2.アプリケーションの傾向をざっくり確認

Load Profileのチェック

DBのアクティビティの確認になる。
以前の値と合わせてグラフにするとアクティビティの変化がわかりやすい。


3.インスタンスの効率をチェック

Instance Effeciency Perentege のチェック

全ての値が100%に近いことが望ましい。
Buffer Hit % ⇒ キャッシュヒット率 はダイレクト・リードが加味されていないので注意。
すなわちBuffer Hit %が高くても、Table Access Full の ダイレクト・リードが多発して、
ディスクに負荷がかかっていることがある。


4.Top 5 Event

待機イベントが DB CPU より下回っていればひとまず問題はない。
ただし、下回った状態で変動があるようであれば、パフォーマンス悪化の兆候であることがある。


5.Memory Advisoryをチェック

基本的には大きく変動しないはず。
念のため、変動していない事を確認しておく。


6.実行されているSQL文をチェック

各SQL統計(SQL Statistics)をチェックしておく。
できればAWRレポート以外の手段でSQL実行時間の長いものをチェックしておく。
AWRレポートしかない場合は、頑張って全てのSQL統計を一覧表にする?



<<参考>>
【セミナー動画/資料】実践!! パフォーマンス・チューニング ~Statspack解析~
https://blogs.oracle.com/oracle4engineer/entry/_statspack

インデックスが使用されないケース

No. ケース SQLの例 対処方法
1 NULL値の検索 列名 IS NULL ・NULL値を別のデータに置き換える
・ビットマップ・インデックスを使用する
2 暗黙の型変換 VARCHAR2列 = 1 ・比較するデータ型を列のデータ型に合わせる
    VARCHAR2列 = TO_CHAR(1)
・INDEXヒントを使用する
 (インデックス列にNOT NULL制約が必要)
3 インデックス列に対して関数や算術を実施 VARCHAR2列 || '様' = '○○様'
NUMBER列 * 20 = 10000
substr(VARCHAR2列,1,2) = 'AB'
・関数、演算を右辺(インデックス列でない方)に移動する
    VARCHAR2列 = '○○'
    NUMBER列 = 10000/20
    VARCHAR2列 LIKE 'AB%'
・関数インデックスを使用する
・INDEXヒントを使用する
 (インデックス列にNOT NULL制約が必要)
4 LIKEの中間一致、後方一致 列名 LIKE '%TEST%'
列名 LIKE '%TEST'
・INDEXヒントを使用する
 (インデックス列にNOT NULL制約が必要)
5 !=、<>の使用
(Not Equals)
列名 != 'A'
列名 <> 'A'
・IN で置き換える(可能な場合)
    列名 IN ('B', 'C')
・INDEXヒントを使用する
 (インデックス列にNOT NULL制約が必要)

ブログ内検索

プロフィール

HN:
宇佐 義男
性別:
男性
自己紹介:
都内で活動中のフリーエンジニア
最近はOracle DBに関する作業が主です。

カレンダー

05 2025/06 07
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

最新CM

[08/06 Apagajid]
[06/23 Ajimehof]
[05/28 ovkftcz]
[05/20 Adeepen]
[05/13 Ajirubuy]

バーコード

P R

忍者アナライズ

免責事項

当ブログは日本オラクル株式会社 及びその子会社、関連会社とは一切関係ありません。 当ブログに記述の内容については、実際とは異なる場合があります。 記載しているコマンド、スクリプトを利用したことによって発生した問題、障害等については一切責任を負いません。 利用は自己責任にてお願い致します。