2015-12-15 76 views
1

我有一個在RDS上運行的小型(幾百MB)SQL Server數據庫。我花了幾個小時試圖將它複製到我的本地SQL Server 2014實例上。以下所有失敗。任何想法可能工作?獲取Amazon RDS上託管的SQL Server的本地副本

  1. Task -> Backup失敗,因爲它並沒有給我的管理員帳戶權限備份到本地驅動器。

  2. Copy Database失敗期間創建包While trying to find a folder on SQL an OLE DB error was encountered with error code 0x80040E4D

  3. 從SSMS,在連接到RDS服務器,運行BACKUP DATABASE。這會失敗,並顯示消息BACKUP DATABASE permission denied in database 'MyDB'。即使在爲連接的用戶運行EXEC sp_addrolemember 'db_backupoperator'之後。

  4. General scripts生成700MB .sql文件。運行sqlcmd -i在生成無法在本地服務器上安裝的合理的.mdf.ldf文件(可能是因爲sqlcmd未能完成並解除鎖定)後,在某些時候失敗。

+0

首先在本地手動創建數據庫,然後開始工作。然後使用_Tasks/Generate Scripts。在Advanced中,選擇_Types的數據類型爲script = Schema和Data_並運行結果腳本。如果你最初發布了錯誤消息,它會有所幫助。如果這不起作用,請發佈錯誤 –

+0

@ Nick.McDermaid - 在這種情況下,我能夠最終獲得(#4)的工作(在重新啓動機器和服務以獲取MDF後),但它不可擴展。 – feetwet

+0

你真的是指「不能自動化」嗎?如果您要發佈錯誤,或許我們可以提供幫助。 –

回答

0

AWS has finally provided a reasonably easy means of doing this進口到本地的SQL Server 2014實例:它需要一個S3桶。

創建一個名爲rds-bak桶後,我跑了RDS實例以下存儲過程:

exec msdb.dbo.rds_backup_database 
    @source_db_name='MyDatabase', 
    @s3_arn_to_backup_to='arn:aws:s3:::rds-bak/MyDatabase.bak', 
    @overwrite_S3_backup_file=1; 

下面的存儲過程返回備份請求的狀態:

exec msdb.dbo.rds_task_status @db_name='MyDatabase' 

一旦完成我從S3下載了.bak文件,並使用SSMS Restore Database...嚮導將其導入本地SQL Server實例!

0

Redgate的SQL比較和SQL數據比較對於這些類型的東西是無價的。他們不便宜(但值得每一分錢)。但是,如果這是一次性的事情,你可以使用14天的試用版,看看它是如何爲你效勞的。

http://www.red-gate.com/products/

1

的SSIS導入導出嚮導可以生成一個包複製一整套表。 (這不是那種依賴於文件的複製數據庫的功能 - 它使一個包,每個表的數據流組件。)

這有點脆,但可以做的工作:-)

SSMS生成腳本功能通常可能會因任何大型數據集而失敗,因爲所有數據的腳本只是很大/冗長。此方法從不編寫數據。

+0

我從來沒有能夠讓SSIS對付RDS。但是,我確實設法讓生成腳本工作:在'高級'設置中'將數據類型從'Schema only'改變爲'Schema and data'。是的,這確實爲我的200MB數據庫創建了一個(現在)的1.2GB純文本文件。但是我能夠在15分鐘內使用'sqlcmd -i scripted.sql -d MyDatabase -x'將它加載到本地服務器,而沒有太多警告。 – feetwet

1

檢查了這一點:https://github.com/andrebonna/RDSDump

它是搜索最新的源數據庫快照一個C#.NET控制檯應用程序,在臨時RDS實例將其恢復,生成一個BACPAC文件,把它上傳到S3和刪除臨時RDS實例。

您可以將您的RDS快照到一個BACPAC文件,可以下載並使用該功能回答這裏(Azure SQL Database Bacpac Local Restore