Molto di ciò che segue è stato preso dal
libro di
Tomas Kyte. Spero non me ne voglia.
Prima di iniziare vediamo cosa dice il
manuale
a proposito dei due file utilizzati per la configurazione di SQL*PLUS:
Qundi:
Viene letto il glogin.sql;
Viene letto il login.sql, se trovato;
Il vantaggio, a mio avviso, di utilizzare tutte le configurazioni nel glogin, è quello di avere una gestione uniforme
del prompt sull'host da cui eseguiamo SQL*Plus. In qeusto modo, chiunque esegua una connessione oracle verso un database,
otterrà sempre lo stesso tipo di prompt.
L'espressione "se viene trovato", indicata al punto 2, vuol dire che la lettura del login.sql è subordinata all'esistenza della
variabile d'ambiente SQLPATH. Nel nostro caso, tale variabile, sarà vitale per il corretto funzionamento di quanto descritto
di seguito.
Le impostazioni di stotto riportate, vanno aggiunte in calce al file glogin.sql
REM "serveroutput" controlla l’output del package DBMS_OUTPUT.PUT_LINE. In genere si desidera che
REM "serveroutput" siasempre impostato ad ON ed il buffer relativo sia il più grande possibile.
set serveroutput on size 1000000 format wrapped
REM
column object_name format a30
column segment_name format a30
column file_name format a60
column name format a30
column plan_plus_exp format a100
REM Di default, una linea in un file di spool è a lunghezza fissa, con spazi bianchi
REM che la completano se necessario. "trimspool" elimina tali spazi bianchi
REM rendendo il file significativamente più piccolo
set trimspool on
REM "long" controlla quanto di un campo LONG o CLOB, SQL*Plus debba mostrare. Il
REM valore di default è 80 caratteri che possono essere troppo pochi. Di seguito
REM viene lo impostiamo in modo da utilizzare i primi 1000 caratteri
set long 1000
REM Questo paramentro imposta l’ampiezza di riga per cui SQL*Plus wrappa l’output
set linesize 130
REM SQL*Plus stampa l’intestazione delle colonne ogni N righe di output, che di default è 14.
REM A volte questo output può essere fastidioso, così lo si può modificare
set pagesize 20
REM Imposta il l’editor di default
define _editor=vi
La personalizzazione del prompt va configurata nel file login.sql, per motivi che saranno chiariti tra breve.
REM Disabilita l’output del terminale: fa in modo tale di non stampare nulla quando si esegue il login
set termout off
REM Di seguito viene impostato il prompt di SQL*Plus a "DATABASE(USERNAME)> ". Viene utilizzato
REM NEW_VALUE per formattare il prompt, il cui valore di default è IDLE (molto utile ai dba. Il prompt
REM sarà IDLE se il db non è ancora partito)
define gname=idle
column global_name new_value gname
select substr(global_name,1, decode(dot,0,length(global_name),dot-1))||'('|| user||')' global_name
from (select global_name, instr(global_name,'.') dot
from global_name);
set sqlpromt ‘&gname> ’
REM Riabilita l’output del terminale
set termout on
Di seguito un esempio di output del prompt. Per comodità personale, poiché da Oracle9i non è più possibile connettersi
come utente internal, ho creato il seguente alias nel .bash_profile dell'utente oracle:
alias internal='sqlplus "/as sysdba"'
[nispushtest.PUSHTEST]/sbrdbms/oracle->internal
SQL*Plus: Release 9.2.0.6.0 - Production on Wed Mar 29 13:27:21 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning option
JServer Release 9.2.0.6.0 - Production
PUSHTEST(SYS)>
Una volta lanciato, il prompt di SQL*Plus non cambia col cambiare dell'utente. Questo è perché i files di configurazione
glogin.sql e login.sql viengono letti una sola volta (alla prima esecuzione appunto. Questo comportamento cambia, come vedremo,
a partire da Oracle 10g). Ciò vuol dire che al successivo comando di connect, le impostazioni di SQL*Plus non vengono modificate.
Il, trucco allora, risiede nell’usare lo script connect che rilancia il glogin.sql ogni volta:
REM Configurazione di connect.sql
connect &1
@glogin
Affinché tutto funzioni è necessario impostare la variabile d’ambiente SQLPATH. Utilizzando tale variabile, puossiamo mettere
connect.sql, login.sql ed altri scripts in un’unica directory e fare in modo che SQL*Plus li trovi per noi. SQL*Plus cercherà
dapprima nella directory corrente e poi in quella specificata in SQLPQTH. In questo caso ho impostato SQLPATH come:
SQLPATH=$ORACLE_HOME/sqlplus/admin
Di seguito quindi, un esempio di cambio utente:
PUSHTEST(SYS)> @connect nip
Enter password: PUSHTEST(NIP)>
Sempre nella direcotry $SQLPATH, conviene creare un link simbolico a connect.sql, nel seguente modo:
ln -s connect.sql conn.sql
così facendo, è possibile utilizzare anche la forma abbreviata di connect, simulando del tutto la connessione ad un nuovo
utente da SQL*Plus:
PUSHTEST(SYS)> @conn nip
Enter password: PUSHTEST(NIP)>
Tutto funziona anche se configuriamo il prompt a partire dal file login.sql e non dal glogin.sql. In questo caso va modificato il
connect.sql, cambiando la stringa da "@glogin" a "@login".
A partire da Oracle 10g comunque, il comportalemto di login.sql e glogin,sql cambia. Di seguito riporto un estratto dal
manuale:
Questo vuol dire che a partire da Oracle 10g, non è più necessario creare lo script connect.sql, come indicato sopra. Vediamo
infatti qual è il nuovo comportamento di Oracle (questa volta il database è su un sistema Windows):
C:\>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.2.0 - Production on Sab Apr 1 19:36:25 2006
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
SALZI(SYS)> conn andrea
Enter password:
Connected. SALZI(ANDREA)>