import pandas as pd import matplotlib.pyplot as plt import numpy as np import paramiko # SSH 접속을 위한 라이브러리를 임폴트 합니다.
while True: print( """ === dba 작업을 편하게 수행하기 위한 스크립트 총모음 ====
0. 프로그램을 종료하려면 0번을 누르세요. 1. alert log file 을 분석해서 로그 스위치 주기 확인 2. alert log file에서 발생한 오라클 에러번호와 건수 확인 3. Fast Recovery Area 영역의 사용률 확인 4. tablespace 사용량 확인 5. temp tablespace와 undo tablespace 사용량 확인
""")
num = int( input('원하는 번호를 입력하세요 ~' ) ) if num ==1: # 리눅스 서버 정보 hostname = '192.168.56.104' # 서버의 접속 가능한 IP 주소 username = 'oracle' # 접속할 유져명 password = 'oracle' # 접속할 유져의 패스워드 # bash 스크립트의 경로 script_path = "/u01/app/oracle/diag/rdbms/orcl/orcl/trace/a.sh" # 실행할 bash 스크립트의 경로입니다. # SSH 클라이언트 객체 생성 ssh = paramiko.SSHClient() # ssh 클라이언트 객체를 생성합니다. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # host key policy 를 자동으로 추가하도록 설정합니다. # 리눅스 서버에 접속 ssh.connect(hostname, username=username, password=password) # bash 스크립트를 실행하고 그 결과를 저장합니다. stdin, stdout, stderr = ssh.exec_command(f'sh {script_path}') # 결과를 바이트에서 문자열로 디코드 output = stdout.read().decode('utf-8') # 줄바꿈 문자를 기준으로 문자열을 분할하여 리스트로 변환 output_list = output.split('\n') # 마지막 요소가 빈 문자열일 경우 제거 if output_list[-1] == '': output_list.pop() df = pd.DataFrame( output_list, columns=['col1']) df['col1'] = pd.to_datetime(df['col1']) # 문자형을 날짜형으로 변환합니다. df['time_diff'] = df['col1'].diff() # time_diff 라는 컬럼을 추가하는데 print(df) break elif num ==2: with open('C:\\Users\\itwill\\Desktop\\alert_orcl.log', 'r') as file: alert = file.read() file.close() alert2 = alert.split() # alert 문자열에 어절별로 분리해서 리스트 요소로 구성함 k = []
for i in alert2: if 'ora-' in i.lower(): k.append(i)
df = pd.DataFrame( k, columns = ['col1']) # k 리스트를 가지고 df 라는 판다스 데이터 # 프레임을 생성하는데 컬럼을 col1로 지정
from pandasql import sqldf pysqldf = lambda q : sqldf( q, globals() ) q = """ select col1, count(*) from df group by col1 order by 2 desc; """ print(pysqldf(q)) break elif num == 3: # 리눅스 서버 정보 hostname = '192.168.56.104' # 서버의 접속 가능한 IP 주소 username = 'oracle' # 접속할 유져명 password = 'oracle' # 접속할 유져의 패스워드
# bash 스크립트의 경로 script_path = "/home/oracle/fra.sh" # 실행할 bash 스크립트의 경로입니다.
# SSH 클라이언트 객체 생성 ssh = paramiko.SSHClient() # ssh 클라이언트 객체를 생성합니다. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # host key policy 를 자동으로 추가하도록 설정합니다.
# 리눅스 서버에 접속 ssh.connect(hostname, username=username, password=password)
# bash 스크립트를 실행하고 그 결과를 저장합니다. stdin, stdout, stderr = ssh.exec_command(f'sh {script_path}')
# 결과를 바이트에서 문자열로 디코드 output = stdout.read().decode('utf-8') # 줄바꿈 문자를 기준으로 문자열을 분할하여 리스트로 변환 output_list = output.split('\n')
# 마지막 요소가 빈 문자열일 경우 제거 if output_list[-1] == '': output_list.pop()
used_percentage = float(output_list[0])
# 원형 그래프 데이터 sizes = [used_percentage, 100 - used_percentage] # 사용된 부분과 남은 부분 labels = ['Used', 'Free'] colors = ['#ff9999','#66b3ff'] # 색상 선택
# 원형 그래프 생성 (여기서 그래프 크기를 조정합니다) plt.figure(figsize=(4, 4)) # 그래프 크기를 작게 설정 (이전에는 7x7이었음) plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90) plt.axis('equal') # 원형 유지를 위해 같은 축 스케일 사용
# 원형 그래프 표시 plt.title('Oracle Fast Recovery Area') plt.show() break elif num == 4: # 리눅스 서버 정보 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')
lines = output.strip().split('\n')[2:] data = [] # data 라는 비어있는 리스트를 생성합니다. for line in lines: # data 리스트에 추가합니다. data.append((line.split()[0], float(line.split()[1]))) 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%%', colors=['#1E90FF', '#B22222'] ) axes[i].set_title(name) fig.suptitle('Oracle Tablespace Usage') plt.tight_layout() plt.show() break elif num == 5: # 리눅스 서버 정보 hostname = '192.168.56.104' username = 'oracle' password = 'oracle' # bash 스크립트의 경로 script_path = "/home/oracle/ts2.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') a = output.strip().split('\n') a3 = a[2:] data = [] for i in a3: data.append( ( i.split()[0], i.split()[1]) ) fig, axes = plt.subplots(1, len(data), figsize=(10,3) ) for i , (name, percent) in enumerate(data): axes[i].pie([percent,100- float(percent)], labels=['Used','Free'], autopct='%1.1f%%', colors=['#1E90FF', '#B22222']) axes[i].set_title(name) break else: break |