Tengo una base de datos en dev (SQL Server 2005 en Windows Server 2008) que necesito mover a prod (SQL Server 2000 en Windows Server 2003). Mi proceso es el siguiente:
- Inicie sesión en dev, abra SQL Server Management Studio
- Haga clic derecho en la base de datos | Tareas | Apoyo. Mantenga todas las opciones predeterminadas (copia de seguridad completa, etc.)
- Mueva el archivo .bak localmente a prod (sin unidad de red), inicie sesión en prod, abra el Administrador corporativo de SQL Server.
- Haga clic derecho en el nodo Bases de datos | Todas las tareas | Restaurar base de datos.
- Cambie Restaurar como base de datos para reflejar el mismo nombre de base de datos.
- Haga clic en el botón de opción "Desde el dispositivo". Haga clic en 'Seleccionar dispositivos'
- Haga clic en Restaurar desde: Agregar ..., busque el archivo .bak (pequeño, solo 6 MB)
Ahora estoy listo para restaurar la base de datos, así que hago clic en Aceptar y aparece el siguiente error:
"La familia de medios en el dispositivo 'E: ... bak' está formada incorrectamente. SQL Server no puede procesar esta familia de medios. RESTORE DATABASE está finalizando de manera anormal".
Este error es inmediato.
He intentado algunas variaciones diferentes de esto: restaurar la máquina db a dev con un nombre db diferente y nombres de archivo de registro (donde se originó), crear una base de datos vacía con la misma ruta física a los archivos antes e intentar restaurar eso, haciendo algunos archivos .bak diferentes y asegurándose de que se verifiquen antes de subirlos a productos. Sé de hecho que el directorio para los archivos .mdf y .ldf existe en prod, aunque los archivos en sí mismos no existen. Si, antes de hacer clic en Aceptar para restaurar, vaya a la pestaña de opciones, aparece el siguiente error:
Error 3241: la familia de medios en el dispositivo 'E: ... bak' está formada incorrectamente. SQL Server no puede procesar esta familia de medios. RESTORE FILELIST está finalizando de manera anormal.
Alguien tiene alguna idea brillante?
Respuestas:
Los encabezados de respaldo en MSSQL2008 son diferentes a los de MSSQL2005, que probablemente sea la fuente de su problema. Intente exportar la base de datos en lugar del paradigma de copia de seguridad y restauración, o configure MSSQL2008 en su servidor DEV.
fuente
Como dice Mike Dimmick: SQL 2000 no reconocerá las copias de seguridad de SQL 2005 (como Word 2000 no reconocería los archivos DOCX de 2007). Por lo tanto, tendrá que migrar sus datos en un formato de denominador común más bajo, como los scripts SQL. Pruebe el Asistente de publicación de base de datos que forma parte del Kit de herramientas de alojamiento de SQL Server que genera un único archivo SQL para el esquema y los datos.
fuente
Puede mover las copias de seguridad hacia adelante en la familia de SQL Server, es decir, 2000 a 2005 o 2008, pero no hacia atrás: no puede restaurar una copia de seguridad de SQL Server 2005 en SQL Server 2000.
fuente
Es posible que sea un problema de permisos que evite que el archivo se cree cuando intente restaurar. Intente crear una nueva base de datos en el destino con el mismo nombre que desee y luego restaure por encima.
Además, si está intentando restaurar la copia de seguridad desde un disco duro externo o un recurso compartido de red, intente copiar el archivo de copia de seguridad en la máquina local antes de intentar la restauración.
fuente
De manera predeterminada, hay dos exploradores de objetos de SQL Server 2005. Supongo que está intentando en el objeto servidor / sqlexpress. Intenta restaurar a otro.
fuente
(Suspiro aliviado.) Ahhhhh, ese es el problema.
Tengo SQL Server 2008 SP1 ejecutándose en una PC remota. Realicé una copia de seguridad de su base de datos, pero no pude obtener mi copia local de SQL Server 2008 para restaurar desde el archivo .bak.
Como dice [Yini], esto se debió a mi copia de SQL Server 2008 abriendo mi instancia de SQL Server 2005 en mi PC local, en lugar de mi instancia de SQL Server 2008. Genio.
Y estoy completamente de acuerdo con [Yini]: es justo que no pueda restaurar una copia de seguridad de SQL Server 2008 en una instancia de 2005, pero Microsoft podría, al menos, darnos un mensaje de error decente.
"La familia de medios en el dispositivo 'D: \ DatabaseBackup_21_02_2011.bak' está formada incorrectamente. SQL Server no puede procesar esta familia de medios".
Mi copia de seguridad no se formó incorrectamente. Simplemente no se puede restaurar en una instancia de SQL Server 2005 , incluso cuando estoy ejecutando SQL Server 2008 SP1.
¿Es realmente tan difícil poner esto en un mensaje de error ............?
fuente
Algunas reflexiones:
¿Aproximadamente de qué tamaño es la base de datos que está restaurando?
El único artículo de soporte sobre este error es para SQL 2000 y habla sobre archivos de registro grandes. Si bien no está en SQL 2000, puede ser útil intentar reducir el tamaño de los registros primero si son particularmente grandes.
¿Puede restaurar la base de datos en su servidor Dev (como un nombre de base de datos diferente, a diferentes archivos)? Eso probaría si el archivo en sí está bien en lo que respecta a SQL 2005.
¿Puede restaurar cualquier otra base de datos de ese servidor Dev a Prod?
fuente
Hola a todos, como Mike sugiere que recomendaría el Asistente de publicación de base de datos, hace un trabajo hermoso.
Aquí hay una solución que utilicé inicialmente que no sugeriría por completo: parece un poco gueto .
1) Cree el db en prod, cree un usuario de db con los derechos adecuados, abra el puerto en su firewall que permite el acceso remoto
2) Desde dev en SQL Server Management Studio, haga clic con el botón derecho en db -> tareas -> exportar datos. Al seleccionar el destino, asegúrese de especificar el puerto xxx.xxx.xxx.xxx, 1764.
3) Seleccione todas las tablas para transferir, haga clic en las siguientes 100 veces y listo.
ADVERTENCIA: Esto no copia sobre procedimientos almacenados.
ADVERTENCIA: Esto no copia sobre identidades para columnas int
ACTUALIZACIÓN: Parece que no puede ir de 2005 a 2000. Encontré el siguiente texto de enlace de publicación : parece que puede usar mis métodos anteriores, pero también desea escribir todos los objetos y luego ejecutarlos en 2000.
fuente