Una base de datos desde una versión anterior de SQL Server, se convierte en inservible cuando se adjunta a una instancia de SQL Server 2012

Seleccione idioma Seleccione idioma
Id. de artículo: 2710782 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente:
  • Instale una instancia de Microsoft SQL Server 2005, de Microsoft SQL Server 2008 o de Microsoft SQL Server 2008 R2.
  • La instancia de SQL Server se denomina INST1 y aloja una base de datos que se denomina Test_RO_FG_DB.
  • La base de datos contiene los siguientes grupos de archivos:
    • Principal
    • RO_FG
    • RW_FG
  • El grupo de archivos llamado RO_FG se marca como READ_ONLY.
  • Instalar una nueva instancia de Microsoft SQL Server 2012. Esta instancia de SQL Server 2012 se denomina INST2.
  • Separar la base de datos Test_RO_FG_DB INST1.
  • Volver a conectar la base de datos de Test_RO_FG_DB a INST2.
  • Recibirá un mensaje de error similar al siguiente:
    Msj 3415, nivel 16, estado 2, línea 1
    No se puede actualizar la base de datos 'Test_RO_FG_DB' porque es de sólo lectura tiene archivos de sólo lectura o el usuario no tiene permisos para modificar algunos de los archivos. Convertir la base de datos o archivos grabable y, a continuación, vuelva a ejecutar la recuperación.
  • Intente volver a adjuntar la base de datos Test_RO_FG_DB INST1.
En este escenario, no se puede volver a adjuntar la base de datos INST1. Y recibe el mensaje de error siguiente en el registro de errores de SQL Server:

2012-05-03 22:55:45.37 spid52 iniciando la base de datos 'Test_RO_FG_DB'.
2012-05-03 22:55:45.78 spid52 * *******************************************************************************
2012-05-03 22:55:45.78 spid52 * comenzar el volcado de pila:
2012-05-03 22:55:45.78 spid52 * 03/05/12 22: 55: 45 spid 52
2012-05-03 22:55:45.78 spid52 * ubicación: logscan.cpp:1490
2012-05-03 22:55:45.78 spid52 * expresión: FALSE
2012-05-03 22:55:45.78 spid52 * SPID: 52
2012-05-03 22:55:45.78 spid52 * ID. de proceso: 9156
2012-05-03 22:55:45.78 spid52 * Descripción: valor de modificador no válido
2012-05-03 22:55:45.78 spid52 * bytes de entrada búfer 98 -
2012-05-03 22:55:45.78 spid52 * modificar Test_RO_FG_DB establecido en línea de base de datos
2012-05-03 22:55:51.05 spid52 Error: 17065, gravedad: 16, estado: 1.
2012-05-03 22:55:51.05 spid52 SQL Server aserción: archivo: <logscan.cpp>, línea = error de aserción de 1490 = valor de modificador no válido 'FALSE'. Este error puede ser relacionados con el tiempo. Si el problema persiste después de volver a ejecutar la instrucción use DBCC CHECKDB para comprobar la integridad estructural de la base de datos o reinicie el servidor para asegurarse de que las estructuras de datos en memoria no están dañadas.
Error de spid52 de 22:55:51.10 de 2012-05-03: 3624, gravedad: 20, estado: 1.
Error de comprobación de aserción de 2012-05-03 22:55:51.10 spid52 a sistema. Compruebe el registro de errores de SQL Server para obtener más información. Normalmente, un error de aserción se debe a una corrupción de datos o errores de software. Para comprobar si hay daños en la base de datos, considere la posibilidad de ejecutar DBCC CHECKDB. Si has aceptado enviar volcados a Microsoft durante la instalación, se enviará un mini volcado a Microsoft. Una actualización esté disponible en el último Service Pack o en un QFE del soporte técnico de Microsoft.
Error de spid52 de 22:56:09.16 de 2012-05-03: 3414, gravedad: 21, estado: 1.
se ha producido un error en 2012-05-03 22:56:09.16 spid52 un error durante la recuperación, impide que reiniciar la base de datos 'Test_RO_FG_DB' (base de datos ID 19). Diagnosticar los errores de recuperación y corregirlos o restaurar desde una copia de seguridad correcta. Si no se corrige errores o se espera, póngase en contacto con el soporte técnico.
Error de spid52 de 22:56:09.18 de 2012-05-03: 928, gravedad: 20, estado: 1.
2012-05-03 22:56:09.18 spid52 durante la actualización, la excepción de base de datos provoca 926, gravedad 14, estado 1, la dirección 0000000000F6A971. Utilice el número de excepción para determinar la causa.</logscan.cpp>


Nota Este problema sólo se produce cuando intenta adjuntar una base de datos que contiene un grupo de archivos que está marcado como READ_ONLY. Este problema no ocurre cuando se intenta mover una base de datos READ_ONLY en el que todos los datos se marca READ_ONLY.

Causa

Este problema se produce porque SQL Server 2012 no detecta el grupo de archivos de sólo lectura antes de empezar a actualizar la base de datos. Una vez iniciada la actualización, SQL Server 2012 escribe entradas en el registro de transacciones. Las versiones anteriores no pueden leer las nuevas entradas de registro de transacciones.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se refiere a:".

Solución

Información de actualización acumulativa

SQL Server 2012

La solución a este problema se publicó en primer lugar en la actualización acumulativa 2 para SQL Server 2012. Para obtener más información acerca de este paquete, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2703275 Paquete de actualización acumulativa 2 para SQL Server 2012
Nota Como las compilaciones son acumulativas, cada nueva versión de revisión contiene todas las revisiones y revisión de todas las revisiones incluidas en el anterior 2012 de SQL Server. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga esta revisión. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2692828 Se basa el 2012 de SQL Server que se publicaron después del lanzamiento de SQL Server 2012
Debe aplicar una revisión de 2012 de SQL Server a una instalación de SQL Server 2012.

Solución

Para evitar este problema, utilice uno de los métodos siguientes.

Método 1

Restaurar una copia de seguridad de la base de datos de INST1 en INST2.

Nota El problema que se describe en la sección "Síntomas" no se produce en SQL Server 2012 al restaurar una copia de seguridad de una versión anterior.

Método 2

Realizar una actualización in situ de la versión anterior de SQL Server a SQL Server 2012.

Método 3

Mover una base de datos que contiene un grupo de archivos de sólo lectura a una instancia de SQL Server 2012. Para ello, siga estos pasos.

Nota Realizar los pasos 4 a 11 en el servidor que ejecuta SQL Server 2012. Por ejemplo, realizar los pasos 4 a 11 en INST2.
  1. En INST1, separar la base de datos. Por ejemplo, separar la base de datos de Test_RO_FG_DB.
  2. Mueva los archivos de base de datos al servidor que hospeda la instancia de INST2.
  3. Al intentar adjuntar la base de datos a INST2. Ejemplo de código siguiente muestra cómo hacerlo:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH;
    GO
    Nota Recibirá el mensaje de error de 3425 que se menciona en la sección "Síntomas".
  4. En el símbolo del sistema, cambie el nombre de los archivos de base de datos. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  5. En SQL Server Management Studio, cree una base de datos que tiene el mismo nombre y la estructura física como la base de datos que desea adjuntar. Ejemplo de código siguiente muestra cómo hacerlo:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  6. Establecer la base de datos sin conexión. Para ello, ejecute el siguiente comando:
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  7. En el símbolo del sistema, cambie el nombre de los archivos de la base de datos. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  8. En el símbolo del sistema, cambie el nombre de los archivos de base de datos que movió en el paso 2. Cambiar el nombre de los archivos para que coincida con la base de datos que creó en el paso 4. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  9. Establece la base de datos como en línea. Para ello, ejecute el siguiente comando:
    ALTER DATABASE [Test_RO_FG_DB] SET ONLINE
    GO
  10. Compruebe que la base de datos está en línea y restablecer la funcionalidad de Service Broker.
  11. Elimine los archivos de base de datos que no son necesarios. El comando de ejemplo siguiente muestra cómo hacerlo:
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf
Método 4

Volver a adjuntar una base de datos que contiene un grupo de archivos de sólo lectura a la instancia anterior de SQL Server. Para ello, siga estos pasos.

Notas
  • La base de datos también contiene nuevas entradas de registro de transacciones de la actualización incorrecta.
  • Realizar los pasos 3 a 10 en el servidor que ejecuta una versión anterior de SQL Server. Por ejemplo, realizar los pasos 3 a 10 en INST1.

  1. Mueva los archivos de base de datos a la instancia de SQL Server que aloja INST1.
  2. Al intentar adjuntar la base de datos a INST1. Ejemplo de código siguiente muestra cómo hacerlo:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH
    GO
    Nota Recibirá el mensaje de error 3624 que se menciona en la sección "Síntomas". También recibirá un mensaje de error de 1813.
  3. En el símbolo del sistema, cambie el nombre de los archivos de base de datos en INST1. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  4. En SQL Server Management Studio, cree una base de datos que tiene el mismo nombre y la estructura física como la base de datos que desea adjuntar. Ejemplo de código siguiente muestra cómo hacerlo:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  5. Establecer la base de datos sin conexión. Para ello, ejecute el siguiente comando:
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  6. En el símbolo del sistema, cambie el nombre de los archivos de la base de datos. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  7. En el símbolo del sistema, cambie el nombre de los archivos de base de datos que movió en el paso 2. Cambiar el nombre de los archivos para que coincida con la base de datos que creó en el paso 4. El comando de ejemplo siguiente muestra cómo hacerlo:
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  8. Establecer la base de datos en modo de emergencia y realizar una reparación. Para ello, ejecute el siguiente comando.

    Nota Se vuelven a generar los registros de transacciones de base de datos durante este paso. Esto puede producir pérdida de datos. Por lo tanto, se recomienda hacer copia de seguridad de la base de datos antes de realizar este paso.
    ALTER DATABASE Test_RO_FG_DB SET EMERGENCY
    GO
    ALTER DATABASE Test_RO_FG_DB SET SINGLE_USER
    GO
    DBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGS
    GO
    ALTER DATABASE Test_RO_FG_DB SET MULTI_USER
    GO
  9. Compruebe que la base de datos está en línea y restablecer la funcionalidad de Service Broker.
  10. Elimine los archivos de base de datos que no son necesarios. El comando de ejemplo siguiente muestra cómo hacerlo:
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf

Más información

Hay varios pasos que se producen cuando una base de datos está asociado a una instancia de SQL Server. Estos pasos incluyen la recuperación de la base de datos y actualizar los archivos de versiones anteriores de SQL Server.

En el número que se describe en la sección "Síntomas", SQL Server 2012 empieza el proceso de actualización antes de que se detectan los archivos de sólo lectura en la base de datos. Los pasos de actualización incluyen iniciar una transacción para borrar el bit "cerrado" en la página de inicio de la base de datos. Las versiones anteriores de SQL Server no pueden leer el registro de transacciones de begin. Por lo tanto, la base de datos no es utilizable en versiones anteriores de SQL Server y SQL Server se genera el error 3624.

Actualizaciones de in situ cuando una base de datos está marcada como de sólo lectura

Al realizar una actualización in situ de una instancia de SQL Server que contiene una base de datos de sólo lectura que se denomina Test_RO_DB a SQL Server 2012, puede recibir mensajes de error similares a los siguientes en el registro de errores de SQL Server:

spid19s de 21:03:59.23 de 2012-05-04 iniciando la base de datos 'Test_RO_DB'.
base de datos 2012-05-04 21:03:59.56 spid19s convertir de 'Test_RO_DB' de versión 661 a la versión actual 706.
Error de spid19s de 21:03:59.56 de 2012-05-04: 928, gravedad: 20, estado: 1.
2012-05-04 21:03:59.56 spid19s durante la actualización, la base de datos provoca la excepción 3415, severity 16, estado 1, 000007FEE66D784A de dirección. Utilice el número de excepción para determinar la causa.
Error de spid19s de 21:03:59.61 de 2012-05-04: 3415, gravedad: 16, estado: 1.
2012-05-04 21:03:59.61 spid19s no se puede actualizar la base de datos 'Test_RO_DB' porque es de sólo lectura tiene archivos de sólo lectura o el usuario no tiene permisos para modificar algunos de los archivos. Convertir la base de datos o archivos grabable y, a continuación, vuelva a ejecutar la recuperación.


Al final del proceso de actualización, la base de datos de Test_RO_DB será en el estado RECOVERY_PENDING. Debe utilizar el comando ALTER DATABASE para establecer la base de datos en READ_WRITE. A continuación, utilice el comando ALTER DATABASE para establecer la base de datos READ_ONLY. Esto permite que el motor de SQL Server actualizar la base de datos a la versión correcta.

Actualizaciones in situ cuando una base de datos de lectura y escritura contiene grupos de archivos que están marcados como de sólo lectura

Al realizar una actualización in situ a 2012 de SQL Server, puede recibir mensajes similares a los siguientes en el registro de errores de SQL Server. Este problema se produce cuando la instancia anterior de SQL Server aloja una base de datos de lectura y escritura y contiene los grupos de archivos que están marcados READ_ONLY. Sin embargo, finalice el proceso de actualización como se esperaba, y la base de datos se inicia en línea.

Nota En el siguiente mensaje de error, la base de datos se denomina Test_RO_FG:

spid18s de 21:03:59.23 de 2012-05-04 iniciando la base de datos 'Test_RO_FG'.
base de datos 2012-05-04 21:03:59.71 spid18s convertir de 'Test_RO_FG' de versión 661 a la versión actual 706.
2012-05-04 21:03:59.71 spid18s 'Test_RO_FG' con el paso de actualización de versión 661 a versión 668 de la base de datos.



Propiedades

Id. de artículo: 2710782 - Última revisión: lunes, 18 de junio de 2012 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2012 Enterprise
Palabras clave: 
kbsurveynew kbprb kbtshoot kbmt KB2710782 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 2710782

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com