2017-06-22 259 views
0

我想一個Azure數據庫的備份自動使用SQLPackage.exe我的本地機器。我試圖將日期添加到文件名,以便每天晚上它不會被覆蓋。 下面的行會拿起日期,但隨後將停止備份下面SQLPackage.exe文件名帶有日期

所示

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 

ERROR

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

我已經嘗試使用

+%date%+ 
+%date 

和其他選項,但沒有運氣。任何人都可以提出建議

+1

你爲什麼試圖逃避它?只要簡單的'%date%'應該工作,除非它抱怨斜槓。如果是這種情況,你可以像這裏分解它https://stackoverflow.com/questions/1192476/format-date-and-time-in-a-windows-batch-script – kichik

+0

感謝您的鏈接。我結束了使用格式%DATE:〜10,4%_%DATE:〜7,2%_%DATE:〜4,2%這給了我2017_06_23 – WillNZ

回答

1

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

參數( [參數(位置= 0,強制= $真實) [字符串] $服務器名稱 )

CLS

嘗試{ IF((GET-PSSnapin -Name SQlServerCmdletSnapin100 - ErrorAction SilentlyContinue)當量爲$ null){ 附加PSSnapin SQlServerCmdletSnapin100 }} 趕上 { 寫入錯誤 「這個腳本需要SQLServerCmdletSnapIn100管理單元」 出口 }

$ script_path =拆分路徑-Parent $ MyInvocation.MyCommand.Definition

$ SQL =「SELECT 名 FROM sys.databases中 WHERE名NOT IN( '大師', '模型', 'msdb中', 'tempdb的', '分配') 「

$數據=調用-SQLCMD -Query $ SQL -ServerInstance $服務器名-Database主

$數據|的foreach對象{

$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

1

更根本的是,它不建議使用BACPAC備份數據庫。 Bacpac用於加載&根據需要將數據移入和移出Azure。在Azure上

SQLDB通過這樣一個計劃的備份已經由服務提供的默認有備份服務上。

另外,適當做一個BACPAC,數據庫需要被複制第一然後進行從副本BACPAC。否則,交易一致性不能保證,導入bacpac可能會在最壞的情況下失敗。