V$SQL BIND CAPTURE

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 기본 정보

[편집] 개요

V$SQL_BIND_CAPTURE 뷰는 SQL 커서에서 Bind Variable이 사용된 경우 해당 Bind Variable의 이름과 유형, 값 등을 캡쳐한 정보를 제공한다.

[편집] 지원

10g 이상

[편집] 컬럼

이름 유형 설명
ADDRESS 8) Parent Cursor의 Address
HASH_VALUE NUMBER Parent Cursor의 Hash Value.
SQL_ID VARCHAR2(13) Unique SQL ID. V$SQL의 SQL_ID 컬럼과 조인 가능하다.
CHILD_ADDRESS 8) Child Cursor의 Address
CHILD_NUMBER NUMBER Child Cursor의 번호.
NAME VARCHAR2(30) Bind Variable의 이름. 예: :name
POSITION NUMBER SQL 문장에서 Bind Variable의 위치. 1부터 시작한다.
DUP_POSITION NUMBER Bind Variable의 이름이 중복되는 경우 최초 Bind Variable의 위치를 가리킨다.
DATATYPE NUMBER Bind Variable의 데이터 유형. 오라클 내부적으로 사용되는 숫자값이다.
DATATYPE_STRING VARCHAR2(15) Bind Variable의 데이터 유형에 대한 인식 가능한 이름. 예:NUMBER, VARCHAR2
CHARACTER_SID NUMBER National character set identifier
PRECISION NUMBER 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 ANYDATA Bind 값에 대한 Sys.AnyData에 의한 표현


[편집] 참고 사항

[편집] Bind Capture가 이루어지는 시점

Oracle은 다음과 같은 시점에 Bind Capture를 수행한다.

  • SQL 문장이 Hard Parse되는 시점에 Bind Variable이 사용되고 Bind 값이 부여된 경우
  • Bind Capture가 이루어진 이후, Bind 값이 변경된 경우. 단, 오라클의 성능상의 오버헤드를 최소화기 위해 15분 이상의 간격을 두고 Capture를 수행한다. 즉, Bind Capture된 값이 항상 최신의 값을 나타내는 것이 아니라는 것에 주의해야 한다.

[편집] Bind 값 알아내기

Oracle 10g 이전에는 특정 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 값

[편집] 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

[편집] 외부 참조

  1. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2114.htm