2012-05-09 28 views
32

He estado intentando pasar de un Servidor SQL normal en un Servidor Win2008 a Servidor SQL en Amazon AWS RDS.Migrar a Amazon SQL Server RDS

Pensé que una simple copia de seguridad y restauración funcionaría. Aunque AWS RDS no parece tener acceso a un sistema de archivos, todos los scripts sql parecen necesitar un sistema de archivos local en el servidor de origen y de destino. Intenté una secuencia de comandos siguiente

exec sp_addlinkedserver @server='test.xxxx.us-east-1.rds.amazonaws.com' 

-- Verify that the servers were linked (lists linked servers) 
exec sp_linkedservers 

EXEC ('RESTORE DATABASE [orchard] FROM DISK = ''C:\Temp\orchard.bak'' WITH FILE = 1, NOUNLOAD, STATS = 10') 
AT [test.xxxx.us-east-1.rds.amazonaws.com] 

Cualquier sugerencia sería útil.

+0

¿Está transfiriendo el esquema de la base de datos o necesita transferir datos también? – JeffO

+1

El hecho de que sea Amazon RDS no tiene en cuenta esto. Debe recordar que cada vez que accede a un sistema de archivos local, lo hace con respecto al motor de base de datos que ejecuta el T-SQL. En este caso, intenta restaurar un archivo desde la unidad C de la instancia de Amazon. Ese archivo no existe allí. Si es posible, suba su archivo allí de alguna manera o en un servidor donde pueda acceder a él a través de UNC.Sin embargo, no me sorprendería si esto no es posible con RDS. –

+0

Jeff O Data también. – darwindave

Respuesta

51

descargar el programa gratuito 'Asistente para la migración de SQL Azure' de CodePlex - Me hizo una breve blog/screencast sobre esto. Asegúrese de ajustar la 'A' el establecimiento del asistente para el nombre de AWS DNS y luego utilizar no 'SQL Server 2008' y 'SQL Azure'

+0

gracias Lynn. Lo tendré en cuenta para la próxima vez. – darwindave

+3

Supongo que Amazon no quiere vincular esto en sus documentos, pero es una forma MUCHO MÁS FÁCIL de migrar que lo que sugieren (que he perdido horas en horas anteriores) – petenelson

+2

alguien se coló en la referencia en la parte inferior de este foro/queja: https://forums.aws.amazon.com/message.jspa?messageID=442219#442219 – drzaus

3

Uso del asistente de exportación de SQL Server Management Studio en su base de datos fuente . Haga clic derecho en la base de datos> tareas> exportar datos. Hay un asistente que lo guía para enviar toda la base de datos a un servidor SQL remoto.

+0

esto es un problema porque las opciones predeterminadas no le dan un db de trabajo. al menos necesita ir a Herramientas de SMS-> Opciones-> Explorador de objetos de SQL Server-> Secuencias de comandos y establecer "Generar scripts para objetos dependientes" e "Índices de scripts" en verdadero antes de exportar. – jaminto

+0

Además, es lento. –

8

La palabra oficial que obtuve para el soporte de AWS en la migración de bases de datos SQL utilizando archivos .bak es que no es compatible. Así que no hay más restauración rápida de archivos .bak. Se ofrecieron la ayuda oficial para la migración de bases de datos existentes aquí:

Official AWS database migration guide

Y el también me dio un guiño oficial en la herramienta de migración de base de datos de Azure. Simplemente utilícelo para generar un script de su esquema o datos y ejecútelo contra su instancia de RDS. Es una buena herramienta. En primer lugar, deberá importar .bak a un servidor SQL que no sea RDS para hacerlo.

SQL Azure migration tool

+0

ahora puede restaurar desde un archivo .bak a RDS - http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html – jaminto

6

escribí algunas instrucciones paso a paso sobre how to restore a .bak file to RDS utilizando la herramienta de migración de SQL Azure basado en screencast de Lynn. Este es un método mucho más simple que las instrucciones oficiales, y funcionó bien para varias bases de datos que migré.

+0

Esta es en realidad una de las mejores maneras en que se encuentran, es una gran lástima que Amazon no admita la importación/exportación adecuada de copias de seguridad nativas comprimidas. Nuestro gerente de cuenta en Amazon es muy consciente de que este problema sabe que realmente molesta a la gente, pero no tenemos una idea clara de si será compatible alguna vez :( – Kram

+0

Me encontré con su publicación a través de Google. Funcionó perfectamente . Sorprendentemente perfectamente. ¡Gracias! – David

4

Probablemente encontrará que el formato BACPAC Data-tier Applications le proporcionará la solución más conveniente. Puede usar Export para producir un archivo que contenga tanto el esquema de la base de datos como los datos. Import creará una nueva base de datos que se completará con datos basados ​​en ese archivo.

En contraste con las operaciones Backup and Restore, Exportar e importar no requieren acceso al sistema de archivos del servidor de la base de datos.

Puede trabajar con archivos BACPAC utilizando SQL Server Management Studio o por medio de la API en .Net, Powershell, etc. MSBuild

Export Data-tier Application Dialog

Nota que hay cuestiones que utilizan este método para exportar e importar desde y hacia Amazon RDS. A medida que se crea una nueva base de datos en RDS, se crean los dos objetos siguientes dentro de ella.

  • Un usuario con membresía en el rol db_owner.
  • El rds_deny_backups_trigger gatillo

The rds_deny_backups_trigger Trigger

Durante la importación, habrá un conflicto entre los objetos incluidos en el archivo BACPAC y los que se añaden automáticamente por RDS. Estos objetos están presentes en el archivo BACPAC y RDS los crea automáticamente a medida que se crea la nueva base de datos.

Si tiene una instancia de SQL Server no RDS a mano, puede importar el BACPAC a esa instancia, soltar los objetos anteriores y exportar la base de datos para crear un nuevo archivo BACPAC. Este no tendrá ningún conflicto cuando lo restaure a una instancia de RDS.

De lo contrario, es posible evitar este problema siguiendo estos pasos.

  1. Edite el archivo model.xml dentro del archivo BACPAC (los BACPAC son solo archivos zip).
  2. Elimine elementos con los siguientes valores en sus atributos Tipo que están relacionados con los objetos enumerados anteriormente (los que RDS agrega automáticamente).
    • SqlRoleMembership
    • SqlPermissionStatement
    • SQLLogin
    • sqluser
    • SqlDatabaseDdlTrigger
  3. Generar una suma de comprobación para la versión modificada del archivo model.xml usando uno de los métodos ComputeHash en el SHA256 clase.
  4. Utilice el método BitConverter.ToString() para convertir el hash en una cadena hexadecimal (deberá eliminar los separadores).
  5. Reemplace el hash existente en el elemento Checksum en el archivo origin.xml (también contenido en el archivo BACPAC) con el nuevo.
  6. Crea un nuevo archivo BACPAC comprimiendo el contenido del original con los archivos model.xml y origin.xml reemplazados con las versiones nuevas. NO use System.IO.Compression.ZipFile para este propósito, ya que parece haber algún conflicto con el archivo zip que se produce: los datos no están incluidos en la importación. Utilicé 7Zip sin ningún problema.
  7. Importe el nuevo archivo BACPAC y no debería haber ningún conflicto con los objetos que RDS genera automáticamente.

Nota: Hay otro problema, relacionado con la importación de un BacPac a RDS utilizando SQL Server Management Studio que explico here.

Cuestiones relacionadas