[Oracle] 현재 발생하는 DB의 악성 SQL을 리눅스 쉘로 확인하기

·2025년 9월 9일

오라클 관리

목록 보기
119/163

[실습1] Linux shell 명령어로 악성 SQL 한번에 찾는 방법


■ 실습:  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"

0개의 댓글