0

所以我有一个自动化工具,它使用 c# 调用 Powershell 脚本,该脚本将使用 sqlpackage.exe 将远程服务器上的数据库提取到 .dacpac 中并将其保存到我的文件系统中。

我们使用对 powershell 进程/管道的异步调用来获取脚本执行的当前结果并将它们输出到屏幕上供用户使用。该工具多年来一直运行良好,但突然在提取过程中途停止并抛出以下错误消息“提取数据库时出错:无法从数据库中导出模式和数据。无法访问关闭的流。” 在这一点上,我不知道是什么导致流被中断并且提取过程突然停止。

只是想知道是否有人经历过类似的事情,或者是否有人可以推荐一些步骤来调试此错误?

这是执行提取的脚本部分:

sqlpackage `
        /action:extract  `
        /SourceConnectionString:"$endpoint"  `
        /TargetFile:"$dacPacFile" `
        /p:ExtractAllTableData=True  `
        /p:ExtractReferencedServerScopedElements=False `
        /p:IgnoreUserLoginMappings=True 
4

2 回答 2

0

不幸的是,“无法访问关闭的流”错误消息可能会掩盖实际问题。您可以启用 SqlPackage 跟踪,这会将所有错误捕获到可以使用事件查看器打开的 ETL 文件中。收集事件日志的步骤是:

  • 以管理员身份打开新的命令提示符并运行以下命令: logman create trace -n DacFxDebug -p "Microsoft-SQLServerDataTools" 0x800 -o "%LOCALAPPDATA%\DacFxDebug.etl" -ets
  • 现在启用了日志记录,因此重试该操作,重现问题。
  • 通过返回命令提示符并运行以下命令来禁用日志记录:logman stop DacFxDebug -ets
  • 生成的 ETL 文件将位于 %LOCALAPPDATA%\DacFxDebug.etl。
  • DacFxDebug.etl 可以使用事件查看器的 Open Saved Log... 按钮打开
于 2016-11-08T18:43:12.497 回答
-1

我相信这是由于更新问题,我面临类似的问题

于 2017-05-04T09:31:27.790 回答