【发布时间】:2019-12-24 10:58:25
【问题描述】:
目前我正在做以下事情:
- 检查SQL包是否安装并获取目录
- 使用 SQL 包创建数据库的 bacpac
- 使用
New-AzSQLDatabaseImport导入数据库
## Check SQL Server package installation
$Global:folder = Get-ChildItem "C:\Program Files\Microsoft SQL Server\" | Where { Is-Numeric $_.name -ne $null}
$Global:folder = ($folder | Sort-Object @{e={$_.name -as [int]}} -Descending)[0].name
if (!(Test-Path "C:\Program Files\Microsoft SQL Server\$folder\DAC\bin\sqlpackage.exe") ) {
Set-Output "[!] SqlPackage is not installed" -colour red -time;
Set-Output "[!] Install SQLPackage and re-run script" -colour red -time;
break;
}
else {
Set-Output '[+] Sqlpackage is installed' -colour green -time;
}
##### Generate bacpac file for upload
Try {
$BacPac_Backup = '& "C:\Program Files\Microsoft SQL Server\ENTER-NUM\DAC\bin\sqlpackage.exe" /Action:Export /ssn:. /sdn:"ENTER-DB" /tf:"c:\ENTER-DB.bacpac"'
$BacPac_Backup = $BacPac_Backup -replace('ENTER-NUM', $folder)
$BacPac_Backup = $BacPac_Backup -replace('ENTER-DB' , $TRIS5_DatabaseName)
Invoke-Expression $BacPac_Backup > $null 2>&1
Set-Output "[+] Bacpac file created" -colour green -time;
}
Catch {
Set-Output "[+] Unable to create bacpac file" -colour red -time;
break;
}
我想知道的是,是否有一种方法可以跳过 #2,直接使用 PowerShell 从 SQL Server 将数据库上传到 Azure。我知道您可以在 SSMS 中执行此操作,但我找不到在 PowerShell 中自动执行此操作的方法。
【问题讨论】:
-
根据我的研究,我们无法跳过#2(创建一个 bacpac 文件)。更多详情请参考docs.microsoft.com/en-us/sql/relational-databases/…
-
我是这么认为的,您是否知道是否有其他方法可以使用 PS 以编程方式创建 bacpac?我想删除安装 SQLPackage 以运行此脚本的要求。
-
据我所知,SQLPackage 是使用命令行创建 bacpac 文件的唯一方法。此外,您可以使用Azure Database Migration Service 将本地 SQL 迁移到 Azure。更多详情请参考docs.microsoft.com/en-us/azure/dms/…
-
您还有其他顾虑吗?
-
不,我后来做了很多研究,我相信你是对的。您可以添加您的评论作为答案,我会接受。
标签: sql-server powershell azure-sql-database