Sql-Server
Powershell 使用 Restore-Database 將 Azure SQL 數據庫還原到本地
我已經編寫了一個 powershell 腳本,它使用
Start-AzureSqlDatabaseExport
&Get-AzureStorageBlob
將我的 Azure DB 導出到 abacpac
並在本地下載,下一步是使用 將其還原bacpac
到我的本地 SQL DBRestore-Database
,但以下失敗並顯示“設備上的媒體系列格式不正確”。Restore-Database -dbName "MyDB" -backupFile "C:\MyAzureBackup.bacpac"
有沒有辦法讓它與 一起工作
Restore-Database
,或者是否有替代命令可以做到這一點?
我實際上並沒有嘗試過這個(但它會在以後引起我的興趣)。
您將無法使用
Restore-Database
,因為它僅從 SQL Server 讀取本機備份格式,而不是 Azure SQL。
BACPAC
從 Azure SQL 數據庫的備份創建的文件採用數據層格式。以這種格式包含數據庫的模式和數據。為了將其還原到 PowerShell 中的本地實例,您必須利用DAC
對象來執行restore
. 如果您正在載入SQLPS
模組,DAC
則會為您載入程序集。我在網上找到的基本範例似乎遵循這種格式:
Add-Type -path "C:\Program Files (x86)\Microsoft SQL Server\<version>\DAC\bin\Microsoft.SqlServer.Dac.dll" $restoredDatabaseName = 'NewDatabase' $bacpacFile = "Your BACPAC file you downloaded" $conn = "Data Source=Server;Initial Catalog=master;Connection Timeout=0;Integrated Security=True;" $importBac = New-Object Microsoft.SqlServer.Dac.DacServices $conn $loadBac = [Microsoft.SqlServer.Dac.BacPackage]::Load($bacpacFile) $importBac.ImportBacpac($loadBac, $restoredDatabaseName) #Clean up $loadBac.Dispose()
一旦我得到一些設置,我將自己測試上述內容,以確保。
更新
dbatools PowerShell 模組現在包括有關管理 DacPac 文件的命令。這可用於執行導出和發布操作。
發布-DbaDacpac。我沒有機會針對 Azure SQL 實例對此進行測試。
我不能把這歸功於。歸功於大衛布朗。
但是這個
$loadBac = Microsoft.SqlServer.Dac.BacPackage::Load($bacpacFile)
應該是這個
$loadBac = [Microsoft.SqlServer.Dac.BacPackage]::Load($bacpacFile)
方括號。