
■ 실습: orange 말고 리눅스 명령어와 sql 을 이용해서 악성 sql을 한번에 찾는 방법
(dba에게 유용한 스크립트)
#1. scott 유져로 접속해서 악성 sql을 수행합니다.
select count(*)
from emp, emp, emp, emp, emp, emp, emp, emp, emp;
#2. 리눅스에서 현재 cpu 를 많이 사용하고 있는 프로세서 번호를 알아냅니다.
$ top | head -8 | tail -1 | awk '{print $1}'
#3. 위에서 출력되고 있는 프로세서 번호를 변수에 담고 echo 로 출력하시오 !
$ vi cpu_top_sql.sh
pid=`top | head -8 | tail -1 | awk '{print $1}'`
echo $pid
#4. 위의 스크립트를 이용해서 완성한 cpu 를 과도하게 사용하는 프로세서의 SQL을
출력하는 쉘 스크립트를 작성하고 수행하시오
pid=`top | head -8 | tail -1 | awk '{print $1}'`
echo $pid
output=$(sqlplus -s sys/oracle_4U as sysdba <<EOF
Select a.sql_text txt
from v\$sqlarea a, v\$session b, v\$process c
where c.spid = '$pid'
and c.addr = b.paddr
and b.sql_address = a.address
and b.sql_hash_value = a.hash_value;
EOF
)
echo $output
다른 코드
#!/bin/bash
pid=$(top | head -8 | tail -1 | awk '{print $2}')
echo "PID: $pid"
output=$(sqlplus -s sys/oracle_4U as sysdba <<EOF
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON
SET VERIFY OFF
SELECT a.sql_text
FROM v\$sqlarea a, v\$session b, v\$process c
WHERE c.spid = '$pid'
AND c.addr = b.paddr
AND b.sql_address = a.address
AND b.sql_hash_value = a.hash_value;
EOF
)
echo "--- 실행된 SQL ---"
echo "$output"
