database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41344 게시물 읽기
No. 41344
lgwr 트레이스파일을 Insert 하는 방법이 있을까요
작성자
검콤이(검콤이)
작성일
2017-02-28 17:40:40ⓒ
2017-02-28 17:40:57ⓜ
조회수
994

 안녕하세요.

질문 하나 드립니다ㅠㅠ

 

 

 

*** 2016-06-25 02:00:10.357

Warning: log write elapsed time 1996ms, size 3KB

 

*** 2016-06-25 06:01:56.078

Warning: log write elapsed time 766ms, size 13963KB

 

*** 2016-06-25 06:02:04.582

Warning: log write elapsed time 505ms, size 8900KB

 

lgwr.trc의 내용인데요

이걸 테이블에 넣으려고 합니다.

컬럼1 : *** 2016-06-25 06:02:04.582

컬럼2 : Warning: log write elapsed time 505ms, size 8900KB

 

이렇게 넣고 싶은데.. 혹시 방법이 있을까요??

고수님들 도와주세요 

감사합니다.

 

이 글에 대한 댓글이 총 8건 있습니다.
가장 좋은 방법은 external table과 pipeline function을 이용해서 직접 file에 접근/파싱 하는 방법이 구요. ( 참고 사이트 : http://www.oracle-developer.net/display.php?id=516)
 
 
그냥 손쉽게 한두번 실행 하고 싶은 경우는 아래처럼 insert into statement를 shell에서 생성 해서 실행해주는것도 방법 입니다.
 
cat lgwr.trc | awk "/^\*/ { ts=\$0 } /log write elapsed time/ { print \"insert into mylogdata values (\" \"'\"  ts \"','\"  \$0 \"');\" }" | sqlplus id/pass
고서진(longflat)님이 2017-03-01 09:53:26에 작성한 댓글입니다.

 헐.. 대박..

정말 감사드립니다!!!

그런데.. 아라 SHELL 에서 하게되면 무조건 그 파일이 통째로 다시 다 들어가게 되는데..

25일까지 전부 넣었다면 30일에 다시 넣고 싶으면 추라 5일분만 집어 넣는건 불가능한거죠~?

검콤이(검콤이)님이 2017-03-03 10:50:50에 작성한 댓글입니다.
이 댓글은 2017-03-03 10:53:56에 마지막으로 수정되었습니다.
아래와 같은 shell script를 사용하면 가능하겠습니다.
 
latest=$(printf "set head off\n set feedback off\n select max(col1)  from mylogdata;\n" | sqlplus -S id/pass | tail -1)
awk -v v_latest="$latest" "/^\*/ { ts=\$0 } /log write elapsed time/ { if (ts > v_latest) print \"insert into mylogdata values (\" \"'\"  ts \"','\"  \$0 \"');\" }" lgwr.trc | sqlplus id/pass
고서진(longflat)님이 2017-03-04 10:13:11에 작성한 댓글입니다.
이 댓글은 2017-03-04 10:14:47에 마지막으로 수정되었습니다.

 감사합니다ㅠㅠ

 

자꾸 질문 드려서 죄송합니다ㅜㅜ

한가지 문제점이 항상 첫줄에는

ACTION ~ 으로 시작하는 문자가 들어갑니다..

 

 

       SUBSTR(COLUMN2,32,20) AS "TIME",

       SUBSTR(COLUMN2,45,20) AS "SIZE"

       FROM SYSTEM.MYLOGDATA WHERE ROWNUM <=20;  2    3    4  

 

DATE     TIME      SIZE

---------------------------- ---------------------------------------- ----------------------------------------

 ACTION NAME:(      2557ms, size 100KB       100KB

 2016-06-25 01      1366ms, size 1KB       1KB

 2016-06-25 02      1996ms, size 3KB       3KB

 2016-06-25 06      766ms, size 13963KB      13963KB

 2016-06-25 06      505ms, size 8900KB      8900KB

 2016-06-25 06      555ms, size 8117KB      8117KB

 2016-06-25 06      513ms, size 10420KB      10420KB

 2016-06-25 06      585ms, size 11076KB      11076KB

 2016-06-25 06      601ms, size 10778KB      10778KB

 2016-06-25 06      591ms, size 9303KB      9303KB

 2016-06-25 06      533ms, size 8748KB      8748KB

 2016-06-25 09      546ms, size 6KB      6KB

 2016-06-25 10      2670ms, size 3KB       3KB

 2016-06-25 12      4387ms, size 2KB       2KB

 2016-06-25 12      517ms, size 4KB      4KB

 2016-06-25 14      3158ms, size 5KB       5KB

 2016-06-25 15      3316ms, size 6KB       6KB

 2016-06-25 19      610ms, size 1KB      1KB

 2016-06-25 20      596ms, size 4KB      4KB

 2016-06-25 20      3046ms, size 3KB       3KB

 

20 rows selected.

 

 

1번재는 날짜 시까지 / 2번째는 걸린시간(ms)  / 마지막은 사이즈만

이렇게 출력하고 싶은데

ACTON 부분 때문에 애매하네요ㅠㅠ

두번째는 ',' 부터 지우고 싶은데 어떻게하는지 가이드좀 주실 수 있을까요??

감사합니다

 

 

검콤이(검콤이)님이 2017-03-06 16:25:04에 작성한 댓글입니다.
이 댓글은 2017-03-06 16:32:54에 마지막으로 수정되었습니다.
문자열에서 특정 부분만 잘라 내고 싶을때는 regexp를 쓰면 편리합니다.
 
 
SELECT
    regexp_replace('*** 2016-06-25 02:00:10.357', '.*([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}).*', '\1')
    ,regexp_replace('Warning: log write elapsed time 505ms, size 8900KB', '.* ([[:digit:]]+)ms.*', '\1')
    from dual;
 
 
ACTION NAME이 왜 들어가는지는 잘모르겠네요. 해당 문자열이 lgwr.trc 파일에 포함되어 있나요? 해당 date column의 잘리지 않은 온전한 값이 어떻게 되나요?
고서진(longflat)님이 2017-03-07 11:02:33에 작성한 댓글입니다.

 lgwr.trc 의 내용입니다.

 

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

ORACLE_HOME = /oracle/product/11g/dbhome_1

System name:    AIX

Node name:      cidb1

Release:        1

Version:        6

Machine:        00F655404C00

Instance name: ciedb

Redo thread mounted by this instance: 1

Oracle process number: 15

Unix process pid: 12845282, image: oracle@cidb1 (LGWR)

 

 

*** 2016-06-25 01:18:35.623

*** SESSION ID:(12512.1) 2016-06-25 01:18:35.623

*** CLIENT ID:() 2016-06-25 01:18:35.623

*** SERVICE NAME:(SYS$BACKGROUND) 2016-06-25 01:18:35.623

*** MODULE NAME:() 2016-06-25 01:18:35.623

*** ACTION NAME:() 2016-06-25 01:18:35.623

 

Warning: log write elapsed time 2557ms, size 100KB

 

*** 2016-06-25 01:40:35.526

Warning: log write elapsed time 1366ms, size 1KB

 

*** 2016-06-25 02:00:10.357

Warning: log write elapsed time 1996ms, size 3KB

 

*** 2016-06-25 06:01:56.078

Warning: log write elapsed time 766ms, size 13963KB

 

ACTION ~ 이 들어가 있습니다ㅠ

 

온전한 값은

 

 

 

COLUMN1                            COLUMN2

----------------------------------------------                                              ------------------------------------------------------------

*** ACTION NAME:() 2016-06-25 01:18:35.623     Warning: log write elapsed time 2557ms, size 100KB

*** 2016-06-25 01:40:35.526                 Warning: log write elapsed time 1366ms, size 1KB

 

이렇게 되어 있습니다ㅠ

 

검콤이(검콤이)님이 2017-03-07 12:27:39에 작성한 댓글입니다.

 감사합니다.

 

알려주신데로 해보니

 

 

SET LINESIZE 200

COL DATE FOR A30

COL TIME(ms) FOR A30

COL SIZE(KB) FOR A30

  SELECT

    regexp_replace(COLUMN1, '.*([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}).*', '\1') as "DATE"

    ,regexp_replace(COLUMN2, '.* ([[:digit:]]+)ms.*', '\1') as "TIME(ms)"

    ,regexp_replace(COLUMN2, '.* ([[:digit:]]+)KB.*', '\1') as "SIZE(KB)"

 

 

이렇게 하니까 비슷한 결과를 얻을 수 있었습니다.

감사드립니다!!

검콤이(검콤이)님이 2017-03-07 13:52:06에 작성한 댓글입니다.

awk pattern중 /^\*/ 를 /^\*\*\* 20/ 로 변경하면 될것 같군요.

고서진(longflat)님이 2017-03-08 15:14:52에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41347os시간 관련 질문입니다.
goblin
2017-03-03
813
41346도로주소 매핑테이블 업데이트시 애로사항입니다. [1]
기쁨이
2017-03-03
898
41345Oracle 동작중에.. 12152, 3114, 3113 error 가 나옵니다.. [1]
이현석
2017-03-02
751
41344lgwr 트레이스파일을 Insert 하는 방법이 있을까요 [8]
검콤이
2017-02-28
994
41342Synonym 삭제 질문 SQL 문의 [1]
검콤이
2017-02-24
1077
41341회사 DB 개인용 백업 질문입니다 [3]
구영곤
2017-02-22
960
41340ORACLE DB에서 MS-SQL Procedure 호출 관련 문의
원성희
2017-02-22
882
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.088초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다