Database초보우낙
예제22. 테이블 스페이스의 사용량 시각화 구현하기 (미완성) 본문
예제22. 테이블 스페이스의 사용량 시각화 구현하기
sys 유져로 접속해서 테이블 스페이스의 사용량을 확인합니다.
SELECT
df.tablespace_name AS "Tablespace",
ROUND((SUM(df.bytes) - SUM(fs.bytes)) / SUM(df.bytes) * 100, 2) AS "Used Percentage"
FROM
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_data_files
GROUP BY tablespace_name) df
LEFT JOIN
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_free_space
GROUP BY tablespace_name) fs
ON
df.tablespace_name = fs.tablespace_name
GROUP BY
df.tablespace_name
ORDER BY
"Used Percentage" DESC;
위의 쿼리문의 결과가 출력될 수 있도록 쉘 스크립트를 작성하시오!
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl
sql_query="SET PAGESIZE 60;
SET LINESIZE 300;
SELECT
df.tablespace_name AS \\"Tablespace\\",
ROUND((SUM(df.bytes) - SUM(fs.bytes)) / SUM(df.bytes) * 100, 2) AS \\"Used Percentage\\"
FROM
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_data_files
GROUP BY tablespace_name) df
LEFT JOIN
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_free_space
GROUP BY tablespace_name) fs
ON
df.tablespace_name = fs.tablespace_name
GROUP BY
df.tablespace_name
ORDER BY
\\"Used Percentage\\" DESC;
EXIT;"
# SQLPLUS 실행
echo "$sql_query" | sqlplus -s system/oracle_4U
위의 코드 실행
파이썬에서 위의 쉘스크립트를 호출하여 출력합니다
import paramiko
import matplotlib.pyplot as plt
# 리눅스 서버 정보
hostname = '192.168.56.104'
username = 'oracle'
password = 'oracle'
# bash 스크립트의 경로
script_path = "/home/oracle/ts.sh"
# SSH 클라이언트 객체 생성
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
# bash 스크립트를 실행
stdin, stdout, stderr = ssh.exec_command(f'sh {script_path}')
# 결과 읽기
output = stdout.read().decode('utf-8')
print(output)
SQL —> 리눅스 쉘 —> 파이썬 코드 —> 시각화 —> 홈페이지 생성
OUTPUT 변수 담긴 위의 데이터를 파이썬 리스트에 담아내기
문자열에서 양쪽 공백을 제거합니다
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
print(output.strip() )
output 변수에서 출력되는 문자열을 엔터(\n) 로 구분해서 리스트의 요소로 구성해
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
print(output.strip().split('\\n') )
위의 코드의 결과에서 컬럼명을 제거하는 코드
a = [ 'kkk','bbb','ccc','ddd']
a[2:]
컬럼명과 점선을 빼고 출력합니다. 컬럼명은 a 리스트의 첫번째 요소이고 점선은 a 리스트의 두번째 요소이므로 다음과 같이 작성합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
print(a[2:])
위의 결과를 a2 라는 변수에 담고 출력합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
print(a2)
a2 리스트 변수의 요소들을 for loop문으로 하나씩 출력하시오
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
for i in a2:
print(i)
출력되는 결과에서 테이블 스페이스 이름만 출력하기
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
for i in a2:
print(i.split()[0])
두번째 컬럼만 가져오게 하시오
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
for i in a2:
print(i.split()[1])
두개를 같이 출력합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
for i in a2:
print(i.split()[0], i.split()[1] )
위의 결과는 둘다 문자로 출력됩니다. 숫자 부문만 숫자형으로 출력되게합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
for i in a2:
print(i.split()[0], float(i.split()[1]) )
위의 결과를 소괄호로 묶어서 data 라는 비어있는 리스트에 추가합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
data = [ ] # data 라는 비어있는 리스트를 생성합니다.
for i in a2:
data.append( (i.split()[0], float(i.split()[1])) ) # data 리스트에 추가합니다.
print(data)
원형 그래프를 하나의 화면에 5개를 동시에 띄우기 위한 코드를 작성합니다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) ) # 여러 그래프를 동시에 생성
다음의 코드를 구현하기 위한 파이썬 함수 enumerate 함수 이해하기
enumerate 함수는 리스트의 요소의 인덱스 번호를 출력해줄 수 있는 함수
for k, i in enumerate(data):
print(k, i)
위의 data 를 이용해서 원형 그래프를 생성합니다.
output = """
Tablespace Used Percentage
------------------------------ ---------------
SYSTEM 99.72
SYSAUX 94.68
USERS 81.25
EXAMPLE 78.75
UNDOTBS1 6.44
"""
a=output.strip().split('\\n')
a2 = a[2:] # a 리스트 변수의 인덱스번호 2번째부터 끝가지 잃어서 a2 변수를 구성합니다.
data = [ ] # data 라는 비어있는 리스트를 생성합니다.
for i in a2:
data.append( (i.split()[0], float(i.split()[1])) ) # data 리스트에 추가합니다.
print(data)
원형 그래프를 하나의 화면에 5개를 동시에 띄우기 위한 코드를 작성합니다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) ) # 여러 그래프를 동시에 생성
다음의 코드를 구현하기 위한 파이썬 함수 enumerate 함수 이해하기
enumerate 함수는 리스트의 요소의 인덱스 번호를 출력해줄 수 있는 함수
for k, i in enumerate(data):
print(k, i)
위의 data 를 이용해서 원형 그래프를 생성합니다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) )
for i, (name, percent) in enumerate(data):
axes[i].pie([percent, 100-percent] )
각각의 그래프에 라벨과 사용율을 표시 합니다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) )
for i, (name, percent) in enumerate(data):
axes[i].pie([percent, 100-percent], labels=['Used','Free'], autopct='%1.1f%%' )
위의 원형 그래프에 각각의 제목을 해당 테이블 스페이스 이름으로 붙이시오
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) )
for i, (name, percent) in enumerate(data):
axes[i].pie([percent, 100-percent], labels=['Used','Free'], autopct='%1.1f%%' )
axes[i].set_title(name)
출력되는 그래프를 더 보기 좋게 하는데 그래프들끼리 서로 겹치지 않도록 적절하게 레이아웃을 조정합니다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots( 1, len(data), figsize=(10,3) )
for i, (name, percent) in enumerate(data):
axes[i].pie([percent, 100-percent], labels=['Used','Free'], autopct='%1.1f%%' )
axes[i].set_title(name)
plt.tight_layout()
그래프를 화면에 표시하는 코드를 맨 아래에 추가하시오 !
'파이썬' 카테고리의 다른 글
24. LAB128 활용팁 (2) | 2024.04.22 |
---|---|
23. 오라클 성능 분석 툴 lab128 설치 (0) | 2024.04.22 |
21. 아카이브 로그 파일이 꽉 찼는지 편하게 시각화해서 모니터링 (0) | 2024.04.18 |
20. 파이썬으로 alert log file 분석하기 1 (0) | 2024.04.17 |
19. 파이썬의 문자열 함수를 이용하여 alert logfile 분석하기 (0) | 2024.04.17 |