SE の雑記

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

Ubuntu の SQL Server on Linux の基本環境を確認してみる その 2

leave a comment

Ubuntu の SQL Server on Linux の基本環境を確認してみる の続きです。

前回、基本的な構成を書きましたが、今回はもう少し踏み込んだ内容を。

SQL Server on Linux: Runs well in spite of internal quirks. Why? も面白い内容かと。

冒頭で紹介した、記事では、以下のような構成として図示されています。

image

2016/11 時点の Private Preview で、SQL Server on Linux (SoL) から見える環境としては、以下のような環境になっているのかと思います。

image

SQL Server on Linux は、Linux 上で動作しているライブラリ OS としての Windows 上で、SQL Server のデータベースエンジンを動作させているという認識でいます。

データベースエンジンやライブラリ OS については各 SFP ファイルによって実装がされており、実際のファイル配置に関しては、以下のようになるのかと。
image

image

「/opt/mssql/bin/sqlservr」は各 SFP ファイルをロードして、ライブラリ OS を起動し、データベースエンジンとして「c:\binn\sqlservr.exe」を起動するためのローダーとして機能し、実際の SQL Server のプログラムに関しては SFP ファイル内にサンドボックス化されているのかと。

Linux で SQL Server のサービスを開始すると、「/opt/mssql/lib」内の SFP ファイルは読み込まれているようですが、サービスの再起動等を実施しても、ファイルのタイムスタンプが変更されていなかったため、メモリ上にロードして展開はされるが変更はされず、サンドボックス化されたファイルとして利用することで、予期せぬ変更に対してのセキュリティを確保しているのではないかと思います。

image

このような構成のイメージが湧くと SQL Server on Linux の構成がかなり理解しやすくなってくるのではと考えています。

SoL では、設定の変更は、Configure SQL Server on Linux with mssql-conf に記載されている、「/opt/mssql/bin/mssql-conf」を使用して実施する必要があります。

このツールで設定を行うと、「/var/opt/mssql/mssql.conf」に対して設定が行われます。
サンドボックス化されている箇所に関しては、永続的な変更は行うことができず、再起動をすると初期の状態にリセットされているかと思います。
そのため、SQL Server の各種設定は、外部ファイルとして保存しておき、起動時のそのファイルに保存されている内容を読み込ませることで設定の反映を実施しているようです。
image

  1. ライブラリ OS を起動
  2. ライブラリ OS のレジストリや SQL Server の起動時のスタートアップオプションとして mssql.conf の内容を設定
  3. SQL Server のサービスを起動

というようなイメージかと。

サンドボックス化された SQL Server の環境からは

  • -d C:\var\opt\mssql\data\master.mdf
  • -l C:\var\opt\mssql\data\mastlog.ldf
  • -e C:\var\opt\mssql\log\errorlog

を使用して起動するような設定が行われています。

SoL では、「C:\」は「/」相当ですので、Linux 側の「/var/opt/mssql/data」に格納されている master データベースを使用して起動するように、固定で記載されているのかと。
「/var/opt/mssql/data」に関しては、Linux 上のファイルシステムとなり、永続化された領域となっており、常に最新の情報が使用できますので、作成されたデータベースやログイン等の情報は、サービスを再起動しても有効になっている仕組みだと思います。

image
トレースフラグやデータベースのデフォルトディレクトリ等については、レジストリで設定されている項目となります。
これらの項目をライブラリ OS に書き込んだとしても再起動で初期化されてしまうため、外部ファイルとして保存しておき、起動時に毎回設定し直すことで、設定の永続化をしているような動きとなっていそうでした。

また、SQL Server 側からは、C ドライブがルートとしてマウントされているため、「C:\var\opt\mssql\data」というような形式で、ディレクトリを指定することができますが、「/var/opt/mssql/data」というように Unix のディレクトリ形式でも直接指定することが可能です。

Linux の mssql がアクセス可能なディレクトリであれば、「/var/opt/mssql/data」以外のディレクトリも指定することが可能であり、「/database/data」というような新しく作ったディレクトリに対してもデータベースを配置することが可能です。

Change the default data or log directory location では、Unix の形式でデフォルトのディレクトを変更していますが、実際に設定を行うと、SSMS からは以下のように認識が行われます。
image

実際に上記の設定の状態でデータベースを作成すると以下のようなパスの認識となります。
image

以下のどちらの形式でも DB は作れるようですので、管理しやすい方法をとればよいのかもしれないですね。

CREATE DATABASE [TESTDB2]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'TESTDB2', FILENAME = N'/database/TESTDB2.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'TESTDB2_log', FILENAME = N'/database/TESTDB2_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO



CREATE DATABASE [TESTDB2]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'TESTDB2', FILENAME = N'C:\database\TESTDB2.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'TESTDB2_log', FILENAME = N'C:\database\TESTDB2_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO

 

SoL ではサンドボックス化された環境の 「C:\binn」等のディレクトリに対して、データベースを作成しようとすると、エラーとなりますため、サンドボックス化された環境に対しての直接の変更はかなり制限が行われているようです。

Share

Written by Masayuki.Ozawa

11月 25th, 2016 at 11:28 pm

Posted in SQL Server

Tagged with

Leave a Reply