Запретить запись SqlPackage в основной раздел во время экспорта
Чтобы переместить базу данных SQL Server 144 ГБ в Azure SQL, я хочу экспортировать ее в формат.bacpac.
Для этого я использую SQL-пакет SQL версии 130:
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:, с 39 ГБ свободного места) не хватает дискового пространства во время операции. Как вы можете видеть в команде, я пытаюсь экспортировать в D:. Кажется, что скрипт экспорта делает что-то временное на C:.
Как я могу предотвратить это? (Я уже проверил заданный по умолчанию путь к SQL Server, он также находится на D:)
4 ответа
Я попробовал это снова на ВМ, имеющей 300 ГБ и даже 600 ГБ свободного дискового пространства, он все еще не работает. Теперь я попытаюсь использовать другие методы: помощник по миграции данных Microsoft или сначала перенести схему, а затем использовать мастер экспорта и экспорта SQL Server для перемещения данных.
SqlPackage.exe использует три расположения на диске: выбранный путь вывода, временная папка и изолированная папка хранилища.
По умолчанию временная папка и папка изолированного хранилища находятся на основном диске. Я полагаю, что вы можете изменить местоположение временной папки, изменив переменную среды, а затем (в той же командной строке) запустив SqlPackage.exe, например так:
set TMP=d:\temp
SqlPackage.exe /a:export ...
Однако этого может быть недостаточно из-за использования изолированного хранилища.
В версии 18.7 для этого доступен новый параметр
/p:TempDirectoryForTableData=(STRING)