1

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 スクリプトと実質的に同じコード。

4

0 に答える 0