sp_attach_db (Transact-SQL)

Adjunta una base de datos a un servidor.

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft 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 obtener más información, vea CREATE DATABASE (Transact-SQL).

[!NOTA]

Si desea volver a generar varios archivos de registro y uno o más tienen una ubicación nueva, utilice CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Nota de seguridadNota de seguridad

Se recomienda no adjuntar ni restaurar 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 Transact-SQL no deseado o provocar errores al modificar el esquema o la estructura de la base de datos física. Antes de usar una base de datos de origen desconocido o que no es de confianza, ejecute DBCC CHECKDB en la base de datos en 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, de la base de datos.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_attach_db [ @dbname= ] 'dbname'
    , [ @filename1= ] 'filename_n' [ ,...16 ] 

Argumentos

  • [ @dbname= ] **'**dbnam '
    Es el nombre de la base de datos que se va a adjuntar al servidor. El nombre debe ser único. dbname es de tipo sysname y su valor predeterminado es NULL.

  • [ @filename1= ] 'filename_n'
    Es el nombre físico, incluida la ruta de acceso, de un archivo de base de datos. filename_n es de tipo nvarchar(260) y su valor predeterminado es NULL. Se pueden especificar hasta 16 nombres de archivo. Los nombres de parámetro comienzan en @filename1 y se incrementan hasta @filename16. La lista de nombres de archivo debe incluir al menos el archivo principal. 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.

    [!NOTA]

    Este argumento se asigna al parámetro FILENAME de la instrucción CREATE DATABASE. Para obtener más información, vea CREATE DATABASE (Transact-SQL).

    Al adjuntar una base de datos de SQL Server 2005 que contiene archivos de catálogo de texto completo a una instancia de servidor de SQL Server 2012, 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. Para obtener más información, vea Actualizar la búsqueda de texto completo desde SQL Server 2005.

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

Ninguno

Comentarios

El procedimiento almacenado sp_attach_db solo se debe ejecutar en bases de datos que se hayan separado previamente del servidor de bases de datos con una operación sp_detach_db explícita o en bases de datos copiadas. Si debe especificar más de 16 archivos, utilice CREATE DATABASE database_name FOR ATTACH or CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Para obtener más información, vea CREATE DATABASE (Transact-SQL).

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]

Una instantánea de base de datos no se puede adjuntar ni separar.

Si adjunta una base de datos replicada que fue copiada en lugar de ser separada, tenga en cuenta lo siguiente:

  • Si adjunta la base de datos a la misma versión e instancia de servidor que la base de datos original, no es necesario realizar ningún paso adicional.

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

Solo las bases de datos de SQL Server 2005 y versiones posteriores se pueden adjuntar a SQL Server 2012. Si el nivel de compatibilidad de una base de datos es menor que 90, el nivel de compatibilidad cambiará al nivel 90 cuando la base de datos se adjunte a SQL Server 2012.

La primera vez que se adjunta una base de datos o se restaura en una instancia nueva de SQL Server, aún no se ha almacenado una copia de la clave maestra de la base de datos (cifrada por la clave maestra de servicio) en el servidor. Debe usar la instrucción OPEN MASTER KEY para descifrar la clave maestra de la base de datos (DMK). Una vez que se ha descifrado la clave maestra de la base de datos, tiene la posibilidad de habilitar el descifrado automático en el futuro usando la instrucción ALTER MASTER KEY REGENERATE para proporcionar al servidor una copia de la clave maestra de la base de datos cifrada con la clave maestra de servicio (SMK). Cuando una base de datos se haya actualizado 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 acerca de cómo volver a generar la DMK, vea ALTER MASTER KEY (Transact-SQL). 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. Solo es necesario volver a generar la DMK una vez y no tiene ningún efecto sobre las nuevas generaciones futuras como parte de una estrategia de rotación de claves.

Permisos

Para obtener información acerca de cómo se administran los permisos cuando se adjunta una base de datos, vea CREATE DATABASE (Transact-SQL).

Ejemplos

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

EXEC sp_attach_db @dbname = N'AdventureWorks2012', 
    @filename1 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf', 
    @filename2 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';

Vea también

Referencia

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_removedbreplication (Transact-SQL)

Procedimientos almacenados del sistema (Transact-SQL)

Conceptos

Adjuntar y separar bases de datos (SQL Server)