2018.01.17
V$SQL BIND CAPTURE
目次
基本情報
概要
V$ SQL_BIND_CAPTUREビューはSQLのBind変数を使用しています。使用されているBind変数の名前と型、値などを表示します。
サポート
10g以降
内容説明
名前 | タイプ | 説明 |
ADDRESS | – | Parent CursorのAddress |
HASH_VALUE | NUMBER | Parent CursorのHash値 |
SQL_ID | VARCHAR2(13) | Unique SQL ID:V$ SQLのSQL_ID列と結合可能 |
CHILD_ADDRESS | – | Child CursorのAddress |
CHILD_NUMBER | NUMBER | Child Cursorの番号 |
NAME | VARCHAR2(30) | Bind 変数の名前 |
POSITION | NUMBER | SQL文でBind 変数の位置。 1スタート |
DUP_POSITION | NUMBER | Bind 変数の名前が重複している場合、最初Bind Variableの位置を指します。 |
DATATYPE | NUMBER | Bind 変数のデータ型。Oracleの内部的に使用されている数値。 |
DATATYPE_STRING | VARCHAR2(15) | Bind 変数のデータ型の認識可能な名前。例:NUMBER、VARCHAR2 |
CHARACTER_SID | NUMBER | National character set identifier |
PRECISION | NUMBER/td> | Precision (for numeric binds) |
SCALE | NUMBER | Scale (for numeric binds) |
MAX_LENGTH | NUMBER | 最大Bind長 |
WAS_CAPTURED | VARCHAR2(3) | Bind値のCaptureが行われたかどうか(YES)または(NO) |
LAST_CAPTURED | DATE | Bind値のCaptureが行われた最新の時間 |
VALUE_STRING | VARCHAR2(4000) | Bind値のString表現 |
VALUE_ANYDATA/td> | ANYDATA | Bind値のSys.AnyDataによる表現 |
参考情報
バインドキャプチャ
Oracleは、次のような視点にBind Captureを実行する。
・SQLステートメントがHard Parseされた時点でBind Variableが使用されてBind値が付与された場合。 ・Bind Captureが行われた後に、Bind値が変更された場合。ただし、Oracleのパフォーマンス上のオーバーヘッドを 最小限に抑えるために、15分以上の間隔を置いてCaptureを実行します。 つまり、Bind Captureされた値が、常に最新の値を示すものではないことに注意しなければなりません。
バインド・アトリビュート
Oracle10g以前は、特定のSQL文で使用されているBind値を引き出そうとするときは、Processstate Dumpを実行したり、SQL Trace、あるいはAuditを実行しました。しかし、V$ SQL_BIND_CAPTUREビューを使用すると、簡単な照会だけでBind値を把握することができるようになったのです。各ツールが提供される値の種類は、次のように整理することができます。
・Processstate Dump:特定のSession(Process)が「現在」実行中のSQL文で使用されるBind値のリスト ・SQL Trace:特定のSessionやSystem全体で実行されたすべてのSQL文で使用されたBind値 ・V$ SQL_BIND_CAPTURE:SQLステートメントごとに、最近使用されたBind値 ・Audit:特定のテーブルまたはオブジェクト全体のSelect/ Insert/ Update/ DeleteのSQL文とBind値
バインド値
V$ SQL_BIND_CAPTUREビューのHistoryバージョンであるDBA_HIST_SQLBINDビューを使用して、過去の特定の時点で特定のSQL文で使用されたBind値を確認することができます。
例
SQL> CREATE TABLE bind_test(id INT); SQL> var x number; SQL> EXEC : x : = 1; SQL> select * from bind_test where id = :x'; SQL> SELECT name, position, was_captured, to_char(last_captured,'yyyy/mm/dd hh24:mi:ss'), value_string FROM v$sql_bind_capture WHERE sql_id = (SELECT sql_id FROM v$sql WHERE sql_text = ('select * from bind_test where id = :x') NAME POSITION WAS_CAPTURED LAST_CAPTURED VALUE_STRING ---- -------- ---------- -------------- ------------ :X 1 YES 2007/10/13 00:16:19 1
関連情報
1. _OPTIM_PEEK_USER_BINDSパラメータ 2. V$ SQL_BIND_DATAビュー 3. V$ SQL_BIND_METADATAビュー 4. DBA_HIST_SQLBIND
外部参照
http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2114.htm