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
Postar um comentário