Aggiornamenti incrementali per gli indici di Db2 Text Search

La sincronizzazione dei dati in Db2 Text Search si basa sull'elaborazione del contenuto di una tabella di staging che contiene informazioni sui documenti nuovi, modificati o eliminati. Per impostazione predefinita, vengono creati dei trigger per catturare le modifiche nella tabella di testo e aggiornare la tabella di staging. Esiste una tabella di staging per ogni indice di testo. L'applicazione delle informazioni della tabella di staging all'indice di testo corrispondente viene definita aggiornamento incrementale.

È possibile eseguire aggiornamenti incrementali utilizzando le seguenti opzioni:
LOGTYPE CUSTOM o BASIC

LOGTYPE BASIC è l'impostazione predefinita e crea una tabella di staging primaria con trigger sulla tabella di testo per riconoscere le modifiche.

LOGTYPE CUSTOM crea una tabella primaria di staging, ma non aggiunge automaticamente alcun meccanismo per riconoscere le modifiche. Popolare la tabella di staging con una configurazione di replica, o confrontando i timestamp nella tabella di testo, o qualsiasi altro metodo applicabile per identificare i record modificati.

A seconda dell'origine dei dati, il tipo di registro potrebbe essere impostato automaticamente e non è personalizzabile. Utilizzare l'opzione di configurazione dell'indice LOGTYPE dell'operazione CREATE INDEX per gli indici di ricerca testuale per specificare il tipo di registro.

AUXLOG ON o OFF

L'opzione di configurazione dell'indice AUXLOG dell'operazione Db2 Text Search CREATE INDEX controlla se una tabella di staging mantenuta dal testo viene utilizzata per un indice di ricerca del testo. Questa opzione può essere combinata con le opzioni LOGTYPE basic o BASIC. Se l'opzione AUXLOG è impostata su ON, insieme a Logtype BASIC, le informazioni sui documenti nuovi ed eliminati vengono acquisite tramite l'elaborazione dell'integrità in una tabella di staging ausiliaria gestita da Db2 Text Search, mentre le informazioni sui documenti modificati vengono acquisite tramite trigger e memorizzate nella tabella di staging. Con LOGTYPE CUSTOM, se l'opzione AUXLOG è impostata su ON, le informazioni sui documenti nuovi, modificati ed eliminati vengono acquisite nella tabella di staging ausiliaria. Per impostazione predefinita, questa opzione di configurazione è impostata su ON per le tabelle con partizione dell'intervallo e su OFF per le tabelle non partizionate.

La cattura delle modifiche per l'aggiornamento incrementale dell'indice di testo tramite l'elaborazione dell'integrità potrebbe richiedere l'esecuzione di più attività amministrative. Ad esempio, potrebbe essere necessario emettere un comando RESET PENDING prima che gli aggiornamenti dell'indice di ricerca del testo possano essere elaborati. L'effetto dell'infrastruttura di staging mantenuta dal testo è simile a quello di una tabella di query materializzata (MQT) con aggiornamento differito e per la creazione di una tabella di staging ausiliaria si applicano limitazioni e restrizioni simili a quelle della creazione di una MQT. Se si aggiornano le tabelle usando solo comandi che hanno effetto su tutte le righe delle tabelle, ad esempio usando il comando LOAD REPLACE, l'aggiunta dell'infrastruttura di staging estesa non fornisce alcun vantaggio. Si consiglia invece di ricreare l'indice di ricerca del testo dopo l'aggiornamento di una tabella.

Per creare un indice di testo con LOGTYPE BASIC e AUXLOG ON, vedere l'esempio seguente per un aggiornamento iniziale e incrementale.

  1. Creare una tabella e aggiungervi i dati.
    db2 "create table test.simple (pk integer not null primary key, 
    comment varchar(48))"
    db2 "insert into test.simple values (1, 'blue and red')"
  2. Creare un indice di ricerca del testo.
    db2ts "create index test.simpleix for text on test.simple(comment) 
    index configuration(auxlog on) connect to mydb"
  3. Aggiornare l'indice e caricare i dati.
    db2ts "update index test.simpleix for text connect to mydb"
    db2 "load from loaddata4.sql of del insert into test.simple"
  4. Dopo l'operazione di caricamento, la tabella di base viene bloccata. Ad esempio, un'operazione di selezione dà come risultatoSQL0668N Operation not allowed for reason code "1" on table "TEST.SIMPLE". SQLSTATE=57007. La tabella di staging è accessibile, ma non contiene ancora le informazioni sui nuovi dati.
  5. Abilita l'elaborazione dell'integrità.
    db2 "set integrity for test.simple immediate checked"
    Viene restituito il seguente messaggio:
    SQL3601W L'istruzione ha fatto sì che una o più tabelle fossero automaticamente 
    essere posto nello state.SQLSTATE=01586
  6. A questo punto, la tabella di staging è bloccata e le operazioni di modifica della tabella di base vengono rifiutate. Ad esempio, la seguente affermazione fallisce:
    "insert into test.simple values(15, 'green')"
    Viene restituito il seguente messaggio:
    DB21034E Il comando è stato elaborato come un'istruzione SQL perché 
    non era un comando valido del processore della riga di comando. Durante l'elaborazione SQL 
    è tornato: 
    SQL0668N Operazione non consentita per il codice motivo "1" su 
    tabella "SYSIBMTS" . SYSTSAUXLOG_IX114555 ".  SQLSTATE=57007
  7. Azzerare le tabelle.
    db2ts "reset pending for table test.simple for text connect to mydb"
    
    Dopo aver emesso con successo il comando RESET PENDING, la tabella di staging viene sbloccata e le modifiche alla tabella di base sono nuovamente possibili. Per sbloccare la tabella di staging, si può inviare il comando RESET PENDING sulla tabella di base per sbloccare tutte le tabelle di staging dipendenti mantenute dal testo, oppure il comando SET INTEGRITY sulla tabella di staging specifica.
  8. La tabella di staging mantenuta dal testo contiene ora le modifiche che devono essere applicate all'indice di ricerca del testo. Emettere un comando di aggiornamento per l'indice.
    db2ts "update index test.simpleix for text connect to mydb"