2012-05-09 22 views
32

Ho cercato di passare da un normale server SQL su un server Win2008 a SQL Server su Amazon AWS RDS.Migrazione ad Amazon SQL Server RDS

Ho pensato che un semplice backup e ripristino funzionasse. Sebbene AWS RDS non sembri avere accesso a un file system, tutti gli script sql sembrano aver bisogno di un file system locale sul server di origine e di destinazione. Ho tentato uno script seguendo

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] 

Qualsiasi suggerimento sarebbe utile.

+0

Si sta semplicemente trasferendo lo schema del database o è necessario trasferire anche i dati? – JeffO

+1

Il fatto che sia Amazon RDS non tiene conto di questo. È necessario ricordare che ogni volta che si accede a un file system locale, è in relazione al motore di database che esegue il T-SQL. In questo caso, stai tentando di ripristinare un file dall'unità C dell'istanza Amazon. Quel file non esiste lì. Se possibile, porta il tuo file lassù in qualche modo o su un server dove puoi accedervi tramite UNC.Tuttavia, non sarei sorpreso se ciò non fosse possibile con RDS. –

+0

Anche Jeff O Data. – darwindave

risposta

51

scaricare la libera 'di SQL Azure Migration Wizard' dal CodePlex - ho fatto un breve blog/screencast su questo. Assicurarsi di impostare l'impostazione "TO" nella procedura guidata sul nome DNS AWS e quindi utilizzare "SQL Server 2008" e non "SQL Azure"

+0

grazie Lynn. Lo terrò a mente per la prossima volta. – darwindave

+3

Immagino che Amazon non voglia collegarsi a questo sui loro documenti, ma è un modo molto più facile di migrare rispetto a quello che suggeriscono (che ho sprecato ore su ore in precedenza) – petenelson

+2

qualcuno si intromise nel riferimento in fondo a questo forum/reclamo: https://forums.aws.amazon.com/message.jspa?messageID=442219#442219 – drzaus

3

Utilizzare la procedura guidata di esportazione in sql server management studio sul database di origine . Fare clic con il tasto destro del mouse sul database> attività> esportazione dati. C'è una procedura guidata che ti guida attraverso l'invio dell'intero database a un server SQL remoto.

+0

questo è un problema perché le opzioni di default non ti danno un db funzionante. devi almeno andare in Strumenti SMS-> Opzioni-> SQL Server Object Explorer-> Scripting e impostare "Genera script per oggetti dipendenti" e "Script indexes" su true prima di eseguire l'esportazione. – jaminto

+0

Inoltre, è lento. –

8

La parola ufficiale che ho ottenuto per il supporto AWS sulla migrazione dei database SQL utilizzando i file .bak è che non è supportato. Quindi nessun ripristino più rapido dai file .bak. Hanno offerto l'aiuto ufficiale per la migrazione delle banche dati esistenti qui:

Official AWS database migration guide

E la mi ha dato anche un occhiolino non ufficiale presso lo strumento di migrazione di database Azure. Basta usarlo per generare uno script del tuo schema e/o dei dati ed eseguirlo contro la tua istanza RDS. È un buon strumento. Dovrai prima importare il .bak in un server SQL non RDS per farlo.

SQL Azure migration tool

+0

ora puoi ripristinare da un file .bak a RDS - http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html – jaminto

6

ho scritto alcune istruzioni passo-passo sulla how to restore a .bak file to RDS utilizzando Azure Migration Tool SQL sulla base di screencast di Lynn. Questo è un metodo molto più semplice rispetto alle istruzioni ufficiali e ha funzionato bene per diversi database che ho migrato.

+0

Questo è in realtà uno dei modi migliori che ho imbattersi - è un vero peccato che Amazon non supporti l'importazione/esportazione corretta di backup nativi compressi. Il nostro account manager di Amazon è ben consapevole di questo problema sa che fa davvero arrabbiare le persone - ma non abbiamo una chiara idea di se/quando sarà mai supportato :( – Kram

+0

Ho trovato il tuo post tramite Google. Ha funzionato perfettamente Sorprendentemente perfettamente, grazie! – David

4

Probabilmente troverete che il formato BACPAC Data-tier Applications vi fornirà la soluzione più conveniente. È possibile utilizzare Export per produrre un file che contiene sia lo schema del database che i dati. Import creerà un nuovo database che viene popolato con i dati basati su quel file.

Contrariamente alle operazioni Backup and Restore, Esportazione e importazione non richiedono l'accesso al file system del server del database.

È possibile lavorare con i file BacPac utilizzando SQL Server Management Studio o tramite l'API in .Net, PowerShell, ecc MSBuild

Export Data-tier Application Dialog

Nota che ci sono problemi con questo metodo per esportare e quindi su Importa da e verso Amazon RDS. Quando viene creato un nuovo database su RDS, vengono creati i seguenti due oggetti.

  • Un utente con appartenenza al ruolo db_owner.
  • Il rds_deny_backups_trigger trigger

The rds_deny_backups_trigger Trigger

Durante l'importazione, ci sarà un conflitto tra gli oggetti inclusi nel file BacPac e quelli che vengono aggiunti automaticamente da RDS. Questi oggetti sono entrambi presenti nel file BACPAC e creati automaticamente da RDS quando viene creato il nuovo database.

Se si dispone di un'istanza non RDS di SQL Server a portata di mano, è possibile importare il BACPAC in tale istanza, rilasciare gli oggetti sopra e quindi esportare il database per creare un nuovo file BACPAC. Questo non avrà alcun conflitto quando lo si ripristina su un'istanza RDS.

In caso contrario, è possibile aggirare il problema attenendosi alla seguente procedura.

  1. Modificare il file model.xml all'interno del file BACPAC (i file BACPAC sono solo file zip).
  2. Rimuovere gli elementi con i seguenti valori negli attributi Tipo relativi agli oggetti elencati in precedenza (quelli aggiunti automaticamente da RDS).
    • SqlRoleMembership
    • SqlPermissionStatement
    • SQLLogin
    • sqluser
    • SqlDatabaseDdlTrigger
  3. generare un checksum per la versione modificata del file model.xml utilizzando uno dei metodi ComputeHash sulla SHA256 classe.
  4. Utilizzare il metodo BitConverter.ToString() per convertire l'hash in una stringa esadecimale (è necessario rimuovere i separatori).
  5. Sostituisce l'hash esistente nell'elemento Checksum nel file origin.xml (contenuto anche nel file BACPAC) con quello nuovo.
  6. Creare un nuovo file BACPAC zippando il contenuto dell'originale con entrambi i file model.xml e origin.xml sostituiti con le nuove versioni. NON utilizzare System.IO.Compression.ZipFile per questo scopo in quanto sembra che ci sia qualche conflitto con il file zip che viene prodotto - i dati non sono inclusi nell'importazione. Ho usato 7Zip senza problemi.
  7. Importare il nuovo file BACPAC e non si dovrebbero avere conflitti con gli oggetti generati automaticamente da RDS.

Nota: V'è un altro, problema connesso con l'importazione di un BacPac a RDS tramite SQL Server Management Studio, che spiego here.

Problemi correlati