def db_growth(self): query = "set head off \n \ set feedback off \n \ column TOTAL_UTILIZADO_SIZE format 999999999999999 \n \ SELECT TRUNC(SUM((A.BYTES-B.BYTES))) TOTAL_UTILIZADO_SIZE \n \ FROM \n \ ( SELECT x.TABLESPACE_NAME, SUM(x.BYTES) BYTES \n \ FROM DBA_DATA_FILES x,DBA_TABLESPACES y \n \ WHERE y.CONTENTS <>'UNDO' \n \ AND x.TABLESPACE_NAME=y.TABLESPACE_NAME \n \ GROUP BY x.TABLESPACE_NAME) A, \n \ ( SELECT TABLESPACE_NAME, SUM(BYTES) BYTES \n \ FROM DBA_FREE_SPACE \n \ GROUP BY TABLESPACE_NAME) B \n \ WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME;" if self.user.lower() == 'sys': result = Utils.run_sqlplus(self.password, self.user, self.sid, query, True, True) else: result = Utils.run_sqlplus(self.password, self.user, self.sid, query, True, False) if 'ORA-' in result: print 'Erro desconhecido ao executar a query:' + result exit(3) try: self.growth_gather = int(result.strip(' ')) self.append_gather() except: print 'Impossivel tratar o valor da coleta' exit(3)
def single_int_query(user, password, sid, query): """ Executa qualquer query que retorne 1 valor inteiro :param user: Usuario do oracle :param password: Senha do oracle :param sid: tnsnames de conexao :param query: Diskgroup dos archives :return: """ global r if user.lower() == 'sys': result = Utils.run_sqlplus(password, user, sid, query, True, True) else: result = Utils.run_sqlplus(password, user, sid, query, True, False) if 'ORA-' in result: print 'Erro desconhecido ao executar a query:' + result exit(3) try: r_aux = result.strip(' ').replace(',', '.') if '.' in r_aux: r = int(round(float(r_aux))) else: r = int(r_aux) except: print 'Impossivel tratar o resultado da query: %s' % result exit(3) return r
def main(sid, user, pwd, warning, sum, schemas): #args = parse_args() query = get_my_query(schemas,sum) result = '' if user.lower() == 'sys': result = Utils.run_sqlplus(pwd, user, sid, query, True, True) else: result = Utils.run_sqlplus(pwd, user, sid, query, True, False) perf_data = '' total = 0 if 'ORA-' in result: print 'Erro desconhecido ao executar a query:'+result exit(3) # Replace 4/3/2 whitespaces devido ao resultado do sqlplus, # split '' serve para criar a minha lista com cada coluna em um elemnto #strip para tirar os whites antes e dps. r = result.strip().replace(" "," ").replace(" "," ").replace(" "," ").split(' ') if sum: total = int(r[0]) else: it = iter(r) for count, schema in zip(it,it): perf_data += schema + '=' + count + ' ' total += int(count) perf_data += 'TOTAL='+str(total)+';'+warning if total > int(warning): print 'WARNING - Sobrecarga no banco, Sessoes:'+str(total)+' | ' +perf_data exit(1) else: print 'Total de Sessoes:' + str(total) + '| ' +perf_data exit(0)
def asm_space(user, password, sid, diskgroup): """ Calcula o tempo de disco caso seja um diskgroup ASM :param user: Usuario do oracle :param password: Senha do oracle :param sid: tnsnames de conexao :param diskgroup: Diskgroup dos archives :return: Espaco disponivel em bytes """ global diskspace query = "set head off \n \ set feedback off \n \ col free_bytes format 999999999999999 \n \ SELECT free_mb*1024*1024 as free_bytes \n \ FROM v$asm_diskgroup \n \ where name = '%s' \n \ /" % diskgroup if user.lower() == 'sys': result = Utils.run_sqlplus(password, user, sid, query, True, True) else: result = Utils.run_sqlplus(password, user, sid, query, True, False) if 'ORA-' in result: print 'Erro desconhecido ao executar a query:' + result exit(3) try: diskspace = int(result.strip(' ')) except: print 'Impossivel tratar o valor de espaco ASM. Verifique o nome do diskgroup' exit(3) return diskspace
def main(sid, user, pwd, warning): #sid, user, pwd, warning #parse_argsv2(sys.argv[1:]) result = '' query = "set head off \n \ set feedback off \n \ SET SERVEROUTPUT ON \n \ DECLARE \n \ begindate date; \n \ enddate date; \n \ beginval number;\n \ endval number;\n \ begin \n \ select sysdate, sum(value) \n \ into begindate, beginval \n \ from v$sysstat \n \ where name in ('user commits','user_rollbacks'); \n \ dbms_lock.sleep(5); \n \ select sysdate, sum(value) \n \ into enddate, endval \n \ from v$sysstat \n \ where name in ('user commits','user_rollbacks'); \n \ dbms_output.put_line( (endval-beginval) / ((enddate-begindate) * 86400)); \n \ end; \n \ /" if user.lower() == 'sys': result = Utils.run_sqlplus(pwd, user, sid, query, True, True) else: result = Utils.run_sqlplus(pwd, user, sid, query, True, False) perf_data = '' total = 0 if 'ORA-' in result: print 'Erro desconhecido ao executar a query:'+result exit(3) else: perf_data = 'TPS=' + result if float(result.replace(',','.')) > int(warning): print 'WARNING - Quantidade de transações por segundo acima no normal. TPS:'+result+' | ' +perf_data exit(1) else: print 'OK - Transações por Segundo:' + result + ' | ' + perf_data