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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Modifica um banco de dados ou os arquivos e grupos de arquivos associados ao banco de dados.Modifies a database, or the files and filegroups associated with the database. Adiciona ou remove arquivos e grupos de arquivos de um banco de dados, altera os atributos de um banco de dados ou seus arquivos e grupos de arquivos, altera o agrupamento de banco de dados e define opções de banco de dados.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. Instantâneos de banco de dados não podem ser modificados.Database snapshots cannot be modified. Para modificar as opções de banco de dados associadas com a replicação, use sp_replicationdboption.To modify database options associated with replication, use sp_replicationdboption.

Devido a sua extensão, a sintaxe ALTER DATABASE está dividida nos seguintes tópicos:Because of its length, the ALTER DATABASE syntax is separated into the following topics:

ALTER DATABASEALTER DATABASE
O tópico atual fornece a sintaxe para alterar o nome e o agrupamento de um banco de dados.The current topic provides the syntax for changing the name and the collation of a database.

Alterar opções de grupo de arquivos e arquivos de banco de dadosALTER DATABASE File and Filegroup Options
Fornece a sintaxe para adicionar e remover arquivos e grupos de arquivos de um banco de dados e para alterar os atributos dos arquivos e grupos de arquivos.Provides the syntax for adding and removing files and filegroups from a database, and for changing the attributes of the files and filegroups.

Opções ALTER DATABASE SETALTER DATABASE SET Options
Fornece a sintaxe para alterar os atributos de um banco de dados usando as opções SET de ALTER DATABASE.Provides the syntax for changing the attributes of a database by using the SET options of ALTER DATABASE.

Alterar banco de dados de espelhamentoALTER DATABASE Database Mirroring
Fornece a sintaxe para as opções SET de ALTER DATABASE relacionadas a espelhamento de banco de dados.Provides the syntax for the SET options of ALTER DATABASE that are related to database mirroring.

ALTER DATABASE SET HADRALTER DATABASE SET HADR
Fornece a sintaxe para a Grupos de disponibilidade AlwaysOnAlways On availability groups opções de ALTER DATABASE para configurar um banco de dados secundário em uma réplica secundária de um grupo de disponibilidade AlwaysOn.Provides the syntax for the Grupos de disponibilidade AlwaysOnAlways On availability groups options of ALTER DATABASE for configuring a secondary database on a secondary replica of an Always On availability group.

Nível de compatibilidade do banco de dados de alteraçãoALTER DATABASE Compatibility Level
Fornece a sintaxe para as opções SET de ALTER DATABASE relacionadas aos níveis de compatibilidade do banco de dados.Provides the syntax for the SET options of ALTER DATABASE that are related to database compatibility levels.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Para o banco de dados SQL Azure, consulte ALTER DATABASE ( Banco de dados SQL do Azure )For Azure SQL Database, see ALTER DATABASE (Azure SQL Database)
Para o Azure SQL Data Warehouse, consulte ALTER DATABASE ( Depósito de dados SQL do Azure ) .For Azure SQL Data Warehouse, see ALTER DATABASE (Azure SQL Data Warehouse).
Para Parallel Data Warehouse, consulte ALTER DATABASE ( Parallel Data Warehouse ) .For Parallel Data Warehouse, see ALTER DATABASE (Parallel Data Warehouse).

SintaxeSyntax

-- 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> ::=  

ArgumentosArguments

database_namedatabase_name
É o nome do banco de dados a ser modificado.Is the name of the database to be modified.

Observação

Essa opção não está disponível em um banco de dados independente.This option is not available in a Contained Database.

CURRENTCURRENT
Aplica-se a: do SQL Server 2012SQL Server 2012 ao SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Designa que o banco de dados em uso deve ser alterado.Designates that the current database in use should be altered.

MODIFY NAME = new_database_nameMODIFY NAME =new_database_name
Renomeia o banco de dados com o nome especificado como new_database_name.Renames the database with the name specified as new_database_name.

COLLATE collation_nameCOLLATE collation_name
Especifica o agrupamento do banco de dados.Specifies the collation for the database. collation_name pode ser um nome de agrupamento do Windows ou um nome de agrupamento do SQL.collation_name can be either a Windows collation name or a SQL collation name. Se não especificado, o banco de dados será atribuído ao agrupamento da instância do SQL ServerSQL Server.If not specified, the database is assigned the collation of the instance of SQL ServerSQL Server.

Durante a criação de bancos de dados com itens diferentes do agrupamento padrão, os dados no banco de dados sempre respeitam o agrupamento especificado.When creating databases with other than the default collation, the data in the database always respects the specified collation. Para SQL ServerSQL Server, ao criar um banco de dados independente, as informações do catálogo interno são mantidas usando o SQL ServerSQL Server padrão de agrupamento, 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.

Para obter mais informações sobre os nomes de agrupamento do Windows e do SQL, consulte COLLATE ( Transact-SQL ) .For more information about the Windows and SQL collation names, see COLLATE (Transact-SQL).

<delayed_durability_option >:: =<delayed_durability_option> ::=
Aplica-se a: do SQL Server 2014SQL Server 2014 ao SQL Server 2017SQL Server 2017.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017.

Para obter mais informações, consulte opções ALTER DATABASE SET ( Transact-SQL ) e controlar a durabilidade da transação.For more information see ALTER DATABASE SET Options (Transact-SQL) and Control Transaction Durability.

<file_and_filegroup_options >:: =<file_and_filegroup_options>::=
Para obter mais informações, consulte alterar o arquivo de banco de dados e opções de grupo de arquivos ( Transact-SQL ) .For more information, see ALTER DATABASE File and Filegroup Options (Transact-SQL).

ComentáriosRemarks

Para remover um banco de dados, use DROP DATABASE.To remove a database, use DROP DATABASE.

Para diminuir o tamanho de um banco de dados, use DBCC SHRINKDATABASE.To decrease the size of a database, use DBCC SHRINKDATABASE.

A instrução ALTER DATABASE deve ser executada em modo de confirmação automática (o modo padrão de administração de transações) e não deve ser permitida em uma transação explícita ou implícita.The ALTER DATABASE statement must run in autocommit mode (the default transaction management mode) and is not allowed in an explicit or implicit transaction.

O estado de um arquivo de banco de dados (por exemplo, online ou offline) é mantido independentemente do estado do banco de dados.The state of a database file (for example, online or offline), is maintained independently from the state of the database. Para obter mais informações, consulte estados de arquivo.For more information, see File States. O estado dos arquivos dentro de um grupo de arquivos determina a disponibilidade de todo o grupo.The state of the files within a filegroup determines the availability of the whole filegroup. Para que um grupo de arquivos fique disponível, todos os seus arquivos devem estar online.For a filegroup to be available, all files within the filegroup must be online. Se um grupo de arquivos estiver offline, qualquer tentativa de acessá-lo por meio de uma instrução SQL falhará com erro.If a filegroup is offline, any try to access the filegroup by an SQL statement will fail with an error. Quando você cria planos de consulta para instruções SELECT, o otimizador de consultas evita índices não clusterizados e exibições indexadas que residam em grupos de arquivos offline.When you build query plans for SELECT statements, the query optimizer avoids nonclustered indexes and indexed views that reside in offline filegroups. Isso permite que essas instruções tenham êxito.This enables these statements to succeed. Porém, se o grupo de arquivos offline contiver o heap ou índice clusterizado da tabela de destino, as instruções SELECT falharão.However, if the offline filegroup contains the heap or clustered index of the target table, the SELECT statements fail. Além disso, qualquer instrução INSERT, UPDATE ou DELETE que modifique uma tabela contendo um índice em um grupo de arquivos offline falhará.Additionally, any INSERT, UPDATE, or DELETE statement that modifies a table with any index in an offline filegroup will fail.

Quando um banco de dados estiver em estado RESTORING, a maioria das instruções ALTER DATABASE falhará.When a database is in the RESTORING state, most ALTER DATABASE statements will fail. A exceção está definindo opções de espelhamento de banco de dados.The exception is setting database mirroring options. Um banco de dados pode estar no estado RESTORING durante uma operação de restauração ativa ou quando uma operação de restauração de um banco de dados ou arquivo de log falhar devido a um arquivo de backup corrompido.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.

O cache do plano para a instância do SQL ServerSQL Server é limpo pela configuração de uma das seguintes opções.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

A limpeza do cache de planos gera uma recompilação de todos os planos de execução subsequentes e pode provocar uma redução repentina e temporária do desempenho de consultas.Clearing the plan cache causes a recompilation of all subsequent execution plans and can cause a sudden, temporary decrease in query performance. Para cada armazenamento em cache limpo no cache de planos, o log de erros do SQL ServerSQL Server contém a seguinte mensagem informativa: "O SQL ServerSQL Server encontrou %d ocorrência(s) de liberação de armazenamento em cache '% s' (parte do cache de planos) devido à manutenção do banco de dados ou operações de reconfiguração".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". Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.This message is logged every five minutes as long as the cache is flushed within that time interval.

O cache de procedimento também é liberado nos seguintes cenários:The procedure cache is also flushed in the following scenarios:

  • Um banco de dados tem a opção de banco de dados AUTO_CLOSE definida como ON.A database has the AUTO_CLOSE database option set to ON. Quando nenhuma conexão de usuário fizer referência ou usar o banco de dados, a tarefa de banco de dados tentará fechar e encerrar o banco de dados automaticamente.When no user connection references or uses the database, the background task tries to close and shut down the database automatically.

  • Execute diversas consultas em um banco de dados que tem opções padrão.You run several queries against a database that has default options. O banco de dados é removido.Then, the database is dropped.

  • Um instantâneo de banco de dados para um banco de dados de origem é removido.A database snapshot for a source database is dropped.

  • Você recria com sucesso o log de transação para um banco de dados.You successfully rebuild the transaction log for a database.

  • Você restaura um backup de banco de dados.You restore a database backup.

  • Você desanexa um banco de dados.You detach a database.

Alterando o agrupamento de banco de dadosChanging the Database Collation

Antes de aplicar um agrupamento diferente a um banco de dados, certifique-se de que existam as seguintes condições:Before you apply a different collation to a database, make sure that the following conditions are in place:

  • Você é o único usuário que está utilizando o banco de dados no momento.You are the only one currently using the database.

  • Nenhum objeto associado ao esquema depende do agrupamento do banco de dados.No schema-bound object depends on the collation of the database.

    Se os objetos a seguir, que dependem do agrupamento de banco de dados, existirão no banco de dados, a instrução ALTER DATABASEdatabase_nameinstrução COLLATE falhará.If the following objects, which depend on the database collation, exist in the database, the ALTER DATABASEdatabase_nameCOLLATE statement will fail. O SQL ServerSQL Server retornará uma mensagem de erro para cada objeto que bloqueia a ação de ALTER: SQL ServerSQL Server will return an error message for each object blocking the ALTER action:

    • Funções definidas pelo usuário e exibições criadas com SCHEMABINDING.User-defined functions and views created with SCHEMABINDING.

    • Colunas computadas.Computed columns.

    • Restrições CHECK.CHECK constraints.

    • Funções com valor de tabela que retornam tabelas com colunas de caracteres com agrupamentos herdados do agrupamento de banco de dados padrão.Table-valued functions that return tables with character columns with collations inherited from the default database collation.

      Informações de dependência de entidades não associadas a esquema são automaticamente atualizadas quando o agrupamento de banco de dados é alterado.Dependency information for non-schema-bound entities is automatically updated when the database collation is changed.

    Alterar o agrupamento de banco de dados não cria duplicatas entre nenhum nome de sistema para os objetos de banco de dados.Changing the database collation does not create duplicates among any system names for the database objects. Se nomes duplicados resultarem do agrupamento alterados, os namespaces a seguir poderão provocar falha de alteração de agrupamento de banco de dados:If duplicate names result from the changed collation, the following namespaces may cause the failure of a database collation change:

  • Nomes de objeto, como procedimentos, tabelas, gatilhos ou exibições.Object names such as a procedure, table, trigger, or view.

  • Nomes de esquema.Schema names.

  • Entidades, como grupos, funções ou usuários.Principals such as a group, role, or user.

  • Nomes escalares, como tipos de sistema e tipos definidos pelo usuário.Scalar-type names such as system and user-defined types.

  • Nomes de catálogo de texto completo.Full-text catalog names.

  • Nomes de coluna ou parâmetro dentro de um objeto.Column or parameter names within an object.

  • Nomes de índice dentro de uma tabela.Index names within a table.

Nomes duplicados resultantes do novo agrupamento provocarão falha na ação de alteração e o SQL ServerSQL Server retornará uma mensagem de erro especificando o namespace onde a duplicata foi encontrada.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.

Exibindo informações do banco de dadosViewing Database Information

É possível usar exibições do catálogo, funções do sistema e procedimentos armazenados do sistema para retornar informações sobre bancos de dados, arquivos e grupos de arquivos.You can use catalog views, system functions, and system stored procedures to return information about databases, files, and filegroups.

PermissõesPermissions

Requer a permissão ALTER no banco de dados.Requires ALTER permission on the database.

ExemplosExamples

A.A. Alterando o nome de um banco de dadosChanging the name of a database

O exemplo a seguir altera o nome do banco de dados AdventureWorks2012 para 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. Alterando o agrupamento de um banco de dadosChanging the collation of a database

O exemplo a seguir cria um banco de dados denominado testdb com o agrupamento SQL_Latin1_General_CP1_CI_AS e, em seguida, altera o agrupamento do banco de dados testdb para 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.

Aplica-se a: do SQL Server 2008SQL Server 2008 ao 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  

Consulte tambémSee Also