SE の雑記

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

SQL Server 2017 CU1 がリリースされたので SQL Server on Linux のアップデートについてまとめてみる

leave a comment

SQL Server 2017 の最初の累積修正プログラム (Cumulative Update) となる、CU1 がリリースされました。

Cumulative Update #1 for SQL Server 2017 RTM
実際の変更内容は Cumulative Update 1 for SQL Server 2017 に記載されています。
Windows 版については、SQL ServerR 2017 for MicrosoftR Windows の最新の累積的な更新プログラム からダウンロードすることが可能ですが、Linux 版については、各ディストリビューションのリポジトリが更新され、CU が適用されたバージョンが追加されています。
2017/10/26 時点では、SQL Server on Linux の Docker コンテナーは CU1 のタグが切られていますが、Winodws 版はまだみたいですね。
https://hub.docker.com/r/microsoft/mssql-server-linux/tags/
今回は Ubuntu を例として、SQL Server on Linux の CU の適用についてまとめてみたいと思います。
詳細については Installation guidance for SQL Server on Linux を確認してください。

Ubuntu の場合、次のようなコマンドで SQL Server のインストールを行います。

sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"
sudo apt-get update
sudo apt-get install -y mssql-server

 
新しい CU が提供されると、バージョンを指定しないインストールでは、最新の CU が適用された SQL Server がインストールされるようです。

apt-cache policy mssql*
mssql-server:
  インストールされているバージョン: (なし)
  候補:               14.0.3006.16-3
  バージョンテーブル:
     14.0.3006.16-3 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
     14.0.1000.169-2 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
        100 /var/lib/dpkg/status
mssql-server-fts:
  インストールされているバージョン: (なし)
  候補:               14.0.3006.16-3
  バージョンテーブル:
     14.0.3006.16-3 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
     14.0.1000.169-2 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
mssql-server-ha:
  インストールされているバージョン: (なし)
  候補:               14.0.3006.16-3
  バージョンテーブル:
     14.0.3006.16-3 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
     14.0.1000.169-2 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
mssql-server-is:
  インストールされているバージョン: (なし)
  候補:               14.0.1000.169-1
  バージョンテーブル:
     14.0.1000.169-1 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
mssql-server-agent:
  インストールされているバージョン: (なし)
  候補:               14.0.3006.16-3
  バージョンテーブル:
     14.0.3006.16-3 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages
     14.0.1000.169-2 500
        500 https://packages.microsoft.com/ubuntu/16.04/mssql-server-2017 xenial/main amd64 Packages

2017/10/26 時点では、最新のバージョンとして、GA (RTM) の 14.0.1000  と CU1 の 14.0.3006 が登録されていることが確認できますね。
「sudo apt-get install -y mssql-server」を実行して、SQL Server をインストールしてみます。

バージョンを指定しないインストールの場合、最新のバージョンである CU1 がインストールされていますね。
image
GA (RTM) をインストールしたい場合には、明示的にバージョンを指定する必要があります。

sudo apt-get install -y mssql-server=14.0.1000.169-2

先ほどと異なり、インストールされているバージョンが、14.0.1000 となっていますね。
image
最新のバージョンをインストールすればよい場合は気にしなくても問題ありませんが、マイナーバージョンを意識してインストールする必要がある場合は、明示的なバージョンの指定をする必要があるかと。
新しいバージョンの提供が行われ、既存の SQL Server に対して、最新化を行う場合には、https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup#upgrade に記載されている、次のコマンドを実行して、アップグレードを行います。

sudo apt-get update
sudo apt-get install mssql-server

 
Windows 版の SQL Server は一般的なアプリケーションですので、たくさんのファイルで構成されており、CU を適用することでファイル単位で更新が行われます。
Linux 版については「sudo  dpkg -L mssql-server」で、SQL Server インストール時のファイルを確認することが可能ですが、かなりファイル数が少ないことが確認できるかと。
SQL Server on Linux の場合の SQL Server のプログラムのメインですが、次のようなファイル群となります。

/opt/mssql/lib/system.certificates.sfp
/opt/mssql/lib/secforwarderxplat.sfp
/opt/mssql/lib/system.netfx.sfp
/opt/mssql/lib/sqldkxplat.sfp
/opt/mssql/lib/system.sfp
/opt/mssql/lib/system.common.sfp
/opt/mssql/lib/sqlservr.sfp

 
SQL Server on Linux は、Linux 上で、SQL Server を動作させたものとなりますが、Linux 向けに各ファイルを再構成したのではなく、アプローチとしては「Windows 版の SQL Server と同じファイルを使用して、Linux 上で SQL Server を動作させる」という方法をとっています。
この方法として、Windows 10 の Windows Subsystem for Linux (WSL) の Draw Bridge とは OS の向きが逆の考えを取っており、「Linux 上で、SQL Server を動作させるために必要な機能のみを備えた Windows を動作させる」というようなことをしており、このレイヤーとして「SQL PAL」 (Platform Abstraction Layer) という層を設けており、この層で動作している Windows / SQL Server のプログラム群の実体が上述の「.sfp」ファイルとなっています。
これらのファイルはサンドボックス化されており、外部から変更することはできず、Windows / SQL Server の部分に関しては、サービスを再起動すると初期状態に戻る構成となっています。

Linux 版では、mssql-conf というツールで、一部の設定 (Windows 版では、レジストリに書き込まれているような設定) については、外部ファイルとして起動時に読み込ませるというアプローチをとっています。
このようなファイル構成の違いから、SQL Server on Linux の場合は、サンドボックス化されているファイルを差し替えることで、SQL Server の修正プログラムの適用を実施しており、正直、Windows 版より短時間かつ、シンプルな操作で SQL Server の最新化を実施することが可能となっています。
また、このようなファイル構成となっていることで、Rollback SQL Server ということも可能となっています。

SQL Server on Linux の場合、CU を適用したが、以前のマイナーバージョンに戻す必要がある場合、シンプルな操作でロールバックが可能となっています。
Ubuntu の場合は、次のようなコマンドでロールバックが可能です。

sudo apt-get install mssql-server=<version_number>
sudo systemctl start mssql-server

やっていることは、バージョンを指定しての上書きインストールですね。
CU1 をインストールした後に GA に変更したい場合は

sudo apt-get install -y --allow-downgrades  mssql-server=14.0.1000.169-2

を実行することで、バージョンを変更することが可能です。
Windows 版の場合、システムデータベースのバックアップを取得してとかを実施していたかと思いますが、Linux 版は構成がシンプルなため、正直、アップグレード運用などは Windows 版より楽な点がかなりあるのではないでしょうか。
もう少し、いろいろなパターンを検討する必要があるかとは思いますが、簡単に調べた内容を。

Share

Written by Masayuki.Ozawa

10月 26th, 2017 at 11:28 pm

Posted in SQL Server

Tagged with ,

Leave a Reply