Check List Database Oracle





-- ##########################################################
-- #   CHECK LIST DE BANCO DE DADOS ORACLE
-- #   DATA DA CRIAÇÃO: 24/03/2022
-- #   CRIADO POR: Igor Fortunato
-- #   EXECUTAR NO SQLPLUS DENTRO DO CONTAINER CDB$ROOT
-- ##########################################################

set lines 300;
alter session set nls_date_format='dd/mm/yyyy-hh24:mi:ss';
set serveroutput ON
DECLARE -- DECLARANDO AS VARIAVEIS                                                                
        v_data_atual date; --------------------------------- 00 - Analise Realizada no dia
        v_tipo_de_genciamento VARCHAR2(10); ---------------- 01 - SGBD: ORACLE
        ---------------------------------------------------- 02 - Gerenciado pelo
        v_instance_name VARCHAR2(16); ---------------------- 03 - Instancia
        v_host_name VARCHAR2(64); -------------------------- 04 - Host
        v_status VARCHAR2(12); ----------------------------- 05 - Status
        v_startup_time VARCHAR2(40); ----------------------- 06 - Ultimo Start 
        v_count_username_ativo NUMBER; --------------------- 07 - Sessoes Ativas
        v_count_username_inativo NUMBER; ------------------- 08 - Sessoes Inativos 
        v_session_current_utilization NUMBER; -------------- 09 - Sessoes Correntes 
        v_session_limit_value NUMBER; ---------------------- 10 - Limite de Sessoes
        v_current_utilization NUMBER; ---------------------- 11 - Processos Correntes 
        v_limit_value NUMBER; ------------------------------ 12 - Limite de Processos 
        v_current_size_sga NUMBER; ------------------------- 13 - Tamanho Atual da SGA
        v_current_size_pga NUMBER; ------------------------- 14 - Tamanho Atual da PGA
        v_versao_oracle VARCHAR2(10); ---------------------- 15 - Versao do Oracle
        v_quantidade_de_cpus NUMBER; ----------------------- 16 - Quantidade de CPUs
        v_limite_maximo_de_cursores NUMBER; ---------------- 17 - Limite Maximo de Cursores
        ---------------------------------------------------- 18 - INFORMACOES SOBRE CURSORES ABERTOS
        v_database_role VARCHAR2(10); ---------------------- 19 - Funcao do Banco de Dados
        v_open_mode VARCHAR2(15); -------------------------- 20 - Banco de Dados no Modo
        v_sevidores_dataguard VARCHAR2(40); ---------------- 21 - DATAGUARD - Os Servidores Primary e Standby
        ---------------------------------------------------- 22 - ORACLE RAC  - Ativo e Ativo 
        v_oracle_rac_one_node VARCHAR2(5); ----------------- 23 - ORACLE RAC ONE NODE - Ativo e Passivo
        v_t_database_size NUMBER; -------------------------- 24 - Tamanho do Banco de dados
        v_t_used_space NUMBER; ----------------------------- 24 - Tamanho do Banco de dados
        v_t_free_space NUMBER; ----------------------------- 24 - Tamanho do Banco de dados
        ---------------------------------------------------- 25 - TODOS OS DISCOS GERENCIADO PELO ASM DO ORACLE
        ---------------------------------------------------- 26 - SESSAO MAIS ANTIGA
BEGIN -- Inicio
        -- 00 - Analise Realizada no dia
        select sysdate 
        into v_data_atual
        from dual;
        -- 01 - SGBD: ORACLE
        -- 02 - Gerenciado pelo
        select value 
        into v_tipo_de_genciamento
        from V$SYSTEM_PARAMETER
        where name = 'instance_type';
        -- 03 - Instancia 
        -- 04 - Host
        -- 05 - Status
        -- 06 - Ultimo Start 
        select DISTINCT i.instance_name, i.host_name, i.status,
        to_char(i.startup_time,'DD/MM/YYYY - HH24:MI:SS')
        into v_instance_name, v_host_name, v_status, v_startup_time
        from v$instance i;
        -- 07 - Sessoes Ativas
        select count(s.username) 
        into v_count_username_ativo
        from v$session s where s.status = 'ACTIVE';
        -- 08 - Sessoes Inativos
        select count(s.username)
        into v_count_username_inativo
        from v$session s where s.status = 'INACTIVE';
        -- 09 - Sessoes Correntes
        -- 10 - Limite de Sessoes
        select r.current_utilization, r.limit_value
        into v_session_current_utilization, v_session_limit_value
        from v$resource_limit r where rownum <=1 and r.resource_name = 'sessions' ;
        -- 11 - Processos Correntes
        -- 12 - Limite de Processos
        select r.current_utilization, r.limit_value
        into v_current_utilization, v_limit_value
        from v$resource_limit r where r.resource_name = 'processes' ;
        -- 13 - Tamanho Atual da SGA
        SELECT BYTES current_size_sga
        into v_current_size_sga
        FROM v$sgastat where NAME = 'fixed_sga';
        -- 14 - Tamanho Atual da PGA
        SELECT VALUE/1024/1024 current_size_pga
        into v_current_size_pga
        FROM V$PGASTAT where NAME like '%aggregate PGA target parameter%';
        -- 15 - Versao do Oracle
        select value 
        into v_versao_oracle
        from V$SYSTEM_PARAMETER
        where name = 'optimizer_features_enable';
        -- 16 - Quantidade de CPUs
        select value 
        into v_quantidade_de_cpus
        from V$SYSTEM_PARAMETER
        where name = 'cpu_count';
        -- 17 - Limite Maximo de Cursores 
        select value 
        into v_limite_maximo_de_cursores
        from v$parameter where name = 'open_cursors'; 
        -- 18 - INFORMACOES SOBRE CURSORES ABERTOS
        -- 19 - Funcao do Banco de Dados
        select DATABASE_ROLE 
        into v_database_role
        from v$database;
        -- 20 - Banco de Dados no Modo
        select open_mode
        into v_open_mode
        from v$database;
        -- 21 - DATAGUARD - Os Servidores Primary e Standby
        select value 
        into v_sevidores_dataguard
        from v$parameter where name= 'log_archive_config';
        -- 22 - ORACLE RAC  - Ativo e Ativo
        -- 23 - ORACLE RAC ONE NODE - Ativo e Passivo
        select parallel 
        into v_oracle_rac_one_node
        from v$instance;
        -- 24 - Tamanho do Banco de dados
        select round(sum(used.bytes) / 1024 / 1024) database_size,
        round(sum(used.bytes) / 1024 / 1024) - round(free.p / 1024 / 1024) used_space,
        round(free.p / 1024 / 1024) free_space
        into v_t_database_size, v_t_used_space, v_t_free_space
        from (select bytes from v$datafile
        union all
        select bytes from v$tempfile ) used,
        (select sum(bytes) as p from dba_free_space) free
        group by free.p ;
        -- 25 - TODOS OS DISCOS GERENCIADO PELO ASM DO ORACLE
        -- 26 - SESSAO MAIS ANTIGA
  
        dbms_output.put_line('==================================');
        dbms_output.put_line('.');
        dbms_output.put_line('CHECK LIST - BANCO DE DADOS'); 
        dbms_output.put_line('00 - Analise Realizada no dia: '||v_data_atual);
        dbms_output.put_line('01 - SGBD: ORACLE');
        dbms_output.put_line('02 - Gerenciado pelo: '||v_tipo_de_genciamento);
        dbms_output.put_line('03 - Instancia: '|| v_instance_name);
        dbms_output.put_line('04 - Host onde esta o Banco de Dados : '|| v_host_name);
        dbms_output.put_line('05 - Status do Banco de Dados: '|| v_status);
        dbms_output.put_line('06 - Ultimo Start: '||v_startup_time);
        dbms_output.put_line('07 - Sessoes Ativas: '||v_count_username_ativo);
        dbms_output.put_line('08 - Sessoes Inativas: '||v_count_username_inativo);
        dbms_output.put_line('09 - Sessoes Correntes: '||v_session_current_utilization);
        dbms_output.put_line('10 - Limite de Sessoes: '||v_session_limit_value);
        dbms_output.put_line('11 - Processos Correntes: '||v_current_utilization);
        dbms_output.put_line('12 - Limite de Processos: '||v_limit_value);
        dbms_output.put_line('13 - Tamanho Atual da SGA: '||v_current_size_sga ||' bytes');
        dbms_output.put_line('14 - Tamanho Atual da PGA: '||v_current_size_pga ||' megabytes');
        dbms_output.put_line('15 - Versao do Oracle: '||v_versao_oracle);
        dbms_output.put_line('16 - Quantidade de CPUs: '||v_quantidade_de_cpus);
        dbms_output.put_line('17 - Limite Maximo de Cursores: '||v_limite_maximo_de_cursores);
        dbms_output.put_line('18 - QUANTIDADE DE USUARIOS E QUANTIDADE DE SESSOES POR USUARIO');
        
        -- CURSOR PARA CONSULTAR TODOS OS CURSORES 
        DECLARE -- DECLARANDO AS VARIAVEIS 
                v_count_cursores NUMBER;
                v_username_cursores VARCHAR2(40);
                v_posicao int default 0;
     
        -- DECLARACAO DO CURSOR
        CURSOR cursores_abertos IS 
                                select count(a.value), s.username
                                from v$sesstat a, v$statname b, v$session s
                                where a.statistic# = b.statistic#
                                and s.sid = a.sid
                                and b.name = 'opened cursors current'
                                and s.username is not null
                                group by username
                                order by 1 desc;
        -- INICIO 
        BEGIN 
                -- ABRINDO O CURSOR
                OPEN cursores_abertos;
                
                -- EXECUTAR LOOP 
                LOOP
     
                -- EXTRAINDO OS DADOS DA CONSULTA 
                FETCH cursores_abertos INTO v_count_cursores,v_username_cursores;
     
                -- SAIR DO LOOP QUANDO CONSULTAR TODOS OS DADOS EXISTENTES
                EXIT WHEN cursores_abertos%NOTFOUND;
     
                -- IMPRIMENDO OS DADOS NA TELA
                v_posicao:=v_posicao+1;
                dbms_output.put_line('Quant. de Usuarios: '||v_posicao||' - '||v_username_cursores||' -  Quant. de Sessoes por Usuario: '||v_count_cursores);
                END LOOP;
     
                -- FECHANDO O CURSOR
                CLOSE cursores_abertos;
        END;
        -- FIM DO CURSOR PARA CONSULTAR TODOS OS CURSORES
        
        dbms_output.put_line('19 - Funcao do Banco de Dados: '||v_database_role);
        dbms_output.put_line('20 - Banco de Dados no Modo: '||v_open_mode);
        dbms_output.put_line('21 - DATAGUARD - Os Servidores Primary e Standby: '||v_sevidores_dataguard);
        dbms_output.put_line('22 - ORACLE RAC: - Caso seja um "ORACLE RAC" os servidores seram listados:');
        -- CURSOR PARA CONSULTAR ORACLE RAC ATIVO E ATIVO
        DECLARE -- DECLARANDO AS VARIAVEIS 
                v_oracle_rac_nos_ativos VARCHAR2(256);
                v_posicao int default 0;
        -- DECLARACAO DO CURSOR
        CURSOR oracle_rac IS 
                                select INST_NAME 
                                from v$active_instances;
        BEGIN 
                -- ABRINDO O CURSOR
                OPEN oracle_rac;
                
                -- EXECUTAR LOOP 
                LOOP
                
                -- EXTRAINDO OS DADOS DA CONSULTA 
                FETCH oracle_rac INTO v_oracle_rac_nos_ativos;
                
                -- SAIR DO LOOP QUANDO CONSULTAR TODOS OS DADOS EXISTENTES
                EXIT WHEN oracle_rac%NOTFOUND ;
                
                -- IMPRIMENDO OS DADOS NA TELA
                v_posicao:=v_posicao+1;
                dbms_output.put_line('Node '||v_posicao||' - '||v_oracle_rac_nos_ativos);
                END LOOP;
                
                -- FECHANDO O CURSOR        
                CLOSE oracle_rac;
        END;
        -- FIM DO CURSOR PARA CONSULTAR ORACLE RAC ATIVO E ATIVO
        dbms_output.put_line('23 - Cluster: '||v_oracle_rac_one_node);
        dbms_output.put_line('24 - Tamanho do Banco de dados: '||v_t_database_size||' mb - Uso: '||v_t_used_space||' mb - Livre: '||v_t_free_space||' mb');
        dbms_output.put_line('25 - TODOS OS DISCOS GERENCIADO PELO ASM DO ORACLE:');
        
        -- CURSOR PARA CONSULTAR TODOS OS DISCOS DO ASM
        DECLARE -- DECLARANDO AS VARIAVEIS 
                v_data2_disco_name VARCHAR2(60);
                v_data2_disco_pct_used NUMBER;
                v_free_disco NUMBER;
                v_posicao int default 0;
        -- DECLARACAO DO CURSOR
        CURSOR discos_do_asm IS 
                                SELECT 
                                name, ROUND((1-(free_mb/total_mb))*100,2) pct_used, free_mb free_mb_disco
                                FROM v$asm_diskgroup                       
                                ORDER BY pct_used DESC;
        -- INICIO 
        BEGIN 
                -- ABRINDO O CURSOR
                OPEN discos_do_asm;
                
                -- EXECUTAR LOOP 
                LOOP
                -- EXTRAINDO OS DADOS DA CONSULTA 
                FETCH discos_do_asm INTO v_data2_disco_name,v_data2_disco_pct_used,v_free_disco;
                -- SAIR DO LOOP QUANDO CONSULTAR TODOS OS DADOS EXISTENTES
                EXIT WHEN discos_do_asm%NOTFOUND;
                -- IMPRIMENDO OS DADOS NA TELA
                v_posicao:=v_posicao+1;
                dbms_output.put_line('Disco: '||v_posicao||' - '||v_data2_disco_name||' - Em Uso: '||v_data2_disco_pct_used||'%'||' -  Free: '||v_free_disco||' megabytes');
                END LOOP;
                
                -- FECHANDO O CURSOR
                CLOSE discos_do_asm;
        END;
        -- FIM DO CURSOR PARA CONSULTAR TODOS OS DISCOS DO ASM
        
        dbms_output.put_line('26 - TOP 10 DAS SESSOES ATIVAS MAIS ANTIGAS:');
        -- CURSOR PARA CONSULTAR 0S TOP 10
        DECLARE -- DECLARANDO AS VARIAVEIS 
                v_session_username VARCHAR2(20); 
                v_session_sid NUMBER; 
                v_session_serial NUMBER; 
                v_sql_id VARCHAR2(15); 
                v_logon_time DATE; 
                v_posicao int default 0;
        -- DECLARACAO DO CURSOR
        CURSOR top_10 IS 
                                select distinct a.username, a.sid, a.serial#, b.sql_id, a.logon_time, a.status
                                into v_session_username, v_session_sid, v_session_serial, v_sql_id, v_logon_time, v_status
                                from v$session a, v$sql b 
                                where rownum <=10
                                and a.status in ('ACTIVE')
                                and a.type = 'USER'
                                and a.sql_hash_value = b.hash_value
                                and a.sql_address = b.address
                                -- and a.username not in ('SYS','SYSTEM','SYSRAC')
                                order by  a.logon_time desc;
        -- INICIO 
        BEGIN 
                -- ABRINDO O CURSOR
                OPEN top_10;
                
                -- EXECUTAR LOOP 
                LOOP
                
                -- EXTRAINDO OS DADOS DA CONSULTA 
                FETCH top_10 INTO v_session_username,v_session_sid,v_session_serial,v_sql_id,v_logon_time,v_status;
                
                -- SAIR DO LOOP QUANDO CONSULTAR TODOS OS DADOS EXISTENTES
                EXIT WHEN top_10%NOTFOUND;
                
                -- IMPRIMENDO OS DADOS NA TELA
                v_posicao:=v_posicao+1;
                dbms_output.put_line('Username: '||v_posicao||'- '||v_session_username||' Sid: '||v_session_sid||' Serial: '||v_session_serial||' Sql_id: '||v_sql_id||' Logon: '||v_logon_time||' Status: '||v_status);
                END LOOP;
                                
                -- FECHANDO O CURSOR
                CLOSE top_10;
        END;
        -- FIM DO CURSOR PARA CONSULTAR 0S TOP 10                          
END; -- Fim
/

Postar um comentário

0 Comentários