Sql-Server

Powershell 使用 Restore-Database 將 Azure SQL 數據庫還原到本地

  • March 14, 2022

我已經編寫了一個 powershell 腳本,它使用Start-AzureSqlDatabaseExport&Get-AzureStorageBlob將我的 Azure DB 導出到 abacpac並在本地下載,下一步是使用 將其還原bacpac到我的本地 SQL DB Restore-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 實例對此進行測試。

我不能把這歸功於。歸功於大衛布朗。

https://stackoverflow.com/questions/51730309/the-term-microsoft-sqlserver-dac-bacpackageload-is-not-recognized

但是這個

$loadBac = Microsoft.SqlServer.Dac.BacPackage::Load($bacpacFile)

應該是這個

$loadBac = [Microsoft.SqlServer.Dac.BacPackage]::Load($bacpacFile)

方括號。

引用自:https://dba.stackexchange.com/questions/86759