Скрипт резервного копирования БД Powershell только при выполнении из ISE

Некоторое время я использовал следующий скрипт резервного копирования для создания файлов.bacpac для баз данных MSSQL. Скрипт работает нормально, но не работает для некоторых баз данных. Эти базы данных не слишком сильно отличаются от других, может быть, немного больше. Так как это используется только для баз данных dev, средний размер не большой, размер файла bacpac составляет ~200Mb.

Странная вещь: скрипт успешно запускается при запуске из PowerShell ISE, но не работает при запуске из командной строки. Обратите внимание, что скрипт не работает только для некоторых баз данных и работает для других. Сообщение об ошибке не очень полезно:

ВНИМАНИЕ: Возникло исключение: Исключение вызывает "ExportBacpac" с аргументом (ами) "2": "Не удалось экспортировать схему и данные из базы данных".

Мы используем 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 ответов

Другие вопросы по тегам