SVL_STATEMENTTEXT
시스템에서 실행된 모든 SQL 명령의 완전한 레코드를 가져오려면 SVL_STATEMENTTEXT 뷰를 사용합니다.
SVL_STATEMENTTEXT 뷰에는 STL_DDLTEXT, STL_QUERYTEXT와 STL_UTILITYTEXT 테이블의 모든 행의 조합이 포함됩니다. 이 뷰에는 STL_QUERY 테이블에 대한 조인도 포함됩니다.
SVL_STATEMENTTEXT는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.
이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 SYS_QUERY_HISTORY에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.
테이블 열
열 명칭 | 데이터 유형 | 설명 |
---|---|---|
userid | 정수 | 항목을 생성한 사용자의 ID. |
xid | bigint | 문에 연결된 트랜잭션 ID. |
pid | 정수 | 문의 프로세스 ID. |
레이블 | character(320) | 쿼리 실행에 사용되는 파일의 이름 또는 SET QUERY_GROUP 명령을 사용하여 정의되는 레이블. 쿼리가 파일 기반이 아니거나 QUERY_GROUP 파라미터가 설정되지 않은 경우, 이 필드의 값은 공백입니다. |
starttime | 타임스탬프 | 문이 실행되기 시작한 정확한 UTC 시간으로 정확한 소수부 초를 나타내는 여섯 자리가 포함됩니다. 예: 2009-06-12 11:29:19.131358 |
endtime | 타임스탬프 | 문이 실행이 종료된 정확한 UTC 시간으로 정확한 소수부 초를 나타내는 여섯 자리가 포함됩니다. 예: 2009-06-12 11:29:19.193640 |
SEQUENCE | 정수 | 단일 문에 200자 이상이 포함된 경우, 해당 문에 대해 추가 행이 기록됩니다. 시퀀스 0이 첫 번째 행이고 1이 두 번째 행이 되는 방식입니다. |
type | varchar(10) | SQL 문의 유형: QUERY , DDL 또는 UTILITY . |
텍스트 | character(200) | 200자씩 증가하는 SQL 텍스트. 이 필드에는 백슬래시(\\ ) 및 줄 바꿈(\n ) 등의 특수 문자가 포함될 수 있습니다. |
샘플 쿼리
다음 쿼리는 2009년 6월 16일에 실행된 DDL 문을 반환합니다.
select starttime, type, rtrim(text) from svl_statementtext where starttime like '2009-06-16%' and type='DDL' order by starttime asc; starttime | type | rtrim ---------------------------|------|-------------------------------- 2009-06-16 10:36:50.625097 | DDL | create table ddltest(c1 int); 2009-06-16 15:02:16.006341 | DDL | drop view alltickitjoin; 2009-06-16 15:02:23.65285 | DDL | drop table sales; 2009-06-16 15:02:24.548928 | DDL | drop table listing; 2009-06-16 15:02:25.536655 | DDL | drop table event; ...
저장된 SQL 재구성
SVL_STATEMENTTEXT의 text
열에 저장된 SQL을 재구성하려면 SELECT 문을 실행하여 text
열의 1개 이상의 부분에서 SQL을 생성합니다. 재구성된 SQL을 실행하기 전에 모든 (\n
) 특수 문자를 줄 바꿈으로 바꿉니다. 다음 SELECT 문의 결과는 query_statement
필드에서 재구성된 SQL의 행입니다.
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement from SVL_STATEMENTTEXT where pid=pg_backend_pid();
예를 들어 다음 쿼리는 열 3개를 선택합니다. 쿼리 자체는 200자 이상이며 SVL_STATEMENTTEXT에 여러 부분으로 저장됩니다.
select 1 AS a0123456789012345678901234567890123456789012345678901234567890, 2 AS b0123456789012345678901234567890123456789012345678901234567890, 3 AS b012345678901234567890123456789012345678901234 FROM stl_querytext;
이 예제에서 이 쿼리는 SVL_STATEMENTTEXT의 text
열에 많은 두 부분(행)으로 저장됩니다.
select sequence, text from SVL_STATEMENTTEXT where pid = pg_backend_pid() order by starttime, sequence;
sequence | text ----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234 1 | \nFROM stl_querytext;
STL_STATEMENTTEXT에 저장된 SQL을 재구성하려면 다음 SQL을 실행합니다.
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS text from SVL_STATEMENTTEXT where pid=pg_backend_pid();
클라이언트에서 재구성된 SQL을 사용하려면 모든 (\n
) 특수 문자를 줄 바꿈으로 바꿉니다.
text ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;