Add AdventureWorks to SQL Server 2019 RC1 (RHEL) on Docker

# はじめに

2019/08/21 に **SQL Server 2019 RC1** が発表されました。

- [SQL Server 2019 release candidate is now available](https://cloudblogs.microsoft.com/sqlserver/2019/08/21/sql-server-2019-release-candidate-is-now-available/) - SQL Server Blog
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/2fc89b29-fb38-fba7-208d-dbd614b1331c.png)

このRCはRelease Candidate\(製品候補版\)ということで、大きな問題などがなければ9月か10月にはGA\(General Availability\)されるだろうと思います。

今回は、GAに向けて、Docker環境のSQL Server 2019 \(RHEL\)にAdventureWorksDBを入れ、デモとして利用できる環境を作成します。


# 環境

今回は、以下の環境でインストールを実施しています。

```
- OS: Windows 10 Pro Version 1903 (OS Build 18362.295)
- Docker Desktop: 2.1.0.1 (37199)
- Docker Engine: 19.03.1
- Docker Compose: 1.24.1
```
※OSは、macOS Mojave 10.14.6でも確認済みです。

# インストール

インストールは、CTP3.2の時と同様です。

- [Install SQL Server 2019 CTP3.2 (RHEL) on Docker](https://qiita.com/ymasaoka/items/1c8e61a182dc6f61802c)

imageの個所をCTP3.2からRC1に変更することでSQL Server 2019 RC1を起動できます。
`docker-compose up -d` でSQL Serverを起動してください。

```yaml:docker-compose.yaml
version: '3'

services:
  mssql:
    image: mcr.microsoft.com/mssql/rhel/server:2019-RC1
    container_name: 'mssql2019-rc1-rhel'
    environment:
      - MSSQL_SA_PASSWORD=<your_strong_password>
      - ACCEPT_EULA=Y
      # - MSSQL_PID=<your_product_id> # default: Developer
      # - MSSQL_PID=Express
      # - MSSQL_PID=Standard
      # - MSSQL_PID=Enterprise
      # - MSSQL_PID=EnterpriseCore
    ports:
      - 1433:1433
    volumes: # Mounting a volume does not work on Docker for Mac
      - ./mssql/log:/var/opt/mssql/log
      - ./mssql/data:/var/opt/mssql/data
```


# AdventureWorksのダウンロード

[MS Docs](https://docs.microsoft.com/ja-jp/sql/samples/adventureworks-install-configure?view=sql-server-2017)、もしくは [GitHub](https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks)より、**AdventureWorks2017.bak** をダウンロードしてください。


# AdventureWorksの配置


## AdventureWorksの配置(Windows)

ダウンロードしたAdventureWorks2017.bakファイルを、ホストの.\mssql\dataフォルダパス内に配置します。

```:cmd.exe
> dir D:\Docker\mssql-2019\mssql\data /b
AdventureWorks2017.bak <-ファイルが配置されていることを確認
Entropy.bin
master.mdf
mastlog.ldf
model.mdf
modellog.ldf
model_msdbdata.mdf
model_msdblog.ldf
model_replicatedmaster.ldf
model_replicatedmaster.mdf
msdbdata.mdf
msdblog.ldf
tempdb.mdf
tempdb2.ndf
templog.ldf
```

## AdventureWorksの配置(Mac)

Docker on Macでは、docker-compose.yaml上でvolumesタグを指定できません。
そのため、docker cpコマンドを使用してAdventureWorks2017.bakファイルを/var/opt/mssql/dataディレクトリに配置します。

ダウンロードしたAdventureWorks2017.bakファイルが存在するディレクトリに移動します。
※今回は、docker-compose.yamlファイルと同じディレクトリに配置しました。

```sh
$ ls -al
total 98224
drwxr-xr-x   4 ymasaoka  staff       128  8 28 01:54 .
drwxr-xr-x  12 ymasaoka  staff       384  8 12 17:59 ..
-rw-r--r--   1 ymasaoka  staff  50286592  8 28 01:54 AdventureWorks2017.bak
-rw-r--r--   1 ymasaoka  staff       817  8 27 00:00 docker-compose.yaml
```

`docker ps`コマンドを使用して、起動しているSQL Server 2019コンテナのIDを確認します。

```bash
$ docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
e0868b38e321        mcr.microsoft.com/mssql/rhel/server:2019-RC1   "/opt/mssql/bin/perm…"   4 days ago          Up 4 seconds        0.0.0.0:1433->1433/tcp   mssql2019-rc1-rhel
```

この例でいうと、`e0868b38e321`がコンテナIDです。
このIDを使用して、Dockerコンテナ内の/var/opt/mssql/dataディレクトリにAdventureWorks2017.bakを配置します。

```sh
$ docker cp AdventureWorks2017.bak e0868b38e321:/var/opt/mssql/data
```

Dockerコンテナの中に入り、AdventureWorks2017.bakが配置されていることを確認してください。

```bash
$ docker exec -it e0868b38e321 "bash"
[root@localhost /]# ls -al /var/opt/mssql/data
total 121952
drwxr-xr-x 2 root root      4096 Aug 27 17:06 .
drwxr-xr-x 6 root root      4096 Aug 22 21:21 ..
-rw-r--r-- 1  501 games 50286592 Aug 27 16:54 AdventureWorks2017.bak  # ファイルが配置されていることを確認
-rw-r----- 1 root root       256 Aug 22 21:21 Entropy.bin
-rw-r----- 1 root root   4653056 Aug 27 16:59 master.mdf
-rw-r----- 1 root root   2097152 Aug 28 11:07 mastlog.ldf
-rw-r----- 1 root root   8388608 Aug 27 16:59 modellog.ldf
-rw-r----- 1 root root   8388608 Aug 27 16:59 model.mdf
-rw-r----- 1 root root  14024704 Aug 22 21:21 model_msdbdata.mdf
-rw-r----- 1 root root    524288 Aug 22 21:21 model_msdblog.ldf
-rw-r----- 1 root root    524288 Aug 22 21:21 model_replicatedmaster.ldf
-rw-r----- 1 root root   4653056 Aug 22 21:21 model_replicatedmaster.mdf
-rw-r----- 1 root root  14024704 Aug 22 21:34 msdbdata.mdf
-rw-r----- 1 root root    524288 Aug 27 16:59 msdblog.ldf
-rw-r----- 1 root root   8388608 Aug 27 16:59 tempdb.mdf
-rw-r----- 1 root root   8388608 Aug 28 13:28 templog.ldf
```


# AdventureWorksの復元


## AdventureWorksの復元(Windows)

SSMS\(SQL Server Management Studio\)を起動します。
Dockerコンテナ上で起動しているSQL Server 2019 RC1にログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/500d559b-8c77-f8f2-dd7c-f532b49d2b7f.png)

ログイン出来たら、\[サーバー名\] -> \[データベース\]を右クリックし、\[データベースの復元\]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/a8c65442-5748-27a4-f7a9-717c9affd772.png)

\[データベースの復元\]画面が表示されます。
\[ページの選択\] -> \[全般\]を選択し、\[ソース\]欄にあるラジオボタン\[デバイス\]を選択します。
ラジオボタン右横にある参照ボタン\[...\]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/efa779a1-bfac-8c1d-c552-3b63ca4e0bfa.png)

\[バックアップ デバイスの選択\]画面が表示されます。
\[追加\]ボタンを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/d05db7f1-74d4-d38e-9461-156cfcf13b14.png)

\[バックアップ ファイルの検索\]画面が表示されます。
/var/opt/mssql/dataディレクトリがデフォルトで表示されており、配置したAdventureWorks2017.bakが選択できることを確認します。
AdventureWorks2017.bakを選択し、\[OK\]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/8e64c934-e103-1cb1-1147-5f1dd2300f5d.png)

\[バックアップ デバイスの選択\]画面に、追加したAdventureWorks2017.bakファイルの情報が表示されていることを確認します。
\[OK\]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/ec254f3a-5434-f7ca-8b8f-44855129770b.png)

\[データベースの復元 - AdventureWorks2017\]画面が表示されます。
\[OK\]を選択し、データベースの復元を開始します。
※必要に応じて、\[File\]タブや\[オプション\]タブ内の設定を行ってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/cf45d2c7-db8e-ba9a-7c7c-d82a93038640.png)

復元に成功すると、以下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/dbb97db3-6a12-2569-3781-a1e48d69999f.png)

オブジェクトエクスプローラー上で\[AdventureWorks2017\]のDBが追加されたことを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/a70b136b-c2db-7ba9-57ed-f3d0cf0bda92.png)


## AdventureWorksの復元(Mac)

Azure Data Studioを起動します。
Dockerコンテナ上で起動しているSQL Server 2019 RC1にログインします。

<img width="503" alt="img-ads-conn.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/4ee5608c-21ca-5f4e-5878-ccc994f5ac32.png">

ログイン出来たら、SERVER DASHBOARDを開き、\[Tasks\] -> \[Restore\]を選択します。

<img width="754" alt="img-ads-srvdshbrd.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/6449b561-6340-3cb8-8480-dd8fe3fe9106.png">

\[Restore database\]画面が開きます。
\[General\]タブを選択します。
\[Source\] -> \[Restore from\]欄で、\[Backup file\]を選択します。
\[Backup file path\]欄にあるファイル選択ボタンを選択します。

<img width="838" alt="img-ads-restore01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/5b227710-5fbd-4454-3916-e4cf3fdcc7fe.png">

\[Select a file\]画面が表示されます。
dataディレクトリ以下に表示されている\[AdventureWorks2017.bak\]ファイルを選択し、\[OK\]を選択します。

<img width="838" alt="img-ads-restore02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/4f407225-c108-807a-9e91-de832af455ca.png">

\[Restore database\]画面に戻ります。
復元する内容を確認し、\[Restore\]を選択します。

<img width="838" alt="img-ads-restore03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/e7470c84-d2ee-93f3-74c1-a9e6567b3da0.png">

データベースのリストアが開始されます。
問題ない場合は、\[TASKS\]コンソールに\[Restore Database succeeded\]が表示されます。
\[AdventureWorks2017\]のDBが追加されたことを確認してください。

<img width="838" alt="img-ads-restore04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/0ee247fc-9638-c3e5-c265-06d03357e85c.png">


# 終わりに

Docker環境のSQL Server 2019 \(RHEL\)にAdventureWorksDBを入れて、デモとして利用できる環境を作成しました。
何も問題がなければ、2019/09もしくは2019/10には、SQL Server 2019はGAを迎えられると思います。
GAの前にいろいろ試して、ぜひ活用してみてください。

JSSUG\(Japan SQL Server User Group\)では、月1回、SQL Serverの勉強会を行なっています。
Microsoft MVPの方など、詳しい方もいらっしゃるので、興味ある方はぜひこちらにも参加してください。

- [JSSUG(Japan SQL Server User Group) - connpass](https://sqlserver.connpass.com/)

またJSSUGにはSlackグループもあります。
SQL Serverの最新情報などをいち早く確認することができますので、こちらもぜひJoinしてみてください。

- [Japan SQL Server User Group Slack](https://join.slack.com/t/jssug-sqlserver/shared_invite/enQtMzc0MDIxMTc0ODE3LTQyY2E0M2RhNmJkZjVhNmQxNGMyNzhmODFjMDdmOGY1MGQzMDM5Mzk2NThmOTI5NTRhYmQ5YmE2MGVmYTQ4NzA)


# 関連リンク

- [SQL Server 2019 RC1 が公開されました - SE の雑記](https://blog.engineer-memo.com/2019/08/22/sql-server-2019-rc1-%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F/)
- [Japan SQL Server User Group Slack](https://join.slack.com/t/jssug-sqlserver/shared_invite/enQtMzc0MDIxMTc0ODE3LTQyY2E0M2RhNmJkZjVhNmQxNGMyNzhmODFjMDdmOGY1MGQzMDM5Mzk2NThmOTI5NTRhYmQ5YmE2MGVmYTQ4NzA)

# 参考情報

- [Azure Data Studio を使用してデータベースをバックアップし、復元する - Microsoft SQL ドキュメント](https://docs.microsoft.com/ja-jp/sql/azure-data-studio/tutorial-backup-restore-sql-server?view=sql-server-2017)
- [Dockerでホストとコンテナ間でのファイルコピー - Qiita](https://qiita.com/gologo13/items/7e4e404af80377b48fd5)