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

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Modifica una base de datos o los archivos y grupos de archivos asociados a la base de datos.Modifies a database, or the files and filegroups associated with the database. 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.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. Las instantáneas de base de datos no se pueden modificar.Database snapshots cannot be modified. Para modificar opciones de base de datos asociados con la replicación, utilice sp_replicationdboption.To modify database options associated with replication, use sp_replicationdboption.

Debido a su longitud, la sintaxis de ALTER DATABASE se divide en los temas siguientes:Because of its length, the ALTER DATABASE syntax is separated into the following topics:

ALTER DATABASEALTER DATABASE
El tema actual proporciona la sintaxis para cambiar el nombre y la intercalación de una base de datos.The current topic provides the syntax for changing the name and the collation of a database.

MODIFICAR el archivo de base de datos y las opciones de grupo de archivosALTER DATABASE File and Filegroup Options
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.Provides the syntax for adding and removing files and filegroups from a database, and for changing the attributes of the files and filegroups.

Opciones de ALTER DATABASE SETALTER DATABASE SET Options
Proporcionan la sintaxis para cambiar los atributos de una base de datos usando las opciones SET de ALTER DATABASE.Provides the syntax for changing the attributes of a database by using the SET options of ALTER DATABASE.

Base de datos de base de datos de ALTER de creación de reflejoALTER DATABASE Database Mirroring
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con la creación de reflejo de la base de datos.Provides the syntax for the SET options of ALTER DATABASE that are related to database mirroring.

MODIFICAR BASE DE DATOS SET HADRALTER DATABASE SET HADR
Proporciona la sintaxis de la Grupos de disponibilidad AlwaysOnAlways On availability groups opciones de ALTER DATABASE para configurar una base de datos secundaria en una réplica secundaria de un grupo de disponibilidad Always On.Provides the syntax for the Grupos de disponibilidad AlwaysOnAlways On availability groups options of ALTER DATABASE for configuring a secondary database on a secondary replica of an Always On availability group.

Nivel de compatibilidad de ALTER DATABASEALTER DATABASE Compatibility Level
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con los niveles de compatibilidad de la base de datos.Provides the syntax for the SET options of ALTER DATABASE that are related to database compatibility levels.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Base de datos de SQL Azure, consulte ALTER DATABASE ( Base de datos SQL Azure )For Azure SQL Database, see ALTER DATABASE (Azure SQL Database)
Para almacenamiento de datos de SQL Azure, consulte ALTER DATABASE ( Almacenamiento de datos SQL de Azure ) .For Azure SQL Data Warehouse, see ALTER DATABASE (Azure SQL Data Warehouse).
Para almacenamiento de datos paralelos, vea ALTER DATABASE ( Almacenamiento de datos en paralelo ) .For Parallel Data Warehouse, see ALTER DATABASE (Parallel Data Warehouse).

SintaxisSyntax

-- 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
Es el nombre de la base de datos que se va a modificar.Is the name of the database to be modified.

Nota

Esta opción no está disponible en las bases de datos independientes.This option is not available in a Contained Database.

CURRENTCURRENT
Se aplica a: desde SQL Server 2012SQL Server 2012 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Designa que la base de datos actual en uso se debe modificar.Designates that the current database in use should be altered.

MODIFY NAME = new_database_nameMODIFY NAME =new_database_name
Cambia el nombre de la base de datos con el nombre especificado como new_database_name.Renames the database with the name specified as new_database_name.

COLLATE collation_nameCOLLATE collation_name
Especifica la intercalación de la base de datos.Specifies the collation for the database. collation_name puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL.collation_name can be either a Windows collation name or a SQL collation name. Si no se especifica, se asigna a la base de datos la intercalación de la instancia de SQL ServerSQL Server.If not specified, the database is assigned the collation of the instance of SQL ServerSQL Server.

Al crear bases de datos con una intercalación diferente de la predeterminada, los datos de la base de datos siempre respetan la intercalación especificada.When creating databases with other than the default collation, the data in the database always respects the specified collation. Para SQL ServerSQL Server, al crear una base de datos independiente, la información de catálogo interno se mantiene mediante el SQL ServerSQL Server predeterminado de intercalación, 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 obtener más información acerca de los nombres de intercalación de Windows y 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> ::=
Se aplica a: desde SQL Server 2014SQL Server 2014 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017.

Para obtener más información consulte ALTER DATABASE SET Options ( Transact-SQL ) y controlar la durabilidad.For more information see ALTER DATABASE SET Options (Transact-SQL) and Control Transaction Durability.

<file_and_filegroup_options >:: =<file_and_filegroup_options>::=
Para obtener más información, vea modificar el archivo de base de datos y opciones de grupo de archivos ( Transact-SQL ) .For more information, see ALTER DATABASE File and Filegroup Options (Transact-SQL).

ComentariosRemarks

Para quitar una base de datos, use DROP DATABASE.To remove a database, use DROP DATABASE.

Para reducir el tamaño de una base de datos, utilice DBCC SHRINKDATABASE.To decrease the size of a database, use 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.The ALTER DATABASE statement must run in autocommit mode (the default transaction management mode) and is not allowed in an explicit or implicit transaction.

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.The state of a database file (for example, online or offline), is maintained independently from the state of the database. Para obtener más información, consulte Estados de los archivos.For more information, see File States. El estado de los archivos de un grupo de archivos determina la disponibilidad de todo el grupo de archivos.The state of the files within a filegroup determines the availability of the whole filegroup. Para que un grupo de archivos esté disponible, todos los archivos del grupo de archivos deben estar en línea.For a filegroup to be available, all files within the filegroup must be online. 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.If a filegroup is offline, any try to access the filegroup by an SQL statement will fail with an error. Al generar un plan de consulta para las instrucciones SELECT, el optimizador de consultas evita los índices no clúster y las vistas indizadas que residen en los grupos de archivos sin conexión.When you build query plans for SELECT statements, the query optimizer avoids nonclustered indexes and indexed views that reside in offline filegroups. Esto permite que las instrucciones se ejecuten correctamente.This enables these statements to succeed. No obstante, si el grupo de archivos sin conexión contiene el montón o el índice clúster de la tabla de destino, las instrucciones SELECT no funcionarán.However, if the offline filegroup contains the heap or clustered index of the target table, the SELECT statements fail. Adicionalmente, cualquier instrucción INSERT, UPDATE o DELETE que modifique una tabla con cualquier índice en un grupo de archivos sin conexión no funcionará.Additionally, any INSERT, UPDATE, or DELETE statement that modifies a table with any index in an offline filegroup will fail.

Si una base de datos se encuentra en estado RESTORING, se producirán errores en la mayoría de las instrucciones ALTER DATABASE.When a database is in the RESTORING state, most ALTER DATABASE statements will fail. La excepción es el establecimiento de opciones de creación de reflejo de la base de datos.The exception is setting database mirroring options. Es posible que una base de datos se encuentre 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.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.

La memoria caché de planes para la instancia de SQL ServerSQL Server se borra si se establece alguna de las opciones siguientes.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

Al borrar la memoria caché de planes, 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.Clearing the plan cache causes a recompilation of all subsequent execution plans and can cause a sudden, temporary decrease in query performance. Para cada almacén de caché borrado de la memoria caché de planes, el registro de errores de SQL ServerSQL Server contendrá el siguiente mensaje informativo: " SQL ServerSQL Server ha detectado %d instancias de vaciado del almacén de caché '%s' (parte de la memoria caché de planes) debido a determinadas operaciones de mantenimiento de base de datos o reconfiguración".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". Este mensaje se registra cada cinco minutos siempre que se vacíe la memoria caché dentro de ese intervalo de tiempo.This message is logged every five minutes as long as the cache is flushed within that time interval.

La memoria caché de procedimientos también se vacía en los escenarios siguientes:The procedure cache is also flushed in the following scenarios:

  • Una base de datos tiene la opción de base de datos AUTO_CLOSE establecida en ON.A database has the AUTO_CLOSE database option set to ON. Cuando ninguna conexión de usuario hace referencia a la base de datos ni la usa, la tarea de segundo plano intenta cerrar la base de datos y apagarla de modo automático.When no user connection references or uses the database, the background task tries to close and shut down the database automatically.

  • Ejecuta varias consultas con una base de datos que tiene opciones predeterminadas.You run several queries against a database that has default options. Después, la base de datos se quita.Then, the database is dropped.

  • Se quita una instantánea de base de datos para una base de datos de origen.A database snapshot for a source database is dropped.

  • Volvió a generar correctamente el registro de transacciones para una base de datos.You successfully rebuild the transaction log for a database.

  • Restaura una copia de seguridad de una base de datosYou restore a database backup.

  • Separa una base de datos.You detach a database.

Cambiar la intercalación de la base de datosChanging the Database Collation

Antes de aplicar otra intercalación a una base de datos, asegúrese de que se cumplen las siguientes condiciones:Before you apply a different collation to a database, make sure that the following conditions are in place:

  • Es el único usuario que utiliza actualmente la base de datos.You are the only one currently using the database.

  • Ningún objeto enlazado a un esquema depende de la intercalación de la base de datos.No schema-bound object depends on the collation of the database.

    Si los objetos siguientes, que dependen de la intercalación de base de datos, existen en la base de datos, la instrucción ALTER DATABASEdatabase_nameinstrucción COLLATE producirá un error.If the following objects, which depend on the database collation, exist in the database, the ALTER DATABASEdatabase_nameCOLLATE statement will fail. SQL ServerSQL Server devolverá un mensaje de error para cada objeto que bloquee la acción de ALTER: will return an error message for each object blocking the ALTER action:

    • Vistas y funciones definidas por el usuario creadas con SCHEMABINDINGUser-defined functions and views created with SCHEMABINDING.

    • Columnas calculadasComputed columns.

    • Restricciones CHECKCHECK constraints.

    • Funciones con valores de tabla que devuelven tablas con columnas de caracteres con intercalaciones heredadas de la intercalación predeterminada de la base de datosTable-valued functions that return tables with character columns with collations inherited from the default database collation.

      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.Dependency information for non-schema-bound entities is automatically updated when the database collation is changed.

    Cambiar la intercalación de la base de datos no crea duplicados entre los nombres del sistema para los objetos de base de datos.Changing the database collation does not create duplicates among any system names for the database objects. Si se producen nombres duplicados en la intercalación cambiada, los siguientes espacios de nombres pueden provocar errores en el cambio de la intercalación de la base de datos:If duplicate names result from the changed collation, the following namespaces may cause the failure of a database collation change:

  • Nombres de objetos, como un procedimiento, una tabla, un desencadenador o una vistaObject names such as a procedure, table, trigger, or view.

  • Nombres de esquemas.Schema names.

  • Entidades de seguridad, como un grupo, rol o usuarioPrincipals such as a group, role, or user.

  • Nombres de tipo escalar, como los tipos definidos por el usuario y por el sistemaScalar-type names such as system and user-defined types.

  • Nombres de catálogos de texto completoFull-text catalog names.

  • Nombres de columnas o parámetros en un objetoColumn or parameter names within an object.

  • Nombres de índices en una tablaIndex names within a table.

Los nombres duplicados resultantes de la nueva intercalación provocarán que la acción de cambio no se ejecute correctamente y SQL ServerSQL Server devolverá un mensaje de error que especifica el espacio de nombres donde se ha encontrado el duplicado.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.

Ver la información de la base de datosViewing Database Information

Se pueden utilizar vistas de catálogo, funciones del sistema y procedimientos almacenados del sistema para devolver información sobre bases de datos, archivos y grupos de archivos.You can use catalog views, system functions, and system stored procedures to return information about databases, files, and filegroups.

PermissionsPermissions

Requiere el permiso ALTER en la base de datos.Requires ALTER permission on the database.

EjemplosExamples

A.A. Cambiar el nombre de una base de datosChanging the name of a database

En el ejemplo siguiente se cambia el nombre de la base de datos AdventureWorks2012 a 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. Cambiar la intercalación de una base de datosChanging the collation of a database

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

Se aplica a: desde SQL Server 2008SQL Server 2008 hasta 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  

Vea tambiénSee Also