ALTER DATABASE (Transact-SQL)
Modifica una base de datos o los archivos y grupos de archivos asociados a la base de datos. Agrega o quita archivos y grupos de archivos en una base de datos, cambia los atributos de una base de datos o de sus archivos y grupos de archivos, cambia la intercalación de base de datos y establece las opciones de base de datos. Las instantáneas de bases de datos no se pueden modificar. Para modificar las opciones de base de datos asociadas a la replicación, utilice sp_replicationdboption.
Debido a su longitud, la sintaxis de ALTER DATABASE se divide en los temas siguientes:
ALTER DATABASE
El tema actual proporciona la sintaxis para cambiar el nombre y la intercalación de una base de datos.Opciones File y Filegroup de ALTER DATABASE
Proporciona la sintaxis para agregar y eliminar archivos y grupos de archivos de una base de datos y para cambiar los atributos de archivos y grupos de archivos.Opciones SET de ALTER DATABASE
Proporcionan la sintaxis para cambiar los atributos de una base de datos usando las opciones SET de ALTER DATABASE.Creación de reflejo de la base de datos de ALTER DATABASE
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con la creación de reflejo de la base de datos.Nivel de compatibilidad de ALTER DATABASE
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con los niveles de compatibilidad de la base de datos.
Sintaxis
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
Es el nombre de la base de datos que se va a modificar.MODIFY NAME **=**new_database_name
Cambia el nombre de la base de datos por el nombre especificado como new_database_name.COLLATE collation_name
Especifica la intercalación para la base de datos. collation_name puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL. Si no se especifica, se asigna a la base de datos la intercalación de la instancia de SQL Server.Para obtener más información acerca de los nombres de intercalación de Windows y SQL, consulte COLLATE (Transact-SQL).
<file_and_filegroup_options >::=
Para obtener más información, consulte Opciones File y Filegroup de ALTER DATABASE (Transact-SQL).
<set_database_options >::=
Para obtener más información, consulte Opciones de ALTER DATABASE SET (Transact-SQL).
Notas
Para quitar una base de datos, utilice DROP DATABASE.
Para reducir el tamaño de una base de datos, utilice DBCC SHRINKDATABASE.
La instrucción ALTER DATABASE se debe ejecutar en el modo de confirmación automática (modo de administración de transacciones predeterminado) y no se permite en una transacción explícita o implícita. Para obtener más información, vea Transacciones de confirmación automática.
En SQL Server 2005 o posterior, el estado de un archivo de base de datos (por ejemplo, en línea o sin conexión) se mantiene con independencia del estado de la base de datos. Para obtener más información, vea Estados de los archivos. El estado de los archivos de un grupo de archivos determina la disponibilidad de todo el grupo de archivos. Para que un grupo de archivos esté disponible, todos los archivos del grupo deben estar en línea. Si un grupo de archivos se encuentra en modo sin conexión, todos los intentos de acceso al grupo de archivos por parte de una instrucción SQL generan un error. Al generar un plan de consultas para las instrucciones SELECT, el optimizador de consultas evita los índices no agrupados y las vistas indizadas que residen en los grupos de archivos sin conexión. Esto permite que las instrucciones se ejecuten correctamente. No obstante, si el grupo de archivos sin conexión contiene el montón o el índice agrupado de la tabla de destino, las instrucciones SELECT generan un error. Además, todas las instrucciones INSERT, UPDATE o DELETE que modifican una tabla con un índice en un grupo de archivos sin conexión generan un error.
Si una base de datos se encuentra en estado RESTORING, se producirán errores en la mayoría de las instrucciones ALTER DATABASE. La excepción es el establecimiento de opciones de creación de reflejo de la base de datos. Una base de datos puede encontrarse en estado RESTORING durante una operación de restauración activa o cuando se produce un error en una operación de restauración de una base de datos o de un archivo de registro debido a un archivo de copia de seguridad dañado. Para obtener más información, vea Responder a errores de restauración de SQL Server provocados por copias de seguridad dañadas.
La caché del plan para la instancia de SQL Server se borra si se establece alguna de las opciones siguientes:
OFFLINE |
READ_WRITE |
ONLINE |
MODIFY FILEGROUP DEFAULT |
MODIFY_NAME |
MODIFY FILEGROUP READ_WRITE |
COLLATE |
MODIFY FILEGROUP READ_ONLY |
READ_ONLY |
|
Al borrar la caché del plan, se provoca una nueva compilación de todos los planes de ejecución posteriores y puede ocasionar una disminución repentina y temporal del rendimiento de las consultas. Para cada almacén de caché borrado de la caché del plan, el registro de errores de SQL Server contendrá el siguiente mensaje informativo: "SQL Server ha detectado %d instancias de vaciado del almacén de caché '%s' (parte de la caché del plan) debido a determinadas operaciones de mantenimiento de base de datos o reconfiguración". Este mensaje se registra cada cinco minutos siempre que se vacía la caché dentro de ese intervalo de tiempo.
Cambiar la intercalación de la base de datos
Antes de aplicar otra intercalación a una base de datos, asegúrese de que se cumplen las siguientes condiciones:
Es el único usuario que utiliza actualmente la base de datos.
Ningún objeto enlazado a un esquema depende de la intercalación de la base de datos.
Si los siguientes objetos, que dependen de la intercalación de la base de datos, existen en la base de datos, la instrucción ALTER DATABASE database_nameCOLLATE generará un error. SQL Server devuelve un mensaje de error para cada objeto que bloquee la acción ALTER:
Vistas y funciones definidas por el usuario creadas con SCHEMABINDING
Columnas calculadas
Restricciones CHECK
Funciones de valores de tabla que devuelven tablas con columnas de caracteres con intercalaciones heredadas de la intercalación predeterminada de la base de datos
La información de dependencia de las entidades no vinculadas a esquemas se actualiza automáticamente si se cambia la intercalación de la base de datos. Para obtener más información, consulte Descripción de las dependencias SQL.
Cambiar la intercalación de la base de datos no crea duplicados entre los nombres del sistema para los objetos de base de datos.
Los siguientes espacios de nombres pueden provocar errores en el cambio de la intercalación de la base de datos si se producen nombres duplicados en la intercalación cambiada:
Nombres de objetos, como un procedimiento, tabla, desencadenador o vista
Nombres de esquemas
Entidades de seguridad, como un grupo, función o usuario
Nombres de tipo escalar, como los tipos definidos por el usuario y por el sistema
Nombres de catálogos de texto
Nombres de columnas o parámetros en un objeto
Nombres de índices en una tabla
Los nombres duplicados resultantes de la nueva intercalación provocarán que la acción de cambio no se ejecute correctamente y SQL Server devolverá un mensaje de error que especifica el espacio de nombres donde se ha encontrado el duplicado.
Ver información de base de datos
Puede utilizar vistas de catálogo, funciones del sistema y procedimientos almacenados del sistema para devolver información sobre las bases de datos, los archivos y los grupos de archivos. Para obtener más información, vea Ver los metadatos de una base de datos.
Permisos
Requiere el permiso ALTER en la base de datos.
Ejemplos
A. Cambiar el nombre de una base de datos
En el ejemplo siguiente se cambia el nombre de la base de datos AdventureWorks a Northwind.
USE master;
GO
ALTER DATABASE AdventureWorks
Modify Name = Northwind ;
GO
B. Cambiar la intercalación de una base de datos
En el siguiente ejemplo se crea una base de datos denominada testdb con la intercalación SQL_Latin1_General_CP1_CI_AS, y luego se cambia la intercalación de la base de datos testdb a 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
Vea también