MSSQL データベースの .bacpac ファイルを作成するために、しばらくの間、次のバックアップ スクリプトを使用してきました。スクリプトは一般的に正常に動作しますが、一部のデータベースでは失敗します。これらのデータベースは他のデータベースとあまり変わらず、少し大きいかもしれません。これは開発データベースにのみ使用されるため、平均サイズは大きくなく、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 スクリプトと実質的に同じコード。