Condividi tramite


ALTER FULLTEXT CATALOG (Transact-SQL)

Si applica a:SQL Server, Database SQL di Azure e Istanza gestita di SQL di Azure.

Utilizzare questa istruzione per modificare le proprietà di un catalogo full-text.

convenzioni di sintassi Transact-SQL

Sintassi

ALTER FULLTEXT CATALOG catalog_name
{ REBUILD [ WITH ACCENT_SENSITIVITY = { ON | OFF } ]
| REORGANIZE
| AS DEFAULT
}

Argomenti

catalog_name

Specifica il nome del catalogo da modificare. Se un catalogo con il nome specificato non esiste, SQL Server restituisce un errore e non esegue l'operazione ALTER.

REBUILD

Il SQL Server Database Engine ricompila l'intero catalogo. Quando si ricompila un catalogo, il catalogo esistente viene eliminato e viene creato un nuovo catalogo al suo posto. Tutte le tabelle con riferimenti di indicizzazione full-text vengono associate al nuovo catalogo. La ricompilazione reimposta i metadati full-text nelle tabelle di sistema del database.

WITH ACCENT_SENSITIVITY = { ON | OFF }

Specifica se il catalogo da modificare supporta o meno la distinzione tra caratteri accentati e non accentati per l'esecuzione di query e l'indicizzazione full-text.

Per determinare l'impostazione corrente della proprietà di riservatezza accentato di un catalogo full-text, utilizzare la FULLTEXTCATALOGPROPERTY funzione con il valore della AccentSensitivity proprietà su catalog_name.

  • Se la funzione restituisce 1, il catalogo full-text è sensibile all'accento.
  • Se la funzione restituisce 0, il catalogo non è sensibile all'accento.

Il valore predefinito per la distinzione tra caratteri accentati e non accentati è uguale per il catalogo e il database.

REORGANIZE

Il SQL Server Database Engine esegue un'unione master, che comporta l'unione degli indici più piccoli creati nel processo di indicizzazione in un indice di grandi dimensioni. L'unione dei frammenti di indici full-text può migliorare le prestazioni e liberare risorse di memoria e spazio su disco. Se il catalogo full-text è soggetto a modifiche frequenti, utilizzare questo comando con regolarità per riorganizzarlo.

REORGANIZE ottimizza anche le strutture di indice e catalogo interne.

A seconda della quantità di dati indicizzati, il completamento di un'unione master potrebbe richiedere del tempo. L'unione di una grande quantità di dati può creare una transazione a esecuzione prolungata, ritardando il troncamento del log delle transazioni durante un checkpoint. In questo caso, le dimensioni del log delle transazioni potrebbero aumentare notevolmente, se si utilizza il modello di recupero con registrazione completa.

È consigliabile verificare che il log delle transazioni contenga spazio sufficiente per una transazione con esecuzione prolungata prima di riorganizzare un indice full-text di grandi dimensioni in un database in cui viene utilizzato il modello di recupero con registrazione completa. Per altre informazioni, vedere Gestire le dimensioni del file di log delle transazioni.

COME PRDEFINITO

Specifica che il catalogo è il catalogo predefinito. Quando si creano indici full-text senza specificare cataloghi, viene usato il catalogo predefinito. Se è presente un catalogo full-text predefinito esistente, l'impostazione di questo catalogo AS DEFAULT sostituisce l'impostazione predefinita esistente.

Autorizzazioni

Per usare ALTER FULLTEXT CATALOG, è necessaria una delle autorizzazioni seguenti:

  • ALTER autorizzazione per il catalogo full-text
  • Appartenenza ai ruoli predefiniti del database db_owner o db_ddladmin
  • Appartenenza al ruolo predefinito del server sysadmin

Per usare ALTER FULLTEXT CATALOG ... AS DEFAULT, è necessaria ALTER l'autorizzazione per il catalogo full-text e CREATE FULLTEXT CATALOG l'autorizzazione per il database.

Osservazioni:

Quando si esegue un'operazione REBUILD in un catalogo full-text, l'operazione di ricompilazione viene sospesa se un'altra sessione dispone di una transazione aperta che esegue INSERToperazioni , UPDATEo DELETE su tabelle appartenenti a tale catalogo. L'operazione di ricompilazione riprende solo dopo il commit o il rollback di altre transazioni. È possibile monitorare questa situazione usando le dmv (DMV) sys.dm_exec_requests e sys.dm_exec_sessions . È possibile che vengano visualizzati blocchi tra la sessione utente e le sessioni di ricompilazione in background, con un tipo di attesa .LCK_M_IS

Analogamente, durante un'operazione REORGANIZE , potrebbe essere visualizzato il FT_MASTER_MERGE tipo di attesa nella sessione in cui è in esecuzione il comando. Questo tipo di attesa può verificarsi quando altre sessioni hanno transazioni con esecuzione prolungata che eseguono INSERToperazioni , UPDATEo DELETE su tabelle nello stesso catalogo full-text. sys.dm_exec_requests Nelle DMV e sys.dm_exec_sessions potrebbe essere visualizzata una o più sessioni in background con un LCK_M_IX tipo di attesa e il FT_MASTER_MERGE comando . L'operazione REORGANIZE non viene completata fino al rilascio di tali blocchi.

La query seguente restituisce sessioni in background bloccate.

SELECT r1.session_id,
       r1.blocking_session_id,
       r1.wait_type,
       r1.wait_resource,
       r1.last_wait_type,
       r1.command AS BlockedSessionCommand,
       r2.command AS BlockingSessionCommand,
       s1.login_name AS BlockedSessionLogin,
       s2.login_name AS BlockingSessionLogin,
       s1.host_name AS BlockedSessionHost,
       s2.host_name AS BlockingSessionHost,
       r1.status AS BlockedSessionStatus,
       r2.status AS BlockingSessionStatus
FROM sys.dm_exec_requests AS r1
     INNER JOIN sys.dm_exec_sessions AS s1
         ON r1.session_id = s1.session_id
     INNER JOIN sys.dm_exec_sessions AS s2
         ON r1.blocking_session_id = s2.session_id
     LEFT OUTER JOIN sys.dm_exec_requests AS r2
         ON s2.session_id = r2.session_id
WHERE r1.blocking_session_id <> 0
      AND r1.status = 'background'
ORDER BY r1.wait_time DESC;

Esempi

Nell'esempio seguente la proprietà AccentSensitivity del catalogo full-text predefinito viene impostata su ftCatalog, a indicare che il catalogo supporta la distinzione tra caratteri accentati e non accentati.

  1. Modificare il catalogo impostando la distinzione tra caratteri accentati e non accentati.

    USE AdventureWorks2025;
    GO
    
    ALTER FULLTEXT CATALOG ftCatalog
    REBUILD WITH ACCENT_SENSITIVITY = OFF;
    
  2. Controllare la distinzione tra caratteri accenti e caratteri accenti.

    SELECT FULLTEXTCATALOGPROPERTY('ftCatalog', 'AccentSensitivity');
    

    La query restituisce 0, il che significa che il catalogo non è sensibile all'accento.