【问题标题】:SQLPackage.exe filename with the date带有日期的 SQLPackage.exe 文件名
【发布时间】:2017-06-22 23:58:00
【问题描述】:

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

CMD

"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

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

【问题讨论】:

  • 你为什么要试图逃避它?简单的%date% 应该可以工作,除非它抱怨斜线。如果是这种情况,您可以像这里一样将其分解stackoverflow.com/questions/1192476/…
  • 感谢您的链接。我最终使用了 %DATE:~10,4%_%DATE:~7,2%_%DATE:~4,2% 格式,这给了我 2017_06_23

标签: cmd azure-sql-database database-backups sqlpackage


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以使用 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

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2021-11-30
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多