Oracle Cloud Infrastructure の Autonomous Databaseで使える SQL Developer Web (ブラウザベース)

※※※本投稿の内容は古いため、こちらを参照ください。※※※

https://qiita.com/mikika/items/78f232b34b9017981049


**■■■Oracle Cloudのウェビナーシリーズは？ → [こちら](https://bit.ly/2VJS8pU)■■■**



# はじめに
Oracle Cloud Infrastructure 上にある Autonomous Database へ接続してSQLを実行するのに、ブラウザベースのSQL Developer Webが利用できます。adminユーザ(*1)での接続なら、Autonomous Database を作成してすぐに利用できます。クラウド環境にあるデータベースなので、やはり、ブラウザからSQLを実行したい気がします。

デスクトップ版のSQL Developerは古くからありますが、そこから機能を厳選した感じで、ショートカットキーも踏襲されています。

(*1): 本投稿内でのadminユーザとは、Autonomous Databaseを管理するデフォルトの管理ユーザのことを指しています。

（余談ですが、ブラウザベースでのSQL実行には、他にも Oracle ML SQL Notebookや、Oracle Application Expressを利用する方法もあります。）

# SQL Developer Web へのアクセス（adminの場合）

## adminでログイン

OCIコンソールのADBのページから、「サービスコンソール」をクリック

![img.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/7c65e543-69e9-de09-d260-d74a5c446190.jpeg)

右側の「Development」→ 「SQL Developer Web」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/bdcefbca-6869-38e4-cbd2-5fc5109ed726.png)

ログイン画面になるので、以下を入力

- ユーザ名：admin
- パスワード：(Autonomous Database作成時に指定したadminのパスワード）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/92eda965-6fd0-8794-4750-f905e27bcd8b.png)


ログインすると、ウィザードで色々教えてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/b9d321b3-32ec-6fc5-a9fb-5f0d1b6818a0.png)

## SQLを実行

「ワークシート」に、以下のSQLを直接入力して、「文の実行」ボタンをクリックして（または**Ctrl + Enter** で）実行したところです。画面下部に「問合せ結果」が表示されます。

`select object_name, object_type from dba_objects where rownum < 10;`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/3a50f6a2-4a0d-065a-04bc-c533bfbd4bc5.png)

（**Ctrl + Space** でSQLの補完が可能）


## SQLの整形（フォーマット）

ログイン時のウィザードでも教えてくれる「SQLのフォーマット」ボタンをクリックしたところです（または **Ctrl + F7** ）。右上の「ワークシート」ウィンドゥ内のSQLが整形されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/67bf63ab-74c2-08a0-0961-f7dd340fae71.png)

## データ・モデラーも使ってみる

デスクトップ版のSQL Developerでご紹介している
[SQL DeveloperのData Modelerでデータベースに接続してテーブルの構造を出力する](https://qiita.com/mikika/items/4c239ed3a5e0f4d8437a)
↑↑ この機能、Web版でも利用できます。

「データ・モデラー」タブで、「SSB」ユーザを選択、表示されたテーブル5つを右側にドラッグすると（Ctrlキーで複数選択可）、テーブルの構造と、FK(外部キー)制約を元にしたリレーションが表示されました。
※SSBはAutonomous Data Warehouseのサンプルスキーマです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/2a68d1f1-0cea-93df-c281-7bfad3c95ecf.png)

「データ・モデラー」タブが見つからないときは、左上の「三」押下で左側に表示されるメニューから、「アクション」→「データ・モデラー」から辿れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297987/75dc3ef5-1747-1eff-976a-438cdff47be2.png)



# SQL Developer Web へ、admin以外のユーザで接続する

実際にデータベースユーザが利用する時には、admin以外のユーザで接続することになるかと思います。追加の手順を実施し、専用のURLからログインします。

- (データベースユーザを作成する)
- プロシージャを実行し、そのユーザでのアクセスを有効にする
- 上記プロシージャ内で指定した文字列を使用するような、専用のログインURLからアクセスする

ドキュメントではこちら [Provide SQL Developer Web Access to Database Users](https://docs.oracle.com/en/cloud/paas/atp-cloud/atpug/sql-developer-web.html#GUID-4B404CE3-C832-4089-B37A-ADE1036C7EEA) に記載がありますが、

スマートスタイル様のBLOGにご紹介がありましたので、ご参考になるかと思います。（有難うございます！）

[SQL Developer Web(SDW)からATPに接続する](https://www.s-style.co.jp/blog/2019/08/4915/)
→ admin以外のユーザーログイン

## 追記

こんな感じでやります。ADMINでログインしているSQL Developer Webの画面上で実施するとよいです。そのときのURLもメモしておき、後で利用します。

```
-- (データベースユーザを作成し、権限付与)
CREATE USER SCOTT IDENTIFIED BY Tiger123456##;  -- ①ユーザ名とパスワードを指定
GRANT DWROLE to SCOTT;  
GRANT UNLIMITED TABLESPACE to SCOTT;

-- プロシージャを実行し、そのユーザでのアクセスを有効にする
BEGIN
   ORDS_ADMIN.ENABLE_SCHEMA(
     p_enabled => TRUE,
     p_schema => 'SCOTT',  -- 上記①で指定したユーザ名（スキーマ名）※大文字で
     p_url_mapping_type => 'BASE_PATH',
     p_url_mapping_pattern => 'sctweb', -- ②URL内に含める文字列を指定
     p_auto_rest_auth => TRUE
   );
   COMMIT;
END;
/
```

ADMINでアクセスしたときのURLを元に、URLが確認できます。

- ADMINでのURLが↓のとき、
    - https://hogehoge.adb.us-phoenix-1.oraclecloudxx.com/ords/admin/_sdw/?nav=worksheet
- SCOTTでのURLは、
    - admin 部分を プロシージャ内 ②で指定した文字列 に変更したものが、そのユーザでログイン可能なURL
    - https://hogehoge.adb.us-phoenix-1.oraclecloudxx.com/ords/sctweb/_sdw/?nav=worksheet

※上記URLで接続できないときは、Autonomous Databaseが起動していることを確認する。

### DWROLEについて

ロールとは、様々な権限情報を付与しやすくするためにひとまとめにしたグループです。autonomous data warehouse (ADW) や autonomous transaction processing (ATP) には、dwroleという名前のロールが用意されています。

上の手順では、dwrole を付与(grant)していますが、そのdwroleに含まれる権限の種類をドキュメント等で確認の上、使うのがよいかと思います。（必要最低限の権限を与えることが適切なので）

- ATPのドキュメント: [Using Oracle Autonomous Transaction Processing - Part II Managing and Monitoring Autonomous Transaction Processing - Manage User Privileges with Autonomous Transaction Processing](https://docs.oracle.com/en/cloud/paas/atp-cloud/atpug/manage-users-privileges.html#GUID-50450FAD-9769-4CF7-B0D1-EC14B465B873)
- ADWのドキュメント: [Using Oracle Autonomous Data Warehouse - Part II Managing and Monitoring Autonomous Data Warehouse - Manage User Privileges with Autonomous Data Warehouse](https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/manage-users-privileges.html#GUID-50450FAD-9769-4CF7-B0D1-EC14B465B873)

# 参考

## ドキュメント（製品マニュアル）
- [Provide SQL Developer Web Access to Database Users](https://docs.oracle.com/en/cloud/paas/atp-cloud/atpug/sql-developer-web.html#GUID-4B404CE3-C832-4089-B37A-ADE1036C7EEA)

## その他ご参考情報
- [SQL Developer Web(SDW)からATPに接続する](https://www.s-style.co.jp/blog/2019/08/4915/)
- [SQL DeveloperのData Modelerでデータベースに接続してテーブルの構造を出力する](https://qiita.com/mikika/items/4c239ed3a5e0f4d8437a)
- [SQL Developer Web comes to Autonomous Data Warehouse - oh YES!]
(https://blogs.oracle.com/datawarehousing/sql-developer-web-comes-to-autonomous-data-warehouse-oh-yes)