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:

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

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:

  1. Es el único usuario que utiliza actualmente la base de datos.

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

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