mercoledì 10 giugno 2015

Oracle e dba_segments

Oggi ho dovuto recuperare i dati necessari a creare i tablespace per la migrazione di diversi DB Oracle sotto un'unica istanza.
Per capire quali tablespace erano utilizzati dagli utenti oggetto di migrazione ho utilizzato la tabella dba_segments con la seguente query
SELECT owner, segment_type, tablespace_name , count(*)
FROM dba_segments 
GROUP BY owner, segment_type, tablespace_name 
ORDER BT owner
che mi ha dato evidenza di dove gli oggetti dei vari utenti erano.
Con l'utilizzo poi di dba_data_files ho estratto i data file associati.

giovedì 26 febbraio 2015

Creare un utente con i relativi tablespace in Oracle

Negli ultimi due giorni mi sono cimentato con manipolazione di datafile, tablespace e utenti su Oracle 11gR2.
Prima di iniziare è sempre utile verificare quali datafile e tablespace sono presenti sul sistema andando a interrogare le tabelle DBA_TABLESPACES, DBA_DATA_FILES, , DBA_TEMP_FILES.
Se non ci sono tablespace adatti ad ospitare lo schema per l'utente che si intende creare è necessario predisporre un nuovo tablespace con relativo datafile:

CREATE TABLESPACE <TBS_NAME> DATAFILE '<DBF_FILENAME>' SIZE <SIZE>
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

E' possibile agire in maniera analoga anche per creare un temporary tablespace:

CREATE TEMPORARY TABLESPACE <TEMP_TBS_NAME> TEMPFILE '<TEMP_DBF_FILENAME>' SIZE <SIZE>
REUSE;

Se i tablespace esistono, ma non sono abbastanza grandi, è possibile aggiungere datafile:

ALTER TABLESPACE <TBS_NAME> ADD DATAFILE '<DBF_FILENAME>' SIZE <SIZE>;

Oppure estendere i datafile:

ALTER DATABASE DATAFILE '<DBF_FILENAME>' RESIZE <NEW_SIZE>;

Le stesse attività possono essere fatte anche su i Temporary Tablaspace cambiano la parola DATAFILE in TEMPFILE.

Una volta che i tablespace e i datafile sono stati creati è possibile procedere alla creazione di un utente:
CREATE USER <USER> IDENTIFIED BY <PASSWORD>
DEFAULT TABLESPACE <TBS_NAME>
TEMPORARY TABLESPACE<TEMP_TBS_NAME>;

Una volta creato l'utente è necessario procedere all'assegnazione degli opportuni grant:

GRANT <GRANT1>, <GRANT2>, <GRANT3>, <GRANTN> TO <USER>;

Ora è possibile utilizzare l'utente per i proprio scopi.

martedì 20 gennaio 2015

Oracle: Abilitare e disabilitare Archive Log 10g/11g

Mi è capitato oggi di trovarmi di fronte a problemi di spazio su un database Oracle in ambiente di collaudo.
Andando a esplorare ho notato che il problema era legato agli archive log che dopo anni di sedimentazione avevano occupato una cosa come 60G di spazio.
Essendo il database non di produzione e essendo in fase di dismissione, per non sapere né leggere né scrive, mi sono prodigato per la disattivazione della modalità archive.
Come sempre google mi ha risolto il problema con questo vademecum 
Ovviamente per risolvere il mio problema è bastata la sola parte di disabilitazione composta dai seguenti passi:

  1. Verifica dello stato degli archive log tramite il comando archive log list
  2. Se attivo spegnere il database con shutdown immediate
  3. Far ripartire il database con startup mount
  4. Disabilitare l'archiving con il comando alter database noarchivelog
  5. Aprire il database con alter database open
  6. Verifica dello stato degli archive log tramite il comando archive log list 
La verifica dello stato degli archive log tramite il comando archive log list restiruisce un output come questo se disabilitato:

Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u02/app/oracle/oradata/orcl/arch
Oldest online log sequence     26
Current log sequence           28

Oppure come questo se abilitato:

Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/app/oracle/oradata/orcl/arch
Oldest online log sequence     26
Next log sequence to archive   28
Current log sequence           28