0

我正在尝试使用 SQLPackage.exe 自动将 Azure 数据库备份到我的本地计算机。我正在尝试将日期添加到文件名中,以便每晚都不会被覆盖。以下行将获取日期,但随后将停止备份运行,并出现如下所示的错误

命令

"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe" /Action:Export /ssn:SERVER_NAME_HERE /sdn:DATABASE_NAME /su:USERNAME /sp:PASSWORD /tf:C:\Users\William\Desktop\BackupTest\BACKUPFILE'%date%'.bacpac 

错误

*** Unrecognized command line argument '23/06/2017'.bacpac'.

我试过使用

+%date%+
+%date

和其他选择,但没有运气。任何人都可以提出任何建议吗?

4

2 回答 2

1

您可以使用 PowerShell 添加它,如下例中所述。

Param(
    [Parameter(Position=0,Mandatory=$true)]
    [string]$ServerName
)

cls

try {
    if((Get-PSSnapin -Name SQlServerCmdletSnapin100 -ErrorAction SilentlyContinue) -eq $null){
        Add-PSSnapin SQlServerCmdletSnapin100
    }
}
catch {
    Write-Error "This script requires the SQLServerCmdletSnapIn100 snapin"
    exit
}

$script_path = Split-Path -Parent $MyInvocation.MyCommand.Definition

$sql = "
    SELECT name
    FROM sys.databases
    WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb','distribution')
"

$data = Invoke-sqlcmd -Query $sql -ServerInstance $ServerName -Database master

$data | ForEach-Object {


$DatabaseName = $_.name
$now=get-Date

#
# Run sqlpackage
#
&"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe" `
    /Action:extract `
    /SourceServerName:$ServerName `
    /SourceDatabaseName:$DatabaseName `
    /TargetFile:$script_path\DACPACs\$DatabaseName$now.dacpac `
    /p:ExtractReferencedServerScopedElements=False `
    /p:IgnorePermissions=False


}

希望这可以帮助。

问候,

阿尔贝托·莫里洛

SQLCoffee.com

于 2017-06-23T02:30:37.000 回答
1

更根本的是,不推荐使用 bacpac 来备份数据库。Bacpac 用于按需加载和移入和移出 Azure 的数据。

Azure 上的 SQLDB 默认启用备份服务,因此该服务已提供计划备份。

此外,要正确制作 bacpac,需要先复制数据库,然后从副本中制作 bacpac。否则无法保证事务一致性,并且在最坏的情况下导入 bacpac 可能会失败。

于 2017-06-23T02:46:39.097 回答