¿Puedo restaurar un archivo .bak de SQL Server sin SQL Server?

16

Tengo algunos .bakarchivos grandes de un volcado de SQL Server 2005.

¿Puedo restaurarlos sin usar SQL Server, ya sea en PostgreSQL, MySQL o en archivos de texto sin formato?

Una solución de código abierto sería de gran utilidad.

Abe
fuente
1
"Preferiría no tener que hacerlo solo para esta tarea". Por qué no? Es la forma de hacer lo que intentas hacer.
swasheck
¿Restaurar algo más tiene sentido? ¿Qué quieres hacer con los datos resultantes?
Philᵀᴹ
1
@ Phil Me gustaría mover los datos resultantes a una base de datos PostgreSQL, o incluso archivos de texto sin formato.
Abe
1
@swasheck Eliminé la línea citada, ya que parece haber restado importancia a la pregunta. Pero para responder a su pregunta, porque no tengo idea de cómo usarla, y mi servidor ejecuta Linux. Una computadora portátil con Windows disponible no tiene suficiente espacio.
Abe
2
Bueno, esa es información que no teníamos antes ahora :). Gracias por la información adicional - Tengo un plan
swasheck

Respuestas:

19

Esto es lo que sugiero:

  1. construya una máquina virtual con Windows, con suficiente espacio en disco para guardar la copia de seguridad. Copie el archivo de copia de seguridad allí. Si aún no tiene la capacidad de construir máquinas virtuales, puede hacerlo con productos gratuitos como Oracle VirtualBox .
  2. descargue e instale la edición de evaluación de SQL Server . Asegúrese de incluir tanto el motor de base de datos como las Herramientas de administración - Completo.
  3. si la VM tiene suficiente espacio para guardar la copia de seguridad pero no suficiente para restaurarla, puede realizar una "restauración virtual" utilizando la versión de prueba de un producto de Red-Gate con el mismo nombre (que le permite interactuar con el archivo de respaldo como si hubiera sido restaurado). De lo contrario, restaure la base de datos de la manera normal .

  4. Una vez que la base de datos esté disponible (ya sea a través de una restauración normal o virtual), puede generar scripts para el esquema y los datos de la siguiente manera:

    • Abra Management Studio y conéctese a su instancia.
    • Abra el Explorador de objetos.
    • Haga clic con el botón derecho en la base de datos recién restaurada, elija Tareas> Generar secuencias de comandos ...
    • Haga clic en Siguiente, haga clic en Siguiente
    • En la página "Elegir opciones de script", desplácese hacia abajo y establezca "Datos de script" en True
    • Haga clic en Siguiente
    • Verifique todos los objetos relevantes y haga clic en Siguiente
    • Marque las tablas que desee y haga clic en Siguiente
    • Elija guiar a un archivo. Ahora tendrá un archivo que contiene todos sus objetos y datos usando la sintaxis de inserción de SQL Server, tendrá que jugar con la salida para obtenerlo en un formato que funcione para Postgres (no estoy al tanto de ninguna diferencia de sintaxis menor).

Alternativamente, puede intentar jugar con la utilidad bcp para extraer datos a archivos CSV o similares, pero tendrá que hacer esto tabla por tabla o usar algunos scripts inteligentes (PowerShell, T-SQL, C # / SMO, etc. ) para generar todos los comandos bcp por usted. Una vez en los archivos CSV, debería ser trivial cargar en masa los datos en Postgres (pero aún tendrá algo de trabajo para generar las tablas).

Como sugerencia final, si el archivo .bak no es descomunal y los datos no son confidenciales, estoy más que dispuesto a intentar generar archivos para usted en el formato que necesite. Tengo muchas máquinas virtuales de Windows con espacio, el desafío sería llevar el archivo .BAK a un lugar donde pueda recuperarlo, especialmente si es más grande que la mayoría de los servicios de intercambio de archivos.

Aaron Bertrand
fuente
+1 Iba a sugerir el método bcp una vez que llegara a una computadora. Algunos gotchas son delimitadores de tabla, IDENTITY (secuencia, en pg), nvarchar, solo por nombrar algunos. De lo contrario, esto es lo que habría sugerido (sin Red-Gate) en mi sección de edición.
swasheck
Hay 8 archivos .bak de 20 GB, y sería genial si pudieras ayudar, pero consulta las preguntas relacionadas en gis.se, gis.stackexchange.com/q/28281/3218 y gis.stackexchange.com/q/28257 / 3218 sobre la Base de datos de suelos del USDA (SSURGO). Actualmente es muy difícil usar el acceso a estos datos de manera automatizada para el modelado de simulación. Sería un gran beneficio para la ciencia tener estos datos en una estructura más útil. Puedes descargarlo desde mi servidor. Los datos no son confidenciales, cualquiera puede obtenerlos por $ 50 / CD o $ 100 / DVD o quizás menos de su agente de extensión.
Abe
Parece que tiene respuestas sobre cómo obtener los datos en GIS.SE. He ido y examinado esos sitios, pero no veo dónde especifican que el archivo es una copia de seguridad de SQL Server. ¿Cómo / de dónde obtuviste estos archivos?
swasheck
7

Desafortunadamente, no hay una forma de obtener acceso a los contenidos de un archivo .bak sin tener un conocimiento profundo de las partes internas del archivo en sí. Puedo pensar en una persona aquí que puede estar al tanto de esta información, pero no puedo hablar sobre si dicha persona le dirá o no cómo hacerlo.

Por lo tanto, necesitará instalar una instancia de SQL Server. También deberá asegurarse de que esta instancia pueda comunicarse con su servidor de Postgres (junto con pg_hba.conf) Una vez allí, tiene un par de buenas rutas para migrar los datos.

La primera ruta sería instalar el controlador ODBC de Windows de Postgres y configurar una conexión al servidor pg. Luego puede usar SSIS para crear una secuencia de comandos de una migración de datos. Si va a seguir esta ruta, le sugiero que instale SSIS cuando instale el servidor de la base de datos.

La otra opción también implica la conexión del controlador ODBC, pero puede crear un servidor vinculado en SQL Server y ejecutar inserciones en la instancia de pg a través de SQL Server. He respondido esta pregunta exacta aquí antes, así que no debería ser difícil de encontrar.

EDITAR

Para incorporar el comentario de Aaron, una vez que tenga SQL Server en funcionamiento, también puede exportar los datos a archivos planos de varias maneras diferentes. Si elige este camino, hágamelo saber y publicaré algunas formas de hacerlo

EDITAR (2):

El proceso del servidor vinculado puede no ser el mejor enfoque a menos que desee crear las estructuras de antemano. Es mi método preferido, pero generalmente ya tengo la estructura en su lugar en ambos lados.

Eso deja la respuesta de Aaron Bertrand como la mejor respuesta. Tenga en cuenta que, además de los tipos de datos ( IDENTITYvs. SEQUENCEPostgres no sabe nada, NVARCHARya que configura la codificación en la base de datos). Postgres no sabe nada CREATE CLUSTERED INDEX( CLUSTERpuede funcionar para usted). Finalmente, como veo en los comentarios que vas a usar datos espaciales, postgresql no sabe nada de CREATE SPATIAL INDEXsintaxis. Deberá instalar postgis y usar la INDEXTYPEpalabra clave para crear índices espaciales. Finalmente, asegúrese de manejar los esquemas adecuadamente.

Larga historia corta:

  1. Genere scripts y datos utilizando el método de Aaron Bertrand (probablemente me quedaría con el nivel de la tabla)
  2. Tome nota del índice DDL (si aún es válido), pero no lo incluya
  3. Cree índices en postgres una vez que la estructura y los datos estén en su lugar
swasheck
fuente
3
No creo que necesite configurar SQL Server para hablar con Postgres. Estoy seguro de que una vez que instale SQL Server, puede extraer los datos en una variedad de formatos que Postgres comprenderá.
Aaron Bertrand
Disculpas Quise decir que necesitaría configurar Postgres para aceptar conexiones externas (SQL Server en este caso)
swasheck
No te disculpes. :-) Estaba aclarando que no es necesario que SQL Server hable directamente con Postgres o viceversa.
Aaron Bertrand