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
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
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.
- Modificare il file model.xml all'interno del file BACPAC (i file BACPAC sono solo file zip).
- 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
- generare un checksum per la versione modificata del file model.xml utilizzando uno dei metodi ComputeHash sulla SHA256 classe.
- Utilizzare il metodo BitConverter.ToString() per convertire l'hash in una stringa esadecimale (è necessario rimuovere i separatori).
- Sostituisce l'hash esistente nell'elemento Checksum nel file origin.xml (contenuto anche nel file BACPAC) con quello nuovo.
- 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.
- 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.
fonte
2013-04-12 15:11:14
Si sta semplicemente trasferendo lo schema del database o è necessario trasferire anche i dati? – JeffO
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. –
Anche Jeff O Data. – darwindave