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 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.
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.
La creazione di uno snapshot e' molto semplice:
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.
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.
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');
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.
La documentazione Oracle sugli snapshot e' molto chiara. Tra i riferimenti principali: Oracle7 Server Administrator's Guide ed SQL Reference.