Lanciatore di script SQL

Spesso un rilascio software su database richiede il lancio o esecuzione di diversi scripts. Farlo a mano potrebbe essere noioso oppure si potrebbe rischiare di non eseguire qualche file, o ancora dimenticarsi di registrare su spool.

Quindi per eseguire automaticamente degli script SQL, ecco un semplice script shell:

 

 

 

Continue reading “Lanciatore di script SQL”

DBA: spazio per tablespace

Lo script è uno dei tanti già disponibili per creare un report sugli spazi dele diverse tablespace. La particolarità sta nel fatto che viene riportato anche il MAXCHUNK ovvero la dimensione massima allocabile per singolo extent.

-- 
-- tbsspace.sql
--
-- Author: Mauro Rossolato
-- 
-- Overview: 
--
-- Major Modifications (when, who what)
-- ----------------------------------------------------------------
-- 16.05.2007   mauro           imported
-- 
--

SELECT /*+ RULE */
    f.tablespace_name,
    TRUNC(d.dfspace) ALLOCATO,
    TRUNC(f.libero) DISPONIBILE,
    d.auto,f.pezzi_liberi,d.numfile numfile,
    TRUNC(((f.libero/D.dfspace)*100)) PERC_DISP,
    t.initial_extent/1024/1024 INIEXT,
    t.next_extent/1024/1024 nxtext,
    f.grosso MAXCHUNK
FROM (
      SELECT  
          tablespace_name,NVL(SUM(bytes)/1024/1024,0) LIBERO,
          COUNT(*) PEZZI_LIBERI,MAX(bytes)/1024/1024    GROSSO
    FROM 
        dba_free_space f 
    GROUP BY 
        tablespace_name ) f,  
     (
    SELECT 
        tablespace_name, MAX(SUBSTR(autoextensible,1,1)) AUTO,
        NVL(SUM(bytes)/1024/1024,0) DFSPACE,COUNT(*) NUMFILE
    FROM 
        dba_data_files
    WHERE 
        tablespace_name NOT IN (
            SELECT 
                tablespace_name 
            FROM 
                dba_tablespaces 
            WHERE 
                contents LIKE 'TEMP%' OR status != 'ONLINE'
            )
    GROUP BY 
         tablespace_name ) d,
    dba_tablespaces T                              
    WHERE 
        D.tablespace_name = F.tablespace_name
    AND 
        T.tablespace_name = F.tablespace_name
and
SUBSTR(t.extent_management,1,3)='LOC'   
order by 1     
/

 

ed ecco un esempio:

 

 

 

profilo di Sqlplus

Per avere lo “storico” o log delle operazioni eseguite sul database, ecco un metodo semplice per creare dei log (o spool) automatici.

Il file di log avrà un formato del tipo:

istanza + data + ora

Per utilizzare questo metodo basterà copiare lo script nella directory ove viene avviato Sqlplus: alla sua partenza Sqlplus verificherà che esista il file login.sql e lo eseguirà automaticamente.

 

-- login.sql
--
-- 12/07/2006 mauro - automatic spool with timestamp

-- For backward compatibility
SET PAGESIZE 9999
SET SQLPLUSCOMPATIBILITY 8.1.7
set serveroutput on size 1000000 format wrapped
SET TIMI ON
set long 20000
SET ECHO ON
SET FEEDBACK ON
SET LINES 400
SET TERMOUT ON
SET VERIFY OFF
SET TRIMSPOOL ON
-- set numformat 999,999,999,999,999




-- Used for the SHOW ERRORS command
 COLUMN LINE/COL FORMAT A8
 COLUMN ERROR FORMAT A65 WORD_WRAPPED

-- define _editor=vi
-- define _editor=UEDIT32
define _editor=notepad

COL mysysdate new_value ladata
COL myinstance new_value laistanza
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD__HH24_MI_SS') mysysdate FROM DUAL;
SELECT ORA_DATABASE_NAME myinstance FROM DUAL;

SPOOL &&laistanza-&&ladata..log

SELECT 'CONNESSO A: '||
(SELECT ORA_DATABASE_NAME MRIGA FROM DUAL)||' >> COME: '||
(select sys_context('userenv','instance_name') MRIGA from dual) FROM DUAL;

column prompter new_value m_prompt
 
 select
 ORA_DATABASE_NAME || '>' prompter
 from duAL;

set sqlprompt '&m_prompt'
--undefine m_prompt

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';