ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Consente di modificare un database oppure i file e i filegroup associati al database.Modifies a database, or the files and filegroups associated with the 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.Adds or removes files and filegroups from a database, changes the attributes of a database or its files and filegroups, changes the database collation, and sets database options. Non è possibile modificare snapshot di database.Database snapshots cannot be modified. Per modificare le opzioni di database associate alla replica, utilizzare sp_replicationdboption.To modify database options associated with replication, use sp_replicationdboption.

A causa della lunghezza, la sintassi di ALTER DATABASE è separata negli argomenti seguenti:Because of its length, the ALTER DATABASE syntax is separated into the following topics:

ALTER DATABASEALTER DATABASE
L'argomento corrente fornisce la sintassi per la modifica del nome e le regole di confronto di un database.The current topic provides the syntax for changing the name and the collation of a database.

Opzioni ALTER DATABASE File e FilegroupALTER DATABASE File and Filegroup Options
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.Provides the syntax for adding and removing files and filegroups from a database, and for changing the attributes of the files and filegroups.

Opzioni ALTER DATABASE SETALTER DATABASE SET Options
Fornisce la sintassi per la modifica degli attributi di un database utilizzando le opzioni SET di ALTER DATABASE.Provides the syntax for changing the attributes of a database by using the SET options of ALTER DATABASE.

Database ALTER DATABASE MirroringALTER DATABASE Database Mirroring
Include la sintassi per le opzioni SET di ALTER DATABASE relative al mirroring del database.Provides the syntax for the SET options of ALTER DATABASE that are related to database mirroring.

ALTER DATABASE SET HADRALTER DATABASE SET HADR
Fornisce la sintassi per la Gruppi di disponibilità Always OnAlways On availability groups opzioni di ALTER DATABASE per la configurazione di un database secondario in una replica secondaria di un gruppo di disponibilità Always On.Provides the syntax for the Gruppi di disponibilità Always OnAlways On availability groups options of ALTER DATABASE for configuring a secondary database on a secondary replica of an Always On availability group.

Livello di compatibilità di ALTER DATABASEALTER DATABASE Compatibility Level
Fornisce la sintassi per le opzioni SET di ALTER DATABASE relative ai livelli di compatibilità del database.Provides the syntax for the SET options of ALTER DATABASE that are related to database compatibility levels.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Database SQL di Azure, vedere ALTER DATABASE ( Database SQL di Azure )For Azure SQL Database, see ALTER DATABASE (Azure SQL Database)
Per Azure SQL Data Warehouse, vedere ALTER DATABASE ( Azure SQL Data Warehouse ) .For Azure SQL Data Warehouse, see ALTER DATABASE (Azure SQL Data Warehouse).
Per Parallel Data Warehouse, vedere ALTER DATABASE ( Parallel Data Warehouse ) .For Parallel Data Warehouse, see ALTER DATABASE (Parallel Data Warehouse).

SintassiSyntax

-- SQL Server Syntax  
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> ::=  <delayed_durability_option> ::=  <external_access_option> ::=  
  <FILESTREAM_options> ::=  
  <HADR_options> ::=    
  <parameterization_option> ::=  
  <query_store_options> ::=  
  <recovery_option> ::=   
  <service_broker_option> ::=  
  <snapshot_option> ::=  
  <sql_option> ::=   
  <termination> ::=  

ArgomentiArguments

database_namedatabase_name
Nome del database da modificare.Is the name of the database to be modified.

Nota

Questa opzione non è disponibile in un database indipendente.This option is not available in a Contained Database.

CURRENTCURRENT
Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Specifica che il database corrente in uso deve essere modificato.Designates that the current database in use should be altered.

Modifica nome = new_database_nameMODIFY NAME =new_database_name
Rinomina il database con il nome specificato come new_database_name.Renames the database with the name specified as new_database_name.

COLLATE collation_nameCOLLATE collation_name
Specifica le regole di confronto per il database.Specifies the collation for the database. collation_name può essere un nome di regole di confronto Windows o un nome di regole di confronto SQL.collation_name can be either a Windows collation name or a SQL collation name. Se omesso, al database vengono assegnate le regole di confronto dell'istanza di SQL ServerSQL Server.If not specified, the database is assigned the collation of the instance of SQL ServerSQL Server.

Quando si creano database con regole di confronto diverse da quelle predefinite, i dati nel database rispettano sempre le regole di confronto specificate.When creating databases with other than the default collation, the data in the database always respects the specified collation. Per SQL ServerSQL Server, quando si crea un database indipendente, le informazioni del catalogo interno vengono mantenute usando il SQL ServerSQL Server , regole di confronto predefinite Latin1_General_100_CI_AS_WS_KS_SC.For SQL ServerSQL Server, when creating a contained database, the internal catalog information is maintained using the SQL ServerSQL Server default collation, Latin1_General_100_CI_AS_WS_KS_SC.

Per ulteriori informazioni sui nomi delle regole di confronto Windows e SQL, vedere COLLATE ( Transact-SQL ) .For more information about the Windows and SQL collation names, see COLLATE (Transact-SQL).

<delayed_durability_option >:: =<delayed_durability_option> ::=
Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017.

Per ulteriori informazioni vedere opzioni ALTER DATABASE SET ( Transact-SQL ) e controllare la durabilità delle transazioni.For more information see ALTER DATABASE SET Options (Transact-SQL) and Control Transaction Durability.

<file_and_filegroup_options >:: =<file_and_filegroup_options>::=
Per ulteriori informazioni, vedere File ALTER DATABASE e le opzioni di Filegroup ( Transact-SQL ) .For more information, see ALTER DATABASE File and Filegroup Options (Transact-SQL).

OsservazioniRemarks

Per rimuovere un database, utilizzare DROP DATABASE.To remove a database, use DROP DATABASE.

Per ridurre le dimensioni di un database, utilizzare DBCC SHRINKDATABASE.To decrease the size of a database, use 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.The ALTER DATABASE statement must run in autocommit mode (the default transaction management mode) and is not allowed in an explicit or implicit transaction.

Lo stato di un file di database, ad esempio online o offline, viene mantenuto indipendentemente dallo stato del database.The state of a database file (for example, online or offline), is maintained independently from the state of the database. Per ulteriori informazioni, vedere degli stati di File.For more information, see File States. Lo stato dei file all'interno di un filegroup determina la disponibilità dell'intero filegroup.The state of the files within a filegroup determines the availability of the whole filegroup. Un filegroup è disponibile se tutti i file in esso inclusi sono online.For a filegroup to be available, all files within the filegroup must be online. Se un filegroup è offline, qualsiasi tentativo di accesso al filegroup tramite un'istruzione SQL avrà esito negativo e verrà generato un errore.If a filegroup is offline, any try to access the filegroup by an SQL statement will fail with an error. 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.When you build query plans for SELECT statements, the query optimizer avoids nonclustered indexes and indexed views that reside in offline filegroups. Ciò consente la corretta esecuzione di tali istruzioni.This enables these statements to succeed. Se tuttavia il filegroup offline contiene l'indice cluster o heap della tabella di destinazione, l'istruzione SELECT avrà esito negativo,However, if the offline filegroup contains the heap or clustered index of the target table, the SELECT statements fail. così come tutte le istruzioni INSERT, UPDATE o DELETE che implicano la modifica di una tabella tramite un indice incluso in un filegroup offline.Additionally, any INSERT, UPDATE, or DELETE statement that modifies a table with any index in an offline filegroup will fail.

Quando un database è nello stato RESTORING, la maggior parte delle istruzioni ALTER DATABASE avrà esito negativo.When a database is in the RESTORING state, most ALTER DATABASE statements will fail. Un'alternativa consiste nell'impostare le opzioni di mirroring del database.The exception is setting database mirroring options. 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.A database may be in the RESTORING state during an active restore operation or when a restore operation of a database or log file fails because of a corrupted backup file.

La cache dei piani per l'istanza di SQL ServerSQL Server viene cancellata quando si imposta una delle opzioni seguenti.The plan cache for the instance of SQL ServerSQL Server is cleared by setting one of the following options.

OFFLINEOFFLINE READ_WRITEREAD_WRITE
ONLINEONLINE MODIFY FILEGROUP DEFAULTMODIFY FILEGROUP DEFAULT
MODIFY_NAMEMODIFY_NAME MODIFY FILEGROUP READ_WRITEMODIFY FILEGROUP READ_WRITE
COLLATECOLLATE MODIFY FILEGROUP READ_ONLYMODIFY FILEGROUP READ_ONLY
READ_ONLYREAD_ONLY PAGE_VERIFYPAGE_VERIFY

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.Clearing the plan cache causes a recompilation of all subsequent execution plans and can cause a sudden, temporary decrease in query performance. Il log degli errori di SQL ServerSQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: " SQL ServerSQL 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".For each cleared cachestore in the plan cache, the SQL ServerSQL Server error log contains the following informational message: " SQL ServerSQL 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.This message is logged every five minutes as long as the cache is flushed within that time interval.

La cache delle procedure viene inoltre scaricata negli scenari seguenti:The procedure cache is also flushed in the following scenarios:

  • L'opzione AUTO_CLOSE di un database è impostata su ON.A database has the AUTO_CLOSE database option set to 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.When no user connection references or uses the database, the background task tries to close and shut down the database automatically.

  • Vengono eseguite diverse query su un database contenente opzioni predefinite.You run several queries against a database that has default options. Successivamente, il database viene eliminato.Then, the database is dropped.

  • Viene eliminato uno snapshot del database per un database di origine.A database snapshot for a source database is dropped.

  • Viene ricompilato correttamente il log delle transazioni per un database.You successfully rebuild the transaction log for a database.

  • Viene ripristinato un backup del database.You restore a database backup.

  • Viene scollegato un database.You detach a database.

Modifica delle regole di confronto del databaseChanging the Database Collation

Prima di applicare regole di confronto diverse a un database, verificare che siano soddisfatte le condizioni seguenti:Before you apply a different collation to a database, make sure that the following conditions are in place:

  • Nessun altro utente sta utilizzando il database.You are the only one currently using the database.

  • Nessun oggetto associato a schema dipende dalle regole di confronto del database.No schema-bound object depends on the collation of the database.

    Se gli oggetti seguenti, che dipendono da regole di confronto del database, esistono nel database, l'istruzione ALTER DATABASEdatabase_nameistruzione COLLATE avrà esito negativo.If the following objects, which depend on the database collation, exist in the database, the ALTER DATABASEdatabase_nameCOLLATE statement will fail. SQL ServerSQL Server restituirà un messaggio di errore per ogni oggetto che blocca l'azione ALTER: will return an error message for each object blocking the ALTER action:

    • Funzioni definite dall'utente e viste create con SCHEMABINDING.User-defined functions and views created with SCHEMABINDING.

    • Colonne calcolate.Computed columns.

    • Vincoli CHECK.CHECK constraints.

    • 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.Table-valued functions that return tables with character columns with collations inherited from the default database collation.

      Le informazioni sulle dipendenze per le entità non associate a schemi vengono aggiornate automaticamente quando vengono modificate le regole di confronto del database.Dependency information for non-schema-bound entities is automatically updated when the database collation is changed.

    La modifica delle regole di confronto del database non comporta la creazione di duplicati per i nomi di sistema degli oggetti di database.Changing the database collation does not create duplicates among any system names for the database objects. Se la modifica delle regole di confronto genera nomi duplicati, gli spazi dei nomi seguenti potrebbero impedire tale modifica:If duplicate names result from the changed collation, the following namespaces may cause the failure of a database collation change:

  • Nomi di oggetti, quali stored procedure, tabelle, trigger e viste.Object names such as a procedure, table, trigger, or view.

  • Nomi di schemi.Schema names.

  • Entità, come gruppi, ruoli o utenti.Principals such as a group, role, or user.

  • Nomi di tipi di dati scalari, come i tipi di dati di sistema e definiti dall'utente.Scalar-type names such as system and user-defined types.

  • Nomi di cataloghi full-text.Full-text catalog names.

  • Nomi di colonne o parametri in un oggetto.Column or parameter names within an object.

  • Nomi di indici in una tabella.Index names within a table.

Se vengono generati nomi duplicati in seguito all'applicazione delle nuove regole di confronto, l'azione di modifica avrà esito negativo e in SQL ServerSQL Server verrà visualizzato un messaggio di errore che indica lo spazio dei nomi in cui è stato identificato il duplicato.Duplicate names resulting from the new collation will cause the change action to fail, and SQL ServerSQL Server will return an error message specifying the namespace where the duplicate was found.

Visualizzazione delle informazioni sui databaseViewing Database Information

Per restituire informazioni su database, file e filegroup, è possibile usare viste del catalogo, funzioni di sistema e stored procedure di sistema.You can use catalog views, system functions, and system stored procedures to return information about databases, files, and filegroups.

PermissionsPermissions

È richiesta l'autorizzazione ALTER per il database.Requires ALTER permission on the database.

EsempiExamples

A.A. Modifica del nome di un databaseChanging the name of a database

Nell'esempio seguente il nome del database AdventureWorks2012 viene modificato in Northwind.The following example changes the name of the AdventureWorks2012 database to Northwind.

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

B.B. Modifica delle regole di confronto del databaseChanging the collation of a database

Nell'esempio seguente viene creato un database denominato testdb con le regole di confronto SQL_Latin1_General_CP1_CI_AS, quindi vengono modificate le regole di confronto del database testdb in COLLATE French_CI_AI.The following example creates a database named testdb with the SQL_Latin1_General_CP1_CI_AS collation, and then changes the collation of the testdb database to COLLATE French_CI_AI.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

USE master;  
GO  

CREATE DATABASE testdb  
COLLATE SQL_Latin1_General_CP1_CI_AS ;  
GO  

ALTER DATABASE testDB  
COLLATE French_CI_AI ;  
GO  

Vedere ancheSee Also