Powershell数据库备份脚本仅在从ISE执行时传递

时间:2016-04-06 05:31:11

标签: sql-server powershell powershell-ise bacpac

我一直在使用以下备份脚本来为MSSQL数据库创建.bacpac文件。该脚本一般工作正常但对某些数据库失败。这些数据库与其他数据库没有太大的不同,可能有点大。由于这仅用于dev数据库,平均大小不大,bacpac文件大小约为200Mb。

从PowerShell ISE执行时脚本成功运行但从命令行运行时失败的奇怪之处。请注意,脚本仅对某些数据库失败并且对其他数据库有效。错误消息实际上没有帮助:

  

警告:发生异常:使用“2”参数调用“ExportBacpac”的异常:“无法从数据库导出架构和数据。”

我们使用MSSQL 2104,数据库可以毫无问题地从MSSQL Studio导出到备份。

剧本:

Param(
    # Database name to backup e.g 'MYDB'
    $databaseName,
    # Database connection string "server=server ip;Integrated Security = True;User ID=user;Password=pass"
    $connectionString,
    # Path to the directory where backup file should be created
    $backupDirectory
)
add-type -path "C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\Microsoft.SqlServer.Dac.dll";

try {
    $dacService = new-object Microsoft.SqlServer.Dac.DacServices $connectionString
    # build backup filename
    $backupFileName  = $backupDirectory+"\"+$dataBaseName+[DateTime]::Now.ToString("yyyyMMdd-HHmmss")+".bacpac" 
    # perform backup
    $dacService.exportBacpac($backupFileName, $dataBaseName);
    Write-Output "Database backup file created $backupFileName"
} catch {
    Write-warning "Exception occurred: $_"
    throw "Database backup haven't been created, execution aborted."
}

有没有人遇到过这个问题?我知道PowerShell和PowerShell ISE有点不同,但我不明白为什么脚本执行会产生不同的结果。

[编辑]

尝试为DacService添加事件侦听器并打印输出以获取更多调试信息

 register-objectevent -in $dacService -eventname Message -source "msg" -action { out-host -in $Event.SourceArgs[1].Message.Message } | Out-Null

输出

Dac Assembly loaded.
Extracting schema (Start)
Gathering database options
Gathering users
WARNING: Exception occurred: Exception calling "ExportBacpac" with "2" argument(s): "Could not export schema and data
from database."
Gathering roles
Gathering application roles
Gathering role memberships
Gathering filegroups
Gathering full-text catalogs
Gathering assemblies
Gathering certificates 
....
Processing Table '[dbo].[file_storage_entity]'. 99.74 % done.
Processing Table '[dbo].[file_storage_entity]'. 100.00 % done.
Exporting data (Failed)

[编辑2]

作为一种解决方法,我已经创建了C#程序来做同样的事情。在任何环境中都可以运行。代码与PowerShell脚本中的代码几乎相同。

0 个答案:

没有答案