SQL Server on Linux の非サポート機能として SQL Server Management Studio (SSMS) に「メンテナンスプラン」が記載されています。
SQL Server on Linux の SSIS では、一部の機能がサポートされていないのですが、メンテナンスプランのベースとなっている、制御フローのコンポーネントについてはサポート対象となっています。
サポートされており、サポートされていないコンポーネント
抽出、変換、および SSIS Linux でのデータを読み込む
SQL Server Integration Services ( SSIS ) on Linux とは
SSDT で SSIS のプロジェクトを作成すると、「その他のタスク」でメンテナンスプランで設定可能なタスクを作成することが可能ですので、メンテナンスプランで実行したかった処理の「dtsx ファイル」を作成します。
あとは、SQL Server on Linux で SSIS をインストールし、インストールにより利用可能となる「dtexec」の実行可能プログラムで、作成した dtsx ファイルを実行することで、SQL Server on Linux でもメンテナンスプラン相当の処理を一から作成することなく実装することが可能となります。
実行の例としては次のような形式でしょうか。
sudo -u mssql /opt/ssis/bin/dtexec /F /opt/ssispackage/BackupDatabase.dtsx
実際に実行した画面がこちらになります。
dtsx は XML 形式のファイルであり、基本的なコンポーネントであれば、XML に定義情報を持っている形になりますので、次のような内容については XML を直接編集することで、変更はできるかと。
- 接続先情報
- パスの変更
SQL Server on Linux の SQL Server Agent は T-SQL を定期的に実行することはできますが、SSIS パッケージや OS のコマンドを実行することはできません。
そのため、作成した SSIS パッケージを定期的に実行したい場合には、cron 等の OS 側の定期的なジョブの実行を行う仕組みと組み合わせる必要が出てきます。
スケジュール SQL Server Integration Services パッケージの cron と Linux の実行
メンテナンスプランで実施している内容は、T-SQL で実装することもできますので、SSIS 経由で実行する必要がないケースも多いかと思いますが、メンテナンスプラン相当の処理を、実装したいといった場合の方法の一つとして知っておくとよいのではないでしょうか。
Windows 版の SQL Server の場合、SSIS は Standard Edition 以上の機能となっているはずですが、SQL Server on Linux の SSIS は各エディションで使えるようになっています。
この違いですが、SQL Server on Linux の SSIS は「サービスとして実行されるもの」ではなく「dtexec を実行するための基盤」として実装されているものであるからかと思います。
この観点の実行であれば、Windows 版の Express Edition でも実行できたような気がします。
SQL Server on Linux の dtexec は、 データベースエンジンの部分と同一で「sfp ファイルを使用した実行基盤」として導入が行われています。
おそらく、SQL PAL により、「dtexec を実行するために必要な Windows のライブラリ OS を含め、その中で Windows 版の dtexec を実行する」というアプローチでの実装かと。
このため、Windows のバイナリと高い互換性 (実際には、Windows のバイナリと同一) を持った、環境として実行することができるようになっています。
sqlcmd や bcp については、残念ながら SQL PAL を使用した実装ではなく、ツールとして新規に開発されたものを使用しているため、Windows と挙動が違う部分がいくつか出てきます。
その辺については、別途まとめたいと思います。