ALTER DATABASE (Transact-SQL)
Vengono modificati 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
Fornisce la sintassi per le opzioni SET di ALTER DATABASE relative al mirroring del database.Livello di compatibilità di ALTER DATABASE
Fornisce la sintassi per le opzioni SET di ALTER DATABASE relative ai livelli di compatibilità del database.
Sintassi
ALTER DATABASE database_name
{
| 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> ::= <parameterization_option> ::= <recovery_option> ::= <service_broker_option> ::= <snapshot_option> ::= <sql_option> ::= <termination> ::=
Argomenti
database_name
Nome del database da modificare.MODIFY NAME =new_database_name
Rinomina il database con il nome specificato in new_database_name.COLLATE collation_name
Specifica le regole di confronto per il database. collation_name può essere un nome di regole di confronto 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).
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. Per ulteriori informazioni, vedere Transazioni con autocommit.
In SQL Server 2005 o nelle versione 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 l'operazione di ripristino di un database o di un file di log ha esito negativo a causa di un file di backup danneggiato. Per ulteriori informazioni, vedere Risposta agli errori di ripristino di SQL Server provocati da backup danneggiati.
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 |
|
La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un improvviso temporaneo peggioramento delle prestazioni di esecuzione delle query. Il registro 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 tutta la durata dello scaricamento della cache.
Modifica delle regole di confronto del database
Prima di applicare regole di confronto diverse a un database, verificare che siano soddisfatte le condizioni seguenti:
Nessun altro utente sta utilizzando il database.
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. Per ulteriori informazioni, vedere Informazioni sulle dipendenze SQL.
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
È possibile utilizzare le viste del catalogo, le funzioni di sistema e le stored procedure di sistema per restituire informazioni su database, file e filegroup. Per ulteriori informazioni, vedere Visualizzazione dei metadati dei database.
Autorizzazioni
È richiesta l'autorizzazione ALTER per il database.
Esempi
A. Modifica del nome di un database
Nell'esempio seguente il nome del database AdventureWorks2008R2 viene modificato in Northwind.
USE master;
GO
ALTER DATABASE AdventureWorks2008R2
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