変数をバインドするさまざまなメソッドを取得するOracle
Oracle Get Various Methods Binding Variables
オラクル 変数をバインドするさまざまなメソッドを取得する
いつオラクルバインド変数を使用したターゲットの解析と実行SQL次の2つの条件のいずれかが満たされると、SQLその中のバインド変数の特定の入力値は次のようになりますオラクルキャプチャー:
lターゲットにバインド変数が含まれている場合SQLハード解析方法で実行された場合。
lターゲットにバインド変数が含まれている場合SQLソフト構文解析またはソフト構文解析で繰り返し実行される場合、オラクルデフォルトでは少なくとも間隔151分に1回キャプチャされます。これです15分はパラメータによって暗示されます '_CURSOR_BIND_CAPTURE_INTERVAL'コントロール、デフォルト値は900第二に、すなわち15分。
root @ xxxxx> SET PAGESIZE 9999
root @ xxxxx> SET LINE 9999
root @ xxxxx> COL NAME FORMAT A40
root @ xxxxx> COL KSPPDESC FORMAT A60
root @ xxxxx> COL KSPPSTVL FORMAT A20
root @ xxxxx> SELECT A.INDX、
2 A.KSPPINM NAME、
3 A.KSPPDESC、
4 B.KSPPSTVL
5 X $ KSPPI Aから、
6 X $ KSPPCV B
7 WHERE A.INDX = B.INDX
8 AND LOWER(A.KSPPINM)LIKE LOWER( '%&PARAMETER%')
パラメータの値を入力してください:_CURSOR_BIND_CAPTURE_INTERVAL
古い8:AND LOWER(A.KSPPINM)LIKE LOWER( '%&PARAMETER%')
new 8:AND LOWER(A.KSPPINM)LIKE LOWER( '%_ CURSOR_BIND_CAPTURE_INTERVAL%')
INDX名KSPPDESCKSPPSTVL
---------- ---------------------------------------- -------------------------------------------------- ---------- --------------------
2140 _cursor_bind_capture_intervalカーソルの2つのバインドキャプチャ間の間隔(秒単位)900
知っておく必要があるのは、オラクルターゲットにあるものだけをキャプチャしますSQLのどこ条件内のバインド変数の特定の入力値、およびバインド変数を使用するユーザー向けインサートに関係なく、ステートメントインサートステートメントがハード解析方法で実行されるかどうか、オラクルキャプチャしないでくださいインサートステートメント値句内の対応するバインド変数の特定の入力値。
クエリビューV $ SQL_BIND_CAPTURE実行されたターゲットを取得できますSQLバインドされた変数の特定の入力値。万一に備えてV $ SQL_BIND_CAPTURE見つからない場合は対応可能です共有カーソルすでにから共有プールクリアされましたが、今回はやってみることができます時間関連データディクショナリテーブルDBA_HIST_SQLSTATまたはDBA_HIST_SQLBINDクエリ内。
お問い合わせSQLステートメントは次のとおりです。
SELECT D.SQL_ID、
D.CHILD_NUMBER、
D.CHILD_ADDRESS、
D.NAME、
D.POSITION、
D.DATATYPE、
D.DATATYPE_STRING、
D.MAX_LENGTH、
D.WAS_CAPTURED、
D.LAST_CAPTURED、
D.VALUE_STRING
FROM V $ SQL_BIND_CAPTURE D
WHERE D.SQL_ID = '01g03pruhphqc'
D.CHILD_NUMBER、D.POSITIONで注文
SELECT D.SQL_ID、
D.NAME、
D.POSITION、
D.DATATYPE、
D.DATATYPE_STRING、
D.MAX_LENGTH、
D.WAS_CAPTURED、
D.LAST_CAPTURED、
D.VALUE_STRING
FROM DBA_HIST_SQLBIND D
SELECT D.SNAP_ID、
DBMS_SQLTUNE.EXTRACT_BIND(D.BIND_DATA、1).VALUE_STRING BIND1、
DBMS_SQLTUNE.EXTRACT_BIND(D.BIND_DATA、1).VALUE_STRING BIND2
FROM DBA_HIST_SQLSTAT D
WHERE D.SQL_ID = '01g03pruhphqc'
SELECT D.SQL_ID、D.CHILD_NUMBER、D.CHILD_ADDRESS、D.NAME、D.POSITION、D.DATATYPE、D.DATATYPE_STRING、D.MAX_LENGTH、D.WAS_CAPTURED、D.LAST_CAPTURED、D.VALUE_STRING FROM V $ SQL_BIND_CAPTURE D WHERE D.SQL_ID = 'aug0d49nzbgtq' ORDER BY D.CHILD_NUMBER、D.POSITION
SELECT D.SNAP_ID、DBMS_SQLTUNE.EXTRACT_BIND(D.BIND_DATA、1).VALUE_STRING BIND1、DBMS_SQLTUNE.EXTRACT_BIND(D.BIND_DATA、1).VALUE_STRING BIND2 FROM DBA_HIST_SQLSTAT D WHERE D.SQL_ID = 'aug0d49nzbgtq'
SELECT * FROM DBA_HIST_SQLBIND D WHERE D.SQL_ID = 'aug0d49nzbgtq'
テスト例は次のとおりです。
CREATE TABLE T_BG_20170610_LHR(N NUMBER(10)、V VARCHAR2(3000))
--SQL_TEXT1:ハード解析
宣言する
N NUMBER(10):= 1-分布22バイトメモリスペース
V VARCHAR2(32):= 'XIAOMAIMIAO1'-分布32バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
--SQL_TEXT2:ハード解析
宣言する
N NUMBER(10):= 2-分布22バイトメモリスペース
V VARCHAR2(33):= 'XIAOMAIMIAO2'-分布128バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
--SQL_TEXT3:ハード解析
宣言する
N NUMBER(10):= 3--分布22バイトメモリスペース
V VARCHAR2(129):= 'XIAOMAIMIAO3'-分布2000年バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
--SQL_TEXT4:ソフト解析
宣言する
N NUMBER(10):= 4--分布22バイトメモリスペース
V VARCHAR2(2001):= 'XIAOMAIMIAO4'-分布2000年バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
--SQL_TEXT5:ソフト解析
宣言する
N NUMBER(10):= 5--分布22バイトメモリスペース
V VARCHAR2(32767):= 'XIAOMAIMIAO5'-分布2000年バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
--SQL_TEXT6:ハード解析
宣言する
N NUMBER(10):= 6--分布22バイトメモリスペース
V VARCHAR2(32767):= RPAD( 'XIAOMAIMIAO6'、2002、 '8')-文字列の長さは2002年、分布4000バイトメモリスペース
ベギン
EXECUTE IMMEDIATE'INSERT INTO T_BG_20170610_LHR SELECT * FROM T_BG_20170610_LHR WHERE N =:N AND V =:V 'USING N、V
コミット
終わり
/
バインドされた変数の入力値をクエリします。
root @ xxxxx> COL NAME FORMAT A6
root @ xxxxx> COL VALUE_STRING FORMAT A15
root @ xxxxx> SELECT D.SQL_ID、D.CHILD_NUMBER、D.CHILD_ADDRESS、D.NAME、D.POSITION、D.DATATYPE、D.DATATYPE_STRING、D.MAX_LENGTH、D.WAS_CAPTURED、D.LAST_CAPTURED、D.VALUE_STRING FROM V $ SQL_BIND_CAPTURE D WHERE D.SQL_ID = 'aug0d49nzbgtq' ORDER BY D.CHILD_NUMBER、D.POSITION
SQL_ID CHILD_NUMBER CHILD_ADDRESS NAME POSITION DATATYPE DATATYPE_STRING MAX_LENGTH WAS LAST_CAPTURED VALUE_STRING
------------- ------------ ---------------- ------ --- ------- ---------- ------------------------------ --- ------- --- ------------------- ---------------
aug0d49nzbgtq 0 0000000095C56BB0:N 12番号22はい2017-06-1011:48:47 1
aug0d49nzbgtq 0 0000000095C56BB0:V 2 1 VARCHAR2(32)32はい2017-06-10 11:48:47 XIAOMAIMIAO1
aug0d49nzbgtq 1 0000000095C5ECF0:N 12番号22はい2017-06-1011:48:47 2
aug0d49nzbgtq 1 0000000095C5ECF0:V 2 1 VARCHAR2(128)128はい2017-06-10 11:48:47 XIAOMAIMIAO2
aug0d49nzbgtq 2 0000000095C66750:N 1 2 NUMBER 22 YES 2017-06-10 11:48:47 3
aug0d49nzbgtq 2 0000000095C66750:V 2 1 VARCHAR2(2000)2000はい2017-06-10 11:48:47 XIAOMAIMIAO3
aug0d49nzbgtq 3 0000000095C22880:N 12番号22はい2017-06-1011:48:48 6
aug0d49nzbgtq 3 0000000095C22880:V 2 1 VARCHAR2(4000)4000 NO
1、クエリv $ sqlビュー
選択する v $ sqlからのsql_id、sql_text、bind_data、HASH_VALUEwhere sql_text Like '%select * from test where id1%'
その記録頻度は、_cursor_bind_capture_intervalの暗黙的なパラメーターによって制御されます。デフォルト値は900で、バインディング値が900秒ごとに記録されることを示します。これは、alter system set'_cursor_bind_capture_interval '= 10を介して渡すことができます。
BEDA0B2002004F8482D10065FFFF0F00000000000000000000C0021602C102C0021602C102F0018003691532303132303431313032504F443834363135313635F0018003691532303132303431313032504F443834363135313730F0018003691532303132303431313032504F443834363135313731F0018003691532303132303431313032504F443834363135313734F0018003691532303132303431313032504F443834363135313735F0018003691532303132303431313032504F443834363135313739F0018003691532303132303431313032504F443834363135313830F0018003691532303132303431313032504F443834363135313833F0018003691532303132303431313032504F443834363135313834F0018003691532303132303431313032504F443834363135313838F0018003691532303132303431313032504F443834363135313839F0018003691532303132303431313032504F443834363135313933F0018003691532303132303431313032504F443834363135313934F0018003691532303132303431313032504F443834363135313937F0018003691532303132303431313032504F443834363135313938F0018003691532303132303431313032504F443834363135323033F001:この時点で、データへのクエリは、フォームの価値があります800369153 2303132303431313032504F443834363135323034F0018003691532303132303431313032504F443834363135323037
これは間違いなく理解できません。
変換する必要があります
select dbms_sqltune.extract_binds(bind_data)bind from v $ sql WHERE SQL_TEXT LIKE '%FROM TEST11%'
2、クエリSELECT VALUE_STRING FROM V $ SQL_BIND_CAPTURE WHERE SQL_ID = 'abhf6n1xqgrr0'
沿ってv $ sql_bind_captureビュー、バインド変数を表示できますが、このビューはそれほど強力ではなく、最後のレコードのバインド変数の値のみをキャプチャできます。
また、2つのキャプチャ間の間隔には、暗黙的なパラメータ制御があります。デフォルトは900数秒で、キャプチャが再開されます。に900内部では、バインドされた変数の値の変更はこのビューに反映されません。
10G後で見ることができます時間レポートに記録SQL変数値をバインドします。
sql_id = '576c1s91gua19'およびsnap_id = '20433'であるdba_hist_sqlbindからsnap_id、name、position、value_string、last_captured、WAS_CAPTUREDを選択します。
---------- SNAP_IDです時間レポートのスナップショットID。
- - - - - 名前、バインド変数の名前
- - - - - ポジション、バインディング値はSQL声明の中での位置1、二、3マーキング
--------- value_stringバインドされた変数値です
---------、last_captured、最後にキャプチャされた時間
---------WAS_CAPTUREDバインディングがキャッチされているかどうか、どこ句の前のバインディングはキャプチャされません。
dba_hist_sqlbindビューの力は、それぞれを記録することです時間レポートでSQLバインド変数値、もちろんこのバインド変数値も時間から生成された場合v $ sql_bind_capture得られたサンプリング。
このビューを通じて、多くのバインド変数値を取得できます。これは、通常、問題のトラブルシューティングに十分です。
注意すべきもう1つの点は、これら2つのビューに記録されるバインド変数はどこ状態の背後にあるバインディングがキャプチャされますが、これには注意が必要です。
3、クエリ Dba_hist_sqlbindVALUE_STRING列DBA_HIST_SQLBIND is a view V$SQL_BIND_CAPTURE history snapshot
4、お問い合わせ wrh $ _sqlstat
dbms_sqltune.extract_bind(bind_data、1).value_stringを選択します
wrh $ _sqlstatから
ここで、sql_id = '88dz0k2qvg876' ----バインド変数の数に応じてdbms_sqltune.extract_bind(bind_data、2).value_stringなどを増やします。
SQLバインド変数値を取得するためのORACLEメソッド
この記事は要約しますオラクルデータベースにアクセスする方法SQL変数値をバインドする方法、SQL知識のこの側面は、最適化の調整プロセスでよく使用されます。ここで、整理して要約し、後で探して読んでください。
方法1:お問い合わせ$ SQLで
$ SQLでビューでBIND_DATAフィールドはバインド変数の値を格納するために使用されますが、このビューからバインド変数の値を照会することには重大な制限があります。
1:その録音周波数は影響を受けます_cursor_bind_capture_interval暗黙のパラメータ制御、デフォルト値900、それぞれが900バインディング値を秒単位で記録します。つまり、900内部では、バインドされた変数の値の変更はこのビューに反映されません。暗黙のパラメータを調整しない限り_cursor_bind_capture_interval
二:最後にキャプチャされたバインド変数の値のみを記録します。
3:BIND_DATAデータ型は生変換する必要があります。
バインド変数の値を表示する方法は2つあります。
COL SQL_ID FOR A14
COL SQL_TEXT FOR A32
COL HASH_VALUE FOR 99999999999
COL BIND_DATA FOR A32
SELECT SQL_ID
,SQL_TEXT
,LITERAL_HASH_VALUE
,HASH_VALUE
,DBMS_SQLTUNE.EXTRACT_BINDS(BIND_DATA) BIND_DATA
FROM V$SQL
WHERE SQL_TEXT LIKE ''SELECT * FROM TEST%'
COL SQL_ID FOR A14
COL SQL_TEXT FOR A32
COL HASH_VALUE FOR 99999999999
COL BIND_DATA FOR A32
SELECT SQL_ID
,SQL_TEXT
,LITERAL_HASH_VALUE
,HASH_VALUE
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,1).VALUE_STRING BIND_DATA
FROM V$SQL
WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'
以下の実験に示すように、セッションでバインド変数クエリを使用します。SQL次に、ステートメントで、バインドされた変数の値を次のように取得してみましょう。
SQL> SHOW USER
USER is 'TEST'
SQL> DESC TEST
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
NAME VARCHAR2(32)
SQL>
SQL> VARIABLE NAME NVARCHAR2(32)
SQL> EXEC :NAME :='KKKK'
PL/SQL procedure successfully completed.
SQL> SELECT * FROM TEST WHERE NAME=:NAME
no rows selected
SQL>
SQL>SHOW USER
USER is 'SYS'
SQL> COL SQL_ID FOR A14
SQL> COL SQL_TEXT FOR A32
SQL> COL HASH_VALUE FOR 99999999999
SQL> COL BIND_DATA FOR A32
SQL> SELECT SQL_ID
2 ,SQL_TEXT
3 ,LITERAL_HASH_VALUE
4 ,HASH_VALUE
5 ,DBMS_SQLTUNE.EXTRACT_BINDS(BIND_DATA) BIND_DATA
6 FROM V$SQL
7 WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'
SQL_ID SQL_TEXT LITERAL_HASH_VALUE HASH_VALUE BIND_DATA(NAME, POSITION, DUP_PO
-------------- -------------------------------- ------------------ ------------ --------------------------------
0r7m5jyz9ng09 SELECT * FROM TEST WHERE NAME=:N 0 3197778953 SQL_BIND_SET(SQL_BIND(NULL, 1, N
AME ULL, 1, 'NVARCHAR2(128)', 2000,
NULL, NULL, 128, '04-SEP-17', 'K
KKK', ANYDATA()))
SQL> COL SQL_ID FOR A14
SQL> COL SQL_TEXT FOR A32
SQL> COL HASH_VALUE FOR 99999999999
SQL> COL BIND_DATA FOR A32
SQL> SELECT SQL_ID
2 ,SQL_TEXT
3 ,LITERAL_HASH_VALUE
4 ,HASH_VALUE
5 ,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,1).VALUE_STRING BIND_DATA
6 FROM V$SQL
7 WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'
SQL_ID SQL_TEXT LITERAL_HASH_VALUE HASH_VALUE BIND_DATA
-------------- -------------------------------- ------------------ ------------ --------------------------------
0r7m5jyz9ng09 SELECT * FROM TEST WHERE NAME=:N 0 3197778953 KKKK
この時点で変数を指定すると名前割り当てケリーそして、あなたは上記を使用しますSQLステートメントクエリでは、バインド変数の値がまだ残っていることがわかります'ハハハッハッハ'、これは、バインド変数がキャッチされると、特定のルールがあるためです。
1バインド変数を含むsqlステートメントがハード解析される場合
二バインド変数を含む場合sqlソフト解析またはソフト解析でステートメントが繰り返し実行される場合、SQLステートメント内のバインド変数の特定の入力値は、次の場合もあります。オラクルデフォルトでこのキャプチャ操作を除いて、キャプチャ
暗黙のパラメーター_cursor_bind_capture_interval影響力、デフォルト間隔が必要15((900秒は数分に1回行われます
SQL> exec:NAME:= 'ケリー'
PL / SQLプロシージャが正常に完了しました。
SQL> /
ID名
---------- --------------------------------
1000ケリー
SQL>
方法二:お問い合わせwrh $ _sqlstat
$ SQLでにBIND_DATAフィールドの場合SQL解析されると配置されますBIND_DATAフィールドでは、最終的には保存されますwrh $ _sqlstat。オンwrh $ _sqlstat紹介は次のとおりです。
wrh $ _sqlstat SQL実行統計の履歴が含まれ、v $ sqlビューのスナップショットが格納されます。
wrh $ _sqlstat中程度のストレージは$ sqlで実行統計のスナップショットの履歴。ここから、いくつかの履歴バインド変数の値を照会できますが、それも可能です。$ sqlでスナップショット情報はキャプチャされません(キャプチャするためにどのような条件が満たされている場合)。下のスクリーンショットに示すように
SQL> select dbms_sqltune.extract_bind(bind_data, 1).value_string
2 from wrh$_sqlstat
3 where sql_id='0r7m5jyz9ng09'
no rows selected
上記のテストで示されているように、束縛変数の値を取得するこの方法には特定の欠陥があります。$ SQLでスナップショット情報がキャプチャされないため、wrh $ _sqlstat
対応する情報が内部に見つかりませんでした。
ある場合は注意してください1値をバインドするには、次のクエリを使用できます
select dbms_sqltune.extract_bind(bind_data, 1).value_string
from wrh$_sqlstat
where sql_id = '1t2r2p48w4p0g'
もしあれば二値をバインドするには、次のクエリを使用できます
select dbms_sqltune.extract_bind(bind_data, 1).value_string||
'
'--'||dbms_sqltune.extract_bind(bind_data, 2).value_string
from wrh$_sqlstat
where sql_id = '1t2r2p48w4p0g'
複数のバインド変数がある場合は、次のようなものを使用してくださいSQL
select dbms_sqltune.extract_bind(bind_data, 1).value_string
||'-'|| dbms_sqltune.extract_bind(bind_data, 2).value_string
||'-'|| dbms_sqltune.extract_bind(bind_data, 3).value_string
||'-'|| dbms_sqltune.extract_bind(bind_data, 4).value_string
||'-'|| dbms_sqltune.extract_bind(bind_data, 5).value_string
||'-'|| dbms_sqltune.extract_bind(bind_data, 6).value_string
from wrh$_sqlstat
where sql_id = '1t2r2p48w4p0g'
/
方法3:v $ sql_bind_capture
使用するV $ SQL_BIND_CAPTUREバインド変数の値の取得には、いくつかの制限があります。
1、万一に備えてSTATISTICS_LEVELに設定ベーシック、バインドされた変数のキャプチャは閉じられます(STATISTICS_LEVEL初期化パラメータがBASICに設定されている場合、バインドキャプチャは無効になります。)。
二デフォルトは900Secondsは、バインドされた変数の値を1回キャプチャします。_cursor_bind_capture_intervalパラメータ制御。
3、V $ SQL_BIND_CAPTUREビューに記録されているバインド変数は正しいだけですどこ状態の背後にあるバインディングがキャプチャされますが、これには注意が必要です。
ためにDMLオペレーティング、V $ SQL_BIND_CAPTUREバインドされた変数の値を取得できません。
SQL> COL NAME FOR A12
SQL> COL DATATYPE_STRING FOR A24
SQL> COL VALUE_STRING FOR A32
SQL> SELECT NAME,
2 DATATYPE_STRING,
3 VALUE_STRING,
4 MAX_LENGTH,
5 LAST_CAPTURED
6 FROM V$SQL_BIND_CAPTURE
7 WHERE SQL_ID = '1t2r2p48W4P0g'
NAME DATATYPE_STRING VALUE_STRING MAX_LENGTH LAST_CAPT
------------ ------------------------ -------------------------------- ---------- ---------
:NAME NVARCHAR2(128) KD 128 04-SEP-17
SQL>
v $ sql_bind_captureビュー、バインド変数を表示できますが、このビューはそれほど強力ではなく、最後のレコードのバインド変数の値のみをキャプチャできます。また、2つのキャプチャ間の間隔も暗黙的なパラメータです。_cursor_bind_capture_intervalコントロール。デフォルトは900キャプチャは1秒後まで再開されません。に900内部では、バインドされた変数の値の変更はこのビューに反映されません。これで$ sqlで変数値の取得は同じです。
SQL> EXEC:NAME:= 'ケリー'
PL / SQLプロシージャが正常に完了しました。
SQL> /
ID名
---------- --------------------------------
1000ケリー
SQL>
上に示したように、変数に新しい値を割り当ててから、もう一度実行します。上記を実行します。SQL、バインド変数の値を見つけますケリー以前の値K D見つかりません。したがって、これもこのビューの制限です。((実験結果の結果もK D、実験の時間間隔と暗黙のパラメータに応じて_cursor_bind_capture_interval価値は関連している)。
このビューはと結合することができます V $ SQLAREA on(HASH_VALUE、 アドレス)と $ SQLで on(HASH_VALUE、 CHILD_ADDRESS)。
--
SET PAUSE ON
SET PAUSE 'Press Return to Continue'
SET PAGESIZE 60
SET LINESIZE 300
COLUMN sql_text FORMAT A120
COLUMN sql_id FORMAT A13
COLUMN bind_name FORMAT A10
COLUMN bind_value FORMAT A26
SELECT
sql_id,
t.sql_text sql_text,
b.name bind_name,
b.value_string bind_value
FROM
v$sql t
JOIN
v$sql_bind_capture b using (sql_id)
WHERE
b.value_string is not null
AND
sql_id='&sqlid'
/
SELECT
b.sql_id,
t.sql_text sql_text,
b.name bind_name,
b.value_string bind_value
FROM
v$sql t
JOIN
v$sql_bind_capture b on t.hash_value = b.hash_value and t.child_address = b.child_address
WHERE
b.value_string is not null
AND
b.sql_id='&sqlid'
/
方法4:クエリビューDBA_HIST_SQLBIND。
DBA_HIST_SQLBINDビューですV $ SQL_BIND_CAPTURE履歴スナップショット。だからビューからDBA_HIST_SQLBIND複数のバインド変数の値を見つけることができます。ただし、ここにはまだ問題があります。つまり、履歴スナップショットがキャプチャされていない可能性があります。DBA_HIST_SQLBIND下。次のテストに示すように:
SELECT SNAP_ID,
NAME,
POSITION,
VALUE_STRING,
LAST_CAPTURED,
WAS_CAPTURED
FROM DBA_HIST_SQLBIND
WHERE SQL_ID = '&SQL_ID'
AND SNAP_ID = &SNAP_ID
SELECT SNAP_ID,
NAME,
POSITION,
VALUE_STRING,
LAST_CAPTURED,
WAS_CAPTURED
FROM DBA_HIST_SQLBIND
WHERE SQL_ID = '&SQL_ID'
SQL> SELECT SNAP_ID,
2 NAME,
3 POSITION,
4 VALUE_STRING,
5 LAST_CAPTURED,
6 WAS_CAPTURED
7 FROM DBA_HIST_SQLBIND
8 WHERE SQL_ID = '&SQL_ID'
Enter value for sql_id: 1t2r2p48w4p0g
old 8: WHERE SQL_ID = '&SQL_ID'
new 8: WHERE SQL_ID = '1t2r2p48w4p0g'
no rows selected
SQL> exec dbms_workload_repository.create_snapshot()
PL/SQL procedure successfully completed.
SQL> SELECT SNAP_ID,
2 NAME,
3 POSITION,
4 VALUE_STRING,
5 LAST_CAPTURED,
6 WAS_CAPTURED
FROM DBA_HIST_SQLBIND
7 8 WHERE SQL_ID = '&SQL_ID'
Enter value for sql_id: 1t2r2p48w4p0g
old 8: WHERE SQL_ID = '&SQL_ID'
new 8: WHERE SQL_ID = '1t2r2p48w4p0g'
no rows selected
SQL>
方法5:dbms_xplan.display_cursor
sql_id: ライブラリキャッシュ実行プランで指定SQLステートメントの親カーソル。デフォルトはヌル。デフォルト値を使用する場合の現在のセッションの最後の行
SQLステートメントの実行プランが返されます。 問い合わせることができます$ SQLでまたはV $ SQLAREAのSQL_ID取得する列SQLステートメントSQL_ID。
child_number親カーソルの下の子カーソルのシーケンス番号を指定します。つまり、指定された実行プランが返されます。SQLステートメントの子カーソル。デフォルトは0。場合ヌル、
その後、sql_id親カーソルの下にあるすべての子カーソル実行計画が返されます。
フォーマット コントロールSQLステートメントは、プランの出力部分、つまり表示できる部分と表示できない部分を実行します。
select * from table(dbms_xplan.display_cursor('1t2r2p48w4p0g', 0, 'ADVANCED'))
-------------------------------------
SELECT * FROM TEST WHERE NAME=:NAME
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS FULL| TEST | 1 | 31 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / root@xxxxx$1
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
DB_VERSION('11.2.0.1')
ALL_ROWS
OUTLINE_LEAF(@'SEL$1')
FULL(@'SEL$1' 'TEST'@'SEL$1')
END_OUTLINE_DATA
*/
Peeked Binds (identified by position):
--------------------------------------
1 - :NAME (VARCHAR2(30), CSID=873): 'KKK'
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter('NAME'=:NAME)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - 'TEST'.'ID'[NUMBER,22], 'NAME'[VARCHAR2,32]
方法6:10046イベントキャプチャバインド変数
年齢 セッション set events '10046 trace name context forever、level 4' --level = 4有効であることを示しますSQL_TRACEそして、バインド変数をトレースファイルにキャプチャします。
実験はここではスキップされます、実際には ORACLE seq $テーブル更新の頻繁な分析ケース 使用方法を示しました10046イベントは、バインドされた変数の値をキャプチャします。加えてv $ sql、v $ sql_bind_capture、dba_hist_sqlbindクエリのみをキャプチャできますSQL(正確には、どこ条件がキャプチャされた後のバインディング変数)。束縛変数、しかし10046キャプチャすることもできますDMLのSQL値
最後に、必要に応じて、合格することができますシステムセットの変更 '_cursor_bind_capture_interval' = 10バインディング変数キャプチャの時間間隔を変更します。
私について
.................................................。 .................................................。 ........................................。
●作者:小麦草、ネットワークからの議論の内容の一部、侵害がある場合は削除された小麦の苗に連絡してください
●この記事はitpub( http://blog.itpub.net/26736162/abstract/1/ )、ブログガーデン( http://www.cnblogs.com/lhrbest )および個人のWeChat公開番号( xiaomaimiaolhr )同期更新があります
●この記事はitpubのアドレスです。 http://blog.itpub.net/26736162/abstract/1/
●このブログパークのアドレス: http://www.cnblogs.com/lhrbest
●この記事のPDFバージョン、個人プロファイル、および小麦苗クラウドディスクアドレス: http://blog.itpub.net/26736162/viewspace-1624453/
●データベースで書かれたテスト面接の質問と回答: http://blog.itpub.net/26736162/viewspace-2134706/
●今日のDBAコレクションのヘッドラインアドレス: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826
.................................................。 .................................................。 ........................................。
●QQグループ番号: 230161599 (フル) 、618766405
●WeChatグループ:WeChatを追加できます。あなたがグループの場合は、全員をグループに入れます。
●私に連絡してください、QQの友達を追加してください((646634621)。、追加の理由を示します
●2017-09-010:00〜2017-09-3022:00マジックで完了
●記事の内容は、小麦の苗の研究ノートからのものであり、その一部はインターネットから整理されています。侵害や不正がありましたらご了承ください。
●著作権、この記事の共有を歓迎します。ソースを保持してください
.................................................。 .................................................。 ........................................。
●●小麦苗マイクロショップ: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail
●●小麦苗が発行するデータベースシリーズ: http://blog.itpub.net/26736162/viewspace-2142121/
.................................................。 .................................................。 ........................................。
使用する WeChatクライアント 以下のQRコードをスキャンして、WeChatの小麦苗の公開数を追跡します( xiaomaimiaolhr )およびQQグループ(DBAコレクション)、最も実用的なデータベース技術を学びましょう。
WeChatの公開小麦苗数DBA小麦苗のコレクションQQグループ1小麦の苗DBAコレクションQQグループ2小麦苗のマイクロショップ
.................................................。 .................................................。 ........................................。
「ITPUBブログ」から、リンク:http://blog.itpub.net/26736162/viewspace-2144519/、転載が必要な場合は、出典を明記してください。そうしないと、責任を問われます。