ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

WLS(WebLogic)からAutonomous Database(ATP/ADW)に接続するデータソース(コネクションプール)を作成してみる。

※(2019/7/4追記) 本記事は単体のWLS(WebLogic)からAutonomous Databaseに接続するデータソースを作成する記事として修正しました。

WLS(WebLogic)からAutonomous Databaseに接続するデータソース(コネクションプール)を作成してみるやで彡(゚)(゚)

ポイントは幾つかあって

  • (推奨)最新バージョンの JDBC Driver(Full版)をWLSのOS上に格納(※上書きはしない)して、各種jarのCLASSPATHを通す。
  • (必須)Autonomous Database のウォレットをWLSのOS上に格納する。
  • (必須)ウォレットの格納場所を何かしらの手段で指定する。 ※今回はTNS_ADMINをJDBC URLに指定

と云ったところです。

1. JDBC Driver 19.3 Full版のダウンロード

2019年6月15日現在、Oracle Database JDBC Driver の最新バージョンは 19c(19.3)ですが、
随時更新されるので必ず最新バージョン有無を確認した上で使用して下さい。

Oracle Database 19c (19.3) JDBC Driver & UCP Downloads
https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-19c-5460552.html

幾つか種類が有りますが、WLS12.2.1.3のJDK8に対応した「ojdbc8-full.tar.gz」をダウンロードします。

2. JDBC Driver 19.3 Full版をWLSのOSに格納&展開

ダウンロードした ojdbc8-full.tar.gz を WLS(WebLogic) の OS に格納して展開します。
WLS(WebLogic)の起動ユーザーからアクセス可能なディレクトリ/owner/group/permissionとします。

今回はディレクトリ/u01/app/oracle/tools/home/oracle/work に JDBC Driver を展開します。

su - oracle
/u01/app/oracle/tools/home/oracle
mkdir work
cd work
cp -p 
cp -p /tmp/ojdbc8-full.tar.gz ./
tar xvzf ./ojdbc8-full.tar.gz

/u01/app/oracle/tools/home/oracle/work/ojdbc8-full配下に各種jarファイルが展開されます。

$ pwd
/u01/app/oracle/tools/home/oracle/work/ojdbc8-full
$ ls -la
total 8644
drwxr-x---. 2 oracle oracle    4096 Apr 29 22:16 .
drwxr-x---. 3 oracle oracle    4096 Jun 15 02:39 ..
-r--r-----. 1 oracle oracle 4210517 Apr 24 21:07 ojdbc8.jar
-r-xr-x---. 1 oracle oracle   11596 Apr 24 21:07 ojdbc.policy
-r--r-----. 1 oracle oracle  144681 Apr 24 21:07 ons.jar
-r--r-----. 1 oracle oracle  306004 Apr 24 21:07 oraclepki.jar
-r--r-----. 1 oracle oracle 1661488 Apr 24 21:07 orai18n.jar
-r--r-----. 1 oracle oracle  205154 Apr 24 21:07 osdt_cert.jar
-r--r-----. 1 oracle oracle  306854 Apr 24 21:07 osdt_core.jar
-rw-r-----. 1 oracle oracle    2592 Apr 29 22:16 README.txt
-r-xr-x---. 1 oracle oracle   29205 Apr 24 21:07 simplefan.jar
-r--r-----. 1 oracle oracle 1680074 Apr 24 21:07 ucp.jar
-r--r-----. 1 oracle oracle  262664 Apr 24 21:07 xdb.jar

3. Autonomous DatabaseのWalletファイルをダウンロードして展開

Autonomous DatabaseのWalletファイルについては下記らへんをご参照彡(゚)(゚)

クライアント資格証明(ウォレット)のダウンロード
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-download-wallet.html#GUID-B06202D2-0597-41AA-9481-3B174F75D4B1

Python (cx_Oracle) から2つ目のAutonomous Database (ADWやATP)に接続してみる
https://qiita.com/mikika/items/5d157c2fcdd80d560bd4

TableauをOracle Autonomous に繋げてみた
https://qiita.com/daisuke_high_185/items/fca12ae6fbc4c526f821

ダウンロードした Walletを を WLS の OS に格納して展開します。
やはりWLSの起動ユーザーからアクセス可能なディレクトリ/各種権限とします。

今回は /u01/app/oracle/tools/home/oracle/work/wallet に展開します。

su - oracle
cd /u01/app/oracle/tools/home/oracle/work
mkdir wallet
cd wallet
cp -p /tmp/Wallet_DB201906031608.zip ./
unzip Wallet_DB201906031608.zip

/u01/app/oracle/tools/home/oracle/work/wallet配下に各種ファイルが展開されます。

$ pwd
/u01/app/oracle/tools/home/oracle/work/wallet
$ ls -la
total 68
drwxr-x---. 2 oracle oracle  4096 Jun 15 02:54 .
drwxr-x---. 4 oracle oracle  4096 Jun 15 02:53 ..
-rw-r-----. 1 oracle oracle  6661 Jun 15 02:53 cwallet.sso
-rw-r-----. 1 oracle oracle  6616 Jun 15 02:53 ewallet.p12
-rw-r-----. 1 oracle oracle  3242 Jun 15 02:53 keystore.jks
-rw-r-----. 1 oracle oracle    87 Jun 15 02:53 ojdbc.properties
-rw-r-----. 1 oracle oracle   114 Jun 15 02:53 sqlnet.ora
-rw-r-----. 1 oracle oracle  5638 Jun 15 02:53 tnsnames.ora
-rw-r-----. 1 oracle oracle  3336 Jun 15 02:53 truststore.jks
-rw-rw-r--. 1 oracle oracle 19912 Jun 15 02:53 Wallet_DB201906031608.zip
$

4. WLS(WebLogic)起動シェルの編集(CLASSPATHの指定)

WLS(WebLogic)の起動シェルを編集して、JDBC Driverの各種jarをCLASSPATHに通します。
/<任意のディレクトリ>/domains/<ドメイン名>/bin配下のsetDomainEnv.shを編集します。

setDomainEnv.shの下記部分に……彡(゚)(゚)

:
# ADD EXTENSIONS TO CLASSPATHS

if [ "${EXT_PRE_CLASSPATH}" != "" ] ; then
        if [ "${PRE_CLASSPATH}" != "" ] ; then
                PRE_CLASSPATH="${EXT_PRE_CLASSPATH}${CLASSPATHSEP}${PRE_CLASSPATH}"
                export PRE_CLASSPATH
        else
:

下記(EXT_PRE_CLASSPATH)を追記して JDBC Driver の 各種jar を指定します。

:
# ADD EXTENSIONS TO CLASSPATHS

EXT_PRE_CLASSPATH="/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ojdbc8.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ucp.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/oraclepki.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_core.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_cert.jar:";
export EXT_PRE_CLASSPATH

if [ "${EXT_PRE_CLASSPATH}" != "" ] ; then
        if [ "${PRE_CLASSPATH}" != "" ] ; then
                PRE_CLASSPATH="${EXT_PRE_CLASSPATH}${CLASSPATHSEP}${PRE_CLASSPATH}"
                export PRE_CLASSPATH
        else
:

WLSを停止/起動してjavaプロセスのCLASSPATHをjinfoコマンドで確認。上手く行ってますやね彡(^)(^)

jinfo 5748 | grep -i java.class.path
java.class.path = /u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ojdbc8.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ucp.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/oraclepki.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_core.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_cert.jar:/u01/app/oracle/middleware/oracle_common/modules/features/com.oracle.db.jdbc7-dms.jar:/u01/jdk/lib/tools.jar:/u01/app/oracle/middleware/wlserver/server/lib/weblogic.jar:/u01/app/oracle/middleware/wlserver/../oracle_common/modules/thirdparty/ant-contrib-1.0b3.jar:/u01/app/oracle/middleware/wlserver/modules/features/oracle.wls.common.nodemanager.jar:/u01/app/oracle/middleware/oracle_common/modules/oracle.jps/jps-manifest.jar:/u01/app/oracle/middleware/oracle_common/modules/internal/features/jrf_wlsFmw_oracle.jrf.wls.classpath.jar:/u01/app/oracle/middleware/wlserver/common/derby/lib/derbyclient.jar:/u01/app/oracle/middleware/wlserver/common/derby/lib/derby.jar:/u01/jdk/lib/tools.jar:/u01/app/oracle/middleware/oracle_common/modules/oracle.jps/jps-manifest.jar

5. WLS(WebLogic)の管理コンソールからデータソースを作成

WebLogic管理コンソールにログインします。 JCS001.jpg

左上の「ロックして編集」をクリックして…… JCS002.jpg

「GridLink for RACデータソースの構成」のリンクをクリック JCS003.jpg

「新規」⇒「GridLinkデータ・ソース」 JCS004.jpg

「名前」⇒任意の文字列、「スコープ」⇒グローバル、「JNDI名」⇒任意の文字列、「データベース・ドライバ」⇒Oracles Driver(thin) for GridLink Connections; JCS005.jpg

「1フェーズ・コミット」以外のチェックは全て無し JCS006.jpg

「完全なJDBC URLの入力」をチェック JCS007.jpg

「完全なJDBC URL」はjdbc:oracle:thin:@<tnsnames.oraの接続文字列>?TNS_ADMIN=<Autonomous DatabaseのWalletを配置したディレクトリ>を指定します。今回はATPのTPサービスに接続します。

jdbc:oracle:thin:@db201906031608_tp?TNS_ADMIN=/u01/app/oracle/tools/home/oracle/work/wallet

「データベース・ユーザー名」はAutonomous Databaseのユーザー名、「パスワード」はAutonomous Databaseユーザーのパスワード、「プロトコル」はTCPoracle.jdbc.DRCPConnectionClassは無し JCS008.jpg

次画面で「すべてのリスナーのテスト」を実行すると、接続テストが成功。やったぜ。彡(^)(^) JCS011.jpg

今回はFAN/ONS関連の設定は無し。 JCS012.jpg

データソースをデプロイするWLSクラスタを選択して、終了 JCS014.jpg

「変更のアクティブ化」を押して完了です。 JCS015.jpg

6. まとめ

基本は以前の記事と同様や!彡(゚)(゚)

Autonomous DB(ADW/ATP) に JavaJDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure) https://qiita.com/ora_gonsuke777/items/91ec0e15848a78ede385

WLS(WebLogic)やAutonomous Databaseをどんどん活用してやで彡(^)(^)

7. 参考ドキュメント(※2019/06/17追記)

JDBC ThinドライバでのJDBC URL接続文字列の使用
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-jdbc-thin-wallet.html#GUID-F1D7452F-5E67-4418-B16B-B6A7B92F26A4
  
JDBC 18.3を使用したOracle Autonomous DatabaseとJavaの接続性(Oracle ATPまたはOracle ADW)
https://www.oracle.com/technetwork/jp/database/application-development/jdbc/documentation/atp-5073445-ja.html
  
WebLogic Server 10.3.6-12c に同梱された UCP と JDBC ドライバをアップグレードする方法 (ドキュメントID 2005250.1) ※要ログイン
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2005250.1
  
Starting With Oracle JDBC Drivers - Installation, Certification, and More! (Document ID 401934.1) ※要ログイン
https://support.oracle.com/epmos/faces/DocumentDisplay?id=401934.1

JDBC URL(Oracle Database, Thin)の作り方

JDBC URL(Oracle Database, Thin)の作り方を書いてみるやで彡(゚)(゚)

1. JDBCマニュアルの記述

マニュアルの記述は以下の通り。

8.2 データベースURLとデータベース指定子
https://docs.oracle.com/cd/E96517_01/jjdbc/data-sources-and-URLs.html#GUID-C4F2CA86-0F68-400C-95DA-30171C9FB8F0
データベースURLは文字列です。完全なURL構文は、次のとおりです。
jdbc:oracle:driver_type:[username/password]@database_specifier
 
8.2.4 Thin形式のサービス名の構文
https://docs.oracle.com/cd/E96517_01/jjdbc/data-sources-and-URLs.html#GUID-EF07727C-50AB-4DCE-8EDC-57F0927FF61A
Thin形式のサービス名は、JDBC Thinドライバでのみサポートされます。構文は次のとおりです。
@//host_name:port_number/service_name

なお上記の記述は簡易接続(EZCONNECT)そのものなので、簡易接続のマニュアルもリンクしとく彡(゚)(゚)

8.1 簡易接続ネーミング・メソッドの理解
https://docs.oracle.com/cd/E96517_01/netag/configuring-naming-methods.html#GUID-B0437826-43C1-49EC-A94D-B650B6A4A6EE
CONNECT username@[//]host[:port][/service_name][:server][/instance_name]

原則としてホスト名/ポート番号/サービス名の3つを指定すれば、JDBC URLを作成できます。
これらを管理するのはリスナーなので、まずリスナーの役割を簡単に解説。

2. リスナーの役割

リスナーはサーバー上に常駐するプロセスで、クライアントからの接続要求を
リスニングして、Oracle Database への接続を管理/許可するプロセスです。

専用サーバー接続の例ですが、リスナーの動作は下記の記事が解り易いです。

コネクションとは?
https://www.oracle.com/technetwork/jp/articles/chapter5-1-101584-ja.html#p01b

リスナーは1組以上のホスト名(IPアドレス)/ポート番号が定義されていて、
そのリスナーにデータベース・サービスが動的に登録されます。

lsnrctl status <リスナー名>コマンドを実行すると、ホスト名(IPアドレス)/ポート番号や
登録されているデータベース・サービスが確認できます。以下はサンプル彡(゚)(゚)

$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 30-APR-2019 23:39:27
:
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) ★ホスト名とポート番号
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=8081))(Presentation=HTTP)(Session=RAW))
:
Services Summary...
Service "64a52f53a7683286e053cda9e80aed76" has 1 instance(s). ★リスナーに登録されたサービス
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "784ac9d638bb5f59e0530100007f6047" has 1 instance(s). ★リスナーに登録されたサービス
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "AYSTEST" has 1 instance(s).                          ★リスナーに登録されたサービス
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).                             ★リスナーに登録されたサービス
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "orclcdb" has 2 instance(s).                          ★リスナーに登録されたサービス
  Instance "orclcdb", status UNKNOWN, has 1 handler(s) for this service...
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "orclcdbXDB" has 1 instance(s).                       ★リスナーに登録されたサービス
  Instance "orclcdb", status READY, has 1 handler(s) for this service...
The command completed successfully

3. データベース・サービスとは?

データベース・サービスとは、Oracle Database のワークロード(負荷)を識別し易くするために、
論理的な別名を付与したものとなります。1つの Oracle Database環境に複数サービスを作成可能です。

以下の記事が分かり易いですやで彡(゚)(゚)

第3回 ネットワーク経由で接続
https://www.oracle.com/technetwork/jp/database/articles/kusakabe/kusakabe-3-4490049-ja.html
4.2 サービス
Oracle8までは…(中略)…Oracleインスタンス識別子であるSIDでした …(中略)…
Oracle Database 10gではサービスの概念が拡張され、ワークロードを抽象化する概念となりました …(中略)…
追加されたサービスは、動的サービス登録の仕組みによってOracleリスナーに登録されます。

JDBC URL/tnsnames.ora/簡易接続(EZCONNECT)など、接続先としてこのデータベース・サービス名を記述します。

4. サンプル1:sqlclでJDBC URLを指定しつつ接続確認

sqlcl(SQL Developerのコマンドライン版)で、JDBC URLのサンプルを書いてみるやで彡(゚)(゚)
上記 2. の AYTESTサービスに接続してみます。このケースの JDBC URL は下記の通り

jdbc:oracle:driver_type:[username/password]@//host_name:port_number/service_name

jdbc:oracle:thin:@//0.0.0.0:1521/AYTEST

実行サンプルを下記に示します。CONNECTコマンドのユーザ名直後の@マーク以降がJDBC URLです。
sqlcl の SHOW JDBCコマンドでも JDBC URL は確認できます。

cd /home/oracle/sqldeveloper/sqldeveloper/bin
./sql /nolog
CONNECT AYSHIBAT@jdbc:oracle:thin:@//0.0.0.0:1521/AYSTEST
SHOW JDBC

SQLcl: Release 18.3 Production on Wed May 01 01:06:43 2019

Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Password? (**********?) ********
Connected.

-- Database Info --
Database Product Name: Oracle
:
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 18.3.0.0.0
Driver Major Version: 18
Driver Minor Version: 3
Driver URL: jdbc:oracle:thin:@//0.0.0.0:1521/AYSTEST ★JDBC URL
:

5. サンプル2:OCI DB(DBaaS)のCDBにsqlclでJDBC URLを指定しつつ接続

OCI(Oracle Cloud Infrastructure) DB(DBaaS) の CDB に sqlcl JDBC URLで接続するサンプルを書いてみます彡(゚)(゚)
下記記事のサンプルを流用してみるやで。

OCI Database(DBaaS) の PDB に sqlplus で接続してみる。(Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/19/211953

管理サービス(CDB)への接続文字列(簡易接続):
dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com

上記ケースの JDBC URL は 下記の通りとなります。

jdbc:oracle:driver_type:[username/password]@//host_name:port_number/service_name

jdbc:oracle:thin:@//dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com

sqlclによる接続サンプルは下記の通り彡(゚)(゚)

./sql /nolog
CONNECT SYSTEM@jdbc:oracle:thin:@//dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_iad32r.subnetname.vcnname.oraclevcn.com
SHOW JDBC;

Password? (**********?) ********
Connected.

-- Database Info --
Database Product Name: Oracle
:
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 12.2.0.1.0
Driver Major Version: 12
Driver Minor Version: 2
Driver URL: jdbc:oracle:thin:@//dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_iad32r.subnetname.vcnname.oraclevcn.com ★JDBC URL
:

6. サンプル3:Autonomous DB(ATP/ADW)の場合のJDBC URL

Autonomous DB(ADW/ATP)の場合のJDBC URLは下記記事を参照彡(゚)(゚)

Autonomous DB(ADW/ATP) に JavaJDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/26/023534

何かしらの方法でウォレットの格納場所をTNS_ADMINに指定します。
JDBC URL に TNS_ADMIN を直接記述するやり方だと、下記の通り彡(゚)(゚)

  1. 方法1:ウォレットのパス(TNS_ADMIN) を JDBC URL に記述
    https://gonsuke777.hatenablog.com/entry/2019/02/26/023534#4-%E6%96%B9%E6%B3%951%E3%82%A6%E3%82%A9%E3%83%AC%E3%83%83%E3%83%88%E3%81%AE%E3%83%91%E3%82%B9TNS_ADMIN-%E3%82%92-JDBC-URL-%E3%81%AB%E8%A8%98%E8%BF%B0

    jdbc:oracle:thin:@xxxxxx_high?TNS_ADMIN=/home/opc/app/opc/product/18.0.0/client_1/network/admin

結果は記事を見てね。

7. サンプル4:tnsnames.oraっぽい書き方でJDBC URLを記述

マニュアルにも記載が有るとおり、
JDBC URLはtnsnames.oraっぽく書くこともできる。下記はそのサンプル彡(゚)(゚)

※実際には1行で記述
jdbc:oracle:thin:@
(DESCRIPTION_LIST=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=dbname.subnetname.vcnname.oraclevcn.com)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=dbname_iad32r.subnetname.vcnname.oraclevcn.com))
  )
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=dbname-scan.subnetname.vcnname.oraclevcn.com)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=dbname_iad32r.subnetname.vcnname.oraclevcn.com))
  )
)

sqlclでの接続サンプルは下記の通り彡(゚)(゚) コマンドながーい。

./sql /nolog
CONNECT SYSTEM@jdbc:oracle:thin:@(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbname_iad32r.subnetname.vcnname.oraclevcn.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=aysdb121_iad1rn.sub12070931430.vcnname.oraclevcn.com)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbname-scan.subnetname.vcnname.oraclevcn.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbname_iad32r.subnetname.vcnname.oraclevcn.com))))
SHOW JDBC

SQLcl: Release 19.1 Production on Wed May 01 06:20:39 2019

Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Password? (**********?) ***************
Connected.

-- Database Info --
Database Product Name: Oracle
:
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 18.3.0.0.0
Driver Major Version: 18
Driver Minor Version: 3
Driver URL: jdbc:oracle:thin:@(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbname_iad32r.subnetname.vcnname.oraclevcn.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=aysdb121_iad1rn.sub12070931430.vcnname.oraclevcn.com)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbname-scan.subnetname.vcnname.oraclevcn.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbname_iad32r.subnetname.vcnname.oraclevcn.com))))
:

8. まとめ

上記 7. みたいな書き方が出来ちゃうから、評判が悪いのかしら彡(゚)(゚)

ここら辺はOracle MAA(Maximum Availability Architecture)の一環、
接続時フェイルオーバーとかクライアント・サイド・ロードバランスとかで
こうなっていると認識しているので、ご理解頂くよう要努力ですかね(゚ε゚ )

とまれ、簡易接続(EZCONNECT)さえ理解してれば恐れるに足らず!
どんどん接続(?)してくれやで彡(^)(^)

おまけ. サンプル:Autonomous DB(ATP/ADW) に sqlclで接続

sqlclの場合はset cloudconfigコマンドでウォレットを指定します。下記が参考になります。

Oracle Cloud:Autonomous DatabaseにSQLcl接続してみてみた
https://qiita.com/shirok/items/86355be72a47a840d10e

set cloudconfigした後の JDBC URL は下記の通り、あら何か複雑彡(゚)(゚)

./sql /nolog
set cloudconfig /home/opc/app/opc/product/18.0.0/client_1/network/admin/Wallet_aysatp01.zip
CONNECT ADMIN@aysatp01_low
SHOW JDBC


SQLcl: Release 19.1 Production on Wed May 01 05:58:28 2019

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

Operation is successfully completed.
Operation is successfully completed.
Using temp directory:/tmp/oracle_cloud_config4416493815228189719
Password? (**********?) *************
Connected.

-- Database Info --
Database Product Name: Oracle
:
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 18.3.0.0.0
Driver Major Version: 18
Driver Minor Version: 3
Driver URL: jdbc:oracle:thin:@(description= (address=(protocol=tcps)(port=1522)(host=xxxx.xxxx.xxxxxxxx.com))(connect_data=(service_name=xxxxxx_low.xxxx.xxxxxxxx.com))(security=(ssl_server_cert_dn="CN=xxxx.xxxx.xxxxxxxx.com,OU=…,O=…,L=…,ST=…,C=…"))   )
:

ASH(Active Session History, V$ACTIVE_SESSION_HISTORY)のバージョン毎のテーブル定義メモ(Oracle Database)

ちと調べる必要に迫られたので、メモ彡(゚)(゚)

1. 11gR2のASH

SQL> DESC V$ACTIVE_SESSION_HISTORY
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SAMPLE_ID                                          NUMBER
 SAMPLE_TIME                                        TIMESTAMP(3)
 IS_AWR_SAMPLE                                      VARCHAR2(1)
 SESSION_ID                                         NUMBER
 SESSION_SERIAL#                                    NUMBER
 SESSION_TYPE                                       VARCHAR2(10)
 FLAGS                                              NUMBER
 USER_ID                                            NUMBER
 SQL_ID                                             VARCHAR2(13)
 IS_SQLID_CURRENT                                   VARCHAR2(1)
 SQL_CHILD_NUMBER                                   NUMBER
 SQL_OPCODE                                         NUMBER
 SQL_OPNAME                                         VARCHAR2(64)
 FORCE_MATCHING_SIGNATURE                           NUMBER
 TOP_LEVEL_SQL_ID                                   VARCHAR2(13)
 TOP_LEVEL_SQL_OPCODE                               NUMBER
 SQL_PLAN_HASH_VALUE                                NUMBER
 SQL_PLAN_LINE_ID                                   NUMBER
 SQL_PLAN_OPERATION                                 VARCHAR2(30)
 SQL_PLAN_OPTIONS                                   VARCHAR2(30)
 SQL_EXEC_ID                                        NUMBER
 SQL_EXEC_START                                     DATE
 PLSQL_ENTRY_OBJECT_ID                              NUMBER
 PLSQL_ENTRY_SUBPROGRAM_ID                          NUMBER
 PLSQL_OBJECT_ID                                    NUMBER
 PLSQL_SUBPROGRAM_ID                                NUMBER
 QC_INSTANCE_ID                                     NUMBER
 QC_SESSION_ID                                      NUMBER
 QC_SESSION_SERIAL#                                 NUMBER
 PX_FLAGS                                           NUMBER
 EVENT                                              VARCHAR2(64)
 EVENT_ID                                           NUMBER
 EVENT#                                             NUMBER
 SEQ#                                               NUMBER
 P1TEXT                                             VARCHAR2(64)
 P1                                                 NUMBER
 P2TEXT                                             VARCHAR2(64)
 P2                                                 NUMBER
 P3TEXT                                             VARCHAR2(64)
 P3                                                 NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_TIME                                          NUMBER
 SESSION_STATE                                      VARCHAR2(7)
 TIME_WAITED                                        NUMBER
 BLOCKING_SESSION_STATUS                            VARCHAR2(11)
 BLOCKING_SESSION                                   NUMBER
 BLOCKING_SESSION_SERIAL#                           NUMBER
 BLOCKING_INST_ID                                   NUMBER
 BLOCKING_HANGCHAIN_INFO                            VARCHAR2(1)
 CURRENT_OBJ#                                       NUMBER
 CURRENT_FILE#                                      NUMBER
 CURRENT_BLOCK#                                     NUMBER
 CURRENT_ROW#                                       NUMBER
 TOP_LEVEL_CALL#                                    NUMBER
 TOP_LEVEL_CALL_NAME                                VARCHAR2(64)
 CONSUMER_GROUP_ID                                  NUMBER
 XID                                                RAW(8)
 REMOTE_INSTANCE#                                   NUMBER
 TIME_MODEL                                         NUMBER
 IN_CONNECTION_MGMT                                 VARCHAR2(1)
 IN_PARSE                                           VARCHAR2(1)
 IN_HARD_PARSE                                      VARCHAR2(1)
 IN_SQL_EXECUTION                                   VARCHAR2(1)
 IN_PLSQL_EXECUTION                                 VARCHAR2(1)
 IN_PLSQL_RPC                                       VARCHAR2(1)
 IN_PLSQL_COMPILATION                               VARCHAR2(1)
 IN_JAVA_EXECUTION                                  VARCHAR2(1)
 IN_BIND                                            VARCHAR2(1)
 IN_CURSOR_CLOSE                                    VARCHAR2(1)
 IN_SEQUENCE_LOAD                                   VARCHAR2(1)
 CAPTURE_OVERHEAD                                   VARCHAR2(1)
 REPLAY_OVERHEAD                                    VARCHAR2(1)
 IS_CAPTURED                                        VARCHAR2(1)
 IS_REPLAYED                                        VARCHAR2(1)
 SERVICE_HASH                                       NUMBER
 PROGRAM                                            VARCHAR2(48)
 MODULE                                             VARCHAR2(64)
 ACTION                                             VARCHAR2(64)
 CLIENT_ID                                          VARCHAR2(64)
 MACHINE                                            VARCHAR2(64)
 PORT                                               NUMBER
 ECID                                               VARCHAR2(64)
 DBREPLAY_FILE_ID                                   NUMBER
 DBREPLAY_CALL_COUNTER                              NUMBER
 TM_DELTA_TIME                                      NUMBER
 TM_DELTA_CPU_TIME                                  NUMBER
 TM_DELTA_DB_TIME                                   NUMBER
 DELTA_TIME                                         NUMBER
 DELTA_READ_IO_REQUESTS                             NUMBER
 DELTA_WRITE_IO_REQUESTS                            NUMBER
 DELTA_READ_IO_BYTES                                NUMBER
 DELTA_WRITE_IO_BYTES                               NUMBER
 DELTA_INTERCONNECT_IO_BYTES                        NUMBER
 PGA_ALLOCATED                                      NUMBER
 TEMP_SPACE_ALLOCATED                               NUMBER

2. 12cR1のASH

SQL> DESC V$ACTIVE_SESSION_HISTORY;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SAMPLE_ID                                          NUMBER
 SAMPLE_TIME                                        TIMESTAMP(3)
 IS_AWR_SAMPLE                                      VARCHAR2(1)
 SESSION_ID                                         NUMBER
 SESSION_SERIAL#                                    NUMBER
 SESSION_TYPE                                       VARCHAR2(10)
 FLAGS                                              NUMBER
 USER_ID                                            NUMBER
 SQL_ID                                             VARCHAR2(13)
 IS_SQLID_CURRENT                                   VARCHAR2(1)
 SQL_CHILD_NUMBER                                   NUMBER
 SQL_OPCODE                                         NUMBER
 SQL_OPNAME                                         VARCHAR2(64)
 FORCE_MATCHING_SIGNATURE                           NUMBER
 TOP_LEVEL_SQL_ID                                   VARCHAR2(13)
 TOP_LEVEL_SQL_OPCODE                               NUMBER
 SQL_ADAPTIVE_PLAN_RESOLVED                         NUMBER ★12cR1で追加
 SQL_FULL_PLAN_HASH_VALUE                           NUMBER ★12cR1で追加
 SQL_PLAN_HASH_VALUE                                NUMBER
 SQL_PLAN_LINE_ID                                   NUMBER
 SQL_PLAN_OPERATION                                 VARCHAR2(30)
 SQL_PLAN_OPTIONS                                   VARCHAR2(30)
 SQL_EXEC_ID                                        NUMBER
 SQL_EXEC_START                                     DATE
 PLSQL_ENTRY_OBJECT_ID                              NUMBER
 PLSQL_ENTRY_SUBPROGRAM_ID                          NUMBER
 PLSQL_OBJECT_ID                                    NUMBER
 PLSQL_SUBPROGRAM_ID                                NUMBER
 QC_INSTANCE_ID                                     NUMBER
 QC_SESSION_ID                                      NUMBER
 QC_SESSION_SERIAL#                                 NUMBER
 PX_FLAGS                                           NUMBER
 EVENT                                              VARCHAR2(64)
 EVENT_ID                                           NUMBER
 EVENT#                                             NUMBER
 SEQ#                                               NUMBER
 P1TEXT                                             VARCHAR2(64)
 P1                                                 NUMBER
 P2TEXT                                             VARCHAR2(64)
 P2                                                 NUMBER
 P3TEXT                                             VARCHAR2(64)
 P3                                                 NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_TIME                                          NUMBER
 SESSION_STATE                                      VARCHAR2(7)
 TIME_WAITED                                        NUMBER
 BLOCKING_SESSION_STATUS                            VARCHAR2(11)
 BLOCKING_SESSION                                   NUMBER
 BLOCKING_SESSION_SERIAL#                           NUMBER
 BLOCKING_INST_ID                                   NUMBER
 BLOCKING_HANGCHAIN_INFO                            VARCHAR2(1)
 CURRENT_OBJ#                                       NUMBER
 CURRENT_FILE#                                      NUMBER
 CURRENT_BLOCK#                                     NUMBER
 CURRENT_ROW#                                       NUMBER
 TOP_LEVEL_CALL#                                    NUMBER
 TOP_LEVEL_CALL_NAME                                VARCHAR2(64)
 CONSUMER_GROUP_ID                                  NUMBER
 XID                                                RAW(8)
 REMOTE_INSTANCE#                                   NUMBER
 TIME_MODEL                                         NUMBER
 IN_CONNECTION_MGMT                                 VARCHAR2(1)
 IN_PARSE                                           VARCHAR2(1)
 IN_HARD_PARSE                                      VARCHAR2(1)
 IN_SQL_EXECUTION                                   VARCHAR2(1)
 IN_PLSQL_EXECUTION                                 VARCHAR2(1)
 IN_PLSQL_RPC                                       VARCHAR2(1)
 IN_PLSQL_COMPILATION                               VARCHAR2(1)
 IN_JAVA_EXECUTION                                  VARCHAR2(1)
 IN_BIND                                            VARCHAR2(1)
 IN_CURSOR_CLOSE                                    VARCHAR2(1)
 IN_SEQUENCE_LOAD                                   VARCHAR2(1)
 IN_INMEMORY_QUERY                                  VARCHAR2(1) ★12cR1で追加
 IN_INMEMORY_POPULATE                               VARCHAR2(1) ★12cR1で追加
 IN_INMEMORY_PREPOPULATE                            VARCHAR2(1) ★12cR1で追加
 IN_INMEMORY_REPOPULATE                             VARCHAR2(1) ★12cR1で追加
 IN_INMEMORY_TREPOPULATE                            VARCHAR2(1) ★12cR1で追加
 CAPTURE_OVERHEAD                                   VARCHAR2(1)
 REPLAY_OVERHEAD                                    VARCHAR2(1)
 IS_CAPTURED                                        VARCHAR2(1)
 IS_REPLAYED                                        VARCHAR2(1)
 SERVICE_HASH                                       NUMBER
 PROGRAM                                            VARCHAR2(48)
 MODULE                                             VARCHAR2(64)
 ACTION                                             VARCHAR2(64)
 CLIENT_ID                                          VARCHAR2(64)
 MACHINE                                            VARCHAR2(64)
 PORT                                               NUMBER
 ECID                                               VARCHAR2(64)
 DBREPLAY_FILE_ID                                   NUMBER
 DBREPLAY_CALL_COUNTER                              NUMBER
 TM_DELTA_TIME                                      NUMBER
 TM_DELTA_CPU_TIME                                  NUMBER
 TM_DELTA_DB_TIME                                   NUMBER
 DELTA_TIME                                         NUMBER
 DELTA_READ_IO_REQUESTS                             NUMBER
 DELTA_WRITE_IO_REQUESTS                            NUMBER
 DELTA_READ_IO_BYTES                                NUMBER
 DELTA_WRITE_IO_BYTES                               NUMBER
 DELTA_INTERCONNECT_IO_BYTES                        NUMBER
 DELTA_READ_MEM_BYTES                               NUMBER ★12cR1で追加
 PGA_ALLOCATED                                      NUMBER
 TEMP_SPACE_ALLOCATED                               NUMBER
 CON_DBID                                           NUMBER ★12cR1で追加
 CON_ID                                             NUMBER ★12cR1で追加
 DBOP_NAME                                          VARCHAR2(30) ★12cR1で追加
 DBOP_EXEC_ID                                       NUMBER ★12cR1で追加

3. 12cR2のASH

SQL> DESC V$ACTIVE_SESSION_HISTORY;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SAMPLE_ID                                          NUMBER
 SAMPLE_TIME                                        TIMESTAMP(3)
 SAMPLE_TIME_UTC                                    TIMESTAMP(3) ★12cR2で追加
 USECS_PER_ROW                                      NUMBER ★12cR2で追加
 IS_AWR_SAMPLE                                      VARCHAR2(1)
 SESSION_ID                                         NUMBER
 SESSION_SERIAL#                                    NUMBER
 SESSION_TYPE                                       VARCHAR2(10)
 FLAGS                                              NUMBER
 USER_ID                                            NUMBER
 SQL_ID                                             VARCHAR2(13)
 IS_SQLID_CURRENT                                   VARCHAR2(1)
 SQL_CHILD_NUMBER                                   NUMBER
 SQL_OPCODE                                         NUMBER
 SQL_OPNAME                                         VARCHAR2(64)
 FORCE_MATCHING_SIGNATURE                           NUMBER
 TOP_LEVEL_SQL_ID                                   VARCHAR2(13)
 TOP_LEVEL_SQL_OPCODE                               NUMBER
 SQL_ADAPTIVE_PLAN_RESOLVED                         NUMBER
 SQL_FULL_PLAN_HASH_VALUE                           NUMBER
 SQL_PLAN_HASH_VALUE                                NUMBER
 SQL_PLAN_LINE_ID                                   NUMBER
 SQL_PLAN_OPERATION                                 VARCHAR2(30)
 SQL_PLAN_OPTIONS                                   VARCHAR2(30)
 SQL_EXEC_ID                                        NUMBER
 SQL_EXEC_START                                     DATE
 PLSQL_ENTRY_OBJECT_ID                              NUMBER
 PLSQL_ENTRY_SUBPROGRAM_ID                          NUMBER
 PLSQL_OBJECT_ID                                    NUMBER
 PLSQL_SUBPROGRAM_ID                                NUMBER
 QC_INSTANCE_ID                                     NUMBER
 QC_SESSION_ID                                      NUMBER
 QC_SESSION_SERIAL#                                 NUMBER
 PX_FLAGS                                           NUMBER
 EVENT                                              VARCHAR2(64)
 EVENT_ID                                           NUMBER
 EVENT#                                             NUMBER
 SEQ#                                               NUMBER
 P1TEXT                                             VARCHAR2(64)
 P1                                                 NUMBER
 P2TEXT                                             VARCHAR2(64)
 P2                                                 NUMBER
 P3TEXT                                             VARCHAR2(64)
 P3                                                 NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_TIME                                          NUMBER
 SESSION_STATE                                      VARCHAR2(7)
 TIME_WAITED                                        NUMBER
 BLOCKING_SESSION_STATUS                            VARCHAR2(11)
 BLOCKING_SESSION                                   NUMBER
 BLOCKING_SESSION_SERIAL#                           NUMBER
 BLOCKING_INST_ID                                   NUMBER
 BLOCKING_HANGCHAIN_INFO                            VARCHAR2(1)
 CURRENT_OBJ#                                       NUMBER
 CURRENT_FILE#                                      NUMBER
 CURRENT_BLOCK#                                     NUMBER
 CURRENT_ROW#                                       NUMBER
 TOP_LEVEL_CALL#                                    NUMBER
 TOP_LEVEL_CALL_NAME                                VARCHAR2(64)
 CONSUMER_GROUP_ID                                  NUMBER
 XID                                                RAW(8)
 REMOTE_INSTANCE#                                   NUMBER
 TIME_MODEL                                         NUMBER
 IN_CONNECTION_MGMT                                 VARCHAR2(1)
 IN_PARSE                                           VARCHAR2(1)
 IN_HARD_PARSE                                      VARCHAR2(1)
 IN_SQL_EXECUTION                                   VARCHAR2(1)
 IN_PLSQL_EXECUTION                                 VARCHAR2(1)
 IN_PLSQL_RPC                                       VARCHAR2(1)
 IN_PLSQL_COMPILATION                               VARCHAR2(1)
 IN_JAVA_EXECUTION                                  VARCHAR2(1)
 IN_BIND                                            VARCHAR2(1)
 IN_CURSOR_CLOSE                                    VARCHAR2(1)
 IN_SEQUENCE_LOAD                                   VARCHAR2(1)
 IN_INMEMORY_QUERY                                  VARCHAR2(1)
 IN_INMEMORY_POPULATE                               VARCHAR2(1)
 IN_INMEMORY_PREPOPULATE                            VARCHAR2(1)
 IN_INMEMORY_REPOPULATE                             VARCHAR2(1)
 IN_INMEMORY_TREPOPULATE                            VARCHAR2(1)
 IN_TABLESPACE_ENCRYPTION                           VARCHAR2(1) ★12cR2で追加
 CAPTURE_OVERHEAD                                   VARCHAR2(1)
 REPLAY_OVERHEAD                                    VARCHAR2(1)
 IS_CAPTURED                                        VARCHAR2(1)
 IS_REPLAYED                                        VARCHAR2(1)
 IS_REPLAY_SYNC_TOKEN_HOLDER                        VARCHAR2(1) ★12cR2で追加
 SERVICE_HASH                                       NUMBER
 PROGRAM                                            VARCHAR2(48)
 MODULE                                             VARCHAR2(64)
 ACTION                                             VARCHAR2(64)
 CLIENT_ID                                          VARCHAR2(64)
 MACHINE                                            VARCHAR2(64)
 PORT                                               NUMBER
 ECID                                               VARCHAR2(64)
 DBREPLAY_FILE_ID                                   NUMBER
 DBREPLAY_CALL_COUNTER                              NUMBER
 TM_DELTA_TIME                                      NUMBER
 TM_DELTA_CPU_TIME                                  NUMBER
 TM_DELTA_DB_TIME                                   NUMBER
 DELTA_TIME                                         NUMBER
 DELTA_READ_IO_REQUESTS                             NUMBER
 DELTA_WRITE_IO_REQUESTS                            NUMBER
 DELTA_READ_IO_BYTES                                NUMBER
 DELTA_WRITE_IO_BYTES                               NUMBER
 DELTA_INTERCONNECT_IO_BYTES                        NUMBER
 DELTA_READ_MEM_BYTES                               NUMBER
 PGA_ALLOCATED                                      NUMBER
 TEMP_SPACE_ALLOCATED                               NUMBER
 CON_DBID                                           NUMBER
 CON_ID                                             NUMBER
 DBOP_NAME                                          VARCHAR2(30)
 DBOP_EXEC_ID                                       NUMBER

3. 18cのASH ※12cR2と差分無し

SQL> DESC V$ACTIVE_SESSION_HISTORY

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SAMPLE_ID                                          NUMBER
 SAMPLE_TIME                                        TIMESTAMP(3)
 SAMPLE_TIME_UTC                                    TIMESTAMP(3)
 USECS_PER_ROW                                      NUMBER
 IS_AWR_SAMPLE                                      VARCHAR2(1)
 SESSION_ID                                         NUMBER
 SESSION_SERIAL#                                    NUMBER
 SESSION_TYPE                                       VARCHAR2(10)
 FLAGS                                              NUMBER
 USER_ID                                            NUMBER
 SQL_ID                                             VARCHAR2(13)
 IS_SQLID_CURRENT                                   VARCHAR2(1)
 SQL_CHILD_NUMBER                                   NUMBER
 SQL_OPCODE                                         NUMBER
 SQL_OPNAME                                         VARCHAR2(64)
 FORCE_MATCHING_SIGNATURE                           NUMBER
 TOP_LEVEL_SQL_ID                                   VARCHAR2(13)
 TOP_LEVEL_SQL_OPCODE                               NUMBER
 SQL_ADAPTIVE_PLAN_RESOLVED                         NUMBER
 SQL_FULL_PLAN_HASH_VALUE                           NUMBER
 SQL_PLAN_HASH_VALUE                                NUMBER
 SQL_PLAN_LINE_ID                                   NUMBER
 SQL_PLAN_OPERATION                                 VARCHAR2(30)
 SQL_PLAN_OPTIONS                                   VARCHAR2(30)
 SQL_EXEC_ID                                        NUMBER
 SQL_EXEC_START                                     DATE
 PLSQL_ENTRY_OBJECT_ID                              NUMBER
 PLSQL_ENTRY_SUBPROGRAM_ID                          NUMBER
 PLSQL_OBJECT_ID                                    NUMBER
 PLSQL_SUBPROGRAM_ID                                NUMBER
 QC_INSTANCE_ID                                     NUMBER
 QC_SESSION_ID                                      NUMBER
 QC_SESSION_SERIAL#                                 NUMBER
 PX_FLAGS                                           NUMBER
 EVENT                                              VARCHAR2(64)
 EVENT_ID                                           NUMBER
 EVENT#                                             NUMBER
 SEQ#                                               NUMBER
 P1TEXT                                             VARCHAR2(64)
 P1                                                 NUMBER
 P2TEXT                                             VARCHAR2(64)
 P2                                                 NUMBER
 P3TEXT                                             VARCHAR2(64)
 P3                                                 NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_TIME                                          NUMBER
 SESSION_STATE                                      VARCHAR2(7)
 TIME_WAITED                                        NUMBER
 BLOCKING_SESSION_STATUS                            VARCHAR2(11)
 BLOCKING_SESSION                                   NUMBER
 BLOCKING_SESSION_SERIAL#                           NUMBER
 BLOCKING_INST_ID                                   NUMBER
 BLOCKING_HANGCHAIN_INFO                            VARCHAR2(1)
 CURRENT_OBJ#                                       NUMBER
 CURRENT_FILE#                                      NUMBER
 CURRENT_BLOCK#                                     NUMBER
 CURRENT_ROW#                                       NUMBER
 TOP_LEVEL_CALL#                                    NUMBER
 TOP_LEVEL_CALL_NAME                                VARCHAR2(64)
 CONSUMER_GROUP_ID                                  NUMBER
 XID                                                RAW(8)
 REMOTE_INSTANCE#                                   NUMBER
 TIME_MODEL                                         NUMBER
 IN_CONNECTION_MGMT                                 VARCHAR2(1)
 IN_PARSE                                           VARCHAR2(1)
 IN_HARD_PARSE                                      VARCHAR2(1)
 IN_SQL_EXECUTION                                   VARCHAR2(1)
 IN_PLSQL_EXECUTION                                 VARCHAR2(1)
 IN_PLSQL_RPC                                       VARCHAR2(1)
 IN_PLSQL_COMPILATION                               VARCHAR2(1)
 IN_JAVA_EXECUTION                                  VARCHAR2(1)
 IN_BIND                                            VARCHAR2(1)
 IN_CURSOR_CLOSE                                    VARCHAR2(1)
 IN_SEQUENCE_LOAD                                   VARCHAR2(1)
 IN_INMEMORY_QUERY                                  VARCHAR2(1)
 IN_INMEMORY_POPULATE                               VARCHAR2(1)
 IN_INMEMORY_PREPOPULATE                            VARCHAR2(1)
 IN_INMEMORY_REPOPULATE                             VARCHAR2(1)
 IN_INMEMORY_TREPOPULATE                            VARCHAR2(1)
 IN_TABLESPACE_ENCRYPTION                           VARCHAR2(1)
 CAPTURE_OVERHEAD                                   VARCHAR2(1)
 REPLAY_OVERHEAD                                    VARCHAR2(1)
 IS_CAPTURED                                        VARCHAR2(1)
 IS_REPLAYED                                        VARCHAR2(1)
 IS_REPLAY_SYNC_TOKEN_HOLDER                        VARCHAR2(1)
 SERVICE_HASH                                       NUMBER
 PROGRAM                                            VARCHAR2(48)
 MODULE                                             VARCHAR2(64)
 ACTION                                             VARCHAR2(64)
 CLIENT_ID                                          VARCHAR2(64)
 MACHINE                                            VARCHAR2(64)
 PORT                                               NUMBER
 ECID                                               VARCHAR2(64)
 DBREPLAY_FILE_ID                                   NUMBER
 DBREPLAY_CALL_COUNTER                              NUMBER
 TM_DELTA_TIME                                      NUMBER
 TM_DELTA_CPU_TIME                                  NUMBER
 TM_DELTA_DB_TIME                                   NUMBER
 DELTA_TIME                                         NUMBER
 DELTA_READ_IO_REQUESTS                             NUMBER
 DELTA_WRITE_IO_REQUESTS                            NUMBER
 DELTA_READ_IO_BYTES                                NUMBER
 DELTA_WRITE_IO_BYTES                               NUMBER
 DELTA_INTERCONNECT_IO_BYTES                        NUMBER
 DELTA_READ_MEM_BYTES                               NUMBER
 PGA_ALLOCATED                                      NUMBER
 TEMP_SPACE_ALLOCATED                               NUMBER
 CON_DBID                                           NUMBER
 CON_ID                                             NUMBER
 DBOP_NAME                                          VARCHAR2(30)
 DBOP_EXEC_ID                                       NUMBER

4. 19c

後日掲載

5. マニュアル

マニュアルと実定義で少し差(SAMPLE_TIME_UTCとか)が有る?彡(゚)(゚)

名前付きパイプ(mkfifo)でsqlplusのspool結果を圧縮しながらファイル出力する。(Oracle Database)

表題の通り、名前付きパイプ(mkfifo)でsqlplusのspool結果を圧縮しながらファイル出力してみるやで彡(゚)(゚)

1. 名前付きパイプの作成(mkfifo)とgzipコマンドのバックグラウンド実行

下記コマンドを実行します。

(1). mkfifoコマンドで名前付きパイプを作成
(2). 名前付きパイプのcat結果をgzip圧縮して、ファイルにリダイレクトするコマンドをバックグラウンド実行

mkfifo gzip.pipe
cat gzip.pipe | gzip -c > orders.csv.gz &
ls -la

total 12
drwxrwxr-x.  2 opc opc 4096 Mar 26 13:47 .
drwxrwxr-x. 24 opc opc 4096 Mar 26 13:23 ..
prw-rw-r--.  1 opc opc    0 Mar 26 13:46 gzip.pipe ★名前付きパイプ
-rw-rw-r--.  1 opc opc    0 Mar 26 13:47 orders.csv.gz
-rw-rw-r--.  1 opc opc  413 Mar 26 13:28 orders_csv.sql

2. ファイル出力のSQL

下記がファイル出力のSQLです。spool先は名前付きパイプ(gzip.pipe)としています。

cat orders_csv.sql

-- orders_csv.sql
SET LINESIZE 32767;
SET PAGESIZE 0;
SET FEED OFF;
SET TRIMSPOOL ON;
SET TERMOUT OFF;
SET ARRAYSIZE 5000;
SET COLSEP ,
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY/MM/DD HH24:MI:SS.FF';
-- spool to named pipe.
spool gzip.pipe
PROMPT ORDER_ID,ORDER_DATE,CUSTOMER_ID,ORDER_STATUS
SELECT ORDER_ID, ORDER_DATE, CUSTOMER_ID, ORDER_STATUS FROM ORDERS WHERE ROWNUM <= 10000;
spool off;
EXIT;

3. sqlplusでSQLを実行(ファイル出力)

sqlplus で SQL を実行して、ファイルを出力します。

sqlplus /nolog
CONNECT xxxxxxxx/yyyyyyyy@zzzzzzzz
@./orders_csv.sql

Connected.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

[1]+ Done cat gzip.pipe | gzip -c > orders.csv.gz ★バックグラウンドのgzipが終了している。

4. 圧縮ファイルの結果確認

gunzipコマンドで圧縮ファイルの結果を確認します。バッチリや!彡(^)(^)

ls -la
gunzip -c orders.csv.gz

total 140
drwxrwxr-x.  2 opc opc   4096 Mar 26 13:48 .
drwxrwxr-x. 24 opc opc   4096 Mar 26 13:23 ..
prw-rw-r--.  1 opc opc      0 Mar 26 13:49 gzip.pipe
-rw-rw-r--.  1 opc opc 128586 Mar 26 13:49 orders.csv.gz ★gzip圧縮されて出力されたファイル
-rw-rw-r--.  1 opc opc    378 Mar 26 13:48 orders_csv.sql

ORDER_ID,ORDER_DATE,CUSTOMER_ID,ORDER_STATUS
717508,2007/12/13 05:00:00.000000,952991,7
717509,2009/05/28 19:00:00.000000,728526,6
717510,2011/02/28 02:00:00.000000,914050,5
717511,2008/07/11 15:00:00.000000,385931,4
717512,2012/01/30 03:00:00.000000,953603,6
:
:
728011,2007/10/01 00:00:00.000000,830197,4
728012,2010/08/25 01:00:00.000000,39406,6
728013,2007/11/30 23:00:00.000000,280994,4
728014,2007/07/20 12:00:00.000000,342535,6

5. 名前付きパイプの削除(rm)

名前付きパイプはファイル同様にrmコマンドで削除できます。

rm gzip.pipe
ls -la

total 140
drwxrwxr-x.  2 opc opc   4096 Mar 26 13:54 .
drwxrwxr-x. 24 opc opc   4096 Mar 26 13:23 ..
-rw-rw-r--.  1 opc opc 128586 Mar 26 13:49 orders.csv.gz
-rw-rw-r--.  1 opc opc    378 Mar 26 13:48 orders_csv.sql

6. まとめ

圧縮しながらsqlplusでSPOOLできる!今回はsqlplusのspoolでしたが、応用は色々効きそう。
なお名前付きパイプによるxxしながら圧縮は、MySQL界隈では必須テクニックぽい?彡(゚)(゚)

MySQLのダンプファイルを圧縮しながら書き出す
http://huruyosi.hatenablog.com/entry/2015/10/20/014254
 
[mysql]dumpファイルのサイズを気にせずに別サーバへデータを転送する
https://qiita.com/qr_taka/items/7136550a8b8499bab592

ADW/ATP(Autonomous DB)でObject StorageにアップロードされたCSVファイル(gzip圧縮済)を外部表(EXTERNAL TABLE)として直接参照する。(OCI, Oracle Cloud Infrastructure)

表題の通り、ADW/ATP(Autonomous DB)でObject Storageにアップロードされた
CSVファイル(gzip圧縮済)を外部表(EXTERNAL TABLE)として参照してみるやで彡(゚)(゚)

下記マニュアルを参照しています。

Using Oracle Autonomous Data Warehouse
Query External Data
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/query-external.html#GUID-72DC8BB6-5245-4262-A100-C35A2E553F70

1. サンプルのCSVファイル(gzip圧縮済み)

下記のCSVファイル(gzip圧縮済み)をサンプルとします。

$ ls -la
total 16
drwxrwxr-x.  2 opc opc 4096 Mar 10 16:16 .
drwxrwxr-x. 23 opc opc 4096 Mar 10 15:15 ..
-rw-rw-r--.  1 opc opc   47 Mar 10 16:00 sample1.csv.gz
-rw-rw-r--.  1 opc opc   44 Mar 10 16:16 sample2.csv.gz
$ zcat sample1.csv.gz
1,a
2,b
3,c

$ zcat sample2.csv.gz
4,d
5,e
6,f

2. CSVファイル(gzip圧縮済)をObject Storageにアップロード

OCI CLICSVファイル(gzip圧縮済)をObject Storageにアップロードします。
OCI CLI のセットアップ方法はこちらの記事のリンク先を参照してね彡(゚)(゚)

oci os object bulk-upload -ns namespace -bn bucket-name --src-dir ./

Uploaded sample1.csv.gz  [####################################]  100%
{
  "skipped-objects": [],
  "upload-failures": {},
  "uploaded-objects": {
    "sample1.csv.gz": {
      "etag": "f4484cbe-48a3-4533-98f8-3e7d927bbd92",
      "last-modified": "Sun, 10 Mar 2019 16:27:33 GMT",
      "opc-content-md5": "Y9kGzFq93i/9X/f+jkmo0Q=="
    },
    "sample2.csv.gz": {
      "etag": "4c92564c-bffb-4f1d-a637-a09a3cff85b8",
      "last-modified": "Sun, 10 Mar 2019 16:27:33 GMT",
      "opc-content-md5": "K0TW745KejkBs9vRuciT2A=="
    }
  }
}

3. ADW/ATPにCREDENTIALを作成

DBMS_CLOUD.CREATE_CREDENTIALプロシージャでADW/ATPにCREDENTIALを
作成します。作り方はこちらの記事やリンク先のマニュアルを参照してね彡(゚)(゚)

4. 外部表の作成(DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャ)

DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャで外部表を作成します。

BEGIN
   DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
     table_name      => 'EXT_SAMPLE_CSV_GZ',
     credential_name => 'OCI_CLI_AYS_ATP',
     file_uri_list   => 'https://swiftobjectstorage.region.oraclecloud.com/v1/namespace/bucket-name/sample*.csv.gz',
     format          => '{ "type" : "CSV" , "compression" : "gzip" }' ,
     column_list     => 'ITEM_ID   NUMBER, ' ||
                        'ITEM_NAME VARCHAR2(30)'
   );
END;
/

それぞれのパラメータの意味は下記の通りです。

  • table_name:外部表名を指定しています。
  • credential_name:上記3. で作成したCREDENTAILを指定しています。
  • file_url_list:Object Storage上のファイルURLをワイルドカード(*)で指定しています。URL形式の詳細は "こちら"
  • format:幾つか指定方法がありますが、本ケースではJSON形式でtype属性(CSV)とcompression属性(gzip)を指定しています。詳細は "こちら"
  • column_list:カラム定義を外部表(EXTERNAL TABLE)形式で指定します。

下記マニュアルも参照やで彡(゚)(゚)

A Packages DBMS_CLOUD and DBMS_CLOUD_ADMIN
CREATE_EXTERNAL_TABLE Procedure
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/dbmscloud-reference.html#GUID-2AFBEFA4-992E-4F53-96DB-F560084C7DA9

5. 作成した外部表の参照

上記4. で作成した外部表を参照してみます。

SELECT * FROM EXT_SAMPLE_CSV_GZ;

   ITEM_ID ITEM_NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         4 d
         5 e
         6 f

6 rows selected.

Object Storage にアップロードしたCSVファイル(gzip圧縮済)のファイルを参照できたやで!彡(^)(^)

6. まとめ

ADW/ATPはObject Storage にアップロードしたファイルを直接参照できる!

という事は、Object StorageをData Lakeとしてデータを貯めこみながら参照しつつ、
使用頻度が高いデータはAutonomous DB(ADW/ATP)上にロード&加工して
Data Warehouse, Data Mart的に使えるということ彡(゚)(゚)

f:id:gonsuke777:20190311021233j:plain

皆さん、どんどん活用してね彡(^)(^)

Autonomous DB(ADW/ATP) に Java の JDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure)

表題の通り、Autonomous DB(ADW/ATP) に JavaJDBC Thin Driver で
接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Java, JDBC Thin Driver) ⇒ Autonomous DB(ADW/ATP)

前回の記事の続きになります。

OCI Database(DBaaS) の PDBJavaJDBC Thin Driver で
接続してみる。(Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/21/014614

1. Autonomous DB(ADW/ATP) とは?

Autonomous DB は ORACLE が提供する Full Managed なデータベースの Cloud Service です。

DWH向きの ADW(Autonomous Data Warehouse) と
OLTP向きの ATP(Autonomous Transaction Processing) が有るんやで彡(゚)(゚)

Autonomous Data Warehouse
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/

Autonomous Transaction Processing
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/

2. Autonomous DB(ADW/ATP) に接続する時のポイント(※ウォレットが必須)

通常のOracle Databaseへの接続 と Autonomous DB(ADW/ATP)への接続 の違いとして、
ウォレットによる暗号化通信が必須である点が挙げられます。

Autonomous Data Warehouse Instanceへの接続について
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-intorduction.html#GUID-CD4C10A6-1C1E-4969-8F67-1433B6CE626A

Autonomous Transaction Processing Instanceへの接続について
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-intorduction.html#GUID-CD4C10A6-1C1E-4969-8F67-1433B6CE626A

sqlplus や SQL Developer での接続については下記マニュアルを参照彡(゚)(゚)

Oracle SQL Developer (18.2)以上で接続
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-sql-dev182.html#GUID-14217939-3E8F-4782-BFF2-021199A908FD

Connect with SQL*Plus
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-sqlplus.html#GUID-A3005A6E-9ECF-40CB-8EFC-D1CFF664EC5A

何かしらの手段でウォレットを指定する事が、ADW/ATP接続の必須事項となります。
本記事では JDBC Thin driver + TNS_ADMIN による接続を幾つか試してみますやで彡(゚)(゚)

3. ウォレット、JDBC Driver Full版 のダウンロードと展開

手順は幾つか有りますが、下記マニュアルの「Plain JDBC using Oracle Wallets」を実行します。

Java Connectivity with Autonomous Database (ATP or ADW) using 18.3 JDBC
https://www.oracle.com/technetwork/database/application-development/jdbc/documentation/atp-5073445.html

ウォレットのダウンロードと展開は下記が参考になります。

自律型データベース(Autonomous Transaction Processing)に Golang を使って接続
https://qiita.com/sugimount/items/69e11c116a895c9feb97

# Autonomous DB の Wallet を展開
unzip Wallet_xxxxxx.zip

JDBC Driver の最新版(18.3)は現時点(2019/2/26)で下記ですが、最新版を参照して下さい。

Oracle Database 18c (18.3) JDBC Driver & UCP Downloads
https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-183-5013470.html

ojdbc8-full.tar.gz をダウンロードして、Compute上に展開(tar xvzf ~)します。

# JDBC Driver Full版を展開
tar xvzf ojdbc8-full.tar.gz

ウォレットは/home/opc/app/opc/product/18.0.0/client_1/network/adminに、
JDBC Driver は/home/opc/work/ojdbc8-full にそれぞれ展開したものとします。

# Wallet(TNS_ADMIN)
ls -la /home/opc/app/opc/product/18.0.0/client_1/network/admin

total 76
drwxr-xr-x.  3 opc opc  4096 Feb 25 16:26 .
drwxr-xr-x. 10 opc opc  4096 Jan 17 06:46 ..
-rw-rw-r--.  1 opc opc  6661 Feb 25 15:01 cwallet.sso
-rw-rw-r--.  1 opc opc  6616 Feb 25 15:01 ewallet.p12
-rw-rw-r--.  1 opc opc  3242 Feb 25 15:01 keystore.jks
-rw-rw-r--.  1 opc opc    87 Feb 25 15:01 ojdbc.properties
drwxr-xr-x.  2 opc opc  4096 Jan 17 06:44 samples
-rw-r--r--.  1 opc opc  1441 Aug 26  2015 shrept.lst
-rw-rw-r--.  1 opc opc   114 Feb 25 15:01 sqlnet.ora
-rw-rw-r--.  1 opc opc   155 Feb  4 11:23 sqlnet.ora.bak
-rw-rw-r--.  1 opc opc  2771 Feb 25 15:01 tnsnames.ora
-rw-rw-r--.  1 opc opc  3336 Feb 25 15:01 truststore.jks
-rw-rw-r--.  1 opc opc 19823 Feb 25 15:01 Wallet_xxxxxx.zip

# JDBC Driver full
ls -la /home/opc/work/ojdbc8-full

total 8328
drwx------.  2 opc opc    4096 Aug 20  2018 .
drwxrwxr-x. 22 opc opc    4096 Feb 25 15:33 ..
-r--r--r--.  1 opc opc 4161744 Aug  2  2018 ojdbc8.jar
-r-xr-xr-x.  1 opc opc   11596 Aug  2  2018 ojdbc.policy
-r--r--r--.  1 opc opc  144428 Aug  2  2018 ons.jar
-r--r--r--.  1 opc opc  307817 Aug  2  2018 oraclepki.jar
-r--r--r--.  1 opc opc 1661545 Aug  2  2018 orai18n.jar
-r--r--r--.  1 opc opc  205152 Aug  2  2018 osdt_cert.jar
-r--r--r--.  1 opc opc  306854 Aug  2  2018 osdt_core.jar
-rw-r--r--.  1 opc opc    2595 Aug 20  2018 README.txt
-r--r--r--.  1 opc opc   29103 Aug  2  2018 simplefan.jar
-r--r--r--.  1 opc opc 1398331 Aug  2  2018 ucp.jar
-r--r--r--.  1 opc opc  262415 Aug  2  2018 xdb6.jar

4. 方法1:ウォレットのパス(TNS_ADMIN) を JDBC URL に記述

JDBC 18.3 では ウォレットのパスを TNS_ADMIN として
JDBC URL に記述できるようになっています。

URLに指定されています。 次に例を示します。
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-jdbc-thin-wallet.html#GUID-F1D7452F-5E67-4418-B16B-B6A7B92F26A4
final static String DB_URL="jdbc:oracle:thin:@atpconnection_low?TNS_ADMIN=.";

この書き方の場合、接続文字列はtnsnames.oraの記述子を使用します。サンプルは下記

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@xxxxxx_high?TNS_ADMIN=/home/opc/app/opc/product/18.0.0/client_1/network/admin";
        final String id = "ADMIN";  //ID
        final String pw = "xxxxxxxxxxxxx";  //password

        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

コンパイルと実行は下記。マニュアルの記述の通り oraclepki.jar,
osdt_core.jar, osdt_cert.jarを classpath に含めておくんやで彡(゚)(゚)

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

成功(`・ω・)Ъ

5. 方法2:ウォレットのパス(TNS_ADMIN) を 環境変数に指定

ウォレットのパスをTNS_ADMIN環境変数に指定します。
この場合は JDBC URL に TNS_ADMIN の記述は不要で、ソースは下記彡(゚)(゚)

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@xxxxxx_high";
        final String id = "ADMIN";  //ID
        final String pw = "xxxxxxxxxxxxx";  //password

        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

コンパイルと実行結果は以下の通りです。

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

export TNS_ADMIN=/home/opc/app/opc/product/18.0.0/client_1/network/admin

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

再び成功(`・ω・)Ъ

6. 方法3:ウォレットのパス(TNS_ADMIN) を -D でシステム・プロパティとして指定

ウォレットのパスをシステム・プロパティoracle.net.tns_admin として
-Dオプションで指定します。javaソースは上記 5. と同じなので省略。

実行コマンドは下記となります。

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

unset TNS_ADMIN

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
-Doracle.net.tns_admin=/home/opc/app/opc/product/18.0.0/client_1/network/admin \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

三たび成功(`・ω・)Ъ

7. まとめ

oraclepki.jar, osdt_core.jar, osdt_cert.jar の classpath指定で
くっそハマった……まずはマニュアルの通りにやるのが、王道ですやね彡(-)(-)

OCI Database(DBaaS) の PDB に Java の JDBC Thin Driver で接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI(Oracle Cloud Infrastructure) Database(DBaaS) の PDB
JavaJDBC Thin Driver で接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Java, JDBC Thin Driver) ⇒ (Private Subnet) ⇒ DBaaS(PDB)

前回の記事の続きになります。

OCI Database(DBaaS) の PDB に sqlplus で接続してみる。(Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/19/211953

1. 接続先情報の確認

以下のPDBに接続します。

ホスト名(Private):dbname.subnetname.vcnname.oraclevcn.com
ポート番号    :1521
PDBサービス名  :ayspdb2.subnetname.vcnname.oraclevcn.com
JDBC URL(thin) :jdbc:oracle:thin:@//dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com

2. Javaソースコード

PDBに接続してV$CONTAINERSビューからPDB名を取得してます。
接続文字列は前回同様の簡易接続(ホスト名:ポート番号/サービス名)やで彡(゚)(゚)

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@//" +
                            "dbname.subnetname.vcnname.oraclevcn.com:" + //hostname
                            "1521/" + //port
                            "ayspdb2.subnetname.vcnname.oraclevcn.com"; //PDB Service
        final String id = "xxxxxxxx";  //ID
        final String pw = "yyyyyyyy";  //password
        
        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

3. コンパイルと実行

いつもの生コンパイルなスタイル彡(゚)(゚)

export JAVA_HOME=/home/opc/work/jdk1.8.0_191
export ORACLE_HOME=/home/opc/app/opc/product/18.0.0/client_1
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java
java -classpath .:${ORACLE_HOME}/jdbc/lib/ojdbc8.jar GetContainerName

Container Name => AYSPDB2 ★←PDB名

PDB名が出力されてるで!彡(^)(^)

4. まとめ

PDBのサービス名さえ分かっていれば、至ってフツー彡(゚)(゚)
次回は Autonomous DB(ADW/ATP) の接続を書いてみるやで。