ねら~ITエンジニア雑記

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

Oracle Cloud "Always Free" の Compute oCPU 1/8 をどうやって実現しているのか、推測してみる。

1. Oracle Cloud の Always Free について

OOW 2019(Oracle OpenWorld 2019) で Always Free という Oracle Cloud の新しいトライアルサービスが発表されました。

New Always Free Services
https://www.oracle.com/cloud/free/
 
[速報]Oracle Cloudを期限なく無料で使える「Always Free」発表。1GBのVM2つ、Autonomous Database 2つなど提供。Oracle OpenWorld 2019
https://www.publickey1.jp/blog/19/oracle_cloudalways_free1gbvm2autonomous_database_2oracle_openworld_2019.html
 
Oracle Cloudを期限なく無料で使える「Always Free」発表 1GBのVM2つ、Autonomous DB2つなど提供
https://www.itmedia.co.jp/news/articles/1909/17/news076.html

サービスの詳細は公式や各種記事に譲るとして、本記事でフォーカスするのは Computeインスタンスの下記記述彡(゚)(゚)

Compute 2 virtual machines with 1/8 OCPU and 1 GB memory each.

1/8 oCPU って???という訳で、某所でお借りした Always Free の Computeインスタンス(OEL 7.7)を調べてみるやで。

2. /proc/cpuinfo の結果

/proc/cpuinfo の結果は下記の通り、AMD EPYC 7551 の 論理CPU を 2スレッド分、割り当てているもよう彡(゚)(゚)

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.248
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.248
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

仮想化方式は KVM みたい。

$ dmesg | grep -i virtual
[    0.000000] Booting paravirtualized kernel on KVM
[    1.827450] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
[    1.878451] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
[    2.286858] systemd[1]: Detected virtualization kvm.

3. vmstat と mpstat を流しながら yes > /dev/null で CPUをぶん回す

下記コマンドで CPU をぶん回してみます。

$ yes > /dev/null

vmstatログは下記の通り、yes > /dev/null 実行タイミング で st値 が上がってますやね~。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   4876 274120   2896 412016    0    0     0     0  134  245  0  0 88  0 12
 0  0   4876 274120   2896 412016    0    0     0     0  131  239  0  0 93  0  7
 0  0   4876 274120   2896 412016    0    0     0     0  155  284  0  0 98  0  2
 0  0   4876 274120   2896 412016    0    0     0     0  151  261  0  0 95  0  4
 0  0   4876 274120   2896 412016    0    0     0     0  147  260  0  0 96  0  4
 1  0   4876 274152   2896 412016    0    0     0     0  151  262  0  0 92  0  8
 0  0   4876 274152   2896 412016    0    0     0     0  150  270  0  0 91  0  9
 0  0   4876 274152   2896 412016    0    0     0     0  165  293  0  0 95  0  5
 2  0   4876 273928   2896 412024    0    0     8     0  713  200 14  1 56  0 29 ★ここから yes > /dev/null
 3  0   4876 273928   2896 412024    0    0     0     0  846  208 15  5 31  0 50 ★ここから yes > /dev/null
 3  0   4876 273960   2896 412032    0    0     0     0  865  136 16  4 33  0 47 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0     0  962  130 17  3 33  0 47 ★ここから yes > /dev/null
 2  0   4876 273960   2896 412032    0    0     0     0  888  184 16  4 32  0 48 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0     0  823  142 15  5 29  0 51 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0    20  877  177 17  5 25  0 53 ★ここから yes > /dev/null
 3  0   4876 273992   2896 412032    0    0     0     0  902  128 16  4 31  0 49 ★ここから yes > /dev/null
 1  0   4876 273992   2896 412032    0    0     0     0  894  160 19  3 28  0 51 ★ここから yes > /dev/null
:

mpstatログは下記の通り、やはり yes > /dev/null 実行タイミング で %steal の値が上がってます。

$ mpstat 1 -P ALL
:
03:27:07 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:27:08 PM  all    0.49    0.00    0.00    0.00    0.00    0.00    1.97    0.00    0.00   97.54
03:27:08 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    2.00    0.00    0.00   98.00
03:27:08 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    1.98    0.00    0.00   98.02

03:27:08 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:27:09 PM  all    9.61    0.00    0.87    0.00    0.00    0.00   20.09    0.00    0.00   69.43
03:27:09 PM    0   22.55    0.00    0.00    0.00    0.00    0.00   20.59    0.00    0.00   56.86
03:27:09 PM    1    0.00    0.00    1.56    0.00    0.00    0.00   18.75    0.00    0.00   79.69

03:27:09 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:10 PM  all   15.56    0.00    3.89    0.00    0.00    0.00   48.25    0.00    0.00   32.30 ★ここから yes > /dev/null
03:27:10 PM    0   20.80    0.00    4.80    0.00    0.00    0.00   51.20    0.00    0.00   23.20 ★ここから yes > /dev/null
03:27:10 PM    1   10.69    0.00    3.05    0.00    0.00    0.00   45.80    0.00    0.00   40.46 ★ここから yes > /dev/null

03:27:10 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:11 PM  all   16.26    0.00    3.66    0.00    0.00    0.00   47.97    0.00    0.00   32.11 ★ここから yes > /dev/null
03:27:11 PM    0   23.21    0.00    3.57    0.00    0.00    0.00   51.79    0.00    0.00   21.43 ★ここから yes > /dev/null
03:27:11 PM    1   10.29    0.00    4.41    0.00    0.00    0.00   44.12    0.00    0.00   41.18 ★ここから yes > /dev/null

03:27:11 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:12 PM  all   16.06    0.00    3.61    0.00    0.00    0.00   47.79    0.00    0.00   32.53 ★ここから yes > /dev/null
03:27:12 PM    0   29.36    0.00    2.75    0.00    0.00    0.00   55.05    0.00    0.00   12.84 ★ここから yes > /dev/null
03:27:12 PM    1    5.04    0.00    4.32    0.00    0.00    0.00   43.17    0.00    0.00   47.48 ★ここから yes > /dev/null
:

4. KVM の CPU割当時間制御(vcpu_period と vcpu_quota)

KVM の CPU割当時間制御 は 下記を参考にしました。

KVM CPUのリソース制限
http://kt-hiro.hatenablog.com/entry/20180715/1531606948
:
vcpu_period の期間内で「CPU処理時間の合計」> vcpu_quota となると、それ以上はCPU処理時間が割り当てられなくなる。
CPU処理時間は仮想CPU全体で合計されるため、period < quota となる場合もある。
:
 
20.43. スケジュールパラメーターの設定
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html-single/virtualization_deployment_and_administration_guide/index#sect-Managing_guest_virtual_machines_with_virsh-Setting_schedule_parameters
:
vcpu_period:cpu.cfs_period_us
vcpu_quota:cpu.cfs_quota_us
:

1Core = 2CPU Thread の環境で 1秒間全CPUスレッド を占有すると、quota は 2000000μs になる計算です。

推測なんですが、1/8 oCPU は vcpu_period=1000000, vcpu_quota=125000 を
(または同一比の数値を)KVM側で設定して、制御しているんかと予測彡(゚)(゚)

5. まとめ

Oracle Cloud の Always Free最高や!彡(^)(^)
皆さん、Always Free で どんどん Oracle Cloud を触ってみて下さいね。

New Always Free Services
https://www.oracle.com/cloud/free/
注意事項:携帯番号は 日本は (+81) をつけて 9012345678 と入力します。
※最初の「0」は必ず省きます。省かないと認証のSMSが来ません。

OTN の VirtualBoxイメージ で Oracle DB 19c環境 を 楽々構築

以前の記事の 19c版 となります。

OTN の VirtualBoxイメージ で Oracle DB 18c環境 を 楽々構築
Oracle Database or GoldenGate Advent Calendar 2018 Day 5】
https://qiita.com/ora_gonsuke777/items/87f9b0078febddea2178

OTNからダウンロードできる VirtualBoxイメージ(ovaファイル)で
Oracle Database 19c環境をサクっと構築してみるやで彡(゚)(゚)

1. VirtualBox をインストール

まずは VirtualBox をダウンロードしてインストール、現時点(2019/8/16)の最新版は 6.0.10 となります。
Oracle VM VirtualBox Extension Pack も一緒に入れとくと良いです。

Oracle VM VirtualBox
https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

2. Database Virtual Box Appliance / Virtual Machine の ovaイメージをダウンロード

下記ページから ovaイメージ を ダウンロードします。
7.8GB位あるのでダウンロードを開始したら少し待ちます彡(゚)(゚)

Oracle Technology Network
Database Virtual Box Appliance / Virtual Machine
https://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html

念のためハッシュ値を確認します。下記はコマンドプロンプトでのMD5ハッシュ値確認例彡(゚)(゚)

certutil -hashfile C:\Users\AYSHIBAT\Downloads\DeveloperDaysVM2019-05-31_20.ova MD5

MD5 ハッシュ (対象 C:\Users\AYSHIBAT\Downloads\DeveloperDaysVM2019-05-31_20.ova):
20b5a5bd91cfe9d4f5acf5128f06146e
CertUtil: -hashfile コマンドは正常に完了しました。

3. ovaイメージのインポート

ダウンロードしたovaイメージをVirtualboxにインポートします。基本ポチポチするだけ彡(゚)(゚)
WS000001.JPG WS000002.JPG

4. 仮想マシンの起動

インポートが成功したら、仮想マシンを起動します。起動するだけ彡(゚)(゚)
WS000004.JPG WS000004c.JPG

5. 仮想マシンへのアクセス(ssh + sqlplus)

インポートされた仮想マシンにはNATのポートフォワード設定が下記のように設定されています。
WS000006.JPG

sshのポートフォワードは 2222(HOST)→22(GUEST) に設定されているので、
ホストOSのターミナルソフトから「localhost:2222」でsshログインが可能です。

ユーザ名とパスワードは元ページに書かれている通り両方とも oracle 彡(゚)(゚)

(Username and password is oracle.)

Teratermでログインしてみます。

WS000007.JPG WS000008.JPG

sshログイン後、環境変数ORACLE_HOMEとPATHを設定します。
tnsnames.oraには CDB と PDB の接続文字列が記述されてます。CDB に接続してみますやで彡(゚)(゚)

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
cat ${ORACLE_HOME}/network/admin/tnsnames.ora
sqlplus /nolog
CONNECT SYS/oracle@ORCLCDB AS SYSDBA
SET LINESIZE 170;
SET PAGESIZE 100;
SHOW CON_NAME;
SELECT PATCH_ID, PATCH_UID, PATCH_TYPE, DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;

実行結果は下記の通り。DBにログイン成功や!彡(^)(^)

[oracle@localhost ~]$ export ORACLE_HOME=/u01/app/oracle/product/version/db_1
[oracle@localhost ~]$ export PATH=${PATH}:${ORACLE_HOME}/bin
[oracle@localhost ~]$ cat ${ORACLE_HOME}/network/admin/tnsnames.ora
ORCLCDB=localhost:1521/orclcdb
ORCL=
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Aug 17 03:21:14 2019
Version 19.3.0.0.0

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

SQL> CONNECT SYS/oracle@ORCLCDB AS SYSDBA
Connected.
SQL> SET LINESIZE 170;
SQL> SET PAGESIZE 100;
SQL> SHOW CON_NAME;

CON_NAME
------------------------------
CDB$ROOT
SQL> SELECT PATCH_ID, PATCH_UID, PATCH_TYPE, DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;

  PATCH_ID  PATCH_UID PATCH_TYPE DESCRIPTION
---------- ---------- ---------- ----------------------------------------------------------------------------------------------------
  29517242   22862832 RU         Database Release Update : 19.3.0.0.190416 (29517242)

SQL>

6. 仮想マシン上のDBへのアクセス(SQL Developer)

お次はホストOSの SQL Developer で仮想マシンのDBにログインしてみます彡(゚)(゚)

仮想マシンOracleリスナーのポートは 1521(HOST)→1521(GUEST) にフォワードされているので、
ホストOSのツール等から localhost:1521 でDB接続できます。SQL Developer で PDBの方に接続してみます。

ユーザー名:PDBADMIN
パスワード:oracle
ホスト名 :localhost
ポート  :1521
サービス名:orcl

WS000010.JPG

接続後、試しに V$VERSION を SELECT してみます。
WS000009.JPG

成功(`・ω・)Ъ

7. 仮想マシンのAPEX ADMIN環境にホストマシンのWebブラウザからアクセス(Oracle APEX)

仮想マシンの8080ポート(HOST)は8080ポート(GUEST)にフォワードされていて、
ホストマシンのブラウザから仮想マシンのAPEX ADMIN環境にアクセスできます。下記は接続情報となります。

URL…………http://localhost:8080/apex
Workspace…INTERNAL
Username …ADMIN
Password …oracle

接続画面キャプチャはこちら
WS000012.JPG

接続後のキャプチャはこちら
WS000013.JPG

この接続情報元ネタは下記、publicなのは無いのかな…?

Installing and Configuring an Oracle Developer Day VirtualBox Image
https://mikesmithers.wordpress.com/2015/01/25/installing-and-configuring-an-oracle-developer-day-virtualbox-image/

このADMIN環境からワークスペースを作成すれば、
もりもりAPEXアプリを作れるやで。過去記事も見てね彡(^)(^)

Oracle APEX Meetup 第2回「2時間でできるAPEXハンズオン」(6/1・木) に行ってみたのでご報告
https://gonsuke777.hatenablog.com/entry/20170613/1497339652

8. OS認証で CDB$ROOT にSYSユーザーでログイン(※2019/8/23追記)

CDB$ROOT に OS認証 でログインする方法ですが、該当環境のoracleユーザーには
環境変数TWO_TASKがセットされているので、これを解除して ORACLE_SID を指定してログインして下さい。

SQLPlus ユーザーズ・ガイドおよびリファレンス 19c
2.1 SQL
Plusの環境変数
https://docs.oracle.com/cd/F19136_01/sqpug/configuring-SQL-Plus.html#GUID-A91DD984-84ED-4D67-9983-938FCFC3665E
TWO_TASK 接続文字列を指定するUNIX環境変数。データベースを指定しない接続は、TWO_TASKに指定したデータベースに接続されます。

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
export ORACLE_SID=orclcdb
unset TWO_TASK
sqlplus /nolog
CONNECT / AS SYSDBA
SHOW CON_NAME;
SHOW PDBS;

下記の通り OS認証 でログインできます。

$ export ORACLE_HOME=/u01/app/oracle/product/version/db_1
$ export PATH=${PATH}:${ORACLE_HOME}/bin
$ export ORACLE_SID=orclcdb
$ unset TWO_TASK
$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Aug 23 03:43:09 2019
Version 19.3.0.0.0

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

SQL> CONNECT / AS SYSDBA
Connected.
SQL> SHOW CON_NAME;

CON_NAME
------------------------------
CDB$ROOT
SQL> SHOW PDBS;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL                           READ WRITE NO

SQL>

9. まとめ

VirtualBoxでお手軽にOracle Database 19c環境を構築できたやで!どんどん活用するんやで。
彡(^)(^)

JDK6(Java) + JDBC OCI Driver(type 2) で Autonomous Database に接続してみる。

ゆえ有って、JDK6(Java) + JDBC OCI Driver(type 2) で Autonomous Database に接続してみます。

1. Oracle Instant Client 12.1.0.2 をダウンロード&解凍

Oracle Instant Client をダウンロードします。JDK6に対応した ojdbc6.jar を含む 12.1.0.2 の Instant Client をダウンロードします。

今回は /home/opc/work/instantclient_12_1/ に展開したものとします。

unzip instantclient-basic-linux.x64-12.1.0.2.0.zip
unzip instantclient-jdbc-linux.x64-12.1.0.2.0.zip
ls -la /home/opc/work/instantclient_12_1/
total 192020
drwxrwxr-x. 2 opc opc      4096 Jul 20 10:41 .
drwxrwxr-x. 7 opc opc      4096 Jul 21 12:55 ..
-rwxrwxr-x. 1 opc opc     29404 Jul  7  2014 adrci
:
-r-xr-xr-x. 1 opc opc    156353 Jul  7  2014 libocijdbc12.so
-r-xr-xr-x. 1 opc opc    337137 Jul  7  2014 libons.so
-rwxrwxr-x. 1 opc opc    118491 Jul  7  2014 liboramysql12.so
-r--r--r--. 1 opc opc   3692096 Jul  7  2014 ojdbc6.jar
-r--r--r--. 1 opc opc   3698857 Jul  7  2014 ojdbc7.jar
-r--r--r--. 1 opc opc   1659574 Jul  7  2014 orai18n.jar
-r--r--r--. 1 opc opc     87292 Jul  7  2014 orai18n-mapping.jar
-rwxrwxr-x. 1 opc opc    227410 Jul  7  2014 uidrvci
-rw-rw-r--. 1 opc opc     71202 Jul  7  2014 xstreams.jar

2. Autonomous Database のウォレットをダウンロード&解凍

Autonomous Database のウォレットをダウンロードして展開します。下記記事等を参照して下さい。

cd /home/opc/work/wallet
unzip Wallet_DBxxxxxxxxxxxxxx.zip
ls -la
total 68
drwxrwxr-x. 2 opc opc  4096 Jul 21 13:36 .
drwxrwxr-x. 6 opc opc  4096 Jul 21 13:36 ..
-rw-rw-r--. 1 opc opc  6661 Jun 24 10:18 cwallet.sso
-rw-rw-r--. 1 opc opc  6616 Jun 24 10:18 ewallet.p12
-rw-rw-r--. 1 opc opc  3242 Jun 24 10:18 keystore.jks
-rw-rw-r--. 1 opc opc    87 Jun 24 10:18 ojdbc.properties
-rw-rw-r--. 1 opc opc   114 Jun 24 10:18 sqlnet.ora
-rw-rw-r--. 1 opc opc  5638 Jun 24 10:18 tnsnames.ora
-rw-rw-r--. 1 opc opc  3336 Jun 24 10:18 truststore.jks
-rw-rw-r--. 1 opc opc 19912 Jun 24 10:18 Wallet_DBxxxxxxxx.zip

3. Autonomous Database のウォレットのsqlnet.oraを編集

ウォレットのzipを展開するとsqlnet.oraが生成されますが、この sqlnet.ora の DIRECTORY をウォレットの展開ディレクトリに書き換えます。

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
↓
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/work/wallet")))

4. テスト用のサンプルコード

finally でリソース解放もしていない雑コードだけど、許してクレメンス……:(;゙゚'ω゚'):
JDK6だとtry-with-resources構文が使えないんですよねー。彡(゚)(゚)

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:oci:@dbxxxxxxxx_tp";
        final String id = "ADMIN";  //ID
        final String pw = "xxxxxxxx";  //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
        }
    }
}

ポイントは JDBC URL のココ、ociドライバを指定しつつtnsnames.oraの接続文字列を指定します。

final String path = "jdbc:oracle:oci:@dbxxxxxxxx_tp";

5. コードのコンパイルと実行

javacでコンパイルして実行します。実行時には下記の環境変数を指定します。

  • LD_LIBRARY_PATH
    Oracle Instant Client を展開したディレクトリを指定します。
  • TNS_ADMIN
    ⇒ Autonomous Database のウォレットを展開したディレクトリを指定します。

実行コマンドは下記の通りです。

export JAVA_HOME=/usr/java/jdk1.6.0_211
export PATH=${JAVA_HOME}/bin:${PATH}
java -version
javac -version
javac GetContainerName.java
export LD_LIBRARY_PATH=/home/opc/work/instantclient_12_1:$LD_LIBRARY_PATH
export TNS_ADMIN=/home/opc/work/wallet
java -classpath /home/opc/work/instantclient_12_1/ojdbc6.jar:. GetContainerName

実行結果は下記の通り、上手く動いたやで!彡(^)(^)

$ export JAVA_HOME=/usr/java/jdk1.6.0_211
$ export PATH=${JAVA_HOME}/bin:${PATH}
$ java -version
java version "1.6.0_211"
Java(TM) SE Runtime Environment (build 1.6.0_211-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.211-b11, mixed mode)
$ javac -version
javac 1.6.0_211
$ javac GetContainerName.java
$ export LD_LIBRARY_PATH=/home/opc/work/instantclient_12_1:$LD_LIBRARY_PATH
$ export TNS_ADMIN=/home/opc/work/wallet
java -classpath /home/opc/work/instantclient_12_1/ojdbc6.jar:. GetContainerName

Container Name => VRWV9351YZ4NXNS_DB201906031608

6. 参考ドキュメント

補足. Thin Driver では接続できないのか?

Autonomous Database は TLSv1.2 で通信する必要があり、JDK8以降では標準装備、JDK7ではバックポート用のパッチが提供されているのですが、JDK6 だとこのバックポートが提供されていない模様で、苦しそう?彡(゚)(゚)

(追記)下記で JDK6 + JDBC Thin Driver 12.1.0.2 でも接続できる事を確認しました。サポート契約が有る方はご参照下さい。

  • JDK6 u211(JDK6 u181以降) を Doc ID 1534791.1 からダウンロードしてきてインストール
  • Oracle Client(※Instantではない) 12.1.0.2 をインストール
  • Oracle Client に PSU 12.1.0.2.20190716(Patch 29494060)を適用
  • Oracle Client に 個別Patch 23176395(※20426934, 19030178, 19154304 の Merge版)を適用
  • Oracle Client に 個別Patch 25797943(※12.1.0.2版を選択)を適用
  • Patchによるバックポートが適用された Oracle Client配下のJDBC Driver(ojdbc6.jar)や各種jarを指定して接続

参考情報は下記となります。

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