オンプレからクラウドへの移行 IBM Lift チュートリアル: （２）SQL ServerをIBM のクラウドDBへ

このチュートリアルでは、オンプレのMicrosoft SQL Serverからクラウドへのデータベース移行ツール IBM Liftを使って、Db2 on Cloudへデータを移行する方法をご紹介します

## 前準備

### このチュートリアルの前提
- 移行元はオンプレにあるSQL Server
- 移行先はDb2 on Cloud
    - パスワードは「PASSWORDxxxxxxxx」としています
    - ホスト名はdashdb-txn-xxxxx.netとしています
    
### ご参考情報
IBM Liftとは？インストールとは？はこちらの記事をご覧ください
https://qiita.com/azzeten/items/525479b9817cbdd6ce25

### ざっくりの手順はこちら

1. SQL Serverからデータを抜き出して、一時的にクライアントPCに保存します
2. 移行先のDb2 on CloudにDDLを実行して、移行先テーブルを作成します。
3. クライアントPCに保存されたCSVファイルを、Db2 on Cloudのあるクラウド上にアップロードします。この時点ではまだロードされません。単純にファイルがクラウドに転送されただけのイメージです。
4. クラウドに転送されたCSVファイルを、Db2 on Cloudの先程作成した表にロードします

## Liftでマイグレーション!!

### Step1: 移行元のSQL Serverの状態を確認

- DBは hogemssqlです。接続ユーザはsaでパスワードは「P@55w0rd」です
- スキーマはhogeです
- テーブル名はtesttableで中身は以下のとおり

![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/5e3df07d-5d13-4dd2-58ee-1a6fe4eee680.png)

### Step2: 移行先でDDLを実行

Db2 on Cloudで、テーブル定義を先に設定しておきます。

```sql
CREATE TABLE LIFT_TESTMS (COL1 INT, COL2 CHAR(10));
```

### Step3: liftを使ってSQL Serverから移行

**データを、(1)SQL Serverから抜き出し (2)クラウドにアップして、(3)Db2 on Cloudにロードします**

```bash
# (1) SQL Serverからデータを抜き出す。 lift extract コマンド。
# 抜き出す際のCSV名は「testliftms.csv」としています

$ sudo lift extract --source-schema hoge --source-table testtable --source-database hogemssql --source-host localhost --source-user sa --source-password P@55w0rd --source-database-port 1401 --source-database-type sqlserver --file testliftms.csv
Password:
Extracting from table 'testtable' to /opt/lift-cli/bin/testliftms.csv
[##########] Extracted 46 B
Extracted 46 B (3 of 3 rows) from table 'testtable' to /opt/lift-cli/bin/testliftms.csv in < 1 second at an average rate of < 1 Mb/s

# lsでCSVができているかを確認します
$ ls
lift                        run20180503145755373-506312 testliftms.csv
liftMain                    setupEnv.sh

# 念の為中身を確認します。さきほどのキャプチャと合っています。
$ cat testliftms.csv
1,"aaa       "
2,"bbb       "
30,"ccc       "

# (2)データをクラウドにアップします。　　lift putコマンドです。
$ sudo lift put --file testliftms.csv --target-user  jln84695 --target-password PASSWORDxxxxxxxx --target-host dashdb-txn-xxxxx.net

Putting file /opt/lift-cli/bin/testliftms.csv (size 46B) at a maximum throughput of 500.00 Mb/s.
[##########] Put 46/46 B at < 1 Mb/s (0 sec remain)
Transferred file /opt/lift-cli/bin/testliftms.csv in 7 seconds at average throughput of < 1 Mb/s.
The file transfer completed successfully.



# (3) クラウドにアップされたデータをDb2 on Cloudに先程作ったテーブル「LIFT_TESTMS」表へロードします

$ sudo lift load --filename testliftms.csv --target-schema JLN84695 --target-table LIFT_TESTMS --file-origin extract-sqlserver --target-user  jln84695 --target-password PASSWORDxxxxxxxx --target-host dashdb-txn-xxxxx.net

Loading file testliftms.csv into JLN84695.LIFT_TESTMS
Loaded file testliftms.csv into "JLN84695"."LIFT_TESTMS" in 1 seconds
Load Id: 626844897
Details
  Rows loaded: 3
  Rows skipped: 0
  Rows rejected: 0
  Rows deleted: 0

```


### Step4: 移行を確認

Db2 on Cloudの画面から確認をします。
以下のように、ロードされています！！

![スクリーンショット 2018-05-03 18.39.01.png](https://qiita-image-store.s3.amazonaws.com/0/119378/f9054ddd-bd53-dc9e-f01c-c15da3cba30b.png)


![スクリーンショット 2018-05-03 18.39.07.png](https://qiita-image-store.s3.amazonaws.com/0/119378/961368ff-6b26-07ad-ffbe-aba3a9734fb6.png)