OCIのDBCSの自動バックアップからリストアしてみた

#1.こんな方に向けてこの記事を作成しました
Oracle Cloud Infrastructure(OCI)を初めて学ぶ方・Database Cloud Service(DBCS)の基本的機能を一通り触りたい方

#2.この記事を読むと...
DBCSのバックアップからのリストアをマスターできる！
最近アップデートされ導入されたREDOログの自動バックアップも理解できる

#3.自動バックアップDBのリストア
[OCIのDBCSから自動バックアップした記事](https://qiita.com/yuki_coffee/items/26f5d27e9fe1a9ebffd4 "OCIのDBCSから自動バックアップした記事")で設定した自動バックアップから、データベースのリストアをしてみましょう。
ここからはコードのコピペで進めることができます！一緒にやっていきましょう。

**＜だいたいの流れ 概要＞**
・OCIのDBに表を作成する
・OCIのDBに作成した表に行をインサートする
・設定済みの自動バックアップが動く
・OCIのDBの表にインサートした行のデータをアップデートする
・自動バックアップからリストアする
・アップデート前のデータに戻っているのを確認する

####①ターミナルからOCIのDBにssh接続
Windowsでコマンドプロンプトを開きましょう。
Macではターミナルを開いてください。
![restore 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/bccabc24-3cca-43af-0f37-d8fbfe4110ab.png)

```
ssh -i <秘密鍵のPath> opc@nodeのパブリックアドレス
```

![restore 24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/efc28ae6-316e-360d-fcee-7e05b03997a4.png)


####②Oracleユーザになり、sql plusを起動　 / as sysdba

OracleのDBをいじるときは、Oracleユーザに変更しておきましょう。

OCIでは、データベースに予めインストールされているユーザがいくつかあります。
アクセス用にopcユーザ、オラクルデータベース用のoracleユーザ、そして、ルート権限を持つrootユーザです。

下記のコードで**oracleユーザ**に変身しましょう。

```
sudo su - oracle
```

![restore 25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/951baa47-3c0d-9d0f-1ef9-8a833d5c1cbb.png)
表作成・操作を行うために、**Sqlplusを起動**します。

```
sqlplus / as sysdba
```

![restore 26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/500df334-15a4-8fb9-b6b0-40458c72c19a.png)
SQL> これでsqlplusに接続が完了しました;
SQL> これから表操作を行っていきましょう;

####③Employees表を作成する
**Employees表**という名前の従業員情報を管理する表を**作成**します。
今回はシンプルに、first_name(名)とlast_name(姓)という列を持たせます。

```
CREATE TABLE Employees (first_name varchar(100), last_name varchar(100));
```
![restore 27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/f8334225-7d63-d6d9-9af5-f78b0f8c7f33.png)
Table Created.という文字からEmployees表が作成されたことを確認します。

####④作成したEmployees表に従業員をINSERT
それでは、従業員を登録していきましょう。
サッカー選手のリオネル・メッシを**INSERT**していきます。

```
INSERT into Employees (first_name, last_name) VALUES ('Lionel','Messi');
```

![restore 28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/0d98ad1d-c9cf-76ba-b234-9f376b49fb9c.png)
1 row created.からリオネル・メッシが表にINSERTされたことを確認できます。

更に**Select文**で、リオネル・メッシを確認してみましょう。
正しくINSERTされたことを確認できたら、**commit**することも忘れないように。

```
select * from Employees;
```

```
commit;
```

![restore 32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/b26f1f39-3fc4-5508-4ef8-20d9ea83cc8b.png)


####⑤自動バックアップ

Employees表を作成し、その表にLionel Messiという従業員をINSERTしました。それらの変更が前記事で設定した自動バックアップが実行されるのを待ちましょう。

1日のんびり待っても良いですし、自動バックアップ時間を指定して実行させるのも自由です。

各々の方法で自動バックアップが取られたなというタイミングで、OCIから**自動バックアップ履歴を確認**しましょう。

DBシステムから選択できる**DB名をクリック**しましょう。(今回の例ではDBTEST)

![restore 30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/2ceb0c88-afa9-67e3-152b-8043fd3e410b.png)
![restore 40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/dd86f2e0-b0dc-c993-d964-4a0ba8fa3c0d.png)



####⑥自動バックアップ後、Lionel Messiを再度確認

```
select * from Employees;
```

![restore 29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/a508d936-aa1a-59d3-dd33-806da10e525b.png)

自動バックアップ後もLionel Messiを確認できますね。自動バックアップには、Lionel Messiが入っているはずです。

次に、Lionel Messiを**別人に**変えてみましょう。

####⑦Lionel MessiをCristiano Ronaldoに

```
UPDATE Employees SET first_name = 'Cristiano', last_name = 'Ronaldo';
```

Cristiano Ronaldoに変えた後、ちゃんと別人になったか**Select文**で確認しましょう

```
Select * from Employees;
```

```
Commit;
```

![restore 33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/5520155d-1e03-bc38-5bc4-76847d000985.png)

ちゃんと別人に変えることができました。

####⑨自動バックアップでLionel Messiを取り戻す

DBシステムから選択できるDB(例ではDBTEST)をクリックし、アクションボタンから**リストアをクリック**
![restore 34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/d63d31fb-35ea-9ea5-666e-a2ce72a96c66.png)

今回は指定した時間に戻りたいので、**タイムスタンプリストア**しましょう。
![restore 41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/c32f01fb-0646-2e88-d7c4-61d6f91b3c71.png)

DBTESTのアイコンがオレンジ色に変わり、ステータスも「更新中」状態であることが確認できます。
この状態で少し待ってみましょう。
![restore 37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/4cbf43fc-ad0a-328f-3705-963a2291d81f.png)
DBTESTのアイコンが緑色になり、ステータスも使用可能となりました！
![restore 38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/7c3e3d76-d39b-2eb7-b715-bc1f5321a64b.png)

理論上、自動バックアップからLionel Messiが戻ってきているはずです。

Sqlplusより、確認しましょう。
　
####⑩自動バックアップが正常実行されたことを確認

下記のSQL文でLionel Messiが戻ってきていることを確認します。

```
select * from Employees;
```

![restore 39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/98b42c3b-a1cb-6d20-a401-8084d2a5ee51.png)

Cristiano Ronaldoに変更しましたが、自動バックアップによりLionel Messiが戻ってきたのを確認できました。

これで、**自動バックアップからリストア**することができましたね。

記事をご覧頂きありがとうございました。
今回は番外編も用意しておりますので、興味がある方は是非チェックしてみてください！

#番外編 REDOログバックアップについて

最近OCIでは、REDOログの自動バックアップも始まっていたのをご存知でしたか？
1時間に1回自動でREDOログが取られます。

せっかくなので手を動かしながら、見ていきましょう。
少し複雑なので時間帯と一緒に記載しています。

**・11:00頃 Oracleユーザになり、sqlplusを起動**

下記のコードでoracleユーザに変身しましょう。

```
sudo su - oracle
```

![restore 25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/951baa47-3c0d-9d0f-1ef9-8a833d5c1cbb.png)
表作成・操作を行うために、sqlplusを起動します。

```
sqlplus / as sysdba
```

![restore 26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/500df334-15a4-8fb9-b6b0-40458c72c19a.png)

```
Select * from Employees; 
```

![restore 42 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/1cfebeec-a151-7151-e454-3ca0dead975c.png)
**・13:00～15:00 自動バックップ**

この時点で毎日1回行われる自動バックアップが行われました。
自動バックアップの中身は、Lionel Messiが入っています。

**・15:30 update文でLionel MessiをCristiano Ronaldに**

```
UPDATE Employees SET first_name = 'Cristiano', last_name = 'Ronaldo';
```

```
commit;
```

![restore 43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/57aec7f9-079a-6a5a-3d3c-5871486a3ecc.png)

上記で確認できる通り、Cristiano Ronaldに変わりました。

**・16:00 REDOログバックアップ**

1時間に一回、REDOログのバックアップを取っています。
最新の自動バックアップには、Lionel Messi
16:00に取られたREDOログには、Cristiano Ronaldに変えたupdate文が入っています。

この状態で、リストアボタンから「最新にリストア」したらデータはどちらになるのでしょうか？
REDOの効果を実感するためにも、リストアは17:00に行いましょう(翌日の自動バックアップの時間までは大丈夫ですが)

**・17:00 最新の状態にリストア**

リストアボタンから、**最新にリストア**を選んでみましょう。

・Select文で確認

```
Select * from Employees; 
```
.......。

..............!?

![restore 44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705638/45dd8151-f835-5154-e2a5-03fba0fb8d16.png)

答えは、**Cristiano Ronaldo**でした。

つまり、「最新にリストア」では**最新の自動バックアップ+最新のREDOログ**から**リストア**されるということが分かりました。

以上で、番外編は終わりです。