SQL 문 실행 결과 파싱

2021. 12. 23.·Linux

SQL*Plus 기반의 배치 실행 결과를 분석하기 위해 SQL 문의 실행 결과를 파싱할 수 있는 간단한 awk 스크립트를 작성합니다.

 

실행 결과를 생성하기 위해 아래 스크립트를 실행하겠습니다.

SPOOL log.txt

DROP TABLE T1 PURGE;

CREATE TABLE T1 AS SELECT ROWNUM AS C1 FROM XMLTABLE ('1 to 10000');

INSERT INTO T1 SELECT * FROM T1;

UPDATE T1 SET C1 = 1;

DELETE FROM T1 WHERE C1 = 1;

COMMIT;

SPOOL OFF

 

아래와 같은 실행 결과가 생성됩니다.

SQL> 
SQL> DROP TABLE T1 PURGE;

Table dropped.

Elapsed: 00:00:00.04
SQL> 
SQL> CREATE TABLE T1 AS SELECT ROWNUM AS C1 FROM XMLTABLE ('1 to 10000');

Table created.

Elapsed: 00:00:00.02
SQL> 
SQL> INSERT INTO T1 SELECT * FROM T1;

10000 rows created.

Elapsed: 00:00:00.02
SQL> 
SQL> UPDATE T1 SET C1 = 1;

20000 rows updated.

Elapsed: 00:00:01.66
SQL> 
SQL> DELETE FROM T1 WHERE C1 = 1;

20000 rows deleted.

Elapsed: 00:00:00.02
SQL> 
SQL> COMMIT;

Commit complete.

Elapsed: 00:00:00.00
SQL> 
SQL> SPOOL OFF

 

아래 내용으로 log.awk 파일을 생성하겠습니다.

BEGIN {
    result = 0;
}
function f1 (sql, idx) {
    split($0, a_sql)
    printf "%s,%s,%s,%s,", FILENAME, FNR, sql, a_sql[idx]
    result = 1
}
{
    if (match($0, /SQL>[[:blank:]]+CREATE[[:space:]]+TABLE/) != 0) f1("CREATE TABLE", 4)

    if (match($0, /SQL>[[:blank:]]+INSERT/) != 0) f1("INSERT", 4)

    if (match($0, /SQL>[[:blank:]]+UPDATE/) != 0) f1("UPDATE", 3)

    if (match($0, /SQL>[[:blank:]]+DELETE/) != 0) f1("DELETE", 4)

    if (match($0, /Elapsed:/) != 0 && result) { 
        split($0, a_elapsed)
        printf "%s\n", a_elapsed[2]
        result = 0
    }
}

 

아래와 같이 awk 스크립트를 사용할 수 있습니다.

$ awk -f log.awk log.txt
log.txt,8,CREATE TABLE,T1,00:00:00.02
log.txt,14,INSERT,T1,00:00:00.02
log.txt,20,UPDATE,T1,00:00:01.66
log.txt,26,DELETE,T1,00:00:00.02
저작자표시 비영리 변경금지 (새창열림)
'Linux' 카테고리의 다른 글
  • Alert 로그 AWK 스크립트
  • AWK 날짜 값과 숫자 값 포맷팅
  • rlwrap
  • SQL 문 반복 수행 스크립트
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Oracle (166)
        • SQL (32)
        • PLSQL (10)
        • Performance (72)
        • Administration (36)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (4)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 공지사항

  • 최근 글

  • 최근 댓글

  • 인기 글

  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • hELLO· Designed By정상우.v4.10.0
정희락
SQL 문 실행 결과 파싱
상단으로

티스토리툴바