He encontrado que BCP es más efectivo que algunas de las herramientas para obtener datos en una versión anterior de SQL Server y para extraer datos de RDS. (Gracias @ivan_posdeev.)
Primero genero el esquema haciendo clic derecho en la base de datos en SQL Server Management Studio, Tareas, Generar scripts. Marque todos los objetos, en los objetos avanzados, asegúrese de que todo lo que necesita se guionará (estadísticas, índices, etc.), desmarque "USAR base de datos" si su base de datos de destino tiene un nombre diferente, configure la compatibilidad con la versión de su base de datos de destino y genere un archivo que crea su esquema. Cree una base de datos en su destino y ejecute este archivo en ella (usando osql
, sqlcmd
o la GUI).
Para mover los datos, ejecute la siguiente consulta dos veces en la base de datos de origen , primero comentando la segunda columna para generar el archivo por lotes para extraer datos, luego comentando la primera columna para generar el archivo por lotes de importación para ejecutar en su destino. (Debe agregar sus servidores de origen y destino, nombres de instancia, directorios de archivos de salida y entrada, nombres de usuario y contraseñas. Para usar la seguridad integrada, reemplace las opciones -U
y -P
con solo-T
).
Esto es compatible con Unicode, si no lo necesita, cambie el -N
interruptor en ambas declaraciones a -n
.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
Después de ejecutar, compruebe los archivos llamados schema.tablename.ERRORS.dat: incluirá las filas que fallaron, vacías si no lo hizo.
Referencia de MSDN para BCP aquí , recorrido más amigable de las opciones de BCP aquí .
He encontrado esto muy superior a la generación de scripts, y cualquiera de las herramientas que he probado. También se ejecuta en bases de datos RDS (que no permiten copias de seguridad). Los archivos de datos generados tienen un 30% del tamaño de los scripts SQL, su ejecución lleva una fracción del tiempo y es mucho más confiable. (Las secuencias de comandos generadas por SQL Server para los datos de secuencias de comandos siempre se dispararon, a veces de manera predecible a veces no, el SQL generado no era compatible con 2008R2 (por ejemplo, usado nvarchar(0)
, a menudo no se completó sin razón aparente, etc. BCP también replica cualquier violación de restricciones , como la integridad referencial).