ALTER DATABASE (Transact-SQL)

Modifica um banco de dados ou os arquivos e grupos de arquivos associados ao banco de dados. 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. Instantâneos de banco de dados não podem ser modificados. Para modificar opções de banco de dados associadas à replicação, use sp_replicationdboption.

Devido a sua extensão, a sintaxe ALTER DATABASE está dividida nos seguintes tópicos:

  • ALTER DATABASE
    O tópico atual fornece a sintaxe para alterar o nome e o agrupamento de um banco de dados.

  • Opções de arquivo e grupo de arquivos de ALTER DATABASE
    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.

  • Opções de ALTER DATABASE SET
    Fornece a sintaxe para alterar os atributos de um banco de dados usando as opções SET de ALTER DATABASE.

  • Espelhamento de banco de dados de ALTER DATABASE
    Fornece a sintaxe para as opções SET de ALTER DATABASE relacionadas a espelhamento de banco de dados.

  • ALTER DATABASE SET HADR
    Fornece a sintaxe para as opções Grupos de Disponibilidade AlwaysOn de ALTER DATABASE para configurar um banco de dados secundário em uma réplica secundária de um grupo de disponibilidade AlwaysOn.

  • Nível de compatibilidade de ALTER DATABASE
    Fornece a sintaxe para as opções SET de ALTER DATABASE relacionadas aos níveis de compatibilidade do banco de dados.

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • database_name
    É o nome do banco de dados a ser modificado.

    ObservaçãoObservação

    Essa opção não está disponível em um banco de dados independente.

  • CURRENT
    Designa que o banco de dados em uso deve ser alterado.

  • MODIFY NAME **=**new_database_name
    Renomeia o banco de dados com o nome especificado como new_database_name.

  • COLLATE collation_name
    Especifica o agrupamento do banco de dados. collation_name pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Se não especificado, o banco de dados será atribuído ao agrupamento da instância do SQL Server.

    Para obter mais informações sobre nomes de agrupamentos Windows e SQL, consulte COLLATE (Transact-SQL).

<file_and_filegroup_options >:: =

Para obter mais informações, consulte Opções de arquivo e grupos de arquivos ALTER DATABASE (Transact-SQL).

<set_database_options >:: =

Para obter mais informações, consulte Opções ALTER DATABASE SET (Transact-SQL), espelhamento de banco de dados ALTER DATABASE (Transact-SQL), ALTER DATABASE SET HADR (Transact-SQL) e Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Comentários

Para remover um banco de dados, use DROP DATABASE.

Para diminuir o tamanho de um banco de dados, 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.

No SQL Server 2005 ou posterior, o estado de um arquivo de banco de dados (por exemplo, online ou offline) é mantido independentemente do estado do banco de dados. Para obter mais informações, consulte Estados de arquivo. O estado dos arquivos dentro de um grupo de arquivos determina a disponibilidade de todo o grupo. Para que um grupo de arquivos fique disponível, todos os seus arquivos devem estar online. Se um grupo de arquivos estiver offline, qualquer tentativa de acessá-lo por meio de uma instrução SQL falhará com erro. 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. Isso permite que essas instruções tenham êxito. Porém, se o grupo de arquivos offline contiver o heap ou índice clusterizado da tabela de destino, as instruções SELECT falharão. Além disso, qualquer instrução INSERT, UPDATE ou DELETE que modifique uma tabela contendo um índice em um grupo de arquivos offline falhará.

Quando um banco de dados estiver em estado RESTORING, a maioria das instruções ALTER DATABASE falhará. A exceção está definindo opções de espelhamento de banco de dados. 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.

O cache do plano da instância do SQL Server é limpo com a definição de uma das seguintes opções:

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

PAGE_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. Para cada armazenamento em cache limpo no cache de planos, o log de erros do SQL Server contém a seguinte mensagem informativa: "O SQL 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". Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.

O cache de procedimento também é liberado nos seguintes cenários:

  • Um banco de dados tem a opção de banco de dados AUTO_CLOSE definida como ON. Quando nenhuma conexão de usuário referencia ou usa o banco de dados, a tarefa em segundo plano tenta fechar e desligar o banco de dados automaticamente.

  • Execute diversas consultas em um banco de dados que tem opções padrão. O banco de dados é removido.

  • Um instantâneo de banco de dados para um banco de dados de origem é removido.

  • Você recria o log de transações com êxito para um banco de dados.

  • Você restaura um backup de banco de dados.

  • Você desanexa um banco de dados.

Alterando o agrupamento de banco de dados

Antes de aplicar um agrupamento diferente a um banco de dados, certifique-se de que existam as seguintes condições:

  1. Você é o único usuário que está utilizando o banco de dados no momento.

  2. Nenhum objeto associado ao esquema depende do agrupamento do banco de dados.

    Se os objetos a seguir, que dependem do agrupamento de banco de dados, existirem no banco de dados, a instrução ALTER DATABASEdatabase_nameCOLLATE falhará. O SQL Server retornará uma mensagem de erro para cada objeto que bloqueia a ação de ALTER:

    • Funções definidas pelo usuário e exibições criadas com SCHEMABINDING.

    • Colunas computadas.

    • Restrições CHECK.

    • Funções com valor de tabela que retornam tabelas com colunas de caracteres com agrupamentos herdados do agrupamento de banco de dados padrão.

    Informações de dependência de entidades não associadas a esquema são automaticamente atualizadas quando o agrupamento de banco de dados é alterado.

Alterar o agrupamento de banco de dados não cria duplicatas entre nenhum nome de sistema para os objetos de banco de dados. Se nomes duplicados resultarem do agrupamento alterados, os namespaces a seguir poderão provocar falha de alteração de agrupamento de banco de dados:

  • Nomes de objeto, como procedimentos, tabelas, gatilhos ou exibições.

  • Nomes de esquema

  • Entidades, como grupos, funções ou usuários.

  • Nomes escalares, como tipos de sistema e tipos definidos pelo usuário.

  • Nomes de catálogo de texto completo.

  • Nomes de coluna ou parâmetro dentro de um objeto.

  • Nomes de índice dentro de uma tabela.

Nomes duplicados resultantes do novo agrupamento provocarão falha na ação de alteração e o SQL Server retornará uma mensagem de erro especificando o namespace onde a duplicata foi encontrada.

Exibindo informações do banco de dados

É 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.

Permissões

Requer a permissão ALTER no banco de dados.

Exemplos

A.Alterando o nome de um banco de dados

O exemplo a seguir altera o nome do banco de dados AdventureWorks2012 para Northwind.

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

B.Alterando o agrupamento de um banco de dados

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.

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO

Consulte também

Referência

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)

Conceitos

Bancos de dados do sistema