Tengo algunos .bak
archivos 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.
Tengo algunos .bak
archivos 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.
Respuestas:
Esto es lo que sugiero:
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 .
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:
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.
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 ( IDENTITY
vs. SEQUENCE
Postgres no sabe nada, NVARCHAR
ya que configura la codificación en la base de datos). Postgres no sabe nada CREATE CLUSTERED INDEX
( CLUSTER
puede funcionar para usted). Finalmente, como veo en los comentarios que vas a usar datos espaciales, postgresql no sabe nada de CREATE SPATIAL INDEX
sintaxis. Deberá instalar postgis y usar la INDEXTYPE
palabra clave para crear índices espaciales. Finalmente, asegúrese de manejar los esquemas adecuadamente.
Larga historia corta: