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