restore log sql server
¿Cómo restaurar una base de datos de SQL Server 2012 a SQL Server 2008 R2? (10)
Estoy tratando de restaurar la copia de seguridad tomada de un SQL Server 2012 a SQL Server 2008 R2, y estoy dando un error
El elenco especificado no es válido. (SqlManagerUI)
Si tiene alguna solución a esto, por favor haga un comentario.
Gracias.
Aquí hay otra opción que hizo el truco para mí: https://dba.stackexchange.com/a/44340
Allí utilicé la opción B Esta no es mi idea, por lo que todo el crédito va al autor original. Lo estoy poniendo aquí también porque sé que a veces los enlaces no funcionan y se recomienda tener la historia completa a la mano.
Solo un consejo de mi parte: primero resuelva las incompatibilidades del esquema, si las hay. Entonces verter los datos debería ser una brisa.
Opción A : Script out de la base de datos en modo de compatibilidad usando la opción Generar script:
Nota: Si realiza un script de la base de datos con esquema y datos, dependiendo del tamaño de sus datos, el script será masivo y no será manejado por SSMS, sqlcmd o osql (también podría estar en GB).
Opción B :
Primero guarde las tablas primero con todos los Índices, FK, etc. y cree tablas en blanco en la base de datos de destino - opción con SOLO SCHEMA (sin datos).
Usa BCP para insertar datos
I. BCP fuera de los datos utilizando el siguiente script. Establezca SSMS en modo de texto y copie la salida generada por el siguiente script en un archivo bat.
-- save below output in a bat file by executing below in SSMS in TEXT mode
-- clean up: create a bat file with this command --> del D:/BCP/*.dat
select ''"C:/Program Files/Microsoft SQL Server/100/Tools/Binn/bcp.exe" '' /* path to BCP.exe */
+ QUOTENAME(DB_NAME())+ ''.'' /* Current Database */
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+''.''
+ QUOTENAME(name)
+ '' out D:/BCP/' /* Path where BCP out files will be stored */
+ REPLACE(SCHEMA_NAME(schema_id),'' '','''') + ''_''
+ REPLACE(name,'' '','''')
+ ''.dat -T -E -SServerName/Instance -n'' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> ''sysdiagrams'' /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> ''unwantedschema'' */ /* Optional to exclude any schema */
order by schema_name(schema_id)
II. Ejecute el archivo bat que generará los archivos .dat en la carpeta que ha especificado.
III. Ejecute el script de abajo en el servidor de destino con SSMS de nuevo en modo de texto.
--- Execute this on the destination server.database from SSMS.
--- Make sure the change the @Destdbname and the bcp out path as per your environment.
declare @Destdbname sysname
set @Destdbname = ''destinationDB'' /* Destination Database Name where you want to Bulk Insert in */
select ''BULK INSERT ''
/*Remember Tables must be present on destination database */
+ QUOTENAME(@Destdbname) + ''.''
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))
+ ''.'' + QUOTENAME(name)
+ '' from ''''D:/BCP/' /* Change here for bcp out path */
+ REPLACE(SCHEMA_NAME(schema_id), '' '', '''') + ''_'' + REPLACE(name, '' '', '''')
+ ''.dat'''' with ( KEEPIDENTITY, DATAFILETYPE = ''''native'''', TABLOCK )''
+ char(10)
+ ''print ''''Bulk insert for '' + REPLACE(SCHEMA_NAME(schema_id), '' '', '''') + ''_'' + REPLACE(name, '' '', '''') + '' is done... ''''''
+ char(10) + ''go''
from sys.tables
where is_ms_shipped = 0
and name <> ''sysdiagrams'' /* sysdiagrams is classified my MS as UserTable and we dont want it */
--and schema_name(schema_id) <> ''unwantedschema'' /* Optional to exclude any schema */
order by schema_name(schema_id)
IV. Ejecute la salida usando SSMS para insertar datos nuevamente en las tablas.
Este es un método BCP muy rápido, ya que utiliza el modo nativo.
Como ya se mencionó, no puede usar las funciones "Copia de seguridad" y "Restaurar" para pasar de una base de datos de SQL Server 2012 a una base de datos de SQL Server 2008. Sin embargo, un programa que escribí, SQL Server Scripter , se conectará a una base de datos de SQL Server y creará una base de datos, su esquema y sus datos. Puede ser git clonado desde BitBucket y compilado con Visual Studio 2010 o posterior (si es una versión posterior, solo abra el .csproj
).
Fusionar la replicación. Puede crear el suscriptor (2008) desde el distribuidor (2008). Una vez que la base de datos se haya sincronizado por completo, descarte la suscripción y la publicación.
Haga clic derecho en su base de datos y seleccione Tareas -> Generar secuencias de comandos
Seleccione las cosas que desea restaurar o simplemente deje que la base de datos completa se seleccione de forma predeterminada.
Ahora haga clic en Siguiente -> Haga clic en Avanzado y seleccione ''Script para la versión del servidor'' a la ''versión ssms'' que desea restaurar como 2008 o 2008 R2 u otra.
También, seleccione ''tipo de datos a secuencia de comandos'' a ''Esquema y datos''
Finalmente, ejecute este archivo .sql en ssms de destino y cambie el nombre de la base de datos en la primera base de datos de uso de línea
Si la base de datos no está allí, cree una y si aparece un error al ejecutar el script, ejecute el script desde la palabra clave para completar la parte inferior.
La única forma integrada de " degradar " una base de datos de una versión de SQL Server a una inferior es la forma más difícil: haga un script de toda la base de datos, el esquema y los datos, luego ejecute el script en el servidor de destino.
Esto es factible pero tiende a ser brutal.
No puede, NUNCA puede restaurar desde una versión superior a una versión inferior de SQL Server. Su única opción es realizar un script de la base de datos y luego transferir los datos a través de SSIS, BCP, un servidor vinculado o la creación de scripts de los datos.
Para: Killercam Gracias por sus soluciones. Probé la primera solución durante una hora, pero no funcionó para mí.
Usé el método de generación de scripts para mover datos de SQL Server 2012 a SQL Server 2008 R2 como se detalla a continuación:
En el 2012 SQL Management Studio.
- Tareas -> Generar secuencias de comandos (en la primera pantalla del asistente, haga clic en Siguiente - puede que no aparezca)
- Elija Script toda la base de datos y todos los objetos de la base de datos -> Siguiente
- Haga clic en el botón [Avanzado] 3.1 Cambie [Tipos de datos a secuencia de comandos] de "Solo esquema" a "Esquema y datos" 3.2 Cambie [Secuencia de comandos para la versión del servidor] "2012" a "2008"
- Finalice los siguientes pasos del asistente para crear un archivo de script
- Use sqlcmd para importar el archivo de script exportado a su SQL Server 2008 R2 5.1. Abra la línea de comandos de Windows 5.2 Escriba [sqlcmd -S -i Ruta a su archivo] (Ejemplo: [sqlcmd -S localhost -i C: / mydatabase.sql])
Esto funciona para mi.
Si está en la misma red, agregue el servidor de destino al estudio de administración de MS Server usando la opción de conexión y luego intente exportar desde el origen al destino. La forma más fácil :)
¡NOTA, ALGUNAS DE LAS RESPUESTAS ANTERIORES SON MASIVAMENTE DESCUENTADAS! ESTO SE PUEDE HACER Y TODO DENTRO DEL ESTUDIO DE ADMINISTRACIÓN DEL SERVIDOR SQL (SQL MS)
Existen numerosos métodos que puede adoptar para "degradar" una base de datos, pero uno que he encontrado recientemente y que creo que no se encontró en las primeras versiones de SQL MS 2012, es el Asistente para copiar bases de datos. Aquí es cómo puede copiar una base de datos de una instancia de servidor 2012 a una instancia de 2008 R2:
En la instancia de 2012, haga clic con el botón derecho en la base de datos que desea copiar / "degradar" y seleccione "Tareas"> "Copiar base de datos ...".
"Bienvenido al Asistente para copiar bases de datos", haga clic en [Siguiente].
"Seleccionar un servidor de origen": establezca el "servidor de origen" como la instancia de 2012 (o la instancia del servidor de la versión superior) y configure la autenticación apropiada. haga clic en Siguiente]. [Nota. los servicios del Agente del servidor deben estar ejecutándose]
"Seleccione un servidor de destino:" Configure el "Servidor de destino" como el 2008 R2 (o una instancia de la versión inferior), y configure la autenticación apropiada. haga clic en Siguiente]. [Nota. los servicios del Agente del servidor deben estar ejecutándose]
"Seleccione el método de transferencia" Para este ejemplo, seleccione "Usar el método del objeto de administración de SQL", haga clic en [Siguiente].
Seleccione para mover o copiar las bases de datos requeridas, haga clic en [Siguiente].
Configure la ruta de la base de datos de destino y los nombres lógicos, etc. Seleccione la opción requerida si existe la base de datos. Haga clic en Siguiente].
Configure el paquete de servicios de integración, haga clic en [Siguiente].
Para este ejemplo, seleccione la opción "Ejecutar inmediatamente" para las opciones "Programar el paquete", haga clic en [Siguiente].
"Complete the Wizard", haga clic en [Finalizar] para ejecutar el paquete y crear la base de datos "degradada".
Terminaste, días felices. :]
Otro método que encontré fue el Asistente para la migración de bases de datos SQL, creado por Microsoft y que creo (no sé) desde el que se creó el asistente anterior. Consíguelo aquí http://sqlazuremw.codeplex.com/ . Para usar este paquete para migrar una base de datos de SQL Server 20012 a 2008 R2, puede hacer lo siguiente:
Nota. Microsoft ahora ha eliminado SQLAzureMW de Codeplex. Yo personalmente lo he hecho disponible here
Ejecute SQLAzureMW.exe.
Seleccione el botón de opción Analizar / Migrar en el lado derecho de la ventana principal.
Seleccione el servidor de destino como "Última versión de servicio de la base de datos SQL (V12)". Haga clic en Siguiente].
Conéctese a la instancia de SQL Server 2012. El nombre del servidor para mi máquina es "VAIOE / SQLSERVER2012", use la autenticación de Windows, seleccione "Base de datos maestra (enumerar todas las bases de datos)" de las opciones de la base de datos y "Guardar información de inicio de sesión". Haga clic en [Conectar].
Seleccione la base de datos requerida para migrar [use la base de datos de informes GVH por ahora]. Haga clic en Siguiente].
Seleccione "Script todos los objetos de base de datos".
Haga clic en [Avanzar] y cambie las siguientes opciones:
a. En General, establezca "Servidor de destino" en "Servidor SQL".
segundo. En "Opciones de tabla / vista", configure "Script Table / Data" en "Table Schema with Data". Establezca "Procedimientos almacenados del motor de base de datos" en "Verdadero". Establezca "Funciones de seguridad", "Procedimientos almacenados de seguridad" y "Funciones del sistema" en "Verdadero".
Haga clic en Aceptar]. Haga clic en Siguiente].
Revise sus selecciones. Haga clic en Siguiente].
Se le preguntará "¿Listo para generar un script?", Haga clic en [Sí]. Esto iniciará la generación del script. Una vez hecho esto, haga clic en [Siguiente].
Ahora obtendrás otro diálogo de conexión. Esta vez, seleccione la base de datos en el servidor de destino (la instancia de SQL Server 2008 R2). Seleccione la base de datos maestra para que pueda elegir la base de datos de destino. Haga clic en [Conectar].
Ahora, es probable que desee migrar a una nueva base de datos, así que haga clic en [Crear base de datos].
Ingrese un nombre de destino de la base de datos y deje la "Intercalación" como "", esto no nos concierne. Haga clic en [Crear base de datos]. Haga clic en Siguiente].
Ahora se le preguntará "¿Ejecutar script en el servidor de destino?", Haga clic en [Sí].
Ahora se activará y hará un montón de cosas, configurando el esquema utilizando el script generado, pero a diferencia del método anterior, los datos se cargan de forma masiva utilizando BCP, que es increíblemente rápido. Todo esto también se realiza internamente, por lo que no hay generación de archivos de script .sql masivos, etc.
Haga clic en [Salir].
Estás listo. Ahora, si abre Management Studio y se conecta a las instancias de SQL Server 2012 y 2008 R2 con las que acabamos de trabajar, puede ver que el esquema de la base de datos de origen de 2012 coincide con la base de datos de destino que se acaba de crear.
Los dos procesos anteriores son casi idénticos y proporcionan la misma funcionalidad. No realizaría este último a menos que necesite migrar específicamente a Azure o el método 1 falle para usted.
Espero que ésto ayude a alguien.
No podrás restaurar desde 2012
hasta 2008
. Podrá usar una herramienta como red-gate SQL compare
para copiar el esquema, etc. (siempre que no se use nada específico de 2012). Si también tiene datos para copiar, puede usar su herramienta de Data Compare
, y creo que obtiene una prueba gratuita de 14 días.