Opzioni di ALTER DATABASE SET (Transact-SQL)

Imposta le opzioni di database in Microsoft SQL Server, nel database SQL di Azure e in Azure Synapse Analytics. Per altre opzioni di ALTER DATABASE, vedere ALTER DATABASE.

Nota

L'impostazione di alcune opzioni con ALTER DATABASE potrebbe richiedere l'accesso esclusivo al database. Se l'istruzione ALTER DATABASE non viene completata in modo tempestivo, verificare se sono presenti altre sessioni nel database che bloccano la sessione ALTER DATABASE.

Per altre informazioni sulle convenzioni della sintassi, vedere Convenzioni della sintassi Transact-SQL.

Selezionare un prodotto

Nella riga seguente selezionare il nome del prodotto a cui si è interessati. Verrà così visualizzato un contenuto diverso in questa pagina Web, appropriato per il prodotto selezionato.

* SQL Server *  

 

SQL Server

Il mirroring del database, i gruppi di disponibilità Always On e i livelli di compatibilità sono opzioni SET, ma vengono descritti in articoli separati a causa dell'elevata quantità di informazioni. Per altre informazioni, vedere Mirroring del database ALTER DATABASE, ALTER DATABASE SET HADR e Livello di compatibilità ALTER DATABASE.

Le configurazioni con ambito database vengono usate per impostare diverse configurazioni di database a livello di singolo database. Per altre informazioni, vedere ALTER DATABASE SCOPED CONFIGURATION.

Nota

Molte opzioni SET di database possono essere configurate per la sessione corrente tramite Istruzioni SET e spesso vengono configurate dalle applicazioni durante la connessione. Le opzioni del set a livello di sessione sostituiscono i ALTER DATABASE SET valori. Le opzioni di database descritte nelle sezioni seguenti sono valori che è possibile impostare per le sessioni che non prevedono esplicitamente altri valori di opzioni SET.

Sintassi

ALTER DATABASE { database_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] [ WITH <termination> ]
}

<option_spec> ::=
{
    <accelerated_database_recovery>
  | <auto_option>
  | <automatic_tuning_option>
  | <change_tracking_option>
  | <containment_option>
  | <cursor_option>
  | <database_mirroring_option>
  | <date_correlation_optimization_option>
  | <db_encryption_option>
  | <db_state_option>
  | <db_update_option>
  | <db_user_access_option>
  | <delayed_durability_option>
  | <external_access_option>
  | FILESTREAM ( <FILESTREAM_option> )
  | <HADR_options>
  | <mixed_page_allocation_option>
  | <parameterization_option>
  | <query_store_options>
  | <recovery_option>
  | <remote_data_archive_option>
  | <service_broker_option>
  | <snapshot_option>
  | <sql_option>
  | <suspend_for_snapshot_backup>
  | <target_recovery_time_option>
  | <termination>
  | <temporal_history_retention>
  | <data_retention_policy>
}
;

<accelerated_database_recovery> ::=
{
    ACCELERATED_DATABASE_RECOVERY = { ON | OFF }
     [ ( PERSISTENT_VERSION_STORE_FILEGROUP = { filegroup name } ) ];
}

<auto_option> ::=
{
    AUTO_CLOSE { ON | OFF }
  | AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
   {
       = OFF
     | = ON [ ( <change_tracking_option_list > [,...n] ) ]
     | ( <change_tracking_option_list> [,...n] )
   }
}

<change_tracking_option_list> ::=
{
   AUTO_CLEANUP = { ON | OFF }
 | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
}

<containment_option> ::=
   CONTAINMENT = { NONE | PARTIAL }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
  | CURSOR_DEFAULT { LOCAL | GLOBAL }
}

<database_mirroring_option>
  ALTER DATABASE Database Mirroring

<date_correlation_optimization_option> ::=
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }

<db_encryption_option> ::=
    ENCRYPTION { ON | OFF | SUSPEND | RESUME }

<db_state_option> ::=
    { ONLINE | OFFLINE | EMERGENCY }

<db_update_option> ::=
    { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
    { SINGLE_USER | RESTRICTED_USER | MULTI_USER }

<delayed_durability_option> ::=
    DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<external_access_option> ::=
{
    DB_CHAINING { ON | OFF }
  | TRUSTWORTHY { ON | OFF }
  | DEFAULT_FULLTEXT_LANGUAGE = { <lcid> | <language name> | <language alias> }
  | DEFAULT_LANGUAGE = { <lcid> | <language name> | <language alias> }
  | NESTED_TRIGGERS = { OFF | ON }
  | TRANSFORM_NOISE_WORDS = { OFF | ON }
  | TWO_DIGIT_YEAR_CUTOFF = { 1753, ..., 2049, ..., 9999 }
}

<FILESTREAM_option> ::=
{
    NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL
  | DIRECTORY_NAME = <directory_name>
}

<HADR_options> ::=
    ALTER DATABASE SET HADR

<mixed_page_allocation_option> ::=
    MIXED_PAGE_ALLOCATION { OFF | ON }

<parameterization_option> ::=
    PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
    QUERY_STORE
    {
          = OFF [ ( FORCED ) ]
        | = ON [ ( <query_store_option_list> [,...n] ) ]
        | ( < query_store_option_list> [,...n] )
        | CLEAR [ ALL ]
    }
}

<query_store_option_list> ::=
{
      OPERATION_MODE = { READ_WRITE | READ_ONLY }
    | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
    | DATA_FLUSH_INTERVAL_SECONDS = number
    | MAX_STORAGE_SIZE_MB = number
    | INTERVAL_LENGTH_MINUTES = number
    | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
    | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
    | MAX_PLANS_PER_QUERY = number
    | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
    | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> :: =
{
      STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<recovery_option> ::=
{
    RECOVERY { FULL | BULK_LOGGED | SIMPLE }
  | TORN_PAGE_DETECTION { ON | OFF }
  | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
}

<remote_data_archive_option> ::=
{
    REMOTE_DATA_ARCHIVE =
    {
        ON ( SERVER = <server_name>,
             {
                  CREDENTIAL = <db_scoped_credential_name>
                  | FEDERATED_SERVICE_ACCOUNT = ON | OFF
             }
        )
        | OFF
    }
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | DISABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
  | HONOR_BROKER_PRIORITY { ON | OFF }
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<suspend_for_snapshot_backup> ::=
    SET SUSPEND_FOR_SNAPSHOT_BACKUP = { ON | OFF } [ ( MODE = COPY_ONLY ) ]

<target_recovery_time_option> ::=
    TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES }

<termination>::=
{
    ROLLBACK AFTER number [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}

<temporal_history_retention> ::=
    TEMPORAL_HISTORY_RETENTION { ON | OFF }

<data_retention_policy> ::=
    DATA_RETENTION { ON | OFF }

Argomenti

database_name

Nome del database da modificare.

CURRENT

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Esegue l'azione nel database corrente. CURRENT non è supportato per tutte le opzioni in tutti i contesti. In caso di errore di CURRENT, specificare il nome del database.

<> accelerated_database_recovery ::=

Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

Abilita il ripristino accelerato del database (ADR, Accelerated Database Recovery) per ogni database. Il ripristino accelerato del database è impostato su OFF per impostazione predefinita in SQL Server 2019 (15.x). Usando questa sintassi è possibile designare un filegroup specifico per i dati dell'archivio versioni permanente. Se non è specificato alcun filegroup, per l'archivio versioni permanente viene usato il filegroup PRIMARY. Per altre informazioni ed esempi, vedere Ripristino accelerato del database.

<> auto_option ::=

Consente di controllare le opzioni automatiche.

AUTO_CLOSE { ON | OFF }

  • In...

    Il database viene chiuso normalmente e le relative risorse vengono rilasciate dopo la disconnessione dell'ultimo utente.

    Il database viene riaperto automaticamente quando un utente tenta di usarlo nuovamente, Ad esempio, questo comportamento di riapertura si verifica quando un utente invia un'istruzione USE database_name. Se l'opzione AUTO_CLOSE è impostata su ON, è possibile che il database venga arrestato correttamente. In questo caso, il database non viene riaperto finché un utente non prova a usarlo al successivo riavvio del motore di database.

    Dopo l'arresto di un database, al successivo tentativo di usarlo da parte di un'applicazione, il database deve prima essere aperto e quindi lo stato deve essere modificato in online. Questa operazione può richiedere tempo e può comportare timeout dell'applicazione.

  • OFF

    Il database rimane aperto dopo la disconnessione dell'ultimo utente.

    L'opzione AUTO_CLOSE è utile per i database desktop perché consente di gestire i file di database come normali file. I file possono essere spostati, copiati per creare backup o anche inviati tramite posta elettronica ad altri utenti. Il processo AUTO_CLOSE è asincrono. Operazioni ripetute di apertura e chiusura del database non comportano una riduzione delle prestazioni.

Nota

L'opzione AUTO_CLOSE non è disponibile in un database indipendente o nel database SQL. È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_close_on nella vista del catalogo sys.databases o la proprietà IsAutoClose della funzione DATABASEPROPERTYEX.

Se l'opzione AUTO_CLOSE è impostata su ON, alcune colonne nella vista del catalogo sys.databases e la funzione DATABASEPROPERTYEX restituiranno NULL perché il database non è disponibile per il recupero dei dati. Per risolvere questo problema, eseguire un'istruzione USE per aprire il database.

Per il mirroring del database è necessario che AUTO_CLOSE sia OFF.

Quando il database è impostato su AUTOCLOSE = ON, un'operazione che ne avvia un arresto automatico cancella la cache dei piani per l'istanza di SQL Server. La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un peggioramento improvviso e temporaneo delle prestazioni di esecuzione delle query. A partire da SQL Server 2005 (9.x) Service Pack 2, per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server contiene il messaggio informativo seguente: SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations. Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

L'impostazione AUTO_CLOSE può essere utile in alcune situazioni rare, ad esempio in un'istanza di SQL Server senza memoria sufficiente per funzionare in modo stabilmente con un numero elevato di database o per un'istanza legacy di SQL Server a 32 bit con un numero elevato di database. In questi scenari può essere utile abilitare AUTO_CLOSE e conservare le risorse di memoria necessarie per mantenere aperto un database quando questo non viene usato da alcuna applicazione. Quando il database è aperto, sono necessarie alcune allocazioni di memoria predefinite, ad esempio strutture interne per rappresentare vari oggetti di metadati del database e buffer di log delle transazioni.

AUTO_CREATE_STATISTICS { ON | OFF }

  • In...

    Query Optimizer crea statistiche per colonne singole nei predicati di query, in base alle esigenze, per migliorare i piani di query e le prestazioni di esecuzione delle query. Queste statistiche per colonne singole vengono create quando Query Optimizer compila le query. Vengono create solo sulle colonne che non sono già le prime di un oggetto statistiche esistente.

    L'impostazione predefinita è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

  • OFF

    Query Optimizer non crea statistiche sulle singole colonne nei predicati di query durante la compilazione delle query. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_create_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoCreateStatistics della funzione DATABASEPROPERTYEX.

Per altre informazioni, vedere la sezione "Opzioni relative alle statistiche nel database" in Statistiche.

INCREMENTAL = ON | OFF

Si applica a: SQL Server, a partire da SQL Server 2014 (12.x), e database SQL di Azure

Imposta AUTO_CREATE_STATISTICS su ON e INCREMENTAL su ON. Questa impostazione crea automaticamente statistiche incrementali ogni volta che sono supportate. Il valore predefinito è OFF. Per altre informazioni, vedere CREATE STATISTICS.

AUTO_SHRINK { ON | OFF }

  • In...

    I file di database vengono compattati periodicamente, se necessario. Se non è necessario soddisfare esigenze specifiche, non impostare l'opzione di database AUTO_SHRINK su ON. Per altre informazioni, vedere Compattare un database.

    È possibile compattare automaticamente sia i file di dati sia i file di log. AUTO_SHRINK riduce le dimensioni del log delle transazioni solo se per il database è impostato il modello di recupero con registrazione minima oppure se viene eseguito il backup del log. Quando si imposta AUTO_SHRINK su OFF, i file di database non vengono compattati automaticamente durante i controlli periodici per verificare la presenza di spazio inutilizzato.

    L'opzione AUTO_SHRINK compatta i file quando più del 25% dello spazio del file risulta inutilizzato. Compatta il file in una delle due dimensioni (a seconda del valore maggiore):

    • La dimensione in cui il 25% del file è costituito da spazio inutilizzato
    • La dimensione del file quando è stato creato

    Non è possibile compattare un database di sola lettura.

  • OFF

    I file di database non vengono compattati automaticamente durante i controlli periodici per la presenza di spazio inutilizzato.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_shrink_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoShrink della funzione DATABASEPROPERTYEX.

Nota

L'opzione AUTO_SHRINK non è disponibile in un database indipendente.

AUTO_UPDATE_STATISTICS { ON | OFF }

  • In...

    Specifica che Query Optimizer aggiorna le statistiche quando queste vengono usate da una query e quando potrebbero non essere aggiornate. Le statistiche diventano obsolete in seguito a operazioni di inserimento, aggiornamento, eliminazione o unione che modificano la distribuzione dei dati nella tabella o nella vista indicizzata. Query Optimizer determina che le statistiche potrebbero non essere aggiornate contando il numero di modifiche apportate ai dati dopo l'ultimo aggiornamento delle statistiche e confrontando il numero di modifiche con una soglia. basata sul numero di righe nella tabella o nella vista indicizzata.

    Query Optimizer controlla la presenza di statistiche non aggiornate prima di compilare una query e di eseguire un piano di query memorizzato nella cache. Usa le colonne, le tabelle e le viste indicizzate nel predicato di query per determinare quali statistiche potrebbero non essere aggiornate. Query Optimizer verifica questa possibilità prima di compilare una query. Prima di eseguire un piano di query memorizzato nella cache, il motore di database verifica che il piano di query faccia riferimento a statistiche aggiornate.

    L'opzione AUTO_UPDATE_STATISTICS_ASYNC si applica alle statistiche create per indici, colonne singole nei predicati di query e statistiche create con l'istruzione CREATE STATISTICS. Questa opzione si applica anche alle statistiche filtrate.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

    Usare l'opzione AUTO_UPDATE_STATISTICS_ASYNC per specificare se le statistiche vengono aggiornate in modo sincrono o asincrono.

  • OFF

    Specifica che Query Optimizer non aggiorna le statistiche quando queste vengono usate da una query né quando potrebbero essere non aggiornate. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoUpdateStatistics della funzione DATABASEPROPERTYEX.

Per altre informazioni, vedere la sezione "Opzioni relative alle statistiche nel database" in Statistiche.

AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

  • In...

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono asincroni. Query Optimizer non attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    L'impostazione di questa opzione su ON non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

    L'impostazione predefinita dell'opzione AUTO_UPDATE_STATISTICS_ASYNC è OFF e Query Optimizer aggiorna le statistiche in modo sincrono.

  • OFF

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono sincroni. Query Optimizer attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    Nota

    L'impostazione di questa opzione su OFF non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_async_on nella vista del catalogo sys.databases.

Per altre informazioni su quando usare gli aggiornamenti delle statistiche sincroni o asincroni, vedere la sezione sulle opzioni relative alle statistiche in Statistiche.

<> automatic_tuning_option ::=

Si applica a: SQL Server, a partire da SQL Server 2017 (14.x)

Abilita o disabilita l'opzione di FORCE_LAST_GOOD_PLAN Ottimizzazione automatica. È possibile visualizzare lo stato di questa opzione nella vista sys.database_automatic_tuning_options.

FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF }

  • DEFAULT

    Il valore predefinito per SQL Server è OFF.

  • In...

    Il motore di database forza automaticamente l'ultimo piano valido noto nelle query Transact-SQL nel caso in cui il nuovo piano di query causi un peggioramento delle prestazioni. Il motore di database monitora continuamente le prestazioni della query Transact-SQL con il piano forzato.

    Se si rilevano miglioramenti delle prestazioni, il motore di database continuerà a usare l'ultimo piano valido noto. Se non si rilevano miglioramenti delle prestazioni, il motore di database creerà un nuovo piano di query. L'istruzione non riuscirà se Query Store non è abilitato o non è in modalità Lettura/Scrittura.

  • OFF

    Il motore di database segnala potenziali peggioramenti delle prestazioni delle query causati da modifiche al piano di query nella vista sys.dm_db_tuning_recommendations. I consigli qui segnalati non vengono tuttavia applicati automaticamente. Gli utenti possono monitorare i consigli attivi e risolvere i problemi identificati applicando gli script Transact-SQL mostrati nella vista. Il valore predefinito è OFF.

<> change_tracking_option ::=

Si applica a: SQL Server e database SQL di Azure

Controlla le opzioni di rilevamento delle modifiche. È possibile abilitare il rilevamento delle modifiche, impostare le opzioni, modificare le opzioni e disabilitare il rilevamento delle modifiche. Per gli esempi, vedere la sezione Esempi più avanti in questo articolo.

  • In...

    Abilita il rilevamento delle modifiche per il database. Quando si abilita il rilevamento delle modifiche, è possibile impostare anche le opzioni AUTO CLEANUP e CHANGE RETENTION.

  • AUTO_CLEANUP = { ON | OFF }

    • In...

      Le informazioni sul rilevamento delle modifiche vengono rimosse automaticamente una volta trascorso il periodo di memorizzazione specificato.

    • OFF

      I dati relativi al rilevamento delle modifiche non vengono rimossi automaticamente dal database.

  • CHANGE_RETENTION = retention_period { DAYS | ORE | MINUTES }

    Specifica il periodo minimo di conservazione delle informazioni sul rilevamento delle modifiche nel database. I dati vengono rimossi solo quando il valore di AUTO_CLEANUP è ON.

    retention_period è un numero intero che specifica il componente numerico del periodo di memorizzazione.

    Il periodo di conservazione predefinito è 2 giorni. Il periodo di memorizzazione minimo è 1 minuto. Il tipo di conservazione predefinito è DAYS.

  • OFF disabilita il rilevamento delle modifiche per il database. Prima di disabilitare il rilevamento delle modifiche per il database, disabilitarlo per tutte le tabelle.

<> containment_option ::=

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Consente di controllare le opzioni di indipendenza del database.

CONTAINMENT = { NONE | PARTIAL}

  • NONE

    Il database non è un database indipendente.

  • PARTIAL

    Il database è un database indipendente. L'impostazione dell'indipendenza del database su PARTIAL restituisce un errore se per il database è abilitato Change Data Capture, la replica o il rilevamento delle modifiche. Il controllo degli errori viene arrestato dopo un errore. Per altre informazioni sui database indipendenti, vedere Contained Databases.

<> cursor_option ::=

Consente di controllare le opzioni del cursore.

CURSOR_CLOSE_ON_COMMIT { ON | OFF }

  • In...

    Quando si esegue il commit o il rollback di una transazione, eventuali cursori aperti vengono chiusi.

  • OFF

    I cursori rimangono aperti quando viene eseguito il commit di una transazione. Quando si esegue il rollback di una transazione vengono chiusi tutti i cursori, ad eccezione di quelli definiti come INSENSITIVE o STATIC.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CURSOR_CLOSE_ON_COMMIT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CURSOR_CLOSE_ON_COMMIT su OFF per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET CURSOR_CLOSE_ON_COMMIT.

È possibile determinare lo stato di questa opzione esaminando la colonna is_cursor_close_on_commit_on nella vista del catalogo sys.databases o la proprietà IsCloseCursorsOnCommitEnabled della funzione DATABASEPROPERTYEX.

CURSOR_DEFAULT { LOCAL | GLOBAL }

Si applica a: SQL Server

Determina se l'ambito del cursore è LOCAL o GLOBAL.

  • LOCAL

    Se si specifica LOCAL e non si definisce un cursore come GLOBAL al momento della creazione, l'ambito del cursore è locale. In particolare, l'ambito è locale rispetto al batch, alla stored procedure o al trigger in cui il cursore è stato creato. Il nome del cursore è valido solo in questo ambito.

    È possibile fare riferimento al cursore tramite variabili di cursore locali nel batch, nella stored procedure o nel trigger oppure tramite un parametro OUTPUT di stored procedure. Il cursore viene deallocato in modo implicito al termine dell'esecuzione del batch, della stored procedure o del trigger, a meno che non sia stato passato a un parametro OUTPUT. Il cursore potrebbe essere passato di nuovo a un parametro OUTPUT. In questo caso, viene deallocato quando l'ultima variabile che vi fa riferimento viene deallocata o esce dall'ambito.

  • GLOBAL

    Se si specifica GLOBAL e se un cursore non viene definito come LOCAL al momento della creazione, l'ambito del cursore è globale rispetto alla connessione. È possibile fare riferimento al nome del cursore in qualsiasi stored procedure o batch eseguiti tramite la connessione.

    Il cursore viene deallocato in modo implicito soltanto al momento della disconnessione. Per altre informazioni, vedere DECLARE CURSOR.

È possibile determinare lo stato di questa opzione esaminando la colonna is_local_cursor_default nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsLocalCursorsDefault della funzione DATABASEPROPERTYEX.

<> temporal_history_retention ::=

TEMPORAL_HISTORY_RETENTION { ON | OFF }

ON per impostazione predefinita, ma viene anche impostato automaticamente su OFF dopo un'operazione di ripristino temporizzato. Per altre informazioni, tra cui come abilitare questa impostazione, vedere Come configurare criteri di conservazione.

<> data_retention_policy ::=

Si applica a: Solo SQL Edge di Azure

DATA_RETENTION { ON | OFF }

  • In...

    Abilita la pulizia basata sui criteri di conservazione dei dati in un database.

  • OFF

    Disabilita la pulizia basata sui criteri di conservazione dei dati in un database.

<database_mirroring>

Si applica a: SQL Server

Per le descrizioni dell'argomento, vedere Mirroring del database ALTER DATABASE.

<> date_correlation_optimization_option ::=

Si applica a: SQL Server

Controlla l'opzione date_correlation_optimization.

DATE_CORRELATION_OPTIMIZATION { ON | OFF }

  • In...

    SQL Server mantiene statistiche di correlazione in cui un vincolo FOREIGN KEY collega due tabelle qualsiasi nel database e le tabella includono colonne datetime.

  • OFF

    Non vengono mantenute statistiche di correlazione.

Per impostare DATE_CORRELATION_OPTIMIZATION su ON, è necessario che non siano presenti connessioni attive al database, ad eccezione della connessione che esegue l'istruzione ALTER DATABASE. Successivamente, sono supportate più connessioni.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_date_correlation_on nella vista del catalogo sys.databases.

<> db_encryption_option ::=

Controlla lo stato della crittografia del database.

ENCRYPTION { ON | OFF | SUSPEND | RESUME }

  • In...

    Imposta il database in modo che venga crittografato.

  • OFF

    Imposta il database in modo che non venga crittografato.

  • SUSPEND

    Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

    Può essere usato per sospendere l'analisi della crittografia dopo l'abilitazione o la disabilitazione di Transparent Data Encryption oppure dopo la modifica della chiave di crittografia.

  • RESUME

    Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

    Consente di riprendere l'analisi della crittografia precedentemente sospesa.

Per altre informazioni sulla crittografia del database, vedere Transparent Data Encryption e Transparent Data Encryption con il database SQL di Azure.

Quando la crittografia è abilitata a livello di database, tutti i filegroup vengono crittografati. I nuovi filegroup erediteranno la proprietà di crittografia. Se in un database sono presenti filegroup impostati su READ ONLY, l'operazione di crittografia del database avrà esito negativo.

È possibile visualizzare lo stato di crittografia del database e lo stato dell'analisi della crittografia usando la DMV sys.dm_database_encryption_keys.

<> db_state_option ::=

Si applica a: SQL Server

Controlla lo stato del database.

  • OFFLINE

    Il database viene chiuso normalmente e contrassegnato come offline. Mentre è offline, il database non può essere modificato.

  • ONLINE

    Il database è aperto e disponibile per l'utilizzo.

  • EMERGENCY

    Il database è contrassegnato come READ_ONLY, la registrazione è disabilitata e l'accesso è limitato ai soli membri del ruolo predefinito del server sysadmin. L'opzione EMERGENCY viene usata principalmente per attività di risoluzione dei problemi. Ad esempio, è possibile impostare lo stato EMERGENCY per un database contrassegnato come sospetto a causa di un file di log danneggiato. Con questa impostazione, l'amministratore di sistema potrà accedere in sola lettura al database. Solo i membri del ruolo predefinito del server sysadmin possono impostare lo stato EMERGENCY per un database.

È richiesta l'autorizzazione ALTER DATABASE per il database dell'area di interesse, per impostare il database sullo stato offline o emergency, nonché l'autorizzazione ALTER ANY DATABASE a livello di server per portare un database da offline a online.

È possibile determinare lo stato di questa opzione esaminando le colonne state e state_desc nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà Status della funzione DATABASEPROPERTYEX. Per altre informazioni, vedere Stati del database.

Un database contrassegnato come RESTORING non può essere impostato su OFFLINE, ONLINE o EMERGENCY. Lo stato RESTORING può essere impostato durante un'operazione di ripristino attiva o quando un'operazione di ripristino di un database o di un file di log ha esito negativo a causa di un file di backup danneggiato.

<> db_update_option ::=

Indica se sono consentiti aggiornamenti nel database.

  • READ_ONLY

    Gli utenti possono leggere i dati dal database, ma non modificarli.

    Nota

    Per migliorare le prestazioni di esecuzione delle query, aggiornare le statistiche prima di impostare un database su READ_ONLY. Se dopo che un database viene impostato su READ_ONLY sono necessarie statistiche aggiuntive, il motore di database creerà statistiche nel database di sistema tempdb. Per altre informazioni sulle statistiche per un database di sola lettura, vedere Statistiche.

  • READ_WRITE

    Il database è disponibile per operazioni di lettura e scrittura.

Per modificare questo stato, è necessario disporre dell'accesso esclusivo al database. Per altre informazioni, vedere la clausola SINGLE_USER.

Nota

In database federati del database SQL di Azure la sintassi SET { READ_ONLY | READ_WRITE } è disabilitata.

<> db_user_access_option ::=

Controlla l'accesso degli utenti al database.

SINGLE_USER

Si applica a: SQL Server

Specifica che l'accesso al database è consentito a un solo utente alla volta. Se si specifica SINGLE_USER e un altro utente si connette al database, l'istruzione ALTER DATABASE viene bloccata finché tutti gli utenti non si disconnettono dal database specificato. Per sostituire questo comportamento, vedere la clausola WITH <termination>.

Il database rimane in modalità SINGLE_USER anche se l'utente che imposta l'opzione si disconnette. A questo punto, un utente diverso, ma solo uno, può connettersi al database.

Prima di impostare il database in modalità SINGLE_USER, verificare che l'opzione AUTO_UPDATE_STATISTICS_ASYNC sia impostata su OFF. Se l'opzione è impostata su ON, il thread in background usato per aggiornare le statistiche stabilisce una connessione con il database che non sarà quindi accessibile in modalità utente singolo. Per visualizzare lo stato di questa opzione, eseguire una query sulla colonna is_auto_update_stats_async_on nella vista del catalogo sys.databases. Se l'opzione è impostata su ON, effettuare le operazioni seguenti:

  1. Impostare AUTO_UPDATE_STATISTICS_ASYNC su OFF.

  2. Verificare la presenza di processi asincroni attivi relativi alle statistiche eseguendo una query sulla DMV sys.dm_exec_background_job_queue.

Se sono presenti processi attivi, consentire il completamento di tali processi o terminarli manualmente usando KILL STATS JOB.

RESTRICTED_USER

Consente la connessione al database solo ai membri del ruolo predefinito del database db_owner e ai membri dei ruoli predefiniti del server dbcreator e sysadmin. senza tuttavia imporre un limite al numero di connessioni. Tutte le connessioni al database vengono interrotte entro l'intervallo di tempo specificato nella clausola di terminazione dell'istruzione ALTER DATABASE. Dopo l'impostazione dello stato RESTRICTED_USER per il database, qualsiasi tentativo di connessione da parte di utenti non qualificati viene rifiutato.

MULTI_USER

Consente la connessione al database a tutti gli utenti che dispongono di autorizzazioni appropriate. È possibile determinare lo stato di questa opzione esaminando la colonna user_access nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà UserAccess della funzione DATABASEPROPERTYEX.

<> delayed_durability_option ::=

Si applica a: SQL Server, a partire da SQL Server 2014 (12.x)

Determina se le transazioni sottoposte a commit sono completamente durevoli o durevoli posticipate.

  • DISABLED

    Tutte le transazioni in cui viene usato SET DISABLED sono completamente durevoli. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

  • ALLOWED

    Tutte le transazioni in cui viene usato SET ALLOWED sono completamente durevoli o durevoli posticipate, a seconda del set di opzioni di durabilità nel blocco atomico o nell'istruzione COMMIT.

  • FORCED

    Tutte le transazioni in cui viene usato SET FORCED sono durevoli posticipate. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

<> external_access_option ::=

Si applica a: SQL Server

Determina se è consentito l'accesso al database da parte di risorse esterne, ad esempio oggetti di un altro database.

DB_CHAINING { ON | OFF }

  • In...

    Il database può essere l'origine o la destinazione di una catena di proprietà tra database.

  • OFF

    Il database non può partecipare al concatenamento della proprietà tra database.

Importante

L'istanza di SQL Server riconosce questa impostazione quando l'opzione server di concatenamento della proprietà tra database è impostata su 0 (OFF). Quando cross db ownership chaining è 1 (ON), tutti i database utente possono partecipare ai concatenamenti della proprietà tra database, a prescindere dal valore di questa opzione. Questa opzione viene impostata tramite sp_configure.

Per impostare questa opzione, è necessaria l'autorizzazione CONTROL SERVER nel database.

L'opzione DB_CHAINING non può essere impostata nei database di sistema master, model e tempdb.

È possibile determinare lo stato di questa opzione esaminando la colonna is_db_chaining_on nella vista del catalogo sys.databases.

TRUSTWORTHY { ON | OFF }

  • In...

    I moduli di database, ad esempio stored procedure o funzioni definite dall'utente, che usano un contesto di rappresentazione, possono accedere a risorse esterne al database.

  • OFF

    I moduli di database in un contesto di rappresentazione non possono accedere a risorse esterne al database.

    L'opzione TRUSTWORTHY viene impostata su OFF ogni volta che il database viene collegato.

Per impostazione predefinita, per tutti i database di sistema ad eccezione del database msdb l'opzione TRUSTWORTHY è impostata su OFF. Il valore non può essere modificato per i database model e tempdb. È consigliabile evitare di impostare l'opzione TRUSTWORTHY su ON per il database master.

Per impostare questa opzione, è necessaria l'autorizzazione CONTROL SERVER nel database.

È possibile determinare lo stato di questa opzione esaminando la colonna is_trustworthy_on nella vista del catalogo sys.databases.

DEFAULT_FULLTEXT_LANGUAGE

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Consente di specificare il valore della lingua predefinita per le colonne con indicizzazione full-text.

Importante

Questa opzione è consentita solo quando l'opzione CONTAINMENT è stata impostata su PARTIAL. Se l'opzione CONTAINMENT è impostata su NONE, si verificheranno errori.

DEFAULT_LANGUAGE

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Specifica la lingua predefinita per tutti i nuovi account di accesso creati. È possibile specificare la lingua indicando l'ID locale (lcid), il nome della lingua o l'alias di lingua. Per un elenco dei nomi e degli alias di lingua accettabili, vedere sys.syslanguages. Questa opzione è consentita solo quando l'opzione CONTAINMENT è stata impostata su PARTIAL. Se l'opzione CONTAINMENT è impostata su NONE, si verificheranno errori.

NESTED_TRIGGERS

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Specifica se un trigger AFTER supporta la propagazione, ovvero un'azione che avvia un altro trigger, che a sua volta ne avvia un altro e così via. Questa opzione è consentita solo quando l'opzione CONTAINMENT è stata impostata su PARTIAL. Se l'opzione CONTAINMENT è impostata su NONE, si verificheranno errori.

TRANSFORM_NOISE_WORDS

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Consente di eliminare un messaggio di errore visualizzato nel caso in cui parole non significative impediscono l'esecuzione di un'operazione booleana in una query full-text. Questa opzione è consentita solo quando l'opzione CONTAINMENT è stata impostata su PARTIAL. Se l'opzione CONTAINMENT è impostata su NONE, si verificheranno errori.

TWO_DIGIT_YEAR_CUTOFF

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Specifica un numero intero compreso tra 1753 e 9999 che rappresenta l'anno di cambio data per l'interpretazione degli anni a due cifre come anni a quattro cifre. Questa opzione è consentita solo quando l'opzione CONTAINMENT è stata impostata su PARTIAL. Se l'opzione CONTAINMENT è impostata su NONE, si verificheranno errori.

<> FILESTREAM_option ::=

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Consente di controllare le impostazioni per le tabelle FileTable.

NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }

  • OFF

    L'accesso non transazionale ai dati delle tabelle FileTable è disabilitato.

  • READ_ONLY

    I dati FILESTREAM nelle tabelle FileTable in questo database possono essere letti da processi non transazionali.

  • FULL

    Abilita l'accesso non transazionale completo a dati di FILESTREAM nelle tabelle FileTable.

DIRECTORY_NAME = <directory_name>

Nome di directory compatibile con Windows. Questo nome deve essere univoco tra tutti i nomi di directory a livello di database nell'istanza di SQL Server. Il confronto di univocità non supporta la distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni delle regole di confronto di . È necessario impostare questa opzione prima di creare una tabella FileTable nel database.

<> HADR_options ::=

Si applica a: SQL Server

Vedere ALTER DATABASE SET HADR.

<> mixed_page_allocation_option ::=

Si applica a: SQL Server, a partire da SQL Server 2016 (13.x)

Controlla se il database può creare pagine iniziali usando un extent misto per le prime otto pagine di un indice o di una tabella.

MIXED_PAGE_ALLOCATION { OFF | ON }

  • OFF

    Il database crea sempre le pagine iniziali usando extent uniformi. OFF è il valore predefinito.

  • In...

    Il database crea sempre le pagine iniziali usando extent misti.

Questa opzione è impostata su ON per tutti i database di sistema. Il database di sistema tempdb è l'unico che supporta il valore OFF.

<> PARAMETERIZATION_option ::=

Consente di controllare l'opzione di parametrizzazione. Per altre informazioni sulla parametrizzazione, vedere Guida sull'architettura di elaborazione delle query.

PARAMETERIZATION { SIMPLE | FORCED }

  • SEMPLICE

    Le query vengono parametrizzate in base al comportamento predefinito del database.

  • FORCED

    SQL Server parametrizza tutte le query nel database.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_parameterization_forced nella vista del catalogo sys.databases.

<> query_store_options ::=

Si applica a: SQL Server, a partire da SQL Server 2016 (13.x)

ON | OFF [ ( FORCED ) ] | CLEAR [ ALL ]

Verifica se Query Store è abilitato nel database e controlla anche la rimozione dei contenuti di Query Store. Per altre informazioni, vedere Scenari di utilizzo di Query Store.

  • In...

    Abilita Query Store.

    Molte nuove funzionalità di prestazioni di SQL Server 2022 (16.x), ad esempio hint di Query Store, commenti e suggerimenti per ce, feedback dop (Degree of Parallelism) e persistenza delle concessioni di memoria (MGF) richiesta l'abilitazione di Query Store. I database ripristinati da altre istanze di SQL Server e i database che passano da un aggiornamento sul posto a SQL Server 2022 (16.x) manterranno le impostazioni precedenti di Query Store. In caso di dubbi sul possibile sovraccarico introdotto da Query Store, gli amministratori possono usare criteri di acquisizione personalizzati con QUERY_CAPTURE_MODE = CUSTOM. Per esempi di come abilitare Query Store con opzioni dei criteri di acquisizione personalizzati, vedere la sezione Esempi più avanti in questo articolo.

  • OFF [ ( FORCED ) ]

    Disabilita Query Store. Il valore FORCED è opzionale. FORCED interrompe tutte le attività in background di Query Store e ignora lo scaricamento sincrono quando Query Store è disattivato. Determina la chiusura di Query Store nel minor tempo possibile. FORCED si applica a SQL Server 2016 (13.x) SP2 CU14, SQL Server 2017 (14.x) CU21, SQL Server 2019 (15.x) CU6 e versioni successive.

    Nota

    Non è possibile disabilitare Query Store in un singolo database SQL di Azure e in un pool elastico. L'esecuzione di ALTER DATABASE [database] SET QUERY_STORE = OFF restituirà l'avviso 'QUERY_STORE=OFF' is not supported in this version of SQL Server..

  • CLEAR [ ALL ]

    Rimuove i dati correlati alla query da Query Store. ALL è facoltativo. Rimuove i dati e i metadati correlati alla query da Query Store.

OPERATION_MODE { READ_ONLY | READ_WRITE }

Descrive la modalità operativa di Query Store.

READ_WRITE

Query Store raccoglie e salva in modo permanente le informazioni sulle statistiche di esecuzione di runtime e i piani di query.

READ_ONLY

Le informazioni possono essere lette da Query Store, ma non vengono aggiunte nuove informazioni. Se lo spazio massimo allocato di Query Store viene esaurito, la modalità operativa di Query Store passa a READ_ONLY.

CLEANUP_POLICY

Descrive i criteri di conservazione dei dati di Query Store. STALE_QUERY_THRESHOLD_DAYS determina il numero di giorni per cui le informazioni per una query vengono conservate in Query Store. STALE_QUERY_THRESHOLD_DAYS è di tipo bigint. Il valore predefinito è 30.

DATA_FLUSH_INTERVAL_SECONDS

Determina la frequenza con cui i dati scritti in Query Store vengono salvati in modo permanente sul disco. Per ottimizzare le prestazioni, i dati raccolti da Query Store vengono scritti in modo asincrono sul disco. La frequenza con cui si verifica questo trasferimento asincrono viene configurata tramite l'argomento DATA_FLUSH_INTERVAL_SECONDS. DATA_FLUSH_INTERVAL_SECONDS è di tipo bigint. Il valore predefinito 900 (15 min).

MAX_STORAGE_SIZE_MB

Determina lo spazio allocato a Query Store. MAX_STORAGE_SIZE_MB è di tipo bigint. Il valore predefinito è 100 MB per SQL Server, da SQL Server 2016 (13.x) a SQL Server 2017 (14.x). A partire da SQL Server 2019 (15.x), il valore predefinito è 1000 MB.

Il limite MAX_STORAGE_SIZE_MB non è necessariamente applicato. Le dimensioni di archiviazione vengono controllate solo quando Query Store scrive i dati su disco. Questo intervallo viene impostato dall'opzione DATA_FLUSH_INTERVAL_SECONDS o dall'opzione della finestra di dialogo di Query Store in Management Studio Intervallo di scaricamento dati. Il valore predefinito dell'intervallo è 900 secondi (o 15 minuti).

Se Query Store ha violato il limite MAX_STORAGE_SIZE_MB tra i controlli delle dimensioni di archiviazione, passa alla modalità di sola lettura. Se è abilitata la SIZE_BASED_CLEANUP_MODE, viene attivato anche il meccanismo di pulizia per applicare il limite MAX_STORAGE_SIZE_MB.

Dopo la cancellazione di spazio sufficiente, la modalità di Query Store cambierà automaticamente in lettura/scrittura.

Importante

Se si ritiene che per l'acquisizione del carico di lavoro siano necessari più di 10 GB di spazio su disco, è probabile che sia opportuno ripensare e ottimizzare il carico di lavoro in modo da riusare i piani di query (ad esempio, usando la parametrizzazione forzata) oppure modificare le configurazioni di Query Store. A partire da SQL Server 2019 (15.x) e nel database SQL di Azure è possibile impostare QUERY_CAPTURE_MODE su CUSTOM per un controllo aggiuntivo sui criteri di acquisizione delle query.

INTERVAL_LENGTH_MINUTES

Determina l'intervallo di tempo in base a cui vengono aggregati i dati delle statistiche di esecuzione di runtime in Query Store. Per ottimizzare l'utilizzo dello spazio, le statistiche di esecuzione di runtime nell'archivio di statistiche di runtime vengono aggregate in un intervallo di tempo fisso. L'intervallo di tempo predefinito viene configurato tramite l'argomento INTERVAL_LENGTH_MINUTES. INTERVAL_LENGTH_MINUTES è di tipo bigint. Il valore predefinito è 60.

SIZE_BASED_CLEANUP_MODE { AUTO | OFF }

Determina se la pulizia deve essere attivata automaticamente quando la quantità totale dei dati ha quasi raggiunto le dimensioni massime.

  • AUTO

    La pulizia basata sulle dimensioni viene attivata automaticamente quando le dimensioni sul disco raggiungono il 90% di MAX_STORAGE_SIZE_MB. La pulizia basata sulle dimensioni rimuove per prime le query meno recenti e meno dispendiose. Si arresta quando raggiunge all'incirca l'80% di MAX_STORAGE_SIZE_MB. Si tratta del valore di configurazione predefinito.

  • OFF

    La pulizia basata sulle dimensioni non viene attivata automaticamente.

SIZE_BASED_CLEANUP_MODE è di tipo nvarchar.

QUERY_CAPTURE_MODE { ALL | AUTO | CUSTOM | NONE }

Determina la modalità di acquisizione query attiva. Ogni modalità definisce criteri di acquisizione delle query specifici. QUERY_CAPTURE_MODE è di tipo nvarchar.

Nota

I cursori, le query all'interno delle stored procedure e le query compilate in modo nativo vengono sempre acquisiti quando la modalità di acquisizione query è impostata su ALL, AUTO o CUSTOM.

  • ALL

    Consente di acquisire tutte le query. ALL è il valore di configurazione predefinito per SQL Server, da SQL Server 2016 (13.x) a SQL Server 2017 (14.x).

  • AUTO

    Consente di acquisire le query pertinenti in base al conteggio delle esecuzioni e al consumo delle risorse. Si tratta del valore di configurazione predefinito per SQL Server, a partire da SQL Server 2019 (15.x), e per il database SQL di Azure.

  • NONE

    Consente di arrestare l'acquisizione di nuove query. Query Store continuerà a raccogliere le statistiche di compilazione e runtime per le query che sono già state acquisite. Usare con cautela questa configurazione perché si rischia di perdere query importanti.

  • CUSTOM

    Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

    Consente di controllare le opzioni QUERY_CAPTURE_POLICY. I criteri di acquisizione personalizzati consentono a Query Store di acquisire le query più importanti nel carico di lavoro. Vedere <query_capture_policy_option_list> per informazioni sulle opzioni personalizzabili.

MAX_PLANS_PER_QUERY

Definisce il numero massimo di piani mantenuti per ogni query. MAX_PLANS_PER_QUERY è di tipo int. Il valore predefinito è 200.

WAIT_STATS_CAPTURE_MODE { ON | OFF }

Si applica a: SQL Server, a partire da SQL Server 2017 (14.x)

Controlla se verranno acquisite le statistiche di attesa per ogni query.

  • In...

    Verranno acquisite informazioni sulle statistiche di attesa per ogni query. Si tratta del valore di configurazione predefinito.

  • OFF

    Non verranno acquisite informazioni sulle statistiche di attesa per ogni query.

<> query_capture_policy_option_list :: =

Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

Controlla le opzioni dei criteri di acquisizione di Query Store. Ad eccezione di STALE_CAPTURE_POLICY_THRESHOLD, queste opzioni definiscono le condizioni OR che devono verificarsi perché le query vengano acquisite nel valore della soglia dei criteri di acquisizione non aggiornati definito.

A partire da SQL Server 2019 (15.x), l'impostazione QUERY_CAPTURE_MODE = AUTO acquisisce i dettagli di Query Store quando viene raggiunta una delle soglie seguenti:

  • EXECUTION_COUNT = 30 esecuzioni = numero di esecuzioni
  • TOTAL_COMPILE_CPU_TIME_MS = 1 secondo = tempo di compilazione in millisecondi
  • TOTAL_EXECUTION_CPU_TIME_MS = 100 ms = tempo CPU di esecuzione in millisecondi

Ad esempio:

EXECUTION_COUNT = 30,
TOTAL_COMPILE_CPU_TIME_MS = 1000,
TOTAL_EXECUTION_CPU_TIME_MS = 100

È possibile personalizzare queste opzioni con QUERY_CAPTURE_MODE = CUSTOM:

  • STALE_CAPTURE_POLICY_THRESHOLD = integer { DAYS | HOURS }

    Definisce l'intervallo di valutazione per determinare se una query deve essere acquisita. Il valore predefinito è 1 giorno e l'intervallo può essere impostato da 1 ora a sette giorni.

  • EXECUTION_COUNT = integer

    Definisce il numero di esecuzioni di una query nel periodo di valutazione. Il valore predefinito è 30. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati è necessario eseguire una query almeno 30 volte al giorno perché venga salvata in modo permanente in Query Store. EXECUTION_COUNT è di tipo int.

  • TOTAL_COMPILE_CPU_TIME_MS = integer

    Definisce il tempo CPU di compilazione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 1000. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato in totale almeno un secondo di tempo CPU al giorno per la compilazione perché venga salvata in modo permanente in Query Store. TOTAL_COMPILE_CPU_TIME_MS è di tipo int.

  • TOTAL_EXECUTION_CPU_TIME_MS = integer

    Definisce il tempo CPU di esecuzione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 100. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato almeno 100 ms di tempo CPU al giorno per l'esecuzione perché venga salvata in modo permanente in Query Store. TOTAL_EXECUTION_CPU_TIME_MS è di tipo int.

<> recovery_option ::=

Si applica a: SQL Server

Controlla le opzioni di recupero del database e il controllo degli errori di I/O su disco.

  • FULL

    Consente il recupero completo in caso di errori dei supporti tramite i backup del log delle transazioni. Se un file di dati risulta danneggiato, il recupero dei supporti consente di ripristinare tutte le transazioni di cui è stato eseguito il commit. Per altre informazioni, vedere Modelli di recupero.

  • BULK_LOGGED

    Consente il ripristino in caso di errori dei supporti. Combina le prestazioni ottimali e la quantità minima di spazio per i log per determinate operazioni su larga scala o bulk. Per informazioni sulle operazioni a cui può essere applicata la registrazione minima, vedere Log delle transazioni. Con il modello di recupero BULK_LOGGED vengono registrate informazioni minime per queste operazioni. Per altre informazioni, vedere Modelli di recupero.

  • SEMPLICE

    Viene implementata una strategia di backup semplice che usano una quantità minima di spazio del log. Lo spazio dei log può essere riutilizzato automaticamente quando non è più necessario per il ripristino in seguito a errori del server. Per altre informazioni, vedere Modelli di recupero.

    Importante

    La gestione del modello di recupero con registrazione minima risulta più semplice rispetto agli altri due modelli, ma comporta rischi maggiori di perdita dei dati in caso di danni a un file di dati. Tutte le modifiche apportate dopo l'ultimo backup completo o differenziale del database vanno perdute ed è necessario immetterle nuovamente in modo manuale.

Il modello di recupero predefinito dipende dal modello di recupero impostato per il database di sistema model. Per altre informazioni sulla scelta del modello di recupero appropriato, vedere Modelli di recupero.

È possibile determinare lo stato di questa opzione esaminando le colonne recovery_model e recovery_model_desc nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà Recovery della funzione DATABASEPROPERTYEX.

TORN_PAGE_DETECTION { ON | OFF }

  • In...

    Le pagine incomplete possono essere rilevate dal motore di database.

  • OFF

    Le pagine incomplete non possono essere rilevate dal motore di database.

Importante

La struttura della sintassi TORN_PAGE_DETECTION ON | OFF verrà rimossa a partire da una delle prossime versioni di SQL Server. Evitare pertanto di usarla in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni che attualmente usano questa struttura. In alternativa, usare l'opzione PAGE_VERIFY.

PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }

Individua le pagine del database danneggiate in seguito a errori di percorso di I/O su disco. Gli errori di percorso di I/O su disco possono essere la causa di problemi di danneggiamento del database. Questi errori sono il più delle volte dovuti a interruzioni dell'alimentazione o a problemi hardware che si verificano nel momento in cui la pagina viene scritta su disco.

  • CHECKSUM

    Calcola un checksum sul contenuto dell'intera pagina e archivia il valore nell'intestazione della pagina quando questa viene scritta su disco. In fase di lettura della pagina dal disco, il checksum viene ricalcolato e confrontato con il valore di checksum archiviato nell'intestazione della pagina. Se i valori non corrispondono, viene restituito il messaggio di errore 824 (che indica un errore di checksum) sia nel log degli errori di SQL Server sia nel registro eventi di Windows. Un errore di checksum indica un problema di percorso di I/O. Per determinare la causa principale del problema, è necessaria un'analisi accurata di hardware, driver del firmware, BIOS, driver dei filtri, ad esempio software antivirus, e altri componenti del percorso di I/O.

  • TORN_PAGE_DETECTION

    Salva un modello a 2 bit specifico per ogni settore da 512 byte della pagina di database da 8 kilobyte (KB) e archivia tali bit nell'intestazione della pagina di database quando questa viene scritta su disco. In fase di lettura della pagina dal disco, i bit per il rilevamento di pagine incomplete archiviati nell'intestazione della pagina vengono confrontati con le informazioni effettive sui settori della pagina.

    La presenza di valori non corrispondenti indica che la pagina è stata scritta su disco solo in parte. In questa situazione viene restituito il messaggio di errore 824 (che indica un errore di pagina incompleta) sia nel log degli errori di SQL Server sia nel registro eventi di Windows. Le pagine incomplete vengono generalmente rilevate durante il recupero del database, se si tratta effettivamente di un problema di scrittura incompleta di una pagina. Altri errori di percorso di I/O possono tuttavia causare in qualsiasi momento pagine incomplete.

  • NONE

    Le operazioni di scrittura di pagine di database non genereranno un valore CHECKSUM o TORN_PAGE_DETECTION. SQL Server non verificherà la presenza di un checksum o di pagine incomplete durante una lettura, anche se nell'intestazione della pagina è presente un valore CHECKSUM o TORN_PAGE_DETECTION.

Per l'utilizzo dell'opzione PAGE_VERIFY, è importante tenere presente quanto segue:

  • L'impostazione predefinita è CHECKSUM.

  • Quando un database utente o di sistema viene aggiornato a SQL Server 2005 (9.x) o a una versione successiva, il valore di PAGE_VERIFY (NONE o TORN_PAGE_DETECTION) resta invariato. È consigliabile usare CHECKSUM.

    Nota

    Nelle versioni precedenti di SQL Server l'opzione di database PAGE_VERIFY è impostata su NONE per il database tempdb e non può essere modificata. A partire da SQL Server 2008 (10.0.x), il valore predefinito per il tempdb database è CHECKSUM per le nuove installazioni di SQL Server. Quando si aggiorna un'installazione di SQL Server, viene mantenuto il valore predefinito NONE. L'opzione può essere modificata. È consigliabile usare CHECKSUM per il database tempdb.

  • TORN_PAGE_DETECTION può consentire l'utilizzo di un numero più limitato di risorse, ma offre una protezione minore rispetto all'opzione CHECKSUM.

  • È possibile impostare PAGE_VERIFY senza attivare la modalità offline per il database, senza bloccarlo o senza impedire in altro modo la concorrenza nel database.

  • Le opzioni CHECKSUM e TORN_PAGE_DETECTION si escludono a vicenda. Non è possibile abilitare contemporaneamente entrambe le opzioni.

Se viene rilevato un errore di pagina incompleta o di checksum, è possibile eseguire il recupero tramite il ripristino dei dati o potenzialmente tramite la ricompilazione dell'indice se l'errore è limitato alle pagine di indice. Se si verifica un errore di checksum, eseguire DBCC CHECKDB per determinare il tipo della pagina o delle pagine del database interessate dal problema. Per altre informazioni sulle opzioni di ripristino, vedere Argomenti RESTORE. Sebbene il ripristino dei dati consenta di risolvere il problema di danneggiamento dei dati, è necessario individuare il prima possibile la causa principale, ad esempio un errore hardware del disco, per eseguire i necessari interventi di correzione ed evitare che gli errori si ripresentino.

SQL Server esegue quattro tentativi per qualsiasi operazione di lettura non riuscita a causa di un errore di checksum, di pagina incompleta o di I/O. Se la lettura riesce con uno dei tentativi, viene scritto un messaggio nel log degli errori. Il comando che ha attivato la lettura continuerà a essere eseguito. Se tutti i tentativi hanno esito negativo, il comando viene interrotto con il messaggio di errore 824.

Per altre informazioni sui messaggi di errore 823, 824 e 825, vedere:

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna page_verify_option nella vista del catalogo sys.databases o la proprietà IsTornPageDetectionEnabled della funzione DATABASEPROPERTYEX.

<> remote_data_archive_option ::=

Si applica a: SQL Server, a partire da SQL Server 2016 (13.x)

Abilita o disabilita Stretch Database per il database. Per ulteriori informazioni, vedere Stretch Database.

Importante

Stretch Database è deprecato in SQL Server 2022 (16.x) e database SQL di Azure. Questa funzionalità verrà rimossa nelle versioni future del motore di database. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

REMOTE_DATA_ARCHIVE = { ON ( SERVER = <server_name>, { CREDENTIAL = <db_scoped_credential_name> | FEDERATED_SERVICE_ACCOUNT = ON | OFF } ) | SPENTO

  • In...

    Abilita o disabilita Stretch Database per il database. Per altre informazioni, inclusi i prerequisiti aggiuntivi, vedere Abilitare Stretch Database per un database.

    Richiede l'autorizzazione db_owner per abilitare Stretch Database per una tabella. Richiede le autorizzazioni db_owner e CONTROL DATABASE per abilitare Stretch Database per un database.

    • SERVER = <server_name>

      Specifica l'indirizzo del server di Azure. Includere la parte .database.windows.net del nome. Ad esempio: MyStretchDatabaseServer.database.windows.net.

    • CREDENTIAL = <db_scoped_credential_name>

      Specifica la credenziale con ambito database usata dall'istanza di SQL Server per connettersi al server di Azure. Assicurarsi dell'esistenza della credenziale prima di eseguire questo comando. Per altre informazioni, vedere CREATE DATABASE SCOPED CREDENTIAL.

    • FEDERATED_SERVICE_ACCOUNT = { ON | OFF }

      È possibile usare un account del servizio federato per SQL Server locale per comunicare con il server di Azure remoto quando vengono soddisfatte tutte le condizioni seguenti.

      • L'account del servizio usato per l'esecuzione dell'istanza di SQL Server è un account di dominio.
      • L'account di dominio appartiene a un dominio di cui Active Directory è federato con l'ID Microsoft Entra (in precedenza Azure Active Directory).
      • Il server Azure remoto è configurato per supportare l'autenticazione di Microsoft Entra.
      • L'account del servizio in cui è in esecuzione l'istanza di SQL Server deve essere configurato come account dbmanager o sysadmin nel server di Azure remoto.

      Se si specifica che l'account del servizio federato è impostato su ON, è anche possibile specificare l'argomento CREDENTIAL. Se si specifica OFF, è necessario fornire l'argomento CREDENTIAL.

  • OFF

    Disabilita Stretch Database per il database. Per altre informazioni, vedere Disabilitare Stretch Database e ripristinare i dati remoti.

    È possibile disabilitare Stretch Database per un database solo quando il database non contiene più tutte le tabelle abilitate per Stretch Database. Dopo aver disabilitato Stretch Database, la migrazione dei dati si interrompe. Inoltre, i risultati delle query non includono più i risultati delle tabelle remote.

    La disabilitazione di Stretch Database non comporta la rimozione del database remoto. Per eliminare il database remoto, usare il portale di Azure.

<> service_broker_option ::=

Si applica a: SQL Server

Controlla queste opzioni di Service Broker: abilitazione o disabilitazione del recapito dei messaggi, impostazione di un nuovo identificatore di Service Broker o impostazione delle priorità di conversazione su ON o su OFF.

ENABLE_BROKER

Indica che Service Broker è abilitato per il database specificato. Il recapito dei messaggi viene avviato e il flag is_broker_enabled è impostato su true nella vista del catalogo sys.databases. Il database mantiene l'identificatore di Service Broker esistente. Service Broker non può essere abilitato se il database è il database principale in una configurazione di mirroring.

Nota

ENABLE_BROKER richiede un blocco esclusivo a livello di database. Se altre sessioni hanno bloccato risorse nel database, ENABLE_BROKER attende il rilascio dei blocchi da parte delle altre sessioni. Per abilitare Service Broker in un database utente, assicurarsi che nessun'altra sessione usi il database prima di eseguire l'istruzione ALTER DATABASE SET ENABLE_BROKER, ad esempio impostando il database in modalità utente singolo. Per abilitare Service Broker nel msdb database, arrestare prima SQL Server Agent in modo che Service Broker possa ottenere il blocco necessario.

DISABLE_BROKER

Indica che Service Broker è disabilitato per il database specificato. Il recapito dei messaggi viene arrestato e il flag is_broker_enabled è impostato su false nella vista del catalogo sys.databases. Il database mantiene l'identificatore di Service Broker esistente.

NEW_BROKER

Specifica che al database deve essere assegnato un nuovo identificatore di Service Broker. Il database funge da nuovo Service Broker. Di conseguenza, tutte le conversazioni esistenti nel database vengono rimosse immediatamente senza generare messaggi di fine dialogo. Tutte le route che fanno riferimento all'identificatore di Service Broker precedente devono essere ricreate con il nuovo identificatore.

ERROR_BROKER_CONVERSATIONS

Specifica che il recapito dei messaggi di Service Broker è abilitato. Questa impostazione mantiene l'identificatore di Service Broker esistente per il database. Service Broker termina tutte le conversazioni nel database con un errore. Questa impostazione consente alle applicazioni di eseguire operazioni regolari di pulizia per le conversazioni esistenti.

HONOR_BROKER_PRIORITY { ON | OFF }

  • In...

    Per le operazioni di invio vengono presi in considerazione i livelli di priorità assegnati alle conversazioni. I messaggi provenienti da conversazioni con livelli di priorità alti vengono inviati prima dei messaggi provenienti da conversazioni con livelli di priorità bassi.

  • OFF

    Le operazioni di invio vengono eseguite come se a tutte le conversazioni fosse assegnato il livello di priorità predefinito.

Le modifiche all'opzione HONOR_BROKER_PRIORITY vengono applicate immediatamente ai nuovi dialoghi o ai dialoghi per cui non vi sono messaggi in attesa di essere inviati. Per i dialoghi con messaggi da inviare al momento dell'esecuzione di ALTER DATABASE, la nuova impostazione verrà applicata solo quando verranno inviati alcuni messaggi del dialogo. La quantità di tempo che deve trascorrere prima che la nuova impostazione venga usata per tutti i dialoghi può variare notevolmente.

L'impostazione corrente di questa proprietà è indicata nella colonna is_broker_priority_honored nella vista del catalogo sys.databases.

<> snapshot_option ::=

Calcola il livello di isolamento delle transazioni.

ALLOW_SNAPSHOT_ISOLATION { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Una volta abilitata l'opzione, le transazioni possono specificare il livello di isolamento della transazione SNAPSHOT. Nelle transazioni eseguite con il livello di isolamento SNAPSHOT, tutte le istruzioni possono accedere a uno snapshot dei dati corrispondente allo stato dei dati al momento dell'avvio della transazione. Se una transazione eseguita con il livello di isolamento SNAPSHOT deve accedere ai dati in più database, è necessario impostare ALLOW_SNAPSHOT_ISOLATION su ON in tutti i database oppure ogni istruzione della transazione deve usare hint di blocco per qualsiasi riferimento in una clausola FROM a una tabella di un database per cui l'opzione ALLOW_SNAPSHOT_ISOLATION è impostata su OFF.

  • OFF

    Consente di disabilitare l'opzione Snapshot a livello di database. Per le transazioni non può essere impostato il livello di isolamento SNAPSHOT.

Quando si imposta un nuovo stato per l'opzione ALLOW_SNAPSHOT_ISOLATION (da ON a OFF oppure da OFF a ON), ALTER DATABASE restituisce il controllo al chiamante solo dopo il completamento del commit di tutte le transazioni esistenti nel database. Se per il database è già attivo lo stato specificato nell'istruzione ALTER DATABASE, il controllo viene restituito immediatamente al chiamante. Se l'istruzione ALTER DATABASE non restituisce il controllo rapidamente, usare sys.dm_tran_active_snapshot_database_transactions per verificare se sono presenti transazioni con esecuzione prolungata. Se l'istruzione ALTER DATABASE viene annullata, il database rimane nello stato attivo al momento dell'avvio dell'istruzione ALTER DATABASE. La vista del catalogo sys.databases indica lo stato delle transazioni di isolamento dello snapshot nel database. Se snapshot_isolation_state_desc = IN_TRANSITION_TO_ON, il comando ALTER DATABASE ... ALLOW_SNAPSHOT_ISOLATION OFF attenderà sei secondi prima di ritentare l'operazione.

Non è possibile cambiare lo stato di ALLOW_SNAPSHOT_ISOLATION se il database è OFFLINE.

Se si imposta ALLOW_SNAPSHOT_ISOLATION in un database READ_ONLY, tale impostazione viene mantenuta anche se il database viene in seguito impostato su READ_WRITE.

È possibile modificare le impostazioni di ALLOW_SNAPSHOT_ISOLATION per i database master, model, msdb e tempdb. Se si modifica l'impostazione per tempdb, l'impostazione viene mantenuta ogni volta che l'istanza del motore di database viene arrestata e riavviata. Se si modifica l'impostazione per model, questa diventa l'impostazione predefinita per i nuovi database creati, ad eccezione di tempdb.

Per impostazione predefinita, l'opzione è ON per i database master e msdb.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna snapshot_isolation_state nella vista del catalogo sys.databases.

READ_COMMITTED_SNAPSHOT { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot Read Committed a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Una volta abilitata questa opzione, le transazioni che specificano il livello di isolamento Read committed usano il controllo delle versioni delle righe anziché il blocco. Quando una transazione viene eseguita con il livello di isolamento READ COMMITTED, tutte le istruzioni vedono uno snapshot dei dati nello stato in cui si trovano all'avvio dell'istruzione.

  • OFF

    Disabilita l'opzione relativa allo snapshot Read Committed a livello di database. Le transazioni per cui è impostato il livello di isolamento READ COMMITTED usano il blocco.

Per impostare READ_COMMITTED_SNAPSHOT su ON o su OFF, è necessario che non siano presenti connessioni attive al database, ad eccezione della connessione usata per eseguire il comando ALTER DATABASE. Non è tuttavia necessario che il database sia in modalità utente singolo. Non è possibile cambiare lo stato di questa opzione quando il database è OFFLINE.

Se si imposta READ_COMMITTED_SNAPSHOT in un database READ_ONLY, tale impostazione viene mantenuta anche se il database viene in seguito impostato su READ_WRITE.

Non è possibile impostare READ_COMMITTED_SNAPSHOT su ON per i database di sistema master, tempdb e msdb. Se si modifica l'impostazione per model, questa diventa l'impostazione predefinita per i nuovi database creati, ad eccezione di tempdb.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_read_committed_snapshot_on nella vista del catalogo sys.databases.

Avviso

Quando si crea una tabella con DURABILITY = SCHEMA_ONLY, e successivamente si modifica READ_COMMITTED_SNAPSHOT usando ALTER DATABASE, i dati della tabella andranno perduti.

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }

Si applica a: SQL Server, a partire da SQL Server 2014 (12.x)

  • In...

    Quando l'isolamento della transazione è impostato su un livello inferiore a SNAPSHOT, tutte le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria vengono eseguite con isolamento SNAPSHOT. I livelli di isolamento inferiori a SNAPSHOT sono, ad esempio, READ COMMITTED e READ UNCOMMITTED. Queste operazioni vengono eseguite indipendentemente dal fatto che venga impostato in modo esplicito il livello di isolamento della transazione a livello di sessione o che venga usata in modo implicito l'impostazione predefinita.

  • OFF

    Non innalza il livello di isolamento della transazione per le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria.

Non è possibile cambiare lo stato di MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT se il database è OFFLINE.

L'impostazione predefinita è OFF.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_memory_optimized_elevate_to_snapshot_on nella vista del catalogo sys.databases.

<> sql_option ::=

Controlla le opzioni di conformità ANSI a livello di database.

ANSI_NULL_DEFAULT { ON | OFF }

Determina il valore predefinito, NULL o NOT NULL, per una colonna o un tipo CLR definito dall'utente per cui il supporto dei valori Null non è definito in modo esplicito nell'istruzione CREATE TABLE o ALTER TABLE. Le colonne definite con vincoli seguono le regole dei vincoli indipendentemente da questa impostazione.

  • In...

    Il valore predefinito di una colonna non definita è NULL.

  • OFF

    Il valore predefinito di una colonna non definita è NOT NULL.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULL_DEFAULT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULL_DEFAULT su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULL_DFLT_ON.

Per motivi di compatibilità con ANSI, l'impostazione dell'opzione di database ANSI_NULL_DEFAULT su ON modifica l'impostazione predefinita del database su NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_null_default_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullDefault della funzione DATABASEPROPERTYEX.

ANSI_NULLS { ON | OFF }

  • In...

    Tutti i confronti con un valore Null restituiscono UNKNOWN.

  • OFF

    I confronti di valori non Unicode con un valore Null restituiscono TRUE se entrambi i valori sono NULL.

Importante

In una versione futura di SQL Server l'opzione ANSI_NULLS sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULLS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULLS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULLS.

Importante

È inoltre necessario che l'opzione SET ANSI_NULLS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_nulls_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullsEnabled della funzione DATABASEPROPERTYEX.

ANSI_PADDING { ON | OFF }

  • In...

    Le stringhe vengono riempite in modo che abbiano tutte la stessa lunghezza prima della conversione. o dell'inserimento in un tipo di dati varchar o nvarchar.

  • OFF

    Vengono inseriti spazi vuoti finali nei valori di tipo carattere in colonne di tipo varchar o nvarchar. Vengono inoltre lasciati gli zeri finali nei valori binari inseriti nelle colonne di tipo varbinary. I valori non vengono riempiti per l'intera lunghezza della colonna.

    Se si specifica OFF, questa impostazione ha effetto solo sulla definizione di nuove colonne.

Importante

In una versione futura di SQL Server l'opzione ANSI_PADDING sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile impostare l'opzione ANSI_PADDING sempre su ON. È necessario che l'opzione ANSI_PADDING sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le colonne char(n) e binary(n) che consentono valori Null vengono riempite fino alla loro lunghezza quando ANSI_PADDING è impostata su ON. I valori vuoti e gli zeri finali vengono eliminati quando ANSI_PADDING è impostata su OFF. Le colonne char(n) e binary(n) che non consentono valori Null vengono sempre riempite fino alla loro lunghezza.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_PADDING. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_PADDING su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_PADDING.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_padding_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiPaddingEnabled della funzione DATABASEPROPERTYEX.

ANSI_WARNINGS { ON | OFF }

  • In...

    Vengono restituiti messaggi di errore o di avviso quando si verificano condizioni come la divisione per zero e inoltre quando nelle funzioni di aggregazione sono presenti valori Null.

  • OFF

    Non vengono generati avvisi e vengono restituiti valori Null quando si verificano condizioni come la divisione per zero.

Importante

È necessario che l'opzione ANSI_WARNINGS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_WARNINGS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_WARNINGS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_WARNINGS.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_warnings_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiWarningsEnabled della funzione DATABASEPROPERTYEX.

ARITHABORT { ON | OFF }

  • In...

    Interrompe una query quando si verifica un overflow o un errore di divisione per zero durante l'esecuzione della query stessa.

  • OFF

    Quando si verifica uno di questi errori, viene visualizzato un messaggio di avviso. L'esecuzione della query, del batch o della transazione prosegue come se non si fosse verificato alcun errore, anche se viene visualizzato un messaggio di avviso.

Importante

È necessario che l'opzione ARITHABORT sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_arithabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsArithmeticAbortEnabled della funzione DATABASEPROPERTYEX.

COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }

Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE.

CONCAT_NULL_YIELDS_NULL { ON | OFF }

  • In...

    Il risultato di un'operazione di concatenazione è NULL quando uno degli operandi è NULL. La concatenazione della stringa di caratteri "Questo è" con NULL restituisce, ad esempio, il valore NULL anziché il valore "Questo è".

  • OFF

    Il valore Null viene considerato come una stringa di caratteri vuota.

Importante

È necessario che l'opzione CONCAT_NULL_YIELDS_NULL sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Nelle versioni future di SQL Server l'opzione CONCAT_NULL_YIELDS_NULL sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito l'opzione su OFF restituirà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CONCAT_NULL_YIELDS_NULL. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CONCAT_NULL_YIELDS_NULL su ON per la sessione quando viene stabilita una connessione a un'istanza di SQL Server. Per altre informazioni, vedere SET CONCAT_NULL_YIELDS_NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_concat_null_yields_null_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNullConcat della funzione DATABASEPROPERTYEX.

NUMERIC_ROUNDABORT { ON | OFF }

  • In...

    Viene generato un errore quando si verifica una perdita di precisione in un'espressione.

  • OFF

    La perdita di precisione non genera messaggi di errore e il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato.

    Importante

    È necessario che l'opzione NUMERIC_ROUNDABORT sia impostata su OFF quando vengono creati o modificati indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione nella colonna is_numeric_roundabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNumericRoundAbortEnabled della funzione DATABASEPROPERTYEX.

QUOTED_IDENTIFIER { ON | OFF }

  • In...

    È possibile usare le virgolette doppie per delimitare gli identificatori delimitati.

    Tutte le stringhe delimitate da virgolette doppie vengono interpretate come identificatori di oggetto. Gli identificatori delimitati non devono necessariamente essere conformi alle regole di Transact-SQL per gli identificatori. Possono essere parole chiave e includere caratteri normalmente non consentiti negli identificatori di Transact-SQL. Se una virgoletta doppia (") fa parte dell'identificatore, può essere rappresentata da due virgolette doppie ("").

  • OFF

    Gli identificatori non possono essere delimitati da virgolette e devono essere conformi a tutte le regole di Transact-SQL per gli identificatori. È possibile delimitare i valori letterali con virgolette singole o doppie.

SQL Server consente anche di delimitare gli identificatori in base alle parentesi quadre ([ e ]). Gli identificatori tra parentesi quadre possono essere sempre usati, indipendentemente dall'impostazione di QUOTED_IDENTIFIER. Per altre informazioni, vedere Identificatori del database.

Quando viene creata una tabella, l'opzione QUOTED IDENTIFIER viene sempre archiviata con l'impostazione ON nei relativi metadati, anche se l'opzione è impostata su OFF.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per QUOTED_IDENTIFIER. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta QUOTED_IDENTIFIER. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET QUOTED_IDENTIFIER.

È possibile determinare lo stato di questa opzione esaminando la colonna is_quoted_identifier_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsQuotedIdentifiersEnabled della funzione DATABASEPROPERTYEX.

RECURSIVE_TRIGGERS { ON | OFF }

  • In...

    È consentita l'attivazione ricorsiva di trigger AFTER.

  • OFF

    È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

Nota

Se l'opzione RECURSIVE_TRIGGERS è impostata su OFF, viene impedita esclusivamente la ricorsione diretta. Per disabilitare la ricorsione indiretta, è necessario impostare anche l'opzione del server nested triggers su 0.

È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases o la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

<> suspend_for_snapshot_backup ::=

Si applica a: SQL Server, a partire da SQL Server 2022 (16.x)

Sospende i database per il backup di snapshot. Può definire un gruppo di uno o più database. Può designare la modalità di sola copia.

SET SUSPEND_FOR_SNAPSHOT_BACKUP = { ON | OFF }

Sospende o annulla la sospensione dei database. OFF predefinito.

MODE = COPY_ONLY

Facoltativo. Usa la modalità COPY_ONLY.

<> target_recovery_time_option ::=

Si applica a: SQL Server, a partire da SQL Server 2012 (11.x)

Specifica la frequenza di checkpoint indiretti per database singolo. A partire da SQL Server 2016 (13.x), il valore predefinito per i nuovi database è 1 minuto, a indicare che il database userà checkpoint indiretti. Per le versioni precedenti, il valore predefinito è 0, a indicare che il database userà checkpoint automatici la cui frequenza dipende dall'impostazione dell'intervallo di recupero dell'istanza del server. Microsoft consiglia di usare 1 minuto per la maggior parte dei sistemi.

TARGET_RECOVERY_TIME = tempo_recupero_riferimento { SECONDS | MINUTES }

  • target_recovery_time

    Specifica il limite massimo di tempo per recuperare il database specificato in caso di un arresto anomalo del sistema. target_recovery_time è di tipo int.

  • SECONDS

    Indica che target_recovery_time viene espresso come numero di secondi.

  • MINUTI

    Indica che target_recovery_time viene espresso come numero di minuti.

Per altre informazioni sui checkpoint indiretti, vedere Checkpoint di database.

WITH <terminazione> ::=

Specifica quando eseguire il rollback di transazioni incomplete in caso di transizione dello stato del database. Se questa clausola viene omessa, l'attesa da parte dell'istruzione ALTER DATABASE è illimitata in presenza di qualsiasi blocco attivo sul database. È possibile specificare una sola clausola di terminazione, che deve seguire le clausole SET.

Nota

Non tutte le opzioni di database usano la clausola WITH <termination>. Per altre informazioni, vedere la tabella in Impostazione delle opzioni nella sezione "Osservazioni" di questo articolo.

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    Specifica se eseguire il rollback dopo il numero di secondi specificato o immediatamente.

  • NO_WAIT

    Specifica che la richiesta ha esito negativo se non è possibile completare immediatamente la modifica richiesta dello stato del database o dell'opzione, senza aspettare il commit o il rollback automatico delle transazioni.

Impostare le opzioni

Per recuperare le impostazioni correnti delle opzioni di database, usare la vista del catalogo sys.databases o DATABASEPROPERTYEX

Dopo l'impostazione di un'opzione di database, la modifica diventa effettiva immediatamente.

Per cambiare i valori predefiniti di qualsiasi opzione di database per tutti i nuovi database, A questo scopo, modificare l'opzione di database appropriata nel database model.

Non tutte le opzioni di database usano la clausola WITH <termination> o possono essere specificate in combinazione con altre opzioni. Nella tabella seguente sono elencate tali opzioni con indicazione del supporto della clausola di terminazione o dell'impostazione in combinazione con altre opzioni.

Categoria di opzioni Impostazione in combinazione con altre opzioni Supporto della clausola WITH <termination>
<db_state_option>
<db_user_access_option>
<db_update_option>
<delayed_durability_option>
<external_access_option> No
<cursor_option> No
<auto_option> No
<sql_option> No
<recovery_option> No
<target_recovery_time_option> No
<database_mirroring_option> No No
ALLOW_SNAPSHOT_ISOLATION No No
READ_COMMITTED_SNAPSHOT No
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
<service_broker_option> No
DATE_CORRELATION_OPTIMIZATION
<parameterization_option>
<change_tracking_option>
<db_encryption_option> No
<accelerated_database_recovery>

La cache dei piani per l'istanza di SQL Server viene cancellata quando si imposta una delle opzioni seguenti:

OFFLINE

ONLINE

MODIFY_NAME

COLLATE

READ_ONLY

READ_WRITE

MODIFY FILEGROUP DEFAULT

MODIFY FILEGROUP READ_WRITE

MODIFY FILEGROUP READ_ONLY

La cache dei piani viene inoltre scaricata negli scenari seguenti.

  • L'opzione AUTO_CLOSE di un database è impostata su ON. Se il database non viene utilizzato da alcuna connessione utente, neanche come riferimento, tramite l'attività in background viene effettuato il tentativo di chiusura e di arresto automatici del database.
  • Vengono eseguite diverse query su un database contenente opzioni predefinite. Successivamente, il database viene eliminato.
  • Viene eliminato uno snapshot del database per un database di origine.
  • Viene ricompilato correttamente il log delle transazioni per un database.
  • Viene ripristinato un backup del database.
  • Viene scollegato un database.

La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un peggioramento improvviso e temporaneo delle prestazioni di esecuzione delle query. Per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server contiene il messaggio informativo seguente: SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations. Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

Esempi

R. Impostare le opzioni in un database

Nell'esempio seguente vengono impostate le opzioni relative al modello di recupero e alla verifica delle pagine di dati per il database di esempio AdventureWorks2022.

USE master;
GO
ALTER DATABASE [database_name]
SET RECOVERY FULL PAGE_VERIFY CHECKSUM;
GO

B. Impostare il database su READ_ONLY

Per modificare lo stato di un database o di un filegroup impostandolo su READ_ONLY o READ_WRITE, è necessario l'accesso esclusivo al database. Nell'esempio seguente viene impostata la modalità SINGLE_USER per il database in modo da ottenere l'accesso esclusivo. Nell'esempio lo stato del database AdventureWorks2022 viene quindi impostato su READ_ONLY e viene ripristinato l'accesso al database per tutti gli utenti.

Nota

In questo esempio viene usata l'opzione di terminazione WITH ROLLBACK IMMEDIATE nella prima istruzione ALTER DATABASE. Verrà eseguito il rollback di tutte le transazioni incomplete e tutte le altre connessioni al database di esempio AdventureWorks2022 verranno interrotte immediatamente.

USE master;
GO
ALTER DATABASE [database_name]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [database_name]
SET READ_ONLY
GO
ALTER DATABASE [database_name]
SET MULTI_USER;
GO

C. Abilitare l'isolamento dello snapshot in un database

Nell'esempio seguente viene abilitata l'opzione relativa al framework di isolamento dello snapshot per il database AdventureWorks2022.

USE [database_name];
USE master;
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'[database_name]';
GO

Il set di risultati indica che il framework di isolamento dello snapshot è abilitato.

name snapshot_isolation_state description
[database_name] 1 In...

D. Abilitare, modificare o disabilitare il rilevamento delle modifiche

Nell'esempio seguente viene abilitato il rilevamento delle modifiche per il database AdventureWorks2022 e il periodo di memorizzazione viene impostato su 2 giorni.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

Nell'esempio seguente viene illustrato come modificare il periodo di memorizzazione impostandolo su 3 giorni.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

Nell'esempio seguente viene illustrato come disabilitare il rilevamento delle modifiche per il database AdventureWorks2022.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

E. Abilitare Query Store

Si applica a: SQL Server, a partire da SQL Server 2016 (13.x)

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

F. Abilitare Query Store con statistiche di attesa

Si applica a: SQL Server, a partire da SQL Server 2017 (14.x)

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
    );

G. Abilitare Query Store con opzioni dei criteri di acquisizione personalizzati

Si applica a: SQL Server, a partire da SQL Server 2019 (15.x)

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

Vedi anche

Passaggi successivi

* Database SQL *  

 

Database SQL

I livelli di compatibilità sono opzioni SET, ma sono descritti in Livello di compatibilità ALTER DATABASE.

Nota

Molte opzioni SET di database possono essere configurate per la sessione corrente tramite Istruzioni SET e spesso vengono configurate dalle applicazioni durante la connessione. Le opzioni del set a livello di sessione sostituiscono i ALTER DATABASE SET valori. Le opzioni di database descritte nelle sezioni seguenti sono valori che è possibile impostare per le sessioni che non prevedono esplicitamente altri valori di opzioni SET.

Sintassi

ALTER DATABASE { database_name | Current }
SET
{
    <option_spec> [ ,...n ] [ WITH <termination> ]
}
;

<option_spec> ::=
{
    <auto_option>
  | <automatic_tuning_option>
  | <change_tracking_option>
  | <cursor_option>
  | <db_encryption_option>
  | <db_update_option>
  | <db_user_access_option>
  | <delayed_durability_option>
  | <parameterization_option>
  | <query_store_options>
  | <snapshot_option>
  | <sql_option>
  | <target_recovery_time_option>
  | <termination>
  | <temporal_history_retention>
}
;

<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING = { AUTO | INHERIT | CUSTOM }
  | AUTOMATIC_TUNING ( CREATE_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( DROP_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
    {
        = OFF
      | = ON [ ( <change_tracking_option_list > [,...n] ) ]
      | ( <change_tracking_option_list> [,...n] )
    }
}

<change_tracking_option_list> ::=
   {
       AUTO_CLEANUP = { ON | OFF }
     | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
   }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
}

<db_encryption_option> ::=
  ENCRYPTION { ON | OFF }

<db_update_option> ::=
  { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
  { RESTRICTED_USER | MULTI_USER }

<delayed_durability_option> ::= DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<parameterization_option> ::=
  PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
  QUERY_STORE
  {
      = OFF
    | = ON [ ( <query_store_option_list> [,... n] ) ]
    | ( < query_store_option_list> [,... n] )
    | CLEAR [ ALL ]
  }
}

<query_store_option_list> ::=
{
  OPERATION_MODE = { READ_WRITE | READ_ONLY }
  | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
  | DATA_FLUSH_INTERVAL_SECONDS = number
  | MAX_STORAGE_SIZE_MB = number
  | INTERVAL_LENGTH_MINUTES = number
  | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
  | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
  | MAX_PLANS_PER_QUERY = number
  | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
  | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> :: =
{
    STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<termination>::=
{
    ROLLBACK AFTER integer [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}

<temporal_history_retention>::=TEMPORAL_HISTORY_RETENTION { ON | OFF }

Argomenti

database_name

Nome del database da modificare.

  • CURRENT

    CURRENT esegue l'azione nel database corrente. CURRENT non è supportato per tutte le opzioni in tutti i contesti. In caso di errore di CURRENT, specificare il nome del database.

<> auto_option ::=

Consente di controllare le opzioni automatiche.

AUTO_CREATE_STATISTICS { ON | OFF }

  • In...

    Query Optimizer crea statistiche per colonne singole nei predicati di query, se necessario, per migliorare i piani di query e le prestazioni di esecuzione delle query. Queste statistiche per colonne singole vengono create quando Query Optimizer compila le query. Tali statistiche vengono create solo sulle colonne che ancora non sono le prime colonne di un oggetto statistiche esistente.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

  • OFF

    Query Optimizer non crea statistiche sulle singole colonne nei predicati di query durante la compilazione delle query. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_create_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoCreateStatistics della funzione DATABASEPROPERTYEX.

Per altre informazioni, vedere la sezione sulle opzioni relative alle statistiche in Statistiche.

INCREMENTAL = ON | OFF

Imposta AUTO_CREATE_STATISTICS su ON e INCREMENTAL su ON. Questa impostazione crea automaticamente statistiche incrementali ogni volta che sono supportate. Il valore predefinito è OFF. Per altre informazioni, vedere CREATE STATISTICS.

AUTO_SHRINK { ON | OFF }

  • In...

    I file di database vengono compattati periodicamente, se necessario. Se non è necessario soddisfare esigenze specifiche, non impostare l'opzione di database AUTO_SHRINK su ON. Per altre informazioni, vedere Compattare un database.

È possibile compattare automaticamente sia i file di dati sia i file di log. AUTO_SHRINK riduce le dimensioni del log delle transazioni solo se per il database è impostato il modello di recupero con registrazione minima oppure se viene eseguito il backup del log. Se questa opzione è impostata su OFF, i file di database non vengono compattati automaticamente durante i controlli periodici per verificare la presenza di spazio inutilizzato.

Con l'opzione AUTO_SHRINK i file vengono compattati quando più del 25% dello spazio del file risulta inutilizzato. L'opzione causa il compattamento del file in una di due dimensioni, ossia la più grande tra:

  • La dimensione in cui il 25% del file è costituito da spazio inutilizzato
  • La dimensione del file quando è stato creato

Non è possibile compattare un database di sola lettura.

  • OFF

    I file di database non vengono compattati automaticamente durante i controlli periodici per la presenza di spazio inutilizzato.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_shrink_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoShrink della funzione DATABASEPROPERTYEX.

Nota

L'opzione AUTO_SHRINK non è disponibile in un database indipendente.

AUTO_UPDATE_STATISTICS { ON | OFF }

  • In...

    Specifica che Query Optimizer aggiorna le statistiche quando queste vengono usate da una query e quando potrebbero non essere aggiornate. Le statistiche diventano obsolete in seguito a operazioni di inserimento, aggiornamento, eliminazione o unione che modificano la distribuzione dei dati nella tabella o nella vista indicizzata. Query Optimizer determina che le statistiche potrebbero non essere aggiornate contando il numero di modifiche apportate ai dati dopo l'ultimo aggiornamento delle statistiche e confrontando il numero di modifiche con una soglia. basata sul numero di righe nella tabella o nella vista indicizzata.

    Query Optimizer controlla la presenza di statistiche non aggiornate prima di compilare una query e di eseguire un piano di query memorizzato nella cache. Usa le colonne, le tabelle e le viste indicizzate nel predicato di query per determinare quali statistiche potrebbero non essere aggiornate. Query Optimizer verifica questa possibilità prima di compilare una query. Prima di eseguire un piano di query memorizzato nella cache, il motore di database verifica che il piano di query faccia riferimento a statistiche aggiornate.

    L'opzione AUTO_UPDATE_STATISTICS_ASYNC si applica alle statistiche create per indici, colonne singole nei predicati di query e statistiche create con l'istruzione CREATE STATISTICS. Questa opzione si applica anche alle statistiche filtrate.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

    Usare l'opzione AUTO_UPDATE_STATISTICS_ASYNC per specificare se le statistiche vengono aggiornate in modo sincrono o asincrono.

  • OFF

    Specifica che Query Optimizer non aggiorna le statistiche quando queste vengono usate da una query né quando potrebbero essere non aggiornate. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

    È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoUpdateStatistics della funzione DATABASEPROPERTYEX.

    Per altre informazioni, vedere la sezione sulle opzioni relative alle statistiche in Statistiche.

AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

  • In...

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono asincroni. Query Optimizer non attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    L'impostazione di questa opzione su ON non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

    Per impostazione predefinita, l'opzione AUTO_UPDATE_STATISTICS_ASYNC è impostata su OFF. Query Optimizer aggiorna pertanto le statistiche in modo sincrono.

  • OFF

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono sincroni. Query Optimizer attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    L'impostazione di questa opzione su OFF non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_async_on nella vista del catalogo sys.databases.

Per altre informazioni su quando usare gli aggiornamenti delle statistiche sincroni o asincroni, vedere la sezione sulle opzioni relative alle statistiche in Statistiche.

<> automatic_tuning_option ::=

Controlla le opzioni automatiche per l'ottimizzazione automatica. È possibile visualizzare le opzioni per le impostazioni seguenti nel portale di Azure o tramite T-SQL nella vista sys.database_automatic_tuning_options.

AUTOMATIC_TUNING = { AUTO | INHERIT | CUSTOM }

  • AUTO

    Se si imposta il valore di ottimizzazione automatica su AUTO, vengono applicate le impostazioni predefinite di configurazione di Azure per l'ottimizzazione automatica. Nel portale di Azure questa opzione riflette l'opzione "Eredita da: Impostazioni predefinite di Azure".

  • INHERIT

    L'uso del valore INHERIT fa ereditare la configurazione predefinita dal server padre. Nel portale di Azure questa opzione riflette l'opzione "Eredita da: Server". Ciò risulta particolarmente utile se si vuole personalizzare la configurazione di ottimizzazione automatica in un server padre e fare in modo che tutti i database del server ereditino queste impostazioni personalizzate. Si noti che affinché l'ereditarietà funzioni, le tre opzioni di ottimizzazione FORCE_LAST_GOOD_PLAN, CREATE_INDEX e DROP_INDEX devono essere impostate su DEFAULT per i database.

  • CUSTOM

    Se si usa il valore CUSTOM, è necessario personalizzare ciascuna delle opzioni di ottimizzazione automatica disponibili nei database. Nel portale di Azure questa opzione riflette l'opzione "Eredita da: Non ereditare".

CREATE_INDEX = { DEFAULT | ON | OFF }

Abilita o disabilita l'opzione di gestione automatica degli indici CREATE_INDEX di ottimizzazione automatica. È possibile visualizzare lo stato per questa opzione nel portale di Azure o tramite T-SQL nella vista sys.database_automatic_tuning_options.

  • DEFAULT

    Fa ereditare le impostazioni predefinite dal server. In questo caso, le opzioni per l'attivazione o la disattivazione delle funzionalità di ottimizzazione automatica sono definite a livello del server.

  • In...

    Quando questa opzione è abilitata, gli indici mancanti vengono generati automaticamente per un database. Dopo la creazione dell'indice, vengono verificati i miglioramenti delle prestazioni del carico di lavoro. Quando non offre più vantaggi in termini di prestazioni del carico di lavoro, tale indice creato viene annullato automaticamente. Gli indici creati automaticamente vengono contrassegnati come indici generati dal sistema.

  • OFF

    Gli indici mancanti del database non vengono generati automaticamente.

DROP_INDEX = { DEFAULT | ON | OFF }

Abilita o disabilita l'opzione di gestione automatica degli indici DROP_INDEX di ottimizzazione automatica. È possibile visualizzare lo stato per questa opzione nel portale di Azure o tramite T-SQL nella vista sys.database_automatic_tuning_options.

  • DEFAULT

    Fa ereditare le impostazioni predefinite dal server. In questo caso, le opzioni per l'attivazione o la disattivazione delle funzionalità di ottimizzazione automatica sono definite a livello del server.

  • In...

    Elimina automaticamente gli indici duplicati o superflui per il carico di lavoro delle prestazioni.

  • OFF

    Non rimuove automaticamente gli indici mancanti del database.

FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF }

Abilita o disabilita l'opzione di correzione automatica dei piani FORCE_LAST_GOOD_PLAN di ottimizzazione automatica. È possibile visualizzare lo stato per questa opzione nel portale di Azure o tramite T-SQL nella vista sys.database_automatic_tuning_options.

  • DEFAULT

    Fa ereditare le impostazioni predefinite dal server. In questo caso, le opzioni per l'attivazione o la disattivazione delle funzionalità di ottimizzazione automatica sono definite a livello del server. Questo è il valore predefinito. Il valore predefinito per i nuovi server di Azure SQL è ON, ovvero i nuovi database erediteranno ON per impostazione predefinita.

  • In...

    Il motore di database forza automaticamente l'ultimo piano valido noto nelle query Transact-SQL nel caso in cui il nuovo piano di query causi un peggioramento delle prestazioni. Il motore di database monitora continuamente le prestazioni della query Transact-SQL con il piano forzato. Se si rilevano miglioramenti delle prestazioni, il motore di database continuerà a usare l'ultimo piano valido noto. Se non si rilevano miglioramenti delle prestazioni, il motore di database creerà un nuovo piano di query. L'istruzione avrà esito negativo se Query Store non è abilitato o se non è in modalità di lettura/scrittura.

  • OFF

    Il motore di database segnala potenziali peggioramenti delle prestazioni delle query causati da modifiche al piano di query nella vista sys.dm_db_tuning_recommendations. I consigli qui segnalati non vengono tuttavia applicati automaticamente. Gli utenti possono monitorare i consigli attivi e risolvere i problemi identificati applicando gli script Transact-SQL mostrati nella vista.

<> change_tracking_option ::=

Controlla le opzioni di rilevamento delle modifiche. È possibile abilitare il rilevamento delle modifiche, impostare le opzioni, modificare le opzioni e disabilitare il rilevamento delle modifiche. Per gli esempi, vedere la sezione Esempi più avanti in questo articolo.

  • In...

    Abilita il rilevamento delle modifiche per il database. Quando si abilita il rilevamento delle modifiche, è possibile impostare anche le opzioni AUTO CLEANUP e CHANGE RETENTION.

    • AUTO_CLEANUP = { ON | OFF }

      • In...

        Le informazioni sul rilevamento delle modifiche vengono rimosse automaticamente una volta trascorso il periodo di memorizzazione specificato.

      • OFF

        I dati relativi al rilevamento delle modifiche non vengono rimossi dal database.

    • CHANGE_RETENTION = retention_period { DAYS | ORE | MINUTES }

      Specifica il periodo minimo di conservazione delle informazioni sul rilevamento delle modifiche nel database. I dati vengono rimossi solo quando il valore di AUTO_CLEANUP è ON.

      retention_period è un numero intero che specifica il componente numerico del periodo di memorizzazione.

      Il periodo di conservazione predefinito è 2 giorni. Il periodo di memorizzazione minimo è 1 minuto. Il tipo di conservazione predefinito è DAYS.

  • OFF

    Disabilita il rilevamento delle modifiche per il database. Prima di disabilitare il rilevamento delle modifiche per il database, disabilitarlo per tutte le tabelle.

<> cursor_option ::=

Consente di controllare le opzioni del cursore.

CURSOR_CLOSE_ON_COMMIT { ON | OFF }

  • In...

    Quando si esegue il commit o il rollback di una transazione, eventuali cursori aperti vengono chiusi.

  • OFF

    I cursori rimangono aperti quando viene eseguito il commit di una transazione. Quando si esegue il rollback di una transazione vengono chiusi tutti i cursori, ad eccezione di quelli definiti come INSENSITIVE o STATIC.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CURSOR_CLOSE_ON_COMMIT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CURSOR_CLOSE_ON_COMMIT su OFF per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET CURSOR_CLOSE_ON_COMMIT.

È possibile determinare lo stato di questa opzione esaminando la colonna is_cursor_close_on_commit_on nella vista del catalogo sys.databases o la proprietà IsCloseCursorsOnCommitEnabled della funzione DATABASEPROPERTYEX. Il cursore viene deallocato in modo implicito soltanto al momento della disconnessione. Per altre informazioni, vedere DECLARE CURSOR.

<> db_encryption_option ::=

Controlla lo stato della crittografia del database.

ENCRYPTION { ON | OFF }

Imposta il database per l'utilizzo della crittografia (ON) o no (OFF). Per altre informazioni sulla crittografia del database, vedere Transparent Data Encryption e Transparent Data Encryption con il database SQL di Azure.

Quando la crittografia è abilitata a livello di database, tutti i filegroup vengono crittografati. I nuovi filegroup erediteranno la proprietà di crittografia. Se in un database sono presenti filegroup impostati su READ ONLY, l'operazione di crittografia del database avrà esito negativo.

È possibile visualizzare lo stato della crittografia del database usando la DMV sys.dm_database_encryption_keys.

<> db_update_option ::=

Indica se sono consentiti aggiornamenti nel database.

  • READ_ONLY

    Gli utenti possono leggere i dati dal database, ma non modificarli.

    Nota

    Per migliorare le prestazioni di esecuzione delle query, aggiornare le statistiche prima di impostare un database su READ_ONLY. Se dopo che un database viene impostato su READ_ONLY sono necessarie statistiche aggiuntive, il motore di database creerà statistiche in tempdb. Per altre informazioni sulle statistiche per un database di sola lettura, vedere Statistiche.

  • READ_WRITE

    Il database è disponibile per operazioni di lettura e scrittura.

Per modificare questo stato, è necessario disporre dell'accesso esclusivo al database. Per altre informazioni, vedere la clausola SINGLE_USER.

Nota

In database federati del database SQL di Azure la sintassi SET { READ_ONLY | READ_WRITE } è disabilitata.

<> db_user_access_option ::=

Controlla l'accesso degli utenti al database.

  • RESTRICTED_USER

    Consente la connessione al database solo ai membri del ruolo predefinito del database db_owner e ai membri dei ruoli predefiniti del server dbcreator e sysadmin, senza tuttavia imporre un limite al numero di connessioni. Tutte le connessioni al database vengono interrotte entro l'intervallo di tempo specificato nella clausola di interruzione dell'istruzione ALTER DATABASE. Dopo l'impostazione dello stato RESTRICTED_USER per il database, qualsiasi tentativo di connessione da parte di utenti non qualificati viene rifiutato. Nel database SQL di Azure deve essere eseguito dal database utente. Dal database master può essere restituito un messaggio di errore Msg 42008, Level 16, State 3, Line 1 ODBC error: State: 28000: Error: 18456 Message:'[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user '##MS_InstanceCertificate##'.'.

  • MULTI_USER

    Consente la connessione al database a tutti gli utenti che dispongono di autorizzazioni appropriate. È possibile determinare lo stato di questa opzione esaminando la colonna user_access nella vista del catalogo sys.databases o la proprietà UserAccess della funzione DATABASEPROPERTYEX. Nel database SQL di Azure deve essere eseguito dal database utente. Dal database master può essere restituito un messaggio di errore Msg 42008, Level 16, State 3, Line 1 ODBC error: State: 28000: Error: 18456 Message:'[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user '##MS_InstanceCertificate##'.'.

<> delayed_durability_option ::=

Determina se le transazioni sottoposte a commit sono completamente durevoli o durevoli posticipate.

  • DISABLED

    Tutte le transazioni in cui viene usato SET DISABLED sono completamente durevoli. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

  • ALLOWED

    Tutte le transazioni in cui viene usato SET ALLOWED sono completamente durevoli o durevoli posticipate, a seconda del set di opzioni di durabilità nel blocco atomico o nell'istruzione COMMIT.

  • FORCED

    Tutte le transazioni in cui viene usato SET FORCED sono durevoli posticipate. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

<> PARAMETERIZATION_option ::=

Consente di controllare l'opzione di parametrizzazione.

PARAMETERIZATION { SIMPLE | FORCED }

  • SEMPLICE

    Le query vengono parametrizzate in base al comportamento predefinito del database.

  • FORCED

    SQL Server parametrizza tutte le query nel database.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_parameterization_forced nella vista del catalogo sys.databases.

<> query_store_options ::=

  • ON | OFF | CLEAR [ ALL ]

    Verifica se Query Store è abilitato nel database e controlla anche la rimozione dei contenuti di Query Store.

    • In...

      Abilita Query Store. ON è il valore predefinito.

    • OFF

      Disabilita Query Store.

      Nota

      Non è possibile disabilitare Query Store in un singolo database SQL di Azure e in un pool elastico. L'esecuzione di ALTER DATABASE [database] SET QUERY_STORE = OFF restituirà l'avviso 'QUERY_STORE=OFF' is not supported in this version of SQL Server..

    • CLEAR

      Rimuove i contenuti di Query Store.

OPERATION_MODE

Descrive la modalità operativa di Query Store. I valori validi sono READ_ONLY e READ_WRITE. In modalità READ_WRITE Query Store raccoglie e salva in modo permanente le informazioni sulle statistiche di esecuzione di runtime e i piani di query. In modalità READ_ONLY le informazioni possono essere lette da Query Store, ma non vengono aggiunte nuove informazioni. Se lo spazio massimo allocato di Query Store viene esaurito, la sua modalità operativa passa a READ_ONLY.

CLEANUP_POLICY

Descrive i criteri di conservazione dei dati di Query Store. STALE_QUERY_THRESHOLD_DAYS determina il numero di giorni per cui le informazioni per una query vengono conservate in Query Store. STALE_QUERY_THRESHOLD_DAYS è di tipo bigint. Il valore predefinito è 30. Per l'edizione Basic del database SQL, l'impostazione predefinita è 7 giorni.

DATA_FLUSH_INTERVAL_SECONDS

Determina la frequenza con cui i dati scritti in Query Store vengono salvati in modo permanente sul disco. Per ottimizzare le prestazioni, i dati raccolti da Query Store vengono scritti in modo asincrono sul disco. La frequenza con cui si verifica questo trasferimento asincrono viene configurata tramite l'argomento DATA_FLUSH_INTERVAL_SECONDS. DATA_FLUSH_INTERVAL_SECONDS è di tipo bigint. Il valore predefinito 900 (15 min).

MAX_STORAGE_SIZE_MB

Determina lo spazio allocato a Query Store. MAX_STORAGE_SIZE_MB è di tipo bigint.

Nota

In database SQL di Azure il valore predefinito MAX_STORAGE_SIZE_MB è diverso dal livello di servizio, come indicato di seguito: Premium, Business Critical e Hyperscale: 1.024 MB; Standard e utilizzo generico: 100 MB; Basic: 10 MB Il valore massimo consentito MAX_STORAGE_SIZE_MB è 10.240 MB.

Nota

Il limite MAX_STORAGE_SIZE_MB non è necessariamente applicato. Le dimensioni di archiviazione vengono controllate solo quando Query Store scrive i dati su disco. Questo intervallo viene impostato dall'opzione DATA_FLUSH_INTERVAL_SECONDS o dall'opzione della finestra di dialogo di Query Store in Management Studio Intervallo di scaricamento dati. Il valore predefinito dell'intervallo è 900 secondi (o 15 minuti). Se Query Store ha violato il limite MAX_STORAGE_SIZE_MB tra i controlli delle dimensioni di archiviazione, passa alla modalità di sola lettura. Se è abilitata la SIZE_BASED_CLEANUP_MODE, viene attivato anche il meccanismo di pulizia per applicare il limite MAX_STORAGE_SIZE_MB. Dopo la cancellazione di spazio sufficiente, la modalità di Query Store cambierà automaticamente in lettura/scrittura.

Importante

Se si ritiene che per l'acquisizione del carico di lavoro siano necessari più di 10 GB di spazio su disco, è probabile che sia opportuno ripensare e ottimizzare il carico di lavoro in modo da riusare i piani di query (ad esempio, usando la parametrizzazione forzata) oppure modificare le configurazioni di Query Store. A partire da SQL Server 2019 (15.x) e nel database SQL di Azure è possibile impostare QUERY_CAPTURE_MODE su CUSTOM per un controllo aggiuntivo sui criteri di acquisizione delle query.

INTERVAL_LENGTH_MINUTES

Determina l'intervallo di tempo in base a cui vengono aggregati i dati delle statistiche di esecuzione di runtime in Query Store. Per ottimizzare l'utilizzo dello spazio, le statistiche di esecuzione di runtime nell'archivio di statistiche di runtime vengono aggregate in un intervallo di tempo fisso. L'intervallo di tempo predefinito viene configurato tramite l'argomento INTERVAL_LENGTH_MINUTES. INTERVAL_LENGTH_MINUTES è di tipo bigint. Il valore predefinito è 60.

SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }

Determina se la pulizia viene attivata automaticamente quando la quantità totale dei dati ha quasi raggiunto le dimensioni massime.

  • OFF

    La pulizia basata sulle dimensioni non viene attivata automaticamente.

  • AUTO

    La pulizia basata sulle dimensioni viene attivata automaticamente quando le dimensioni sul disco raggiungono il 90% di max_storage_size_mb. La pulizia basata sulle dimensioni rimuove per prime le query meno recenti e meno dispendiose. Si arresta quando raggiunge all'incirca l'80% di max_storage_size_mb. Si tratta del valore di configurazione predefinito.

SIZE_BASED_CLEANUP_MODE è di tipo nvarchar.

QUERY_CAPTURE_MODE { ALL | AUTO | CUSTOM | NONE }

Determina la modalità di acquisizione query attiva. Ogni modalità definisce criteri di acquisizione delle query specifici.

Nota

I cursori, le query all'interno delle stored procedure e le query compilate in modo nativo vengono sempre acquisiti quando la modalità di acquisizione query è impostata su ALL, AUTO o CUSTOM.

  • ALL

    Consente di acquisire tutte le query.

  • AUTO

    Consente di acquisire le query pertinenti in base al conteggio delle esecuzioni e al consumo delle risorse. Si tratta del valore di configurazione predefinito per il database SQL di Azure.

  • NONE

    Consente di arrestare l'acquisizione di nuove query. Query Store continuerà a raccogliere le statistiche di compilazione e runtime per le query che sono già state acquisite. Usare con cautela questa configurazione perché si rischia di perdere query importanti.

  • CUSTOM

    Consente di controllare le opzioni QUERY_CAPTURE_POLICY.

QUERY_CAPTURE_MODE è di tipo nvarchar.

MAX_PLANS_PER_QUERY

Definisce il numero massimo di piani mantenuti per ogni query. MAX_PLANS_PER_QUERY è di tipo int. Il valore predefinito è 200.

WAIT_STATS_CAPTURE_MODE { ON | OFF }

Controlla se verranno acquisite le statistiche di attesa per ogni query.

  • In...

    Verranno acquisite informazioni sulle statistiche di attesa per ogni query. Si tratta del valore di configurazione predefinito.

  • OFF

    Non verranno acquisite informazioni sulle statistiche di attesa per ogni query.

<> query_capture_policy_option_list :: =

Controlla le opzioni dei criteri di acquisizione di Query Store. Ad eccezione di STALE_CAPTURE_POLICY_THRESHOLD, queste opzioni definiscono le condizioni OR che devono verificarsi perché le query vengano acquisite nel valore della soglia dei criteri di acquisizione non aggiornati definito.

STALE_CAPTURE_POLICY_THRESHOLD = integer { DAYS | HOURS }

Definisce l'intervallo di valutazione per determinare se una query deve essere acquisita. Il valore predefinito è 1 giorno e l'intervallo può essere impostato da 1 ora a sette giorni. number è di tipo int.

EXECUTION_COUNT = integer

Definisce il numero di esecuzioni di una query nel periodo di valutazione. Il valore predefinito è 30. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati è necessario eseguire una query almeno 30 volte al giorno perché venga salvata in modo permanente in Query Store. EXECUTION_COUNT è di tipo int.

TOTAL_COMPILE_CPU_TIME_MS = integer

Definisce il tempo CPU di compilazione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 1000. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato in totale almeno un secondo di tempo CPU al giorno per la compilazione perché venga salvata in modo permanente in Query Store. TOTAL_COMPILE_CPU_TIME_MS è di tipo int.

TOTAL_EXECUTION_CPU_TIME_MS = integer

Definisce il tempo CPU di esecuzione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 100. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato almeno 100 ms di tempo CPU al giorno per l'esecuzione perché venga salvata in modo permanente in Query Store. TOTAL_EXECUTION_CPU_TIME_MS è di tipo int.

<> snapshot_option ::=

Determina il livello di isolamento delle transazioni.

ALLOW_SNAPSHOT_ISOLATION { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Una volta abilitata l'opzione, le transazioni possono specificare il livello di isolamento della transazione SNAPSHOT. Nelle transazioni eseguite con il livello di isolamento SNAPSHOT, tutte le istruzioni possono accedere a uno snapshot dei dati corrispondente allo stato dei dati al momento dell'avvio della transazione. Se una transazione eseguita con il livello di isolamento SNAPSHOT deve accedere ai dati in più database, è necessario impostare ALLOW_SNAPSHOT_ISOLATION su ON in tutti i database oppure ogni istruzione della transazione deve usare hint di blocco per qualsiasi riferimento in una clausola FROM a una tabella di un database per cui l'opzione ALLOW_SNAPSHOT_ISOLATION è impostata su OFF.

  • OFF

    Consente di disabilitare l'opzione Snapshot a livello di database. Per le transazioni non può essere impostato il livello di isolamento SNAPSHOT.

Quando si imposta un nuovo stato per l'opzione ALLOW_SNAPSHOT_ISOLATION (da ON a OFF oppure da OFF a ON), ALTER DATABASE restituisce il controllo al chiamante solo dopo il completamento del commit di tutte le transazioni esistenti nel database. Se per il database è già attivo lo stato specificato nell'istruzione ALTER DATABASE, il controllo viene restituito immediatamente al chiamante. Se l'istruzione ALTER DATABASE non restituisce il controllo rapidamente, usare sys.dm_tran_active_snapshot_database_transactions per verificare se sono presenti transazioni con esecuzione prolungata. Se l'istruzione ALTER DATABASE viene annullata, il database rimane nello stato attivo al momento dell'avvio dell'istruzione ALTER DATABASE. La vista del catalogo sys.databases indica lo stato delle transazioni di isolamento dello snapshot nel database. Se snapshot_isolation_state_desc = IN_TRANSITION_TO_ON, l'istruzione ALTER DATABASE .... ALLOW_SNAPSHOT_ISOLATION OFF attenderà sei secondi prima di ritentare l'operazione.

Non è possibile cambiare lo stato di ALLOW_SNAPSHOT_ISOLATION se il database è OFFLINE.

Se si imposta ALLOW_SNAPSHOT_ISOLATION in un database READ_ONLY, tale impostazione viene mantenuta anche se il database viene in seguito impostato su READ_WRITE.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna snapshot_isolation_state nella vista del catalogo sys.databases.

READ_COMMITTED_SNAPSHOT { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot Read Committed a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Una volta abilitata questa opzione, le transazioni che specificano il livello di isolamento READ COMMITTED usano il controllo delle versioni delle righe anziché il blocco. Quando una transazione viene eseguita con il livello di isolamento READ COMMITTED, tutte le istruzioni vedono uno snapshot dei dati nello stato in cui si trovano all'avvio dell'istruzione.

  • OFF

    Disabilita l'opzione relativa allo snapshot Read Committed a livello di database. Le transazioni per cui è impostato il livello di isolamento READ COMMITTED usano il blocco.

Per impostare READ_COMMITTED_SNAPSHOT su ON o su OFF, è necessario che non siano presenti connessioni attive al database, ad eccezione della connessione usata per eseguire il comando ALTER DATABASE. Non è tuttavia necessario che il database sia in modalità utente singolo. Non è possibile cambiare lo stato di questa opzione quando il database è OFFLINE.

Se si imposta READ_COMMITTED_SNAPSHOT in un database READ_ONLY, tale impostazione viene mantenuta anche se il database viene in seguito impostato su READ_WRITE.

Non è possibile impostare READ_COMMITTED_SNAPSHOT su ON per i database di sistema master, tempdb e msdb. Se si modifica l'impostazione per model, questa diventa l'impostazione predefinita per i nuovi database creati, ad eccezione di tempdb.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_read_committed_snapshot_on nella vista del catalogo sys.databases.

Avviso

Quando viene creata una tabella con DURABILITY = SCHEMA_ONLY e l'opzione READ_COMMITTED_SNAPSHOT viene successivamente cambiata tramite ALTER DATABASE, i dati della tabella vengono persi.

Suggerimento

Nel database SQL di Azure il comando ALTER DATABASE per impostare READ_COMMITTED_SNAPSHOT ON o OFF per un database deve essere eseguito nel database master.

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }

  • In...

    Quando l'isolamento della transazione è impostato su un livello inferiore a SNAPSHOT, tutte le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria vengono eseguite con isolamento SNAPSHOT. I livelli di isolamento inferiori a SNAPSHOT sono, ad esempio, READ COMMITTED e READ UNCOMMITTED. Queste operazioni vengono eseguite indipendentemente dal fatto che venga impostato in modo esplicito il livello di isolamento della transazione a livello di sessione o che venga usata in modo implicito l'impostazione predefinita.

  • OFF

    Non innalza il livello di isolamento della transazione per le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria.

Non è possibile cambiare lo stato di MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT se il database è OFFLINE.

Il valore predefinito è OFF.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_memory_optimized_elevate_to_snapshot_on nella vista del catalogo sys.databases.

<> sql_option ::=

Controlla le opzioni di conformità ANSI a livello di database.

ANSI_NULL_DEFAULT { ON | OFF }

Determina il valore predefinito, NULL o NOT NULL, per una colonna o un tipo CLR definito dall'utente per cui il supporto dei valori Null non è definito in modo esplicito nell'istruzione CREATE TABLE o ALTER TABLE. Le colonne definite con vincoli seguono le regole dei vincoli indipendentemente da questa impostazione.

  • In...

    Il valore predefinito è NULL.

  • OFF

    Il valore predefinito è NOT NULL.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULL_DEFAULT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULL_DEFAULT su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULL_DFLT_ON.

Per motivi di compatibilità con ANSI, l'impostazione dell'opzione di database ANSI_NULL_DEFAULT su ON modifica l'impostazione predefinita del database su NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_null_default_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullDefault della funzione DATABASEPROPERTYEX.

ANSI_NULLS { ON | OFF }

  • In...

    Tutti i confronti con un valore Null restituiscono UNKNOWN.

  • OFF

    I confronti di valori non Unicode con un valore Null restituiscono TRUE se entrambi i valori sono NULL.

Importante

In una versione futura di SQL Server l'opzione ANSI_NULLS sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULLS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULLS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULLS.

Nota

È inoltre necessario che l'opzione SET ANSI_NULLS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_nulls_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullsEnabled della funzione DATABASEPROPERTYEX.

ANSI_PADDING { ON | OFF }

  • In...

    Le stringhe vengono riempite in modo che abbiano tutte la stessa lunghezza prima della conversione. o dell'inserimento in un tipo di dati varchar o nvarchar.

  • OFF

    Vengono inseriti spazi vuoti finali nei valori di tipo carattere in colonne di tipo varchar o nvarchar. Vengono inoltre lasciati gli zeri finali nei valori binari inseriti nelle colonne di tipo varbinary. I valori non vengono riempiti per l'intera lunghezza della colonna.

    Se si specifica OFF, questa impostazione ha effetto solo sulla definizione di nuove colonne.

Importante

In una versione futura di SQL Server l'opzione ANSI_PADDING sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile impostare l'opzione ANSI_PADDING sempre su ON. È necessario che l'opzione ANSI_PADDING sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le colonne char(n) e binary(n) che consentono valori Null vengono riempite fino alla loro lunghezza quando ANSI_PADDING è impostata su ON. I valori vuoti e gli zeri finali vengono eliminati quando ANSI_PADDING è impostata su OFF. Le colonne char(n) e binary(n) che non consentono valori Null vengono sempre riempite fino alla loro lunghezza.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_PADDING. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_PADDING su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_PADDING.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_padding_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiPaddingEnabled della funzione DATABASEPROPERTYEX.

ANSI_WARNINGS { ON | OFF }

  • In...

    Vengono restituiti messaggi di errore o di avviso quando si verificano condizioni come la divisione per zero e inoltre quando nelle funzioni di aggregazione sono presenti valori Null.

  • OFF

    Non vengono generati avvisi e vengono restituiti valori Null quando si verificano condizioni come la divisione per zero.

Nota

È necessario che l'opzione ANSI_WARNINGS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_WARNINGS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_WARNINGS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_WARNINGS.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_warnings_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiWarningsEnabled della funzione DATABASEPROPERTYEX.

ARITHABORT { ON | OFF }

  • In...

    Interrompe una query quando si verifica un overflow o un errore di divisione per zero durante l'esecuzione della query stessa.

  • OFF

    Quando si verifica uno di questi errori, viene visualizzato un messaggio di avviso. L'esecuzione della query, del batch o della transazione prosegue come se non si fosse verificato alcun errore, anche se viene visualizzato un messaggio di avviso.

Nota

È necessario che l'opzione ARITHABORT sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_arithabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsArithmeticAbortEnabled della funzione DATABASEPROPERTYEX.

COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }

Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE.

CONCAT_NULL_YIELDS_NULL { ON | OFF }

  • In...

    Il risultato di un'operazione di concatenazione è NULL quando uno degli operandi è NULL. La concatenazione della stringa di caratteri "Questo è" con NULL restituisce, ad esempio, il valore NULL anziché il valore "Questo è".

  • OFF

    Il valore Null viene considerato come una stringa di caratteri vuota.

Nota

È necessario che l'opzione CONCAT_NULL_YIELDS_NULL sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

In una versione futura di SQL Server l'opzione CONCAT_NULL_YIELDS_NULL sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito l'opzione su OFF restituirà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CONCAT_NULL_YIELDS_NULL. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CONCAT_NULL_YIELDS_NULL su ON per la sessione quando viene stabilita una connessione a un'istanza di SQL Server. Per altre informazioni, vedere SET CONCAT_NULL_YIELDS_NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_concat_null_yields_null_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNullConcat della funzione DATABASEPROPERTYEX.

NUMERIC_ROUNDABORT { ON | OFF }

  • In...

    Viene generato un errore quando si verifica una perdita di precisione in un'espressione.

  • OFF

    La perdita di precisione non genera messaggi di errore e il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato.

Importante

È necessario che l'opzione NUMERIC_ROUNDABORT sia impostata su OFF quando vengono creati o modificati indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato per questa opzione nella colonna is_numeric_roundabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNumericRoundAbortEnabled della funzione DATABASEPROPERTYEX.

QUOTED_IDENTIFIER { ON | OFF }

  • In...

    È possibile usare le virgolette doppie per delimitare gli identificatori delimitati.

    Tutte le stringhe delimitate da virgolette doppie vengono interpretate come identificatori di oggetto. Gli identificatori delimitati non devono necessariamente essere conformi alle regole di Transact-SQL per gli identificatori. Possono essere parole chiave e includere caratteri normalmente non consentiti negli identificatori di Transact-SQL. Se una virgoletta doppia (") fa parte dell'identificatore, può essere rappresentata da due virgolette doppie ("").

  • OFF

    Gli identificatori non possono essere delimitati da virgolette e devono essere conformi a tutte le regole di Transact-SQL per gli identificatori. È possibile delimitare i valori letterali con virgolette singole o doppie.

SQL Server consente anche di delimitare gli identificatori in base alle parentesi quadre ([ e ]). Gli identificatori tra parentesi quadre possono essere sempre usati, indipendentemente dall'impostazione di QUOTED_IDENTIFIER. Per altre informazioni, vedere Identificatori del database.

Quando viene creata una tabella, l'opzione QUOTED IDENTIFIER viene sempre archiviata con l'impostazione ON nei relativi metadati, anche se l'opzione è impostata su OFF.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per QUOTED_IDENTIFIER. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta QUOTED_IDENTIFIER. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET QUOTED_IDENTIFIER.

È possibile determinare lo stato di questa opzione esaminando la colonna is_quoted_identifier_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsQuotedIdentifiersEnabled della funzione DATABASEPROPERTYEX.

RECURSIVE_TRIGGERS { ON | OFF }

  • In...

    È consentita l'attivazione ricorsiva di trigger AFTER.

  • OFF

    È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

Nota

Se l'opzione RECURSIVE_TRIGGERS è impostata su OFF, viene impedita esclusivamente la ricorsione diretta. Per disabilitare la ricorsione indiretta, è necessario impostare anche l'opzione del server nested triggers su 0.

È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases o la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

<> target_recovery_time_option ::=

Specifica la frequenza di checkpoint indiretti per database singolo. A partire da SQL Server 2016 (13.x), il valore predefinito per i nuovi database è 1 minuto, a indicare che il database userà checkpoint indiretti. Per le versioni precedenti, il valore predefinito è 0, a indicare che il database userà checkpoint automatici la cui frequenza dipende dall'impostazione dell'intervallo di recupero dell'istanza del server. Microsoft consiglia di usare 1 minuto per la maggior parte dei sistemi.

TARGET_RECOVERY_TIME = tempo_recupero_riferimento { SECONDS | MINUTES }

  • target_recovery_time

    Specifica il limite massimo di tempo per recuperare il database specificato in caso di un arresto anomalo del sistema. target_recovery_time è di tipo int.

  • SECONDS

    Indica che target_recovery_time viene espresso come numero di secondi.

  • MINUTI

    Indica che target_recovery_time viene espresso come numero di minuti.

Per altre informazioni sui checkpoint indiretti, vedere Checkpoint di database.

WITH <terminazione> ::=

Specifica quando eseguire il rollback di transazioni incomplete in caso di transizione dello stato del database. Se questa clausola viene omessa, l'attesa da parte dell'istruzione ALTER DATABASE è illimitata in presenza di qualsiasi blocco attivo sul database. È possibile specificare una sola clausola di terminazione, che deve seguire le clausole SET.

Nota

Non tutte le opzioni di database usano la clausola WITH <termination>. Per altre informazioni, vedere la tabella in Impostazione delle opzioni nella sezione "Osservazioni" di questo articolo.

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    Specifica se eseguire il rollback dopo il numero di secondi specificato o immediatamente.

  • NO_WAIT

    Specifica che la richiesta ha esito negativo se non è possibile completare immediatamente la modifica richiesta dello stato del database o dell'opzione, senza aspettare il commit o il rollback automatico delle transazioni.

<> temporal_history_retention ::=

Impostare le opzioni

Per recuperare le impostazioni correnti delle opzioni di database, usare la vista del catalogo sys.databases o DATABASEPROPERTYEX

Dopo l'impostazione di un'opzione di database, la modifica diventa effettiva immediatamente.

Per cambiare i valori predefiniti di qualsiasi opzione di database per tutti i nuovi database, A questo scopo, modificare l'opzione di database appropriata nel database model.

Non tutte le opzioni di database usano la clausola WITH <termination> o possono essere specificate in combinazione con altre opzioni. Nella tabella seguente sono elencate tali opzioni con indicazione del supporto della clausola di terminazione o dell'impostazione in combinazione con altre opzioni.

Categoria di opzioni Impostazione in combinazione con altre opzioni Supporto della clausola WITH <termination>
<auto_option> No
<change_tracking_option>
<cursor_option> No
<db_encryption_option> No
<db_update_option>
<db_user_access_option>
<delayed_durability_option>
<parameterization_option>
ALLOW_SNAPSHOT_ISOLATION No No
READ_COMMITTED_SNAPSHOT No
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
DATE_CORRELATION_OPTIMIZATION
<sql_option> No
<target_recovery_time_option> No

Esempi

R. Impostare il database su READ_ONLY

Per modificare lo stato di un database o filegroup impostandolo su READ_ONLY o READ_WRITE, è necessario l'accesso esclusivo al database e l'operazione può richiedere alcuni secondi. Nell'esempio seguente viene impostata la modalità RESTRICTED_USER per il database in modo da limitare l'accesso. Nell'esempio lo stato del database AdventureWorks2022 viene quindi impostato su READ_ONLY e viene ripristinato l'accesso al database per tutti gli utenti.

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET RESTRICTED_USER;
GO
ALTER DATABASE [database_name]
SET READ_ONLY
--`SET READ_ONLY` command may take a few seconds to complete.
GO
ALTER DATABASE [database_name]
SET MULTI_USER;
GO

Per reimpostare il database in modalità lettura/scrittura:

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET READ_WRITE
GO

Da verificare:

SELECT [name], user_access_desc, is_read_only FROM sys.databases
WHERE [name] = 'database_name'
GO

B. Abilitare l'isolamento dello snapshot in un database

Nell'esempio seguente viene abilitata l'opzione relativa al framework di isolamento dello snapshot per il database AdventureWorks2022.

--Connect to [database_name]
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

Verificare lo stato di snapshot_isolation_framework nel database.

--Connect to [database_name]
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'database_name';
GO

Il set di risultati indica che il framework di isolamento dello snapshot è abilitato.

name snapshot_isolation_state description
[database_name] 1 In...

C. Abilitare, modificare o disabilitare il rilevamento delle modifiche

Nell'esempio seguente viene abilitato il rilevamento delle modifiche per il database AdventureWorks2022 e il periodo di memorizzazione viene impostato su 2 giorni.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

L'esempio seguente illustra come modificare il periodo di conservazione impostandolo su 3 giorni.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

Nell'esempio seguente viene illustrato come disabilitare il rilevamento delle modifiche per il database AdventureWorks2022.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

D. Abilitare Query Store

L'esempio seguente abilita Query Store e configura i relativi parametri.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

E. Abilitare Query Store con statistiche di attesa

L'esempio seguente abilita Query Store e configura i relativi parametri.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON
    );

F. Abilitare Query Store con opzioni dei criteri di acquisizione personalizzati

L'esempio seguente abilita Query Store e configura i relativi parametri.

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

Vedi anche

Passaggi successivi

* Istanza gestita di SQL *  

 

Istanza gestita di SQL di Azure

I livelli di compatibilità sono opzioni SET, ma sono descritti in Livello di compatibilità ALTER DATABASE.

Nota

Molte opzioni SET di database possono essere configurate per la sessione corrente tramite Istruzioni SET e spesso vengono configurate dalle applicazioni durante la connessione. Le opzioni del set a livello di sessione sostituiscono i ALTER DATABASE SET valori. Le opzioni di database descritte nelle sezioni seguenti sono valori che è possibile impostare per le sessioni che non prevedono esplicitamente altri valori di opzioni SET.

Sintassi

ALTER DATABASE { database_name | Current }
SET
{
    <optionspec> [ ,...n ]
}
;

<optionspec> ::=
{
    <auto_option>
  | <change_tracking_option>
  | <cursor_option>
  | <db_encryption_option>
  | <delayed_durability_option>
  | <parameterization_option>
  | <query_store_options>
  | <snapshot_option>
  | <sql_option>
  | <target_recovery_time_option>
  | <termination>
  | <temporal_history_retention>
}
;
<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
    {
       = OFF
     | = ON [ ( <change_tracking_option_list > [,...n] ) ]
     | ( <change_tracking_option_list> [,...n] )
    }
}

<change_tracking_option_list> ::=
   {
       AUTO_CLEANUP = { ON | OFF }
     | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
   }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
}

<db_encryption_option> ::=
  ENCRYPTION { ON | OFF }

<delayed_durability_option> ::=DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<parameterization_option> ::=
  PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
  QUERY_STORE
  {
    = OFF
    | = ON [ ( <query_store_option_list> [,... n] ) ]
    | ( < query_store_option_list> [,... n] )
    | CLEAR [ ALL ]
  }
}

<query_store_option_list> ::=
{
  OPERATION_MODE = { READ_WRITE | READ_ONLY }
  | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
  | DATA_FLUSH_INTERVAL_SECONDS = number
  | MAX_STORAGE_SIZE_MB = number
  | INTERVAL_LENGTH_MINUTES = number
  | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
  | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
  | MAX_PLANS_PER_QUERY = number
  | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
  | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> :: =
{
    STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<temporal_history_retention>::= TEMPORAL_HISTORY_RETENTION { ON | OFF }

Argomenti

database_name

Nome del database da modificare.

CURRENT

CURRENT esegue l'azione nel database corrente. CURRENT non è supportato per tutte le opzioni in tutti i contesti. In caso di errore di CURRENT, specificare il nome del database.

<> auto_option ::=

Consente di controllare le opzioni automatiche.

AUTO_CREATE_STATISTICS { ON | OFF }

  • In...

    Query Optimizer crea statistiche per colonne singole nei predicati di query, se necessario, per migliorare i piani di query e le prestazioni di esecuzione delle query. Queste statistiche per colonne singole vengono create quando Query Optimizer compila le query. Tali statistiche vengono create solo sulle colonne che ancora non sono le prime colonne di un oggetto statistiche esistente.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

  • OFF

    Query Optimizer non crea statistiche sulle singole colonne nei predicati di query durante la compilazione delle query. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

    È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_create_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoCreateStatistics della funzione DATABASEPROPERTYEX.

    Per altre informazioni, vedere la sezione sulle opzioni relative alle statistiche in Statistiche.

INCREMENTAL = ON | OFF

Imposta AUTO_CREATE_STATISTICS su ON e INCREMENTAL su ON. Questa impostazione crea automaticamente statistiche incrementali ogni volta che sono supportate. Il valore predefinito è OFF. Per altre informazioni, vedere CREATE STATISTICS.

AUTO_SHRINK { ON | OFF }

  • In...

    I file di database vengono compattati periodicamente, se necessario. Se non è necessario soddisfare esigenze specifiche, non impostare l'opzione di database AUTO_SHRINK su ON. Per altre informazioni, vedere Compattare un database.

    È possibile compattare automaticamente sia i file di dati sia i file di log. AUTO_SHRINK riduce le dimensioni del log delle transazioni solo se per il database è impostato il modello di recupero con registrazione minima oppure se viene eseguito il backup del log. Se questa opzione è impostata su OFF, i file di database non vengono compattati automaticamente durante i controlli periodici per verificare la presenza di spazio inutilizzato.

    Con l'opzione AUTO_SHRINK i file vengono compattati quando più del 25% dello spazio del file risulta inutilizzato. L'opzione causa il compattamento del file in una di due dimensioni, ossia la più grande tra:

    • La dimensione in cui il 25% del file è costituito da spazio inutilizzato
    • La dimensione del file quando è stato creato

    Non è possibile compattare un database di sola lettura.

  • OFF

    I file di database non vengono compattati automaticamente durante i controlli periodici per la presenza di spazio inutilizzato.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_shrink_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoShrink della funzione DATABASEPROPERTYEX.

Nota

L'opzione AUTO_SHRINK non è disponibile in un database indipendente.

AUTO_UPDATE_STATISTICS { ON | OFF }

  • In...

    Specifica che Query Optimizer aggiorna le statistiche quando queste vengono usate da una query e quando potrebbero non essere aggiornate. Le statistiche diventano obsolete in seguito a operazioni di inserimento, aggiornamento, eliminazione o unione che modificano la distribuzione dei dati nella tabella o nella vista indicizzata. Query Optimizer determina che le statistiche potrebbero non essere aggiornate contando il numero di modifiche apportate ai dati dopo l'ultimo aggiornamento delle statistiche e confrontando il numero di modifiche con una soglia. basata sul numero di righe nella tabella o nella vista indicizzata.

    Query Optimizer controlla la presenza di statistiche non aggiornate prima di compilare una query e di eseguire un piano di query memorizzato nella cache. Usa le colonne, le tabelle e le viste indicizzate nel predicato di query per determinare quali statistiche potrebbero non essere aggiornate. Query Optimizer verifica questa possibilità prima di compilare una query. Prima di eseguire un piano di query memorizzato nella cache, il motore di database verifica che il piano di query faccia riferimento a statistiche aggiornate.

    L'opzione AUTO_UPDATE_STATISTICS_ASYNC si applica alle statistiche create per indici, colonne singole nei predicati di query e statistiche create con l'istruzione CREATE STATISTICS. Questa opzione si applica anche alle statistiche filtrate.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

    Usare l'opzione AUTO_UPDATE_STATISTICS_ASYNC per specificare se le statistiche vengono aggiornate in modo sincrono o asincrono.

  • OFF

    Specifica che Query Optimizer non aggiorna le statistiche quando queste vengono usate da una query né quando potrebbero essere non aggiornate. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoUpdateStatistics della funzione DATABASEPROPERTYEX.

Per altre informazioni, vedere la sezione "Opzioni relative alle statistiche nel database" in Statistiche.

AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

  • In...

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono asincroni. Query Optimizer non attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    L'impostazione di questa opzione su ON non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

    Per impostazione predefinita, l'opzione AUTO_UPDATE_STATISTICS_ASYNC è impostata su OFF. Query Optimizer aggiorna pertanto le statistiche in modo sincrono.

  • OFF

    Specifica che gli aggiornamenti delle statistiche per l'opzione AUTO_UPDATE_STATISTICS sono sincroni. Query Optimizer attende il completamento degli aggiornamenti delle statistiche per compilare le query.

    L'impostazione di questa opzione su OFF non produce alcun effetto, a meno che AUTO_UPDATE_STATISTICS non sia impostata su ON.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_update_stats_async_on nella vista del catalogo sys.databases.

Per altre informazioni su quando usare gli aggiornamenti delle statistiche sincroni o asincroni, vedere la sezione "Opzioni relative alle statistiche nel database" in Statistiche.

<> automatic_tuning_option ::=

Controlla le opzioni automatiche per l'ottimizzazione automatica.

FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF }

Abilita o disabilita l'opzione di FORCE_LAST_GOOD_PLAN Ottimizzazione automatica.

  • DEFAULT

    Il valore predefinito per Istanza gestita di SQL di Azure è ON.

  • In...

    Il motore di database forza automaticamente l'ultimo piano valido noto nelle query Transact-SQL nel caso in cui il nuovo piano di query causi un peggioramento delle prestazioni. Il motore di database monitora continuamente le prestazioni della query Transact-SQL con il piano forzato. Se si rilevano miglioramenti delle prestazioni, il motore di database continuerà a usare l'ultimo piano valido noto. Se non si rilevano miglioramenti delle prestazioni, il motore di database creerà un nuovo piano di query. L'istruzione avrà esito negativo se Query Store non è abilitato o se non è in modalità di lettura/scrittura. Questo è il valore predefinito.

  • OFF

    Il motore di database segnala potenziali peggioramenti delle prestazioni delle query causati da modifiche al piano di query nella vista sys.dm_db_tuning_recommendations. I consigli qui segnalati non vengono tuttavia applicati automaticamente. Gli utenti possono monitorare i consigli attivi e risolvere i problemi identificati applicando gli script Transact-SQL mostrati nella vista.

<> change_tracking_option ::=

Controlla le opzioni di rilevamento delle modifiche. È possibile abilitare il rilevamento delle modifiche, impostare le opzioni, modificare le opzioni e disabilitare il rilevamento delle modifiche. Per gli esempi, vedere la sezione Esempi più avanti in questo articolo.

  • In...

    Abilita il rilevamento delle modifiche per il database. Quando si abilita il rilevamento delle modifiche, è possibile impostare anche le opzioni AUTO CLEANUP e CHANGE RETENTION.

AUTO_CLEANUP = { ON | OFF }

  • In...

    Le informazioni sul rilevamento delle modifiche vengono rimosse automaticamente una volta trascorso il periodo di memorizzazione specificato.

  • OFF

    I dati relativi al rilevamento delle modifiche non vengono rimossi dal database.

CHANGE_RETENTION = retention_period { DAYS | ORE | MINUTES }

Specifica il periodo minimo di conservazione delle informazioni sul rilevamento delle modifiche nel database. I dati vengono rimossi solo quando il valore di AUTO_CLEANUP è ON.

retention_period è un numero intero che specifica il componente numerico del periodo di memorizzazione.

Il periodo di conservazione predefinito è 2 giorni. Il periodo di memorizzazione minimo è 1 minuto. Il tipo di conservazione predefinito è DAYS.

  • OFF

    Disabilita il rilevamento delle modifiche per il database. Prima di disabilitare il rilevamento delle modifiche per il database, disabilitarlo per tutte le tabelle.

<> cursor_option ::=

Consente di controllare le opzioni del cursore.

CURSOR_CLOSE_ON_COMMIT { ON | OFF }

  • In...

    Quando si esegue il commit o il rollback di una transazione, eventuali cursori aperti vengono chiusi.

  • OFF

    I cursori rimangono aperti quando viene eseguito il commit di una transazione. Quando si esegue il rollback di una transazione vengono chiusi tutti i cursori, ad eccezione di quelli definiti come INSENSITIVE o STATIC.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CURSOR_CLOSE_ON_COMMIT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CURSOR_CLOSE_ON_COMMIT su OFF per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET CURSOR_CLOSE_ON_COMMIT.

È possibile determinare lo stato di questa opzione esaminando la colonna is_cursor_close_on_commit_onnella vista del catalogo sys.databases o la proprietà IsCloseCursorsOnCommitEnabled della funzione DATABASEPROPERTYEX. Il cursore viene deallocato in modo implicito soltanto al momento della disconnessione. Per altre informazioni, vedere DECLARE CURSOR.

<> db_encryption_option ::=

Controlla lo stato della crittografia del database.

ENCRYPTION { ON | OFF }

Imposta il database per l'utilizzo della crittografia (ON) o no (OFF). Per altre informazioni sulla crittografia del database, vedere Transparent Data Encryption e Transparent Data Encryption con il database SQL di Azure.

Quando la crittografia è abilitata a livello di database, tutti i filegroup vengono crittografati. I nuovi filegroup erediteranno la proprietà di crittografia. Se in un database sono presenti filegroup impostati su READ ONLY, l'operazione di crittografia del database avrà esito negativo.

È possibile visualizzare lo stato della crittografia del database usando la DMV sys.dm_database_encryption_keys.

<> delayed_durability_option ::=

Determina se le transazioni sottoposte a commit sono completamente durevoli o durevoli posticipate.

  • DISABLED

    Tutte le transazioni in cui viene usato SET DISABLED sono completamente durevoli. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

  • ALLOWED

    Tutte le transazioni in cui viene usato SET ALLOWED sono completamente durevoli o durevoli posticipate, a seconda del set di opzioni di durabilità nel blocco atomico o nell'istruzione COMMIT.

  • FORCED

    Tutte le transazioni in cui viene usato SET FORCED sono durevoli posticipate. Tutte le opzioni di durabilità impostate in un blocco atomico o in un'istruzione COMMIT vengono ignorate.

<> PARAMETERIZATION_option ::=

Consente di controllare l'opzione di parametrizzazione.

PARAMETERIZATION { SIMPLE | FORCED }

  • SEMPLICE

    Le query vengono parametrizzate in base al comportamento predefinito del database.

  • FORCED

SQL Server parametrizza tutte le query nel database.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_parameterization_forced nella vista del catalogo sys.databases.

<> query_store_options ::=

  • ON | OFF | CLEAR [ ALL ]

    Verifica se Query Store è abilitato nel database e controlla anche la rimozione dei contenuti di Query Store.

    • In...

      Abilita Query Store.

    • OFF

      Disabilita Query Store. Questo è il valore predefinito.

    • CLEAR

      Rimuove i contenuti di Query Store.

OPERATION_MODE

Descrive la modalità operativa di Query Store. I valori validi sono READ_ONLY e READ_WRITE. In modalità READ_WRITE Query Store raccoglie e salva in modo permanente le informazioni sulle statistiche di esecuzione di runtime e i piani di query. In modalità READ_ONLY le informazioni possono essere lette da Query Store, ma non vengono aggiunte nuove informazioni. Se lo spazio massimo allocato di Query Store viene esaurito, la sua modalità operativa passa a READ_ONLY.

CLEANUP_POLICY

Descrive i criteri di conservazione dei dati di Query Store. STALE_QUERY_THRESHOLD_DAYS determina il numero di giorni per cui le informazioni per una query vengono conservate in Query Store. STALE_QUERY_THRESHOLD_DAYS è di tipo bigint. Il valore predefinito è 30. Per l'edizione Basic del database SQL, l'impostazione predefinita è 7 giorni.

DATA_FLUSH_INTERVAL_SECONDS

Determina la frequenza con cui i dati scritti in Query Store vengono salvati in modo permanente sul disco. Per ottimizzare le prestazioni, i dati raccolti da Query Store vengono scritti in modo asincrono sul disco. La frequenza con cui si verifica questo trasferimento asincrono viene configurata tramite l'argomento DATA_FLUSH_INTERVAL_SECONDS. DATA_FLUSH_INTERVAL_SECONDS è di tipo bigint. Il valore predefinito 900 (15 min).

MAX_STORAGE_SIZE_MB

Determina lo spazio allocato a Query Store. MAX_STORAGE_SIZE_MB è di tipo bigint. Il valore predefinito è 100 MB.

Il limite MAX_STORAGE_SIZE_MB non è necessariamente applicato. Le dimensioni di archiviazione vengono controllate solo quando Query Store scrive i dati su disco. Questo intervallo viene impostato dall'opzione DATA_FLUSH_INTERVAL_SECONDS o dall'opzione della finestra di dialogo di Query Store in Management Studio Intervallo di scaricamento dati. Il valore predefinito dell'intervallo è 900 secondi (o 15 minuti).

Se Query Store ha violato il limite MAX_STORAGE_SIZE_MB tra i controlli delle dimensioni di archiviazione, passa alla modalità di sola lettura. Se è abilitata la SIZE_BASED_CLEANUP_MODE, viene attivato anche il meccanismo di pulizia per applicare il limite MAX_STORAGE_SIZE_MB.

Dopo la cancellazione di spazio sufficiente, la modalità di Query Store cambierà automaticamente in lettura/scrittura.

Importante

  • Se si ritiene che per l'acquisizione del carico di lavoro siano necessari più di 10 GB di spazio su disco, è probabile che sia opportuno ripensare e ottimizzare il carico di lavoro in modo da riusare i piani di query (ad esempio, usando la parametrizzazione forzata) oppure modificare le configurazioni di Query Store.
  • A partire da SQL Server 2019 (15.x) e nel database SQL di Azure è possibile impostare QUERY_CAPTURE_MODE su CUSTOM per un controllo aggiuntivo sui criteri di acquisizione delle query.
  • MAX_STORAGE_SIZE_MBl'impostazione del limite è di 10.240 MB su Istanza gestita di SQL di Azure.

INTERVAL_LENGTH_MINUTES

Determina l'intervallo di tempo in base a cui vengono aggregati i dati delle statistiche di esecuzione di runtime in Query Store. Per ottimizzare l'utilizzo dello spazio, le statistiche di esecuzione di runtime nell'archivio di statistiche di runtime vengono aggregate in un intervallo di tempo fisso. L'intervallo di tempo predefinito viene configurato tramite l'argomento INTERVAL_LENGTH_MINUTES. INTERVAL_LENGTH_MINUTES è di tipo bigint. Il valore predefinito è 60.

SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }

Determina se la pulizia viene attivata automaticamente quando la quantità totale dei dati ha quasi raggiunto le dimensioni massime.

  • OFF

    La pulizia basata sulle dimensioni non viene attivata automaticamente.

  • AUTO

    La pulizia basata sulle dimensioni viene attivata automaticamente quando le dimensioni sul disco raggiungono il 90% di max_storage_size_mb. La pulizia basata sulle dimensioni rimuove per prime le query meno recenti e meno dispendiose. Si arresta quando raggiunge all'incirca l'80% di max_storage_size_mb. Si tratta del valore di configurazione predefinito.

SIZE_BASED_CLEANUP_MODE è di tipo nvarchar.

QUERY_CAPTURE_MODE { ALL | AUTO | CUSTOM | NONE }

Determina la modalità di acquisizione query attiva.

  • ALL

    Vengono acquisite tutte le query.

  • AUTO

    Consente di acquisire le query pertinenti in base al conteggio delle esecuzioni e al consumo delle risorse. Si tratta del valore di configurazione predefinito per il database SQL di Azure.

  • NONE

    Consente di arrestare l'acquisizione di nuove query. Query Store continuerà a raccogliere le statistiche di compilazione e runtime per le query che sono già state acquisite. Usare con cautela questa configurazione perché si rischia di perdere query importanti.

QUERY_CAPTURE_MODE è di tipo nvarchar.

MAX_PLANS_PER_QUERY

Intero che rappresenta il numero massimo di piani mantenuti per ogni query. MAX_PLANS_PER_QUERY è di tipo int. Il valore predefinito è 200.

WAIT_STATS_CAPTURE_MODE { ON | OFF }

Controlla se verranno acquisite le statistiche di attesa per ogni query.

  • In...

    Verranno acquisite informazioni sulle statistiche di attesa per ogni query. Si tratta del valore di configurazione predefinito.

  • OFF

    Non verranno acquisite informazioni sulle statistiche di attesa per ogni query.

<> query_capture_policy_option_list :: =

Controlla le opzioni dei criteri di acquisizione di Query Store. Ad eccezione di STALE_CAPTURE_POLICY_THRESHOLD, queste opzioni definiscono le condizioni OR che devono verificarsi perché le query vengano acquisite nel valore della soglia dei criteri di acquisizione non aggiornati definito.

STALE_CAPTURE_POLICY_THRESHOLD = integer { DAYS | HOURS }

Definisce l'intervallo di valutazione per determinare se una query deve essere acquisita. Il valore predefinito è 1 giorno e l'intervallo può essere impostato da 1 ora a sette giorni.

EXECUTION_COUNT = integer

Definisce il numero di esecuzioni di una query nel periodo di valutazione. Il valore predefinito è 30. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati è necessario eseguire una query almeno 30 volte al giorno perché venga salvata in modo permanente in Query Store. EXECUTION_COUNT è di tipo int.

TOTAL_COMPILE_CPU_TIME_MS = integer

Definisce il tempo CPU di compilazione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 1000. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato in totale almeno un secondo di tempo CPU al giorno per la compilazione perché venga salvata in modo permanente in Query Store. TOTAL_COMPILE_CPU_TIME_MS è di tipo int.

TOTAL_EXECUTION_CPU_TIME_MS = integer

Definisce il tempo CPU di esecuzione trascorso totale usato da una query nel periodo di valutazione. Il valore predefinito è 100. Questo significa che per il valore predefinito della soglia dei criteri di acquisizione non aggiornati una query deve aver usato in totale almeno 100 ms di tempo CPU al giorno per l'esecuzione perché venga salvata in modo permanente in Query Store. TOTAL_EXECUTION_CPU_TIME_MS è di tipo int.

<> snapshot_option ::=

Determina il livello di isolamento delle transazioni.

ALLOW_SNAPSHOT_ISOLATION { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Una volta abilitata l'opzione, le transazioni possono specificare il livello di isolamento della transazione SNAPSHOT. Nelle transazioni eseguite con il livello di isolamento SNAPSHOT, tutte le istruzioni possono accedere a uno snapshot dei dati corrispondente allo stato dei dati al momento dell'avvio della transazione. Se una transazione eseguita con il livello di isolamento SNAPSHOT deve accedere ai dati in più database, è necessario impostare ALLOW_SNAPSHOT_ISOLATION su ON in tutti i database oppure ogni istruzione della transazione deve usare hint di blocco per qualsiasi riferimento in una clausola FROM a una tabella di un database per cui l'opzione ALLOW_SNAPSHOT_ISOLATION è impostata su OFF.

  • OFF

    Consente di disabilitare l'opzione Snapshot a livello di database. Per le transazioni non può essere impostato il livello di isolamento SNAPSHOT.

Quando si imposta un nuovo stato per l'opzione ALLOW_SNAPSHOT_ISOLATION (da ON a OFF oppure da OFF a ON), ALTER DATABASE restituisce il controllo al chiamante solo dopo il completamento del commit di tutte le transazioni esistenti nel database. Se per il database è già attivo lo stato specificato nell'istruzione ALTER DATABASE, il controllo viene restituito immediatamente al chiamante. Se l'istruzione ALTER DATABASE non restituisce il controllo rapidamente, usare sys.dm_tran_active_snapshot_database_transactions per verificare se sono presenti transazioni con esecuzione prolungata. Se l'istruzione ALTER DATABASE viene annullata, il database rimane nello stato attivo al momento dell'avvio dell'istruzione ALTER DATABASE. La vista del catalogo sys.databases indica lo stato delle transazioni di isolamento dello snapshot nel database. Se snapshot_isolation_state_desc = IN_TRANSITION_TO_ON, l'istruzione ALTER DATABASE ... ALLOW_SNAPSHOT_ISOLATION OFF attenderà sei secondi prima di ritentare l'operazione.

Non è possibile cambiare lo stato di ALLOW_SNAPSHOT_ISOLATION se il database è OFFLINE.

È possibile modificare le impostazioni di ALLOW_SNAPSHOT_ISOLATION per i database master, model, msdb e tempdb. Se si modifica l'impostazione per tempdb, l'impostazione viene mantenuta ogni volta che l'istanza del motore di database viene arrestata e riavviata. Se si modifica l'impostazione per il database di sistema model, questa diventa l'impostazione predefinita per i nuovi database creati, ad eccezione di tempdb.

Per impostazione predefinita, l'opzione è ON per i database master e msdb.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna snapshot_isolation_state nella vista del catalogo sys.databases.

READ_COMMITTED_SNAPSHOT { ON | OFF }

  • In...

    Abilita l'opzione relativa allo snapshot Read Committed a livello di database. Se questa opzione è abilitata, le istruzioni DML iniziano a generare versioni di riga anche quando nessuna transazione usa l'isolamento dello snapshot. Quando questa opzione è abilitata, le transazioni che specificano il livello di isolamento READ COMMITTED usano il controllo delle versioni delle righe anziché il blocco. Quando una transazione viene eseguita con il livello di isolamento READ COMMITTED, tutte le istruzioni vedono uno snapshot dei dati nello stato in cui si trovano all'avvio dell'istruzione.

  • OFF

    Disabilita l'opzione relativa allo snapshot Read Committed a livello di database. Le transazioni per cui è impostato il livello di isolamento READ COMMITTED usano il blocco.

Per impostare READ_COMMITTED_SNAPSHOT su ON o su OFF, è necessario che non siano presenti connessioni attive al database, ad eccezione della connessione usata per eseguire il comando ALTER DATABASE. Non è tuttavia necessario che il database sia in modalità utente singolo. Non è possibile cambiare lo stato di questa opzione quando il database è OFFLINE.

Non è possibile impostare READ_COMMITTED_SNAPSHOT su ON per i database di sistema master, tempdb e msdb. Se si modifica l'impostazione per il database di sistema model, questa diventa l'impostazione predefinita per i nuovi database creati, ad eccezione di tempdb.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_read_committed_snapshot_on nella vista del catalogo sys.databases.

Avviso

Quando si crea una tabella con DURABILITY = SCHEMA_ONLY, e successivamente si modifica READ_COMMITTED_SNAPSHOT usando ALTER DATABASE, i dati della tabella andranno perduti.

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }

  • In...

    Quando l'isolamento della transazione è impostato su un livello inferiore a SNAPSHOT, tutte le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria vengono eseguite con isolamento SNAPSHOT. I livelli di isolamento inferiori a SNAPSHOT sono, ad esempio, READ COMMITTED e READ UNCOMMITTED. Queste operazioni vengono eseguite indipendentemente dal fatto che venga impostato in modo esplicito il livello di isolamento della transazione a livello di sessione o che venga usata in modo implicito l'impostazione predefinita.

  • OFF

    Non innalza il livello di isolamento della transazione per le operazioni interpretate di Transact-SQL nelle tabelle ottimizzate per la memoria.

Non è possibile cambiare lo stato di MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT se il database è OFFLINE.

Il valore predefinito è OFF.

L'impostazione corrente di questa opzione può essere determinata esaminando la colonna is_memory_optimized_elevate_to_snapshot_on nella vista del catalogo sys.databases.

<> sql_option ::=

Controlla le opzioni di conformità ANSI a livello di database.

ANSI_NULL_DEFAULT { ON | OFF }

Determina il valore predefinito, NULL o NOT NULL, per una colonna o un tipo CLR definito dall'utente per cui il supporto dei valori Null non è definito in modo esplicito nell'istruzione CREATE TABLE o ALTER TABLE. Le colonne definite con vincoli seguono le regole dei vincoli indipendentemente da questa impostazione.

  • In...

    Il valore predefinito è NULL.

  • OFF

    Il valore predefinito è NOT NULL.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULL_DEFAULT. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULL_DEFAULT su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULL_DFLT_ON.

Per motivi di compatibilità con ANSI, l'impostazione dell'opzione di database ANSI_NULL_DEFAULT su ON modifica l'impostazione predefinita del database su NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_null_default_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullDefault della funzione DATABASEPROPERTYEX.

ANSI_NULLS { ON | OFF }

  • In...

    Tutti i confronti con un valore Null restituiscono UNKNOWN.

  • OFF

    I confronti di valori non Unicode con un valore Null restituiscono TRUE se entrambi i valori sono NULL.

Importante

In una versione futura di SQL Server l'opzione ANSI_NULLS sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_NULLS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_NULLS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_NULLS.

Importante

È inoltre necessario che l'opzione SET ANSI_NULLS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_nulls_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiNullsEnabled della funzione DATABASEPROPERTYEX.

ANSI_PADDING { ON | OFF }

  • In...

    Le stringhe vengono riempite in modo che abbiano tutte la stessa lunghezza prima della conversione. o dell'inserimento in un tipo di dati varchar o nvarchar.

  • OFF

    Vengono inseriti spazi vuoti finali nei valori di tipo carattere in colonne di tipo varchar o nvarchar. Vengono inoltre lasciati gli zeri finali nei valori binari inseriti nelle colonne di tipo varbinary. I valori non vengono riempiti per l'intera lunghezza della colonna.

    Se si specifica OFF, questa impostazione ha effetto solo sulla definizione di nuove colonne.

Importante

In una versione futura di SQL Server l'opzione ANSI_PADDING sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito questa opzione su OFF genererà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile impostare l'opzione ANSI_PADDING sempre su ON. È necessario che l'opzione ANSI_PADDING sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le colonne char(n) e binary(n) che consentono valori Null vengono riempite fino alla loro lunghezza quando ANSI_PADDING è impostata su ON. I valori vuoti e gli zeri finali vengono eliminati quando ANSI_PADDING è impostata su OFF. Le colonne char(n) e binary(n) che non consentono valori Null vengono sempre riempite fino alla loro lunghezza.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_PADDING. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_PADDING su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_PADDING.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_padding_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiPaddingEnabled della funzione DATABASEPROPERTYEX.

ANSI_WARNINGS { ON | OFF }

  • In...

    Vengono restituiti messaggi di errore o di avviso quando si verificano condizioni come la divisione per zero e inoltre quando nelle funzioni di aggregazione sono presenti valori Null.

  • OFF

    Non vengono generati avvisi e vengono restituiti valori Null quando si verificano condizioni come la divisione per zero.

Importante

È necessario che l'opzione ANSI_WARNINGS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per ANSI_WARNINGS. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta ANSI_WARNINGS su ON per la sessione. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET ANSI_WARNINGS.

È possibile determinare lo stato di questa opzione esaminando la colonna is_ansi_warnings_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAnsiWarningsEnabled della funzione DATABASEPROPERTYEX.

ARITHABORT { ON | OFF }

  • In...

    Interrompe una query quando si verifica un overflow o un errore di divisione per zero durante l'esecuzione della query stessa.

  • OFF

    Quando si verifica uno di questi errori, viene visualizzato un messaggio di avviso. L'esecuzione della query, del batch o della transazione prosegue come se non si fosse verificato alcun errore, anche se viene visualizzato un messaggio di avviso.

Importante

È necessario che l'opzione ARITHABORT sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione esaminando la colonna is_arithabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsArithmeticAbortEnabled della funzione DATABASEPROPERTYEX.

COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 }

Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE.

CONCAT_NULL_YIELDS_NULL { ON | OFF }

  • In...

    Il risultato di un'operazione di concatenazione è NULL quando uno degli operandi è NULL. La concatenazione della stringa di caratteri "Questo è" con NULL restituisce, ad esempio, il valore NULL anziché il valore "Questo è".

  • OFF

    Il valore Null viene considerato come una stringa di caratteri vuota.

Importante

È necessario che l'opzione CONCAT_NULL_YIELDS_NULL sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.

In una versione futura di SQL Server l'opzione CONCAT_NULL_YIELDS_NULL sarà sempre impostata su ON e qualsiasi applicazione che imposti in modo esplicito l'opzione su OFF restituirà un errore. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per CONCAT_NULL_YIELDS_NULL. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta CONCAT_NULL_YIELDS_NULL su ON per la sessione quando viene stabilita una connessione a un'istanza di SQL Server. Per altre informazioni, vedere SET CONCAT_NULL_YIELDS_NULL.

È possibile determinare lo stato di questa opzione esaminando la colonna is_concat_null_yields_null_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNullConcat della funzione DATABASEPROPERTYEX.

NUMERIC_ROUNDABORT { ON | OFF }

  • In...

    Viene generato un errore quando si verifica una perdita di precisione in un'espressione.

  • OFF

    La perdita di precisione non genera messaggi di errore e il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato.

Importante

È necessario che l'opzione NUMERIC_ROUNDABORT sia impostata su OFF quando vengono creati o modificati indici in colonne calcolate o viste indicizzate.

È possibile determinare lo stato di questa opzione nella colonna is_numeric_roundabort_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsNumericRoundAbortEnabled della funzione DATABASEPROPERTYEX.

QUOTED_IDENTIFIER { ON | OFF }

  • In...

    È possibile usare le virgolette doppie per delimitare gli identificatori delimitati.

    Tutte le stringhe delimitate da virgolette doppie vengono interpretate come identificatori di oggetto. Gli identificatori delimitati non devono necessariamente essere conformi alle regole di Transact-SQL per gli identificatori. Possono essere parole chiave e includere caratteri normalmente non consentiti negli identificatori di Transact-SQL. Se una virgoletta doppia (") fa parte dell'identificatore, può essere rappresentata da due virgolette doppie ("").

  • OFF

    Gli identificatori non possono essere delimitati da virgolette e devono essere conformi a tutte le regole di Transact-SQL per gli identificatori. È possibile delimitare i valori letterali con virgolette singole o doppie.

SQL Server consente anche di delimitare gli identificatori in base alle parentesi quadre ([ e ]). Gli identificatori tra parentesi quadre possono essere sempre usati, indipendentemente dall'impostazione di QUOTED_IDENTIFIER. Per altre informazioni, vedere Identificatori del database.

Quando viene creata una tabella, l'opzione QUOTED IDENTIFIER viene sempre archiviata con l'impostazione ON nei relativi metadati, anche se l'opzione è impostata su OFF.

Le impostazioni a livello di connessione definite usando l'istruzione SET sono prioritarie rispetto all'impostazione predefinita del database per QUOTED_IDENTIFIER. Per impostazione predefinita, i client ODBC e OLE DB eseguono un'istruzione SET a livello di connessione che imposta QUOTED_IDENTIFIER. I client eseguono l'istruzione quando ci si connette a un'istanza di SQL Server. Per altre informazioni, vedere SET QUOTED_IDENTIFIER.

È possibile determinare lo stato di questa opzione esaminando la colonna is_quoted_identifier_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsQuotedIdentifiersEnabled della funzione DATABASEPROPERTYEX.

RECURSIVE_TRIGGERS { ON | OFF }

  • In...

    È consentita l'attivazione ricorsiva di trigger AFTER.

  • OFF

    È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

    Nota

    Se l'opzione RECURSIVE_TRIGGERS è impostata su OFF, viene impedita esclusivamente la ricorsione diretta. Per disabilitare la ricorsione indiretta, è necessario impostare anche l'opzione del server nested triggers su 0.

È possibile determinare lo stato di questa opzione esaminando la colonna is_recursive_triggers_on nella vista del catalogo sys.databases o la proprietà IsRecursiveTriggersEnabled della funzione DATABASEPROPERTYEX.

<> target_recovery_time_option ::=

L'opzione target_recovery_time_option non è supportata in Istanza gestita di SQL di Azure.

Specifica la frequenza di checkpoint indiretti per database singolo. A partire da SQL Server 2016 (13.x), il valore predefinito per i nuovi database è 1 minuto, a indicare che il database userà checkpoint indiretti. Per le versioni precedenti, il valore predefinito è 0, a indicare che il database userà checkpoint automatici la cui frequenza dipende dall'impostazione dell'intervallo di recupero dell'istanza del server. Microsoft consiglia di usare 1 minuto per la maggior parte dei sistemi.

WITH <terminazione> ::=

Specifica quando eseguire il rollback di transazioni incomplete in caso di transizione dello stato del database. Se questa clausola viene omessa, l'attesa da parte dell'istruzione ALTER DATABASE è illimitata in presenza di qualsiasi blocco attivo sul database. È possibile specificare una sola clausola di terminazione, che deve seguire le clausole SET.

Nota

Non tutte le opzioni di database usano la clausola WITH <termination>. Per altre informazioni, vedere la tabella in Impostazione delle opzioni nella sezione "Osservazioni" di questo articolo.

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    Specifica se eseguire il rollback dopo il numero di secondi specificato o immediatamente.

  • NO_WAIT

    Specifica che la richiesta ha esito negativo se non è possibile completare immediatamente la modifica richiesta dello stato del database o dell'opzione, senza aspettare il commit o il rollback automatico delle transazioni.

<> temporal_history_retention ::=

Impostare le opzioni

Per recuperare le impostazioni correnti delle opzioni di database, usare la vista del catalogo sys.databases o DATABASEPROPERTYEX

Dopo l'impostazione di un'opzione di database, la modifica diventa effettiva immediatamente.

Per cambiare i valori predefiniti di qualsiasi opzione di database per tutti i nuovi database, A questo scopo, modificare l'opzione di database appropriata nel database di sistema model.

Esempi

R. Abilitare l'isolamento dello snapshot in un database

Nell'esempio seguente viene abilitata l'opzione relativa al framework di isolamento dello snapshot per il database AdventureWorks2022.

USE master;
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'[database_name]';
GO

Il set di risultati indica che il framework di isolamento dello snapshot è abilitato.

name snapshot_isolation_state description
[database_name] 1 In...

B. Abilitare, modificare o disabilitare il rilevamento delle modifiche

Nell'esempio seguente viene abilitato il rilevamento delle modifiche per il database AdventureWorks2022 e il periodo di memorizzazione viene impostato su 2 giorni.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

Nell'esempio seguente viene illustrato come modificare il periodo di memorizzazione impostandolo su 3 giorni.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

Nell'esempio seguente viene illustrato come disabilitare il rilevamento delle modifiche per il database AdventureWorks2022.

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

C. Abilitare Query Store

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

D. Abilitare Query Store con statistiche di attesa

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON
    );

E. Abilitare Query Store con opzioni dei criteri di acquisizione personalizzati

L'esempio seguente abilita Query Store e configura i relativi parametri.

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

Vedi anche

Passaggi successivi

* Azure Synapse
Analytics *
 

 

Azure Synapse Analytics

Sintassi

ALTER DATABASE { database_name }
SET
{
    <optionspec> [ ,...n ]
}
;

<option_spec>::=
{
    <auto_option>
  | <db_encryption_option>
  | <query_store_options>
  | <result_set_caching>
  | <snapshot_option>
}
;

<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON }
}

<db_encryption_option> ::=
{
    ENCRYPTION { ON | OFF }
}

<query_store_option> ::=
{
    QUERY_STORE { OFF | ON }
}

<result_set_caching_option> ::=
{
    RESULT_SET_CACHING { ON | OFF }
}

<snapshot_option> ::=
{
    READ_COMMITTED_SNAPSHOT { ON | OFF }
}

Argomenti

database_name

Nome del database da modificare.

<> auto_option ::=

Consente di controllare le opzioni automatiche.

AUTO_CREATE_STATISTICS { ON | OFF }

  • In...

    Query Optimizer crea statistiche per colonne singole nei predicati di query, se necessario, per migliorare i piani di query e le prestazioni di esecuzione delle query. Queste statistiche per colonne singole vengono create quando Query Optimizer compila le query. Tali statistiche vengono create solo sulle colonne che ancora non sono le prime colonne di un oggetto statistiche esistente.

    Il valore predefinito è ON. È consigliabile usare l'impostazione predefinita per la maggior parte dei database.

  • OFF

    Query Optimizer non crea statistiche sulle singole colonne nei predicati di query durante la compilazione delle query. L'impostazione di questa opzione su OFF può determinare piani di query e prestazioni di esecuzione delle query non ottimali.

Questo comando deve essere eseguito mentre si è connessi al database utente.

È possibile determinare lo stato di questa opzione esaminando la colonna is_auto_create_stats_on nella vista del catalogo sys.databases. È anche possibile determinare lo stato esaminando la proprietà IsAutoCreateStatistics della funzione DATABASEPROPERTYEX.

Per altre informazioni, vedere la sezione "Opzioni relative alle statistiche nel database" in Statistiche.

<> db_encryption_option ::=

Controlla lo stato della crittografia del database.

ENCRYPTION { ON | OFF }

  • In...

    Imposta il database in modo che venga crittografato.

  • OFF

    Imposta il database in modo che non venga crittografato.

Per altre informazioni sulla crittografia del database, vedere Transparent Data Encryption (TDE) e Transparent Data Encryption per database SQL, Istanza gestita di SQL e Azure Synapse Analytics.

Quando la crittografia è abilitata a livello di database, tutti i filegroup vengono crittografati. I nuovi filegroup erediteranno la proprietà di crittografia. Se in un database sono presenti filegroup impostati su READ ONLY, l'operazione di crittografia del database avrà esito negativo.

È possibile visualizzare lo stato di crittografia del database e lo stato dell'analisi della crittografia usando la DMV sys.dm_database_encryption_keys.

<> query_store_option ::=

Controlla se Query Store è abilitato in questo data warehouse.

QUERY_STORE { ON | OFF }

  • In...

    Abilita Query Store.

  • OFF

    Disabilita Query Store. OFF è il valore predefinito.

Nota

Per Azure Synapse Analytics, è necessario eseguire ALTER DATABASE SET QUERY_STORE dal database utente. L'esecuzione dell'istruzione da un'altra istanza del data warehouse non è supportata.

Nota

Per Azure Synapse Analytics, Query Store può essere abilitato come in altre piattaforme, ma non sono supportate opzioni di configurazione aggiuntive.

<> result_set_caching_option ::=

Si applica a: Azure Synapse Analytics

Controlla se il risultato della query viene memorizzato nella cache del database.

RESULT_SET_CACHING { ON | OFF}

  • In...

    Specifica che i set di risultati delle query restituiti da questo database verranno memorizzati nella cache nel database.

  • OFF

    Specifica che i set di risultati delle query restituiti da questo database non verranno memorizzati nella cache nel database.

Questo comando deve essere eseguito mentre si è connessi al database master. Le modifiche apportate a questa impostazione del database hanno effetto immediato. La memorizzazione nella cache dei set di risultati delle query prevede l'addebito dei costi di archiviazione. Dopo aver disabilitato la memorizzazione nella cache dei risultati per un database, la cache dei risultati precedentemente salvati in modo permanente verrà immediatamente eliminata dalla risorsa di archiviazione di Azure Synapse.

Eseguire questo comando per controllare la configurazione della memorizzazione nella cache dei set di risultati di un database. Se la memorizzazione nella cache dei set di risultati è impostata su ON, is_result_set_caching_on restituirà 1.

SELECT name, is_result_set_caching_on FROM sys.databases
WHERE name = <'Your_Database_Name'>

Eseguire questo comando per verificare se è stata eseguita una query usando il risultato memorizzato nella cache. La colonna result_cache_hit restituisce 1 per il riscontro nella cache, 0 per il mancato riscontro nella cache e valori negativi per i motivi per cui non è stata usata la memorizzazione nella cache dei set di risultati. Per informazioni dettagliate, vedere sys.dm_pdw_exec_requests.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Nota

La memorizzazione nella cache dei set di risultati non deve essere usata insieme a DECRYPTBYKEY. Se questa funzione di crittografia deve essere usata, assicurarsi di avere disabilitato la memorizzazione nella cache dei set di risultati (a livello di sessione o a livello di database) al momento dell'esecuzione.

Importante

Le operazioni per creare la cache dei set di risultati e recuperare i dati dalla cache vengono eseguite nel nodo di controllo di un'istanza del data warehouse. Quando la memorizzazione nella cache dei set di risultati è impostata su ON, l'esecuzione di query che restituiscono set di risultati di grandi dimensioni, ad esempio >1 milione di righe, può causare un utilizzo elevato della CPU nel nodo di controllo e rallentare complessivamente la risposta alle query nell'istanza. Queste query vengono in genere usate durante l'esplorazione dei dati o le operazioni ETL (estrazione, trasformazione e caricamento). Per evitare il sovraccarico del nodo di controllo e la comparsa di problemi di prestazioni, gli utenti devono DISATTIVARE la memorizzazione nella cache del set di risultati nel database prima di eseguire query di questo tipo.

Per informazioni dettagliate sull'ottimizzazione delle prestazioni con la memorizzazione nella cache dei set di risultati, vedere Linee guida sull'ottimizzazione delle prestazioni.

Autorizzazioni

Per impostare l'opzione RESULT_SET_CACHING, un utente deve avere un account di accesso di tipo entità di livello server, ovvero quello creato dal processo di provisioning, oppure essere un membro del ruolo del database dbmanager.

<> snapshot_option ::=

Si applica a: Azure Synapse Analytics

Controlla il livello di isolamento delle transazioni di un database.

READ_COMMITTED_SNAPSHOT { ON | OFF }

  • In...

    Abilita l'opzione READ_COMMITTED_SNAPSHOT a livello di database.

  • OFF

    Disabilita l'opzione READ_COMMITTED_SNAPSHOT a livello di database.

Questo comando deve essere eseguito mentre si è connessi al database master. L'impostazione di READ_COMMITTED_SNAPSHOT su ON o su OFF per un database utente comporterà la terminazione di tutte le connessioni aperte al database. È possibile apportare questa modifica durante l'intervallo di manutenzione del database o attendere fino a quando non esiste alcuna connessione attiva al database, ad eccezione della connessione che esegue il comando ALTER DATABASE. Non è necessario che il database sia in modalità utente singolo. La modifica dell'impostazione READ_COMMITTED_SNAPSHOT a livello di sessione non è supportata. Per verificare questa impostazione per un database, controllare la colonna is_read_committed_snapshot_on in sys.databases.

In un database con l'impostazione READ_COMMITTED_SNAPSHOT abilitata, è possibile che le query riscontrino prestazioni più lente a causa dell'analisi delle versioni se sono presenti più versioni dei dati. Anche le transazioni aperte da tempo possono causare un aumento delle dimensioni del database. Questo problema si verifica in caso di modifiche ai dati apportate da tali transazioni che bloccano la pulizia delle versioni.

Autorizzazioni

Per impostare l'opzione READ_COMMITTED_SNAPSHOT, un utente deve avere l'autorizzazione ALTER per il database.

Esempi

Controllare l'impostazione delle statistiche per un database

SELECT name, is_auto_create_stats_on FROM sys.databases

Abilitare Query Store per un database

ALTER DATABASE [database_name]
SET QUERY_STORE = ON;

Abilitare la memorizzazione nella cache dei set di risultati per un database

-- Run this command when connecting to the MASTER database

ALTER DATABASE [database_name]
SET RESULT_SET_CACHING ON;

Verificare l'impostazione di memorizzazione nella cache dei set di risultati per un database

SELECT name, is_result_set_caching_on
FROM sys.databases;

Abilitare l'opzione Read_Committed_Snapshot per un database

Eseguire questo comando durante la connessione al database master.

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON;

Vedi anche

Passaggi successivi

Microsoft Fabric

 

Microsoft Fabric

Usare ALTER DATABASE ... SET per gestire un'istanza di Microsoft Fabric Warehouse.

Sintassi

-- Microsoft Fabric

ALTER DATABASE { warehouse_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] 
}

<option_spec> ::=
{
    <data_lake_log_publishing>
  | <vorder>
}
;

<data_lake_log_publishing> ::=
{
    DATA_LAKE_LOG_PUBLISHING { PAUSED | AUTO }
}

<vorder> ::=
{
    VORDER = OFF
}

Osservazioni:

Attualmente, la sospensione della pubblicazione dei log Delta Lake e la disabilitazione del comportamento dell'ordine virtuale in un magazzino sono gli unici usi per ALTER DATABASE ... SET in Microsoft Fabric.

Autorizzazioni

L'utente deve essere membro dei ruoli Amministratore, Membro o Collaboratore nell'area di lavoro Infrastruttura.

Esempi

R. Sospensione della pubblicazione di Delta Lake Logs

Il comando T-SQL seguente sospende la pubblicazione di Delta Lake Log nel contesto del warehouse corrente.

ALTER DATABASE CURRENT SET DATA_LAKE_LOG_PUBLISHING = PAUSED;

Per controllare lo stato corrente della pubblicazione di Delta Lake Log in tutti i warehouse, dell'area di lavoro, usare il codice T-SQL seguente per eseguire query su sys.databases (Transact-SQL) in una nuova finestra di query:

SELECT [name], [DATA_LAKE_LOG_PUBLISHING_DESC] FROM sys.databases;