Compartir a través de


sp_attach_db (Transact-SQL)

Se aplica a: SQL Server

Adjunta una base de datos a un servidor.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Se recomienda utilizar CREATE DATABASE <database_name> FOR ATTACH en su lugar. Para más información, consulte CREATE DATABASE. Para volver a generar varios archivos de registro cuando una o varias tienen una nueva ubicación, use CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

No adjunte ni restaure bases de datos de orígenes desconocidos o que no sean de confianza. Es posible que dichas bases de datos contengan código malintencionado que podría ejecutar código de Transact-SQL no deseado o provocar errores al modificar el esquema o la estructura de la base de datos física. Para usar una base de datos desde un origen desconocido o que no sea de confianza, ejecute DBCC CHECKDB en la base de datos de un servidor que no sea de producción y examine también el código, como procedimientos almacenados u otro código definido por el usuario, en la base de datos.

Sintaxis

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Argumentos

[ @dbname = ] N'dbname'

Nombre de la base de datos que se va a adjuntar al servidor. @dbname es sysname, sin ningún valor predeterminado.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

Nombre físico, incluida la ruta de acceso, de un archivo de base de datos. Este parámetro es nvarchar(260), con un valor predeterminado de NULL. Puede especificar hasta 16 nombres de archivo. Los nombres de parámetro comienzan en @filename1 e incrementan a @filename16. La lista de nombres de archivo debe incluir al menos el archivo principal (.mdf). El archivo principal contiene las tablas del sistema que señalan a otros archivos de la base de datos. La lista también debe contener los archivos que se hayan movido después de separar la base de datos.

Este parámetro se asigna al FILENAME parámetro de la CREATE DATABASE instrucción . Para más información, consulte CREATE DATABASE.

Nota:

Al adjuntar una base de datos de SQL Server 2005 (9.x) que contiene archivos de catálogo de texto completo en una versión más reciente de SQL Server, los archivos de catálogo se adjuntan desde su ubicación anterior junto con los demás archivos de base de datos, igual que en SQL Server 2005 (9.x). Para obtener más información, vea Actualizar la búsqueda de texto completo.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Conjunto de resultados

Ninguno.

Comentarios

El sp_attach_db procedimiento almacenado solo se debe ejecutar en bases de datos que se desasociaron previamente del servidor de bases de datos mediante una operación explícita sp_detach_db o en bases de datos copiadas. Si tiene que especificar más de 16 archivos, use CREATE DATABASE <database_name> FOR ATTACH o CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Para más información, consulte CREATE DATABASE.

Se da por supuesto que cualquier archivo que no se especifique se encuentra en su última ubicación conocida. Para utilizar un archivo que se encuentra en una ubicación diferente, debe especificar la nueva ubicación.

Una base de datos creada por una versión más reciente de SQL Server no puede adjuntarse en versiones anteriores.

Nota:

No puedes separar ni adjuntar una instantánea de base de datos.

Al adjuntar una base de datos replicada que se copió en lugar de desasociarla, tenga en cuenta las condiciones siguientes:

  • Si adjunta la base de datos a la misma instancia de servidor y versión que la base de datos original, no se requieren pasos adicionales.

  • Si adjunta la base de datos a la misma instancia de servidor pero con una versión actualizada, debe ejecutar sp_vupgrade_replication para actualizar la replicación una vez que se complete la operación de adjuntar.

  • Si adjunta la base de datos a una instancia de servidor diferente, independientemente de la versión, debe ejecutar sp_removedbreplication para quitar la replicación una vez que se complete la operación de adjuntar.

Cuando una base de datos se adjunta por primera vez o se restaura a una nueva instancia de SQL Server, todavía no se almacena en el servidor una copia de la clave maestra de base de datos (DMK) cifrada por la clave maestra de servicio (SMK). Debe usar la OPEN MASTER KEY instrucción para descifrar la DMK. Una vez que se ha descifrado la DMK, tiene la opción de habilitar el descifrado automático en el futuro mediante la ALTER MASTER KEY REGENERATE instrucción para proporcionar al servidor una copia de la DMK, cifrada con el SMK. Cuando se actualiza una base de datos desde una versión anterior, se debe volver a generar la DMK para usar el algoritmo AES más reciente. Para obtener más información sobre cómo volver a generar la DMK, vea ALTER MASTER KEY. El tiempo necesario para volver a generar la DMK con el fin de actualizarse a AES depende del número de objetos protegidos por la DMK. La regeneración de la clave DMK para actualizar a AES solo es necesaria una vez y no tiene ningún efecto en las futuras regeneraciones como parte de una estrategia de rotación de claves.

Permisos

Para obtener información sobre cómo se controlan los permisos cuando se adjunta una base de datos, vea CREATE DATABASE.

Ejemplos

En el ejemplo siguiente se adjuntan archivos de AdventureWorks2022 al servidor actual.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';