Utilizzo di snapshot in Oracle

L'RDBMS Oracle fornisce diverse funzioni per distribuire e replicare i dati. Tra queste l'utilizzo degli snapshot fornisce un meccanismo di semplice utilizzo ed affidabile.

Gli snapshot

Gli snapshot in Oracle sono "fotografie" di una tabella. Possono essere periodicamente aggiornati e, nella maggior parte degli utilizzi, leggono dati da tabelle remote. La tabella che viene letta e che si vuole replicare viene generalmente definita master table.

Prerequisiti

Per poter utilizzare gli snapshot sia sul database locale che sul sistema remoto debbono essere stati creati i relativi packages. Gli script da installare sono catsnap.sql (per l'utilizzo) e dbmssnap.sql (package PL/SQL di gestione). Sui sistemi Unix tali script si trovano in $ORACLE_HOME/rdbms/admin.

Naturalmente tali script debbono essere eseguiti come utente SYS.

Creazione

La creazione di uno snapshot e' molto semplice:



CREATE SNAPSHOT snap_tabella
REFRESH FAST
START WITH sysdate
NEXT sysdate+1
AS SELECT *
FROM tabella@remoto;

In tal modo viene creato, sul database locale, uno snapshot dal nome snap_tabella, che riporta i dati contenuti in tabella attraverso il database link remoto. Tale snapshot viene riaggiornato ogni giorno.

Parametri di storage

Benche' in sola lettura, gli snapshot sono altrimenti oggetti allocati come tutti gli altri in Oracle. E' pertanto possibile utilizzare clausole di storage analoghe a quelle presenti sulle tabelle.

Snapshot log

Lo snapshot log e' una tabella che registra i cambiamenti che avvengono sulla tabella master.

Il comando SQL per creare uno snapshot log e' il seguente:


CREATE SNAPSHOT LOG slog_tabella ON tabella;


Quando e' presente uno snapshot log e' la modalita' FAST della clausola di REFRESH e' attiva e quindi vengono trasferiti i soli dati modificati della tabella master.

Anche per lo snapshot log e' opportuno definire i parametri di storage.

Funzioni di utilita'

Sono disponibili alcuni packages con funzioni di utilita'. Ad esempio per forzare l'aggiornamento del contento di uno snapshot:


SQL> execute dbms_snapshot.refresh('SNAPSHOT_NAME');

Parametri di init

Il parametro di init SNAPSHOT_REFERESH_PROCESS indica il numero di processi di refresh degli snapshot presenti. Generalmente un processo e' sufficiente. Attenzione il default e' 0.
Il parametro di init SNAPSHOT_REFERESH_INTERVAL indica l'intervallo di wake up dei processi di snapshot. Il default (60 secondi) e' adatto alla maggioranza dei casi.

Ulteriore documentazione

La documentazione Oracle sugli snapshot e' molto chiara. Tra i riferimenti principali: Oracle7 Server Administrator's Guide ed SQL Reference.


Testo: Utilizzo di snapshot in Oracle
Data: 12 Novembre 1997
Versione: 1.0.3
Autori: mail@meo.bogliolo.name