Kosmous beyond the clouds: Sviluppo, Formazione e Consulenza Informatica

Oracle DBA 9i - Cap. 2

La creazione di un nuovo database può essere fatta utilizzando gli appositi tool forniti con il prodotto, ad esempio il DBCA (Database Configuration Assistant) oppure manualmente, utilizzando comandi SQL.
In questo capitolo tratteremo la creazione manuale, in modo da approfondire i singoli passaggi necessari.

Il primo passo da eseguire per la creazione di un database è la costruzione del PFILE (parameter file). Il file contiene una serie di parametri necessari per attivare l’istanza (SGA + processi).
Dopo aver avviato l’istanza, utilizzando l’opportuna utenza amministrativa, si crea il database mediante il comando “CREATE DATABASE”. Infine si configura e personalizza il sistema.

Prima di procedere, è opportuno creare sul filesystem le directory che ospiteranno i componenti del database. Negli esempi seguenti si farà riferimento a:

C:oracleadminORCLbdump
C:oracleadminORCLcdump
C:oracleadminORCLcreate
C:oracleadminORCLpfile
C:oracleadminORCLudump
C:oracledatabase
C:oracleoradataORCL


2.1 PFILE: Parameter file

Questo file, che non fa parte nel senso stretto del termine del database, contiene al suo interno una serie di parametri necessari per attivare e configurare l’istanza. E’ l’istanza che permette di accedere ad un database e lavorare con esso.

I parametri di inizializzazione (sono più di 250) sono generalmente distinti in espliciti ed impliciti. Quelli espliciti sono quelli esplicitamente presenti nel parameter file. Tutti gli altri, se non esplicitamente valorizzati, assumeranno un valore di default, e pertanto vengono chiamati parametri impliciti.

Diamo adesso una breve descrizione dei parametri principali, rimandando agli altri capitoli del manuale la trattazione dei parametri più specifici.

CONTROL_FILES indica la path completa dei CF utilizzati dal database. Se il database non esiste, il comando “create database” creerà i file indicati dal parametro.
Il control file è unico, ma posso avere dei mirror (fino ad otto), anzi è caldamente consigliato averne almeno due, possibilmente posizionati in dischi diversi.
Esempio:
control_files=("c:oracleoradataORCLcontrol01.ctl", 
	"c:oracleoradataORCLcontrol02.ctl", 
	"c:oracleoradataORCLcontrol03.ctl")
Se per sbaglio inserisco path di CF esistente, appartenente ad un altro Db, esso potrebbe venire sovrascritto.
Se non specifico il nome dei file, durante la creazione del Db verrà usato un nome di default, dipendente dal SO.

DB_BLOCK_SIZE indica la dimensione del blocco Oracle. Non può più essere modificato dopo la creazione del database.
Il valore di default è 4 Kb, mentre i valori ammessi vanno da 2 Kb a 32 Kb.
Esempio:
db_block_size=8192
DB_NAME indica il nome del Db, che può essere lungo fino ad 8 caratteri, di cui il primo deve essere alfabetico, e puo’ contenere solamente i caratteri speciali : #, _ , e $.
Il nome viene memorizzato anche all’interno dei vari DF, RLF e CF.

Il nome del database potrebbe essere cambiato dopo la sua creazione, ma è un’operazione da fare con molta attenzione perché si deve ricreare il CF.
Esempio:
db_name=ORCL
DB_CACHE_SIZE indica dimensione della Buffer Cache espressa in Bytes.
Il parametro puo’ essere modificato dinamicamente, cioè senza dover riavviare il database affinche’ la modifica abbia effetto.
Esempio con valore di 24 Mb.:
db_cache_size=25165824
LOG_BUFFER indica la dimensione in Bytes della Redo log Buffer Cache. Il parametro non è dinamico.
Esempio:
log_buffer=25165824
SHARED_POOL_SIZE indica la dimensione, in bytes, della Shared Pool. Il default è 16 Mb, ed il parametro è dinamico.
Esempio:
shared_pool_size=50331648 cioè 48 Mb
LARGE_POOL_SIZE indica la dimensione, in bytes, della Large Pool. Il default è 0, ed il parametro è dinamico.
Esempio:
large_pool_size=8388608
JAVA_POOL_SIZE indica la dimensione, in bytes, della Java Pool. Il default è 20.000 Kb, ma se non la uso posso impostare il valore a 0.
Esempio:
java_pool_size=33554432
OPEN_CURSORS indica il numero massimo di cursori aperti che può avere una sessione. Il default è 50.
Esempio:
open_cursors=300
MAX_ENABLED_ROLES indica il numero massimo di ruoli che un utente può attivare. Il default è 20.
Esempio:
max_enabled_roles=30
SGA_MAX_SIZE indica la dimensione massima che può avere la SGA. Questo parametro è molto importante, perché Oracle puo’ aumentare in funzione del carico di lavoro, la dimensione di alcuni componenti della SGA. Impostando questo parametro si garantisce che Oracle non chiederà mai al sistema operativo una quantità complessiva di Ram superiore a questo parametro, evitando così che il SO vada in swap, evento che può far precipitare drasticamente le prestazioni del database. Si consiglia di impostare un valore inferiore, rispetto alla ram fisicamente installata sul server, di almeno un 2-300 Mb, a seconda del sistema operativo e delle applicazioni installate.
Esempio :
sga_max_size=536870912
PROCESSES indica il numero massimo di processi, inclusi quelli in background, che possono connettersi all’instanza.
Esempio:
processes=150
BACKGROUND_DUMP_DEST indica la directory di Dump dei processi, cioè la directory in cui verranno creati i file di dump dei vari processi nel caso in cui vadano in crash. Tali file sono molto utili per capire qual è il problema del database, e generalmente vengono richiesti dal supporto Oracle quando si apre una Tar. Nella directory viene anche salvato il file Alert.log.
Esempio:
background_dump_dest=c:oracleadminORCLbdump
CORE_DUMP_DEST indica la directory di Dump del Core. Tale parametro non viene usato in windows.
Esempio:
core_dump_dest=/opt/oracle/920/admin/orcl/cdump
USER_DUMP_DEST indica directory di Dump dei processi degli utenti.
Esempio:
user_dump_dest=c:ora_db_920adminORCLudump
REMOTE_LOGIN_PASSWORDFILE indica il metodo di autenticazione (trattato più avanti).
Durante la creazione del Db il parametro deve essere commentato o impostato a NONE, oppure se ho creato il password file prima di creare il DB, posso usare valore EXCLUSIVE o SHARED.
Esempio:
remote_login_passwordfile=EXCLUSIVE
COMPATIBLE indica la release di compatibilità. Il parametro risulta utile quando si è fatta la migrazione da un vecchio database, e si vogliono disattivare, per problemi di compatibilità, alcune funzionalità della versione attualmente installata.
Esempio:
compatible=9.2.0.0.0
UNDO_MANAGEMENT indica se la gestione dei Segmenti di Rollback deve essere effettuata in modalità automatica, operazione caldamente consigliata.
Esempio:
UNDO_MANAGEMENT=AUTO
SORT_AREA_SIZE indica la dimensione dell’area di memoria da utilizzare per gli ordinamenti temporanei (Temporary sorts). In generale più è grande questo valore e più veloci saranno le operazioni di sort o join.
Esempio:
sort_area_size=52428
Creiamo il pfile, chiamato init.ora nella directory:

C:oracleadminORCLpfile

Diamo un esempio del contenuto tipico del pfile:

###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_cache_size=25165824
db_file_multiblock_read_count=16
 
###########################################
# File Configuration
###########################################
control_files=("C:oracleoradataORCLcontrol01.ctl", 
"C:oracleoradataORCLcontrol02.ctl", 
"C:oracleoradataORCLcontrol03.ctl")
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=C:oracleadminORCLbdump
core_dump_dest=C:oracleadminORCLcdump
timed_statistics=TRUE
user_dump_dest=C:oracleadminORCLudump
###########################################
# Database Identification
###########################################
db_domain=""
db_name=ORCL
###########################################
# Instance Identification
###########################################
instance_name=ORCL
###########################################
# MTS
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=ORCLXDB)"
###########################################
# Optimizer
###########################################
hash_join_enabled=TRUE
query_rewrite_enabled=FALSE
star_transformation_enabled=FALSE
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=25165824
sort_area_size=524288
###########################################
# Pools
###########################################
java_pool_size=33554432
large_pool_size=8388608
shared_pool_size=50331648
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# Redo Log and Recovery
###########################################
fast_start_mttr_target=300
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1
###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=EXCLUSIVE
###########################################
# Miscellaneous
###########################################
compatible=9.2.0.0.0

2.2 VARIABILI D’AMBIENTE

Oltre ai parametri indicati nel PFILE appena visto, si devono considerare anche le variabili d’ambiente del sistema operativo, soprattutto se sono in ambito Unix. Tali variabili permettono infatti di individuare correttamente il software oracle necessario al corretto funzionamento.
Analizziamo le principali:

ORACLE_BASE La directory alla base dell’installazione. Tutte le versioni di Oracle presenti su una macchina devono essere installate sotto questa directory.
Es: /opt/oracle/

ORACLE_HOME indica la directory contenente il software, ed è relativa alla oracle_base.
Posso tuttavia ignorare la ORACLE_BASE ed utilizzare un valore assoluto.
OFA raccomanda di usare una forma tipo $ORACLE_BASE/product/
Es: ORACLE_HOME=$ORACLE_BASE/product/ risolto in ORACLE_HOME=/opt/oracle/product/902

ORACLE_SID indica il nome dell’instanza.
Es: ORACLE_SID=ORCL

ORA_NLS33 deve essere impostata se voglio usare un character set diverso da quello di default.

PATH devo aggiungere la directory contente gli eseguibili, in genere $ORACLE_HOME/bin




2.3 CREAZIONE DEL DB

A questo punto posso creare il database. I passaggi da eseguire sono:

  1. Creazione del file di autenticazione per utenze amministrative
  2. Utilizzo di sql*plus e connessione come utente SYS
  3. Attivazione dell’istanza (startup nomount)
  4. Create database.
La prima cosa da fare impostare correttamente la variabile d’ambiente ORACLE_SID , che indica con quale database vogliamo lavorare, e quindi creare il passwordfile. Tale file contiene le utenze e le password degli utenti che hanno la possibilità di svolgere operazioni delicate in qualità di “super” amministratori del database, come la creazione o distruzione di un db, lo startup e lo shutdown etc. L’argomento verrà trattato nel dettaglio più avanti. Adesso vediamo il comando da lanciare (dal prompt dei comandi DOS) per creare il file delle password per l’utente SYS, impostandone la password a “change_on_install”:

set ORACLE_SID=ORCL
C:oraclebinorapwd.exe file=C:oracledatabasePWDORCL.ora
password=change_on_install
Adesso avviamo il tool SQL*PLUS digitando dal prompt dei comandi:
sqlplus /nolog.
Quindi connettiamoci con l’utente SYS scrivendo
connect sys/change_on_install as sysdba
A questo punto posso attivare l’istanza usando il comando:
STARTUP NOMOUNT PFILE=C:oracleadminORCLpfileinit.ora
Dove init.ora è il pfile che ho creato precedentemente, con un qualunque editor di testo (come il notepad), impostando i parametri indicati nel paragrafo precedente.
Adesso possiamo creare il database utilizzando l’apposito comando di seguito indicato. A costo di sembrare ripetitivo, sottolineo che a questo punto il database ancora non esiste, mentre l’istanza (SGA + processi) è attiva e funzionante. Inoltre il file init.ora, necessario per attivare l’istanza, non fa strettamente parte del database, il quale è costituito dall’insieme dei DF, CF e RLF.

Dal SQL*PLUS possiamo digitare:

CREATE DATABASE “ORCL”
CONTROLFILE REUSE
LOGFILE 
	GROUP 1 ('C:oracleoradataORCLredo01.log') SIZE 10M,
	GROUP 2 ('C:oracleoradataORCLredo02.log') SIZE 10M,
	GROUP 3 ('C:oracleoradataORCLredo03.log') SIZE 10M

MAXLOGFILES 5
MAXLOGMEMBERS 2
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
NOARCHIVELOG
CHARACTER SET “WE8MSWIN1252”
NATIONAL CHARACTER SET “AL16UTF16”
DATAFILE 'C:oracleoradataORCLsystem01.dbf' SIZE 250M REUSE 
  AUTOEXTEND ON NEXT 10240K 
  MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE TEMP 
  TEMPFILE 'C:oracleoradataORCLtemp.dbf' SIZE 40M REUSE 
  AUTOEXTEND ON NEXT  640K 
  MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOTBS1" 
  DATAFILE 'C:oracleoradataORCLundotbs01.dbf' SIZE 200M REUSE 
  AUTOEXTEND ON NEXT 5120K 
  MAXSIZE UNLIMITED
;

Analizziamo nel dettaglio le singole opzioni:

CREATE DATABASE è unica parte obbligatoria. Se non indico il nome del Db, Oracle prende per default quello indicato nel PFILE (db_name).

CONTROLFILE REUSE se non lo specifico, ed uno dei CF già esiste, Oracle restituisce un errore. Se invece specifico l’opzione ed il CF esiste, Oracle sovrascrive il file.

LOGFILE: indica quali RLF creare. Se non indico esplicitamente GROUP, Oracle crea un gruppo distinto per ogni file indicato nel comando. Vedremo più avanti come vengono gestiti gli RLF. Si consiglia di assegnare a tutti gli RLF la stessa dimensione.

MAXLOGFILES numero massimo di gruppi di log che potrà avere il database.

MAXLOGMEMBERS numero massimo di membri di log per ogni gruppo.

MAXLOGHISTORY solo per RAC: numero max di ARLF per media recovery automatico.

MAXDATAFILES numero massimo di DF che potrà avere il database.

MAXINSTANCES numero massimo di istanze che potranno contemporaneamente aprire e montare il Db.


Tutte queste informazioni verranno scritte all’interno del CF la cui dimensione finale dipenderà proprio da questi parametri. Infatti, poiché il CF conterrà l’elenco completo di tutti i files del database, al momento della sua creazione verrà preallocato lo spazio necessario per contenere le path di tutti gli eventuali files che verranno aggiunti.
Se ad un certo punto ho allocato 100 DF (MAXDATAFILES 100), il sistema mi impedirà di creare il 101esimo. Per superare tale limite dovrò ricreare il CF, aumentando il valore del parametro di cui ho superato il limite.


NOARCHIVELOG è il default, e riguarda la politica di backup e recovery. Ne riparleremo.

CHARACTER SET il default è WE8MSWIN1252 su windows. Non può essere più modificato dopo la creazione del Database, in quanto è il set di caratteri utilizzato per registrare le informazioni di sistema.

NATIONAL CHARACTER SET indica il set di carattere usato nelle colonne NCHAR, NCLOB, o NVARCHAR2 e se non viene specificato assume per default lo stesso valore di CHARACTER SET

DATAFILE fa riferimento al tablespace SYSTEM che è il tablespace di default, sempre presente in qualunque database Oracle, dove viene memorizzato l’intero Data Dictionary e tutti gli oggetti di sistema. Tra le opzioni posso usare:
SIZE 250M dimensione iniziale del file.
REUSE se il file esiste già sul SO, verrà sovrascritto.
AUTOEXTEND ON Quando il file sarà pieno, il sistema ne aumenterà, automaticamente, la dimensione.
NEXT 10240K Indica di quanto verrà esteso il file.
MAXSIZE UNLIMITED Indica la dimensione massima che potrà raggiungere il file.

UNDO TABLESPACE specifica il tablespace da usare per la gestione degli UNDO. Questo meccanismo sostituisce la gestione mediante Rollback Segments che si aveva nelle versioni precedenti del database, demandandone ad Oracle la gestione automatica. Devo impostare il parametro del PFILE UNDO_MANAGEMENT=AUTO per avere la gestione automatica.

DEFAULT TEMPORARY TABLESPACE specifica il tablespace da usare per i segmenti temporanei. Tale tablespace viene utilizzato per default da tutti gli utenti che non ne hanno uno esplicitamente impostato.

A questo punto abbiamo creato il nostro database, ma ancora non abbiamo finito: dobbiamo creare i contenitori (tablespaces) per gli oggetti degli utenti.
In particolare si consiglia di creare almeno altri tre tablespaces:

USERS per contenere gli oggetti (ad esempio le tabelle) degli utenti
INDX per contenere gli indici sugli oggetti degli utenti
TOOLS per contenere le tabelle e gli indici creati dai Tools amministrativi.

Vediamone i comandi, e rimandiamo ai capitoli successivi per una trattazione più approfondita.

Dal prompt di SQL*Plus digitare:

CREATE TABLESPACE "USERS" LOGGING 
	DATAFILE 'C:oracleoradataORCLusers01.dbf' SIZE 25M REUSE 
	AUTOEXTEND ON NEXT  1280K 
	MAXSIZE UNLIMITED 
	EXTENT MANAGEMENT LOCAL 
	SEGMENT SPACE MANAGEMENT  AUTO ;

CREATE TABLESPACE "INDX" LOGGING DATAFILE 'C:oracleoradataORCLindx01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

CREATE TABLESPACE "TOOLS" LOGGING DATAFILE 'C:oracleoradataORCLtools01.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 320K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

Dove, come nel commando CREATE DATABASE, le opzioni indicano:

LOGGING Indica che tutte operazioni sugli oggetti presenti nel tablespace dovranno essere registrate nel file di Log.
DATAFILE 'C:oracle..' Indica il nome del DF che costituirà il tablespace.
SIZE 25M Indica la dimensione del file
REUSE Indica che se il file già esiste verrà sovrascritto.
AUTOEXTEND ON Indica che se il file potrà aumentare automaticamente la sua dimensione.
NEXT 1280K Indica il singolo incremento di dimensione
MAXSIZE UNLIMITED Indica la dimensione massima che il file potrà raggiungere.
EXTENT MANAGEMENT LOCAL Indica come verranno gestiti gli extents all’interno del Tablespace
SEGMENT SPACE MANAGEMENT AUTO Indica come verranno gestiti gli oggetti all’interno del Tablespace.


2.4 Il DATA DICTIONARY

Il Data Dictionary e’ l’insieme delle tabelle e viste contenenti informazioni sui metadata del Db, come gli utenti, le tabelle, i privilegi etc.
Le informazioni in esso contenute sono pertanto vitali per il corretto funzionamento del database.
Tuttavia le tabelle contengono informazioni codificate e di non semplice lettura, mentre le viste decodificano tali informazioni rendendole disponibili agli utenti abilitati.

Pertanto, dopo la creazione del database è importante creare le viste, al fine di poter interrogare il sistema chiedendo ad esempio quanti e quali sono i tablespaces, i file associati ad esso etc.

Le tabelle del DD appartengono all’utente SYS e sono create nel tablespace SYSTEM. Gli eventuali script devono pertanto essere lanciati, tranne casi particolari, come utente SYS.

Le viste vengono create dagli script lanciati dopo creazione del Db, che si trovano in $ORACLE_HOME/rdbms/admin

Tale directory contiene molti script, ognuno dei quali crea delle viste, ed in alcuni case anche delle tabelle, necessarie per interrogare il sistema su aspetti specifici o per implementare funzionalità particolari come il RAC (Real Application Cluster). In genere, dopo la creazione del DB, si lanciano i seguenti script:

connect SYS/change_on_install as SYSDBA
@C:oraclerdbmsadmincatalog.sql;
@C:oraclerdbmsadmincatblock.sql;
@C:oraclerdbmsadmincatproc.sql;
@C:oraclerdbmsadmincatoctk.sql;

catalog.sql
crea viste e sinonimi sugli oggetti del Data Dictionary

catblock.sql
crea viste sugli oggetti che danni informazioni sui locks.

catproc.sql
crea oggetti necessari per le funzionalità del PL/SQL

catoctk.sql
crea viste ed oggetti necessari per usare la crittografia con il PL/SQL

In genere con CAT cominciano tutti gli scripts che creano oggetti nel Data Dictionary. Inoltre
gli scripts lanciati possono a loro volta richiamare altri scripts: ad esempio il CATALOG.SQL richiama, tra gli altri:

standard.sql Crea il package STANDARD contenente le caratteristiche di base del linguaggio SQL.
cataudit.sql riguarda l’auditing
catexp.sql riguarda import/export
catpart.sql riguarda il partitioning

Per catalogare i vari scripts si può far riferimento alla loro sigla iniziale:

cat*.sql Riguarda il Data Dictionary.
dbms*.sql Riguardano i package amministrativi.
prvt*.plb Riguardano i package amministrativi, ma sono in formato crittografato.
uNNNNNN.sql Script di Upgrade o migrazione
dNNNNNN.sql Script di downgrade.
utl*.sql Creano tabelle e viste addizionali per utilizzare le utilities del database.


2.5 VISTE DI SISTEMA
Le viste non sono altro che delle query memorizzate nel database. Gli script appena lanciati permettono di creare le cosiddette “viste di sistema”, molto utili per ricavare informazioni sul database, in quanto le tabelle interne, comunque accessibili dai SYSDBA, memorizzano i dati in un formato spesso numerico e di difficile interpretazione. Le viste non fanno altro che convertire queste informazioni in un formato molto più chiaro e leggibile.

Le viste di sistema sono generalmente classificate in base al prefisso:

USER_
Contengono informazioni sugli oggetti di proprietà dell’utente che lancia la query sulla vista.
Ad esempio se utente SCOTT scrive:
SQL> select * from user_tables;
gli verranno restituite informazioni sulle tabelle che appartengono al suo schema, cioè tutte quelle memorizzate come SCOTT.nome_tabella.

ALL_
Contengono informazioni sugli oggetti sui quali l’utente che lancia la query ha accesso (o privilegi).
Ad esempio se utente SCOTT scrive:
SQL> select * from all_tables;
gli verranno restituite informazioni sia sulle tabelle che appartengono al suo schema, ma anche su tutte le altre sulle quali ha dei privilegi, come SELECT o INSERT etc


DBA_
Contengono informazioni sugli oggetti di tutti gli utenti. Solo gli utenti privilegiati (aventi il ruolo SELECT_CATALOG_ROLE come SYSTEM o SYS) possono eseguire delle query sulle viste DBA_.
Inoltre alcune di esse contengono informazioni sulle strutture del DB, come l’elenco dei DF.

V$
Sono anche dette Dynamic Performance Views, in quanto il loro contenuto è strettamente legato alle performance e perchè i dati su cui si appoggiano vengono aggiornati continuamente.
Le viste effettive sono le V_$ (appartenenti a SYS) mentre V$ è il corrispettivo sinonimo public.

GV$
Per la quasi totalità delle V$, Oracle ha un corrispondente GV$.
Esse sono Dynamic Performance Views Globali, e sono utili se ho il RAC.
La GV$ corrispondente ha infatti una colonna in più, INST_ID, che identifica il numero dell’instanza.

Osservazione: le viste USER_ ed ALL_ hanno le stesse informazioni, differiscono per la presenza o meno della colonna OWNER, mentre le viste DBA_ hanno in genere qualche informazione in più.


Vediamo qualche esempio di vista che da informazioni sulle tabelle:
USER_TABLES
USER_TAB_COLUMNS
ALL_TABLES
ALL_TAB_COLUMNS
DBA_TABLES
DBA_TAB_COLUMNS
Se volessi un elenco di tutte le viste del Data Dictionary, compresa una loro descrizione sommaria, potrei lanciare una query sul DICTIONARY (ha il sinonimo DICT):
SQL> select * from DICTIONARY;
Se invece si vogliono informazioni sul contenuto delle singole colonne posso lanciare la query:
SQL> select * from DICT_COLUMNS;
Commando che è meglio far precedere, per visualizzare meglio l’output a video, da:
SQL> set linesize 1500
SQL> COL TABLE_NAME FORMAT A25
SQL> COL COMMENTS FORMAT A40



Vi invitiamo ad inviarci commenti, eventuali segnalazioni di errore e quant'altro.



Questo documento non è un documento ufficiale della Oracle Corporation. Oracle detiene tutti i diritti sulla propria documentazione. Alcuni termini usati sono trademarks registrati. In caso di dubbi o incertezze consultate la documentazione ufficiale di Oracle o contattate il Customer Support di Oracle.
<< Capitolo 1 Capitolo 3 >>
Commenti (0)2005-02-16