Oracle Cloud：Autonomous DatabaseにSQLcl接続してみてみた

Oracle SQL Developer Command Line (SQLcl) は、SQLコマンドを入力するためのコマンドライン・インタフェースです。
SQL Developerの機能がコマンドライン・インタフェースに導入されており、従来のSQL＊Plusには無かった以前に実行したコマンド履歴などが使えます。
ここでは、Autonomous Databaseを作成して、SQLcl接続できるまでの手順を説明します。


# ■ 構成
今回は、Private Subnetに配置したインスタンスにSQLclをインストールし、Service Gateway経由でAutonomous Databaseにアクセスします。
<img width="454" alt="NW構成.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/7c0c6e9b-7212-924b-c4ef-dbdd1de2fa4c.png">


# ■ Autonomous Database側設定
Autonomous Data Warehouses(ADW)とAutonomous Transaction Processing Databases(ATP)ともに同じ手順となり、ここでは、ADWを作成して接続を行います。


## ● Autonomous Data Warehouse(ADW)を作成
Autonomous Data Warehouses画面で[Create Autonomous Data Warehouses]ボタンをクリックし、以下のような情報を入力して作成します。
![00.png](https://qiita-image-store.s3.amazonaws.com/0/109087/c572ffaa-45c0-0318-842d-acef4b1ca5ad.png)


## ● クライアント資格証明(Oracle Wallet)のダウンロード
データベース接続は暗号化されており、WALLETの資格証明を使用して接続します。
ADWでは、zip化された接続情報含めたファイルをダウンロードし、このzipを使用して接続します。

**1) 作成したADWのページに移動し、「DB Connection」をクリック**
![01.png](https://qiita-image-store.s3.amazonaws.com/0/109087/7dbca314-75c3-7cdc-4226-6d14766c0eee.png)


**2) 「Database Connection」画面で、「Download」をクリック**
![02.png](https://qiita-image-store.s3.amazonaws.com/0/109087/2de51e3b-8ca3-0dc0-7420-cbcc043467ec.png)


また、この画面の「Connection Strings」項目について、
「Connection String」から、"ar8grq08m8d79by_adw01"が作成したPDB Nameであることが確認できます。
「TNS Name」には、high, mediumおよびlowの3つの定義済みのサービス名があり、用途に合わせて選択し接続しますので、メモしておきます。
定義済みDatabaseサービス名の詳しい内容は次のドキュメントを参考してください。

　・ドキュメント: [事前定義されたAutonomous Databaseのデータベース・サービス名](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/connect-predefined-generic.html#GUID-E49773B3-6C07-4F6F-906B-42705D237523)
 
https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/connect-predefined-generic.html#GUID-E49773B3-6C07-4F6F-906B-42705D237523


**3) 「Download Wallet」画面で以下を設定し、[Download]をクリック**
	「PASSWORD」:Oracle Walletのパスワードを設定
	「Confirm Password」:確認するため再度パスワードを入力
![03.png](https://qiita-image-store.s3.amazonaws.com/0/109087/8d084b8a-8d63-ba2e-fea9-5c8128f335a6.png)

**4)  クライアントのセキュリティ資格証明のzipファイルを適切な場所に保存します。**
![04.png](https://qiita-image-store.s3.amazonaws.com/0/109087/9308143e-4147-6808-5ee2-48033f2e7154.png)

ここでは、ダウンロードしたWallet_ATP01.zipを　$HOME/oracle へ配置します。

```shell-session
[opc@client-inst ~]$ mkdir ~/oracle
[opc@client-inst ~]$ mv Wallet_ATP01.zip ~/oracle/
```

# ■ Client側設定

## ● JAVA8 ダウンロードとインストール
SQLclはJavaアプリケーションであり、Java Runtime Engine（JRE）version 8以上を必要としますのでまずダウンロードしてインストールします。

**1) JAVA8 ダウンロード**
以下Java SE Development Kit 8u201 のページから、ダウンロードします。

 https://www.oracle.com/java/technologies/downloads/#java8
 


**2) インストール**
ここではLinux版の　jdk-8u201-linux-x64.rpmダウンロードしてインストールします。

```shell-session
[root@client-inst opc]# rpm -ivh jdk-8u201-linux-x64.rpm
	準備しています...              ################################# [100%]
	更新中 / インストール中...
	   1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
	Unpacking JAR files...
		tools.jar...
		plugin.jar...
		javaws.jar...
		deploy.jar...
		rt.jar...
		jsse.jar...
		charsets.jar...
		localedata.jar...
```


## ● SQLcl ダウンロードとインストール
**1)  SQLcl ダウンロード**
以下ページからダウンロード

https://www.oracle.com/database/technologies/appdev/sqlcl.html


**2) SQLclインストール**
ここでは、~/oracleへインストール

```shell-session
 [opc@client-inst ~]$ mv sqlcl-18.4.0.007.1818.zip ~/oracle/
 [opc@client-inst ~]$ cd ~/oracle
 [opc@client-inst ~]$ unzip sqlcl-18.4.0.007.1818.zip
	Archive:  sqlcl-18.4.0.007.1818.zip
	   creating: sqlcl/
	   creating: sqlcl/bin/
	   creating: sqlcl/lib/
	  inflating: sqlcl/bin/sql
       ・・・
```


## ● SQLcl接続確認
**1)  /nologオプションを使用してSQLclを起動**

```shell-session
[opc@client-inst ~]$ ~/oracle/sqlcl/bin/sql /nolog

	SQLcl: 月 2月 18 16:56:36 2019のリリース18.4 Production

	Copyright (c) 1982, 2019, Oracle.  All rights reserved.
```


**2) Oracle Walletを使用するようにSQLclセッションを構成**

```sql
SQL> set cloudconfig /home/opc/oracle/Wallet_ADW01.zip

	操作は正常に完了しました。
	操作は正常に完了しました。
	Using temp directory:/var/folders/td/ltsnlh6d01gdrm0rjh5hmn_00000gn/T/oracle_cloud_config1774995246833750575
```


**3) ADWに接続**
設定したパスワードを入力して接続し、SQLを実行してテスト

```sql
SQL> connect ADMIN@adw01_HIGH

	パスワード (**********?) ********************
	接続しました.


SQL> select BANNER_FULL from v$version;

BANNER_FULL
-----------------------------------------------------------------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL> select NAME from v$pdbs;

NAME
-------------------------------------------
AR8GRQ08M8D79BY_ADW01

```


# ■ おまけ：SQL Developer インストール
Mac OSにSQL Developerをインストールします。

## ● JAVA8 ダウンロードとインストール
次のURLから、jdk-8u201-macosx-x64.dmg(Mac版) をダウンロードし、ダブルクリックしてインストール

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



## ● SQL Developerダウンロード
次のURLからsqldeveloper-18.4.0-376.1900-macosx.app.zip(Mac版)をダウンロード

https://www.oracle.com/jp/database/sqldeveloper/

## ● SQL Developerインストール
sqldeveloper-18.4.0-376.1900-macosx.app.zipを解凍
インストールは解凍するだけです。

## ● SQL Developer設定
**1) 解凍されたSQLDeveloperアイコンをクリックして起動**

**2) Oracle SQL Developerを起動し、接続パネルで「接続」を右クリックし、「新規接続」を選択**
![01.png](https://qiita-image-store.s3.amazonaws.com/0/109087/41a5ca06-3897-d070-838d-5980638fdd5e.png)


**3) 次の情報を入力して[保存]をクリックして設定**

	・接続名: この接続の名前を入力します。
	・ユーザー名: データベース・ユーザー名を入力
	・パスワード: データベース・ユーザーのパスワードを入力
	・接続タイプ: クラウド・ウォレットを選択
	・構成ファイル: ブラウズをクリックし、クライアントの資格証明のzipファイルを選択
	・サービス: サービス名を選択
![02.png](https://qiita-image-store.s3.amazonaws.com/0/109087/84fe8842-9d56-3acc-b784-21bf61f575a5.png)

**4) 接続**
作成した接続名を右クリックして[接続]を行い
SQLを実行して接続を確認します。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/109087/35bbfd72-e082-2d03-b5a6-22d23136d0f3.png)


# ■ おまけ: SYSDATEとCURRENT_DATE
Autonomous Databaseは、Global Public Cloudということもあり、OS時刻がUTC(協定世界時)となっています。
ということで、注意点は SYSDATE です。
SYSDATE、SYSTIMESTAMPは OS時刻を出力するので、UTCになります。
JST(日本標準時)時刻を出力するには、CURRENT_DATE, CURRENT_TIMESTAMP を使います。
そのためには事前に、'ALTER DATABASE SET ~' または、　'ALTER SESSION SET ~' で、Database時刻を TIME_ZONE=‘Asia/Tokyo’ をセットしておきます

## ● CURRENT_DATEでJST出力する手順

### ・UTC確認
**1) NLS_DATE_FORMAT設定**

```SQL
SQL> Alter session set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

　　　セッションが変更されました。
```

**2) DBタイムゾーンUTC確認**

```SQL
SQL> select DBTIMEZONE from dual;

 　　　DBTIME
　　　------
　　　+00:00
```

**3) SYSDATE確認**

```SQL
SQL> select SYSDATE from dual;

　　　SYSDATE
　　　-------------------
　　　2020/05/21 08:26:48
```

**4) CURRENT_DATE確認**

```SQL
　　SQL> select CURRENT_DATE from dual;

　　　CURRENT_DATE
　　　-------------------
　　　2020/05/21 08:38:15
```


### ・ DBタイムゾーンAsia/Tokyoへ変更
**5) JSTへ変更**

```SQL
SQL>  alter database set time_zone = 'Asia/Tokyo';

　　　Databaseが変更されました。
```


**6) Database再起動**
　　WebコンソールでAutonomous DB再起動

### ・ JST出力確認
**7) DBタイムゾーン確認**

```SQL
SQL> select DBTIMEZONE from dual;

　　　DBTIMEZONE
　　　--------------------
　　　Asia/Tokyo
```

**8) CURRENT_DATE確認**

```SQL
SQL> select CURRENT_DATE from dual;

　　　CURRENT_DATE
　　　-------------------
　　　2020/05/21 17:39:44
```


# ■ 参考
**・ Oracle Cloud Infrastructure Documents**
　- [Oracle Autonomous Database Serverless](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/index.html)
　- [Oracle SQLclを使用した接続](https://docs.oracle.com/ja-jp/iaas/autonomous-database/doc/connect-oracle-sqlcl.html)
　- [WalletなしでOracle SQLcl Cloudを接続](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/connect-sqlcl-tls.html#GUID-19AC4674-FE3C-492B-B47C-1DFE4D29F835)
　- [Connect with Oracle SQLcl](https://docs.oracle.com/en-us/iaas/autonomous-database/doc/connect-oracle-sqlcl.html)
　- [ウォレット(mTLS)を使用したOracle SQLcl Cloudの接続](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/connect-sqlcl.html#GUID-AC24404D-8D0B-4716-83F6-F0F501318011)
　- [Connect to Autonomous Database Using Oracle Database Tools ](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/connect-tools.html#GUID-CF6C7E1B-D0D4-4641-BADA-5C57DEA7C73B)
　- [事前定義されたAutonomous Databaseのデータベース・サービス名](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/connect-predefined-generic.html#GUID-E49773B3-6C07-4F6F-906B-42705D237523)

**・ 各ツール**
　- [Oracle SQLcl](https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/)
　- [SQL Developer](https://www.oracle.com/jp/database/sqldeveloper/)
　- [Java SE Development Kit 8 Downloads](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)