Formatando o prompt do Sqlplus

 Olá pessoal, nessa postagem vou mostrar como formatar o prompt do sqlplus para deixar a conexão mais amigável, formatar campos para evitar o desalinhamento das colunas nos scripts, um prompt bem organizado torna tudo mais claro, principalmente na hora de executar uma análise, são coisas simples mas que mudam a forma como você trabalha.

Primeiramente vamos contextualizar sobre um arquivo chamado glogin. Esse arquivo é responsável por executar previamente tudo que está salvo no arquivo glogin.sql, desde formatar o prompt do sqlplus, até executar um script pré-definido que configura o tamanho de um campo por exemplo, ou um script que lista o status da instância e mostra seu estado, tudo isso e mais. Toda vez que você invoca o sqlplus, esse arquivo é lido e executado. Resumindo, o glogin.sql server com um profile global para o sqlplus, onde temos uma série de variáveis que podem ser definidas e configuradas.

Abaixo, um exemplo de um glogin.sql puro, ou seja, sem modificações, padrão de fábrica :



 Podemos editar esse arquivo para executar scripts e/ou alinhar campos mas a ideia do post é formatar o sqlplus para que você possa usar sem ficar preso a um arquivo global, que não afetará outro DBA que vá usar o sqlplus e deseje usar seus próprio script de parâmetros.

Pensando nisso a ideia é criar um arquivo com todas as definições necessárias para os seus scripts que será usado sempre após o seu login no sqlplus sem afetar o glogin.sql.


Dessa forma eu crei um script format_prod_pv.sql que contém comandos sql, definições de variáveis para melhorar a visualização das informações retornadas das consultas. Inclusive você pode ter vários, de acordo com o tipo análise, criticidade do ambiente e atividade a ser executada.


Abaixo o retorno de uma conexão normal a um ambiente sem qualquer alteração:


Abaixo o retorno do meu script após realizar o login:


Aqui configuramos o pompt para trazer a instância em todas as entradas de comandos, isso facilita quando se está trabalhando com vários bancos ao mesmo tempo ou várias instâncias evitando que o comando errado seja executa no Banco de dados errado. Configurei para que seja exibido no meu login: Qual a minha sessão, meu usuário e qual atividade estou executando, assim outros DBAs que também estiveram atuando no ambiente poderam ver oque está sendo feito e não simplesmente matar a minha sessão por engano, isso serve para monitoramento caso a minha sessão impacte outro processo.

Pode ser colocado também um script para verificar locks no ambiente ou até mesmo os top ofensores de CPU ou tempo de execução no ambiente, a usabilidade é infinita.

Abaixo vou deixar meu script caso queiram modificar a usar, a ideia é compartilhar e se tiver um script bacana, coloque nos comentário.


Script format_prod_pv.sql :


-- Define o prompt para mostrar o nome do usuário e o nome da conexão
set sqlprompt "@|blue _USER|@@@|red _CONNECT_IDENTIFIER|@@|blue > |@";

-- Ajuste de parametros de sessão
SET ECHO OFF;
SET FEEDBACK OFF;
SET LONG 20000
SET LONGCHUNKSIZE 20000
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

-- Definição de módulo para monitoramento de atividades
EXEC dbms_application_info.set_module( module_name => 'DBA - Pedro Vido Acc - TRABALHANDO - SQLPLUS', action_name => 'Atividade XXXX');


PROMPT +-------------------------------------------------------------------------------------------+
PROMPT | DBA      : Pedro Vido - SME Accenture                                                     |
PROMPT | Blog     : https://pedrovidodba@blogspot.com                                              |
PROMPT | Ambiente : Prod                                                                           |
PROMPT | Versao   : 1.0                                                                            |
PROMPT +-------------------------------------------------------------------------------------------+
PROMPT

-- select de indentificacao da minha sessao
set sqlformat
set lines 9999 
set pages 9999
COL Identificador FOR a15  HEADING 'Sid|Serial' JUSTIFY LEFT WORD_WRAP TRUNC
COL Action FOR a40  HEADING 'Desc|Atividade' JUSTIFY LEFT WORD_WRAP TRUNC
COL username FOR a20  HEADING 'DB|User' JUSTIFY LEFT WORD_WRAP TRUNC
COL osuser FOR a20  HEADING 'SO|User' JUSTIFY LEFT WORD_WRAP TRUNC
COL module FOR a40  HEADING 'Module|Identificacao' JUSTIFY LEFT WORD_WRAP TRUNC
COL machine FOR a20  HEADING 'DBA|Machine' JUSTIFY LEFT WORD_WRAP TRUNC
COL service_name FOR a30  HEADING 'Servico' JUSTIFY LEFT WORD_WRAP TRUNC
COL schemaname FOR a20  HEADING 'DB|Schema' JUSTIFY LEFT WORD_WRAP TRUNC

select sid||','||serial#||',@'||inst_id as Identificador,
       schemaname ,
       username, 
       osuser,
       machine, 
       service_name,
       module,
       Action
from gv$session 
WHERE sid in (SELECT sid FROM v$mystat WHERE ROWNUM=1)
and osuser ='pcvido';

PROMPT
PROMPT
PROMPT
PROMPT

-- select de identificacao do banco
COL STARTUP_TIME FOR a20
COL DTHORA FOR a20
SELECT INSTANCE_NAME, STATUS, HOST_NAME, DATABASE_ROLE, OPEN_MODE, TO_CHAR(STARTUP_TIME,'DD/MM/YYYY HH24:MI:SS') AS STARTUP_TIME,
TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS')  AS DTHORA
FROM V$INSTANCE, V$DATABASE;
alter session set optimizer_mode=rule;
PROMPT
PROMPT
--SET TIMING ON;

SET FEEDBACK ON;


Espero ter contribuído com mais um dica boa para facilitar a vida no dia à dia, caso tenham alguma dúvida ou sugestão de novas postagens me mande via E-mail com o Título da postagem, deixo aqui meu Email : pedrohvido@gmail.com.

Nos vemos no próximo post!







Comentários

Postagens mais visitadas deste blog

Instalando Oracle Database 19c em um Oracle Linux 8.8 no Virtual Box - PARTE 2

Temporary Tablespace : Identificando consultas consumindo uma Tablespace Temporária

SQL - Calculando crescimento do Banco de dados Oracle