在导出期间阻止SqlPackage写入主分区

时间:2017-06-21 17:24:22

标签: sql-server azure sqlpackage bacpac

要将144GB SQL Server数据库移动到Azure SQL,我想将其导出为.bacpac格式。

为此,我使用SQL版本130的SQL包:

C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin>SqlPackage.exe /Action:Export /ssn:MY_MSSQL_INSTANCE /sdn:MY_DATABASE /tf:d:\export.bacpac /p:Storage=file

但是,这会失败,因为我的主分区(C:,39GB可用)在操作期间耗尽了磁盘空间。正如您在命令中看到的那样,我尝试导出到D:。似乎导出脚本在C:上做了一些临时的事情。

我该怎样防止这种情况? (我已经检查了默认的SQL Server Temp路径,它也在D:)

4 个答案:

答案 0 :(得分:1)

SqlPackage.exe在磁盘上使用三个位置:选定的输出路径,临时文件夹和isolated storage folder

默认情况下,临时文件夹和隔离的存储文件夹位于主驱动器上。我相信您可以通过更改环境变量然后(在同一命令提示符下)运行SqlPackage.exe来更改临时文件夹位置,如下所示:

set TMP=d:\temp
SqlPackage.exe /a:export ...

但这可能还不够,因为使用了隔离存储。

答案 1 :(得分:0)

我已经在具有300GB甚至600GB可用磁盘空间的VM上再次尝试过,但它仍无法正常工作。我现在将尝试其他方法:Microsoft数据迁移助手,或首先传输模式,然后使用SQL Server导入导出向导来移动数据。

答案 2 :(得分:0)

增大C驱动器的大小并执行。

答案 3 :(得分:0)

在 18.7 版中,有一个新参数可用于 /p:TempDirectoryForTableData=(STRING)