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.Nível de compatibilidade de ALTER DATABASE
Fornece a sintaxe para as opções SET de ALTER DATABASE relacionadas aos níveis de compatibilidade de banco de dados.
Sintaxe
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> ::=
Argumentos
database_name
É o nome do banco de dados a ser modificado.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 Windows ou SQL. Se não especificado, o banco de dados é atribuído ao agrupamento da instância do SQL Server.Para obter mais informações sobre nomes de agrupamento 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).
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. Para obter mais informações, consulte Transações de confirmação automática.
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, toda a tentativa de acessá-lo por 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, também irá falhar toda instrução INSERT, UPDATE ou DELETE que modificar uma tabela contendo algum índice em grupo de arquivos offline.
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 em 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 falha devido a arquivo de backup corrompido. Para obter mais informações, consulte Respondendo a erros de restauração dos SQL Server causado por backups danificados.
O plano de cache para a instância do SQL Server é limpo definindo-se 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 |
|
A limpeza do cache do esquema gera uma recompilação de todos os planos de execução subsequentes e pode provocar uma queda repentina e temporária no desempenho da consulta. Para cada armazenamento em cache limpo no cache de plano, o log de erros do SQL Server contém a seguinte mensagem informativa: "SQL Server encontrou %d ocorrência(s) de liberação de armazenamento em cache '% s' (parte do cache de plano) devido a alguma manutenção de banco de dados ou a operações de reconfiguração". Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.
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:
Você é o único que está utilizando o banco de dados atualmente.
Nenhum objeto associado a 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. Para obter mais informações, consulte Compreendendo dependências do SQL.
Alterar o agrupamento de banco de dados não cria duplicatas entre nenhum nome de sistema para os objetos de banco de dados.
Os namespaces a seguir poderão provocar falha de alteração de agrupamento de banco de dados se nomes duplicados resultarem do agrupamento alterado:
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 de duplicata resultantes do novo agrupamento farão a ação de alteração falhar e o SQL Server retornará uma mensagem de erro especificando o namespace onde a duplicata foi encontrada.
Visualizando informações do banco de dados
É possível usar exibições do catálogo, funções de sistema e procedimentos armazenados do sistema para retornar informações sobre bancos de dados, arquivos e grupos de arquivos. Para obter mais informações, consulte Exibindo metadados do banco de dados.
Permissões
Requer 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 AdventureWorks2008R2 para Northwind.
USE master;
GO
ALTER DATABASE AdventureWorks2008R2
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