SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server on Linux のデータベース バックアップを PowerShell Core で取得してみる

leave a comment

de:code 2018 では、SQL Server on Linux のデータベースバックアップを bash + sqlcmd で実装する方法をデモで実施しました。

Windows PowerShell から、バックアップを取得するスクリプトも以前組んだことがあったのですが、PowerShell Core で実装したことが無かったので、勉強がてら作成してみました。
(Windows PowerShell (v5.1) でも実行可能です)
Backup-Database.ps1
image_thumb2

pwsh./Backup-Database.ps1 -ServerInstance <ServerName> -Username <Login> -P <Login Password> -RunSpaceSize 5


投稿を書いている時点では、PowerShell Core 向けの SQL Server モジュールでは、Invoke-SqlCmd が提供されていないため、ADO.NET で DB にアクセスを実施するようにしています。
複数のデータベースを作成しており、データベースがある程度のサイズになっている場合に、一つずつ、データベースのバックアップを取得すると、大きいサイズのデータベースがバックアップの処理効率化のブロッカーとなりえる可能性がありますので、RunSpacePool を使用して、並列でバックアップを取得するような処理としています。
RunSpacePool については、次の情報を参考にさせていただきました。

スクリプトの初期設定では、RunSpacePool のサイズは、2 としていますが、これはオプションで変更することができます。

また、バックアップの取得を実行する SQL のコマンドタイムアウトについては、デフォルトでは、600 秒 (10 分) としていますが、オプションで変更することができるようになっていますので、必要に応じて適宜変更してください。
「-Log」スイッチを設定することで、データベースのバックアップだけでなく、トランザクションログのバックアップを取得することもできます。
トランザクションログのバックアップの有無については、初回バックアップ取得済みか、復旧モデルの情報を元に判断するようにしているので、他の条件を組み込むこともできるかと。
すべての状況に対応したスクリプトではありませんが、シングルインスタンスの基本的なバックアップを取得するために使用することができるかと思いますので、バックアップ実装の参考になれば幸いです。

Share

Written by Masayuki.Ozawa

6月 2nd, 2018 at 5:15 pm