ALTER DATABASE (Transact-SQL)

Consente di modificare un database oppure i file e i filegroup associati al database. Consente di aggiungere o rimuovere file e filegroup in un database, modificare gli attributi di un database oppure dei relativi file e filegroup, modificare le regole di confronto e impostare le opzioni del database. Non è possibile modificare snapshot di database. Per la modifica delle opzioni di database associate alla replica, utilizzare sp_replicationdboption.

A causa della lunghezza, la sintassi di ALTER DATABASE è separata negli argomenti seguenti:

  • ALTER DATABASE
    L'argomento corrente fornisce la sintassi per la modifica del nome e le regole di confronto di un database.

  • Opzioni file e filegroup ALTER DATABASE
    Fornisce la sintassi per l'aggiunta e la rimozione di file e filegroup da un database e per la modifica degli attributi di file e filegroup.

  • Opzioni ALTER DATABASE SET
    Fornisce la sintassi per la modifica degli attributi di un database utilizzando le opzioni SET di ALTER DATABASE.

  • Mirroring del database ALTER DATABASE
    Include la sintassi per le opzioni SET di ALTER DATABASE relative al mirroring del database.

  • ALTER DATABASE SET HADR
    Fornisce la sintassi per le opzioni Gruppi di disponibilità AlwaysOn di ALTER DATABASE per la configurazione di un database secondario in una replica di disponibilità secondaria di un gruppo AlwaysOn.

  • Livello di compatibilità di ALTER DATABASE
    Fornisce la sintassi per le opzioni SET di ALTER DATABASE relative ai livelli di compatibilità del database.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

ALTER DATABASE { database_name  | CURRENT }
{
    MODIFY NAME = new_database_name 
  | COLLATE collation_name
  | <file_and_filegroup_options>
  | <set_database_options>
}
[;]

<file_and_filegroup_options >::=
  <add_or_modify_files>::=
  <filespec>::= 
  <add_or_modify_filegroups>::=
  <filegroup_updatability_option>::= 

<set_database_options>::=
  <optionspec>::= 
  <auto_option> ::= 
  <change_tracking_option> ::=
  <cursor_option> ::= 
  <database_mirroring_option> ::= 
  <date_correlation_optimization_option> ::=
  <db_encryption_option> ::=
  <db_state_option> ::=
  <db_update_option> ::=
  <db_user_access_option> ::=
  <external_access_option> ::=
  <FILESTREAM_options> ::=
  <HADR_options> ::=  
  <parameterization_option> ::=
  <recovery_option> ::= 
  <service_broker_option> ::=
  <snapshot_option> ::=
  <sql_option> ::= 
  <termination> ::=

Argomenti

  • database_name
    Nome del database da modificare.

    [!NOTA]

    Questa opzione non è disponibile in un database indipendente.

  • CURRENT
    Specifica che il database corrente in uso deve essere modificato.

  • MODIFY NAME **=**new_database_name
    Rinomina il database con il nome specificato come new_database_name.

  • COLLATE collation_name
    Specifica le regole di confronto per il database. collation_name può essere un nome di regole di confronto di Windows o SQL. Se omesso, al database vengono assegnate le regole di confronto dell'istanza di SQL Server.

    Per ulteriori informazioni sui nomi delle regole di confronto di Windows e SQL, vedere COLLATE (Transact-SQL).

<file_and_filegroup_options >::=

Per ulteriori informazioni, vedere Opzioni per file e filegroup ALTER DATABASE (Transact-SQL).

<set_database_options >::=

Per ulteriori informazioni, vedere Opzioni ALTER DATABASE SET (Transact-SQL), Mirroring del database di ALTER DATABASE (Transact-SQL), ALTER DATABASE SET HADR (Transact-SQL) e Livello di compatibilità ALTER DATABASE (Transact-SQL).

Osservazioni

Per rimuovere un database, utilizzare DROP DATABASE.

Per ridurre le dimensioni di un database, utilizzare DBCC SHRINKDATABASE.

L'istruzione ALTER DATABASE deve essere eseguita in modalità autocommit (modalità predefinita di gestione delle transazioni) e non è consentita in una transazione esplicita o implicita.

In SQL Server 2005 o nelle versioni successive, lo stato di un file di database, ad esempio online o offline, viene mantenuto indipendentemente dallo stato del database. Per ulteriori informazioni, vedere Stati dei file. Lo stato dei file all'interno di un filegroup determina la disponibilità dell'intero filegroup. Perché un filegroup sia disponibile, è necessario che tutti i file in esso inclusi siano online. Se un filegroup è offline, qualsiasi tentativo di accesso al filegroup tramite un'istruzione SQL avrà esito negativo e verrà generato un errore. Per la compilazione di piani delle query per istruzioni SELECT, Query Optimizer evita gli indici non cluster e le viste indicizzate presenti in filegroup offline. Ciò consente la corretta esecuzione di tali istruzioni. Tuttavia, se il filegroup offline contiene l'heap o l'indice cluster della tabella di destinazione, l'istruzione SELECT avrà esito negativo. Avranno inoltre esito negativo anche tutte le eventuali istruzioni INSERT, UPDATE o DELETE che modificano una tabella con qualsiasi indice in un filegroup offline.

Quando un database è nello stato RESTORING, la maggior parte delle istruzioni ALTER DATABASE avrà esito negativo. Un'alternativa consiste nell'impostare le opzioni di mirroring del database. 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.

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

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

PAGE_VERIFY

La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un improvviso peggioramento temporaneo delle prestazioni di esecuzione delle query. Il log degli errori di SQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL Server ha rilevato %d occorrenza/e di scaricamento dell'archivio cache '%s' (parte della cache dei piani) a causa di operazioni di manutenzione o riconfigurazione del database". Questo messaggio viene registrato ogni cinque minuti per l'intervallo di tempo necessario allo scaricamento della cache.

La cache delle procedure 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.

Modifica delle regole di confronto del database

Prima di applicare regole di confronto diverse a un database, verificare che siano soddisfatte le condizioni seguenti:

  1. Nessun altro utente sta utilizzando il database.

  2. Nessun oggetto associato a schema dipende dalle regole di confronto del database.

    Se il database contiene gli oggetti seguenti che dipendono dalle regole di confronto del database, l'istruzione ALTER DATABASEdatabase_nameCOLLATE avrà esito negativo. SQL Server restituirà un messaggio di errore per ogni oggetto che blocca l'azione ALTER:

    • Funzioni definite dall'utente e viste create con SCHEMABINDING.

    • Colonne calcolate.

    • Vincoli CHECK.

    • Funzioni con valori di tabella che restituiscono tabelle contenenti colonne di tipo carattere con regole di confronto ereditate dalle regole di confronto predefinite del database.

    Le informazioni sulle dipendenze per le entità non associate a schemi vengono aggiornate automaticamente quando il confronto di database viene modificato.

La modifica delle regole di confronto del database non comporta la creazione di duplicati per i nomi di sistema degli oggetti di database. Se la modifica delle regole di confronto genera nomi duplicati, gli spazi dei nomi seguenti potrebbero impedire tale modifica:

  • Nomi di oggetti, quali stored procedure, tabelle, trigger e viste.

  • Nomi di schemi.

  • Entità, come gruppi, ruoli o utenti.

  • Nomi di tipi di dati scalari, come i tipi di dati di sistema e definiti dall'utente.

  • Nomi di cataloghi full-text.

  • Nomi di colonne o parametri in un oggetto.

  • Nomi di indici in una tabella.

Se vengono generati nomi duplicati in seguito all'applicazione delle nuove regole di confronto, l'azione di modifica avrà esito negativo e in SQL Server verrà visualizzato un messaggio di errore che indica lo spazio dei nomi in cui è stato identificato il duplicato.

Visualizzazione di informazioni sul database

Per restituire informazioni su database, file e filegroup, è possibile utilizzare viste del catalogo, funzioni di sistema e stored procedure di sistema.

Autorizzazioni

È necessaria l'autorizzazione ALTER per il database.

Esempi

A.Modifica del nome di un database

Nell'esempio seguente il nome del database AdventureWorks2012 viene modificato in Northwind.

USE master;
GO
ALTER DATABASE AdventureWorks2012
Modify Name = Northwind ;
GO

B.Modifica delle regole di confronto del database

L'esempio seguente crea un database denominato testdb con le regole di confronto SQL_Latin1_General_CP1_CI_AS, quindi modifica le regole di confronto del database testdb in COLLATE French_CI_AI.

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO

Vedere anche

Riferimento

CREATE DATABASE (Transact-SQL)

DATABASEPROPERTYEX (Transact-SQL)

DROP DATABASE (Transact-SQL)

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_configure (Transact-SQL)

sp_spaceused (Transact-SQL)

sys.databases (Transact-SQL)

sys.database_files (Transact-SQL)

sys.database_mirroring_witnesses (Transact-SQL)

sys.data_spaces (Transact-SQL)

sys.filegroups (Transact-SQL)

sys.master_files (Transact-SQL)

Concetti

Database di sistema.