설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 72건, 최근 0 건
   

쉘을 이용하여 sql 문 반복수행하기

글쓴이 : PostgresDBA 날짜 : 2015-01-01 (목) 21:59 조회 : 6537
2015 을미년 첫 팁을 올립니다. 올해는 다들 소망하시는 일 모두 이루시길 빕니다.
---------------------------------------------------------------
loop.sql 화일은 현재시각을 표시하는 sql 문이 담겨져 있습니다.
이 구문을, 쉘스크립트를 이용하여 반복수행하는 스크립트를 만들도록 해보겠습니다.

이 쉘스크립트의 핵심은 세션을 한번만 생성한후 sql 문을 반복 수행한다는 점입니다.
즉, sql 반복수행을 위해 매번 세션을 새로 생성하지 않습니다. (logon/off 반복안함)

[enterprisedb@pgdbserver:/opt/PostgresPlus/9.3AS/oradba]$ cat loop.sql 
select current_timestamp;
[enterprisedb@pgdbserver:/opt/PostgresPlus/9.3AS/oradba]$ cat loop.sh 
#!/bin/sh
SLEEP_SEC=1
LOOP_MAX=3
COUNT=0

echo "\pset pager off"
while [ $COUNT -lt $LOOP_MAX ]
do
        echo "\i $1"
        sleep $SLEEP_SEC
        COUNT=`expr $COUNT + 1`
done
[enterprisedb@pgdbserver:/opt/PostgresPlus/9.3AS/oradba]$ ./loop.sh loop.sql | psql -U scott -d scottdb -X
Pager usage is off.
        current_timestamp         
----------------------------------
 01-JAN-15 21:54:48.373776 +09:00
(1 row)

        current_timestamp         
----------------------------------
 01-JAN-15 21:54:49.371446 +09:00
(1 row)

        current_timestamp         
----------------------------------
 01-JAN-15 21:54:50.378325 +09:00
(1 row)

[enterprisedb@pgdbserver:/opt/PostgresPlus/9.3AS/oradba]$ 


처음부터 2015-01-08 (목) 17:51
direction을 이런식으로 이용하시다니... 좋은 팁 감사합니다. 2015년 좋은 한해 되세요.
댓글주소
PostgresDBA 2015-08-13 (목) 17:10
참고) 아래는 오라클 예제
MSSTDB1:[/ora11g/dba/oradba]cat loop.sh
#!/usr/bin/ksh
SLEEP_SEC=1
LOOP_MAX=3
COUNT=0

while [ $COUNT -lt $LOOP_MAX ]
do
        echo "@$1"
        sleep $SLEEP_SEC
        COUNT=`expr $COUNT + 1`
done
MSSTDB1:[/ora11g/dba/oradba]cat loop.sql
INSERT INTO dbadm.T_0814 SELECT
SYSDATE SAMPLE_TIME, INST_ID, MACHINE,
COUNT(*) TOTAL_CNT,
SUM(CASE WHEN STATUS='ACTIVE' THEN 1 ELSE 0 END) ACTIVE_CNT,
SUM(CASE WHEN STATUS='ACTIVE' THEN 0 ELSE 1 END) INACTIVE_CNT
FROM GV$SESSION WHERE machine in ('MSFRWS1','MSFRWS2',
'MSWAS01',
'MSWAS02') AND
SYSDATE BETWEEN TO_DATE('20150814 080000','YYYYMMDD HH24MISS') AND TO_DATE('20150817 110000','YYYYMMDD HH24MISS')
AND
TO_CHAR(sysdate,'HH24:MI:SS')  BETWEEN '09:00:00' AND '11:00:00'
GROUP BY SYSDATE, INST_ID, MACHINE;
commit;
MSSTDB1:[/ora11g/dba/oradba]./loop.sh loop.sql | sqlplus -s oradba/xxxx
댓글주소
   

postgresdba.com