SSH転送(SSH Tunnel) を設定して、踏み台Compute経由の SQL Developer で Autunomous Database に接続する(OCI, Oralce Cloud Infrastructure)
タイトルの通り、SSH転送(SSH Tunnel)経由 の SQL Developer で Autonomous Database に接続してみるやで。
彡(゚)(゚)
1. 構成
構成は下記の通り。
ソフトウェア/サービスのバージョンは以下の通りです。
■PC端末 Windows 10 SQL Developer 19.2.0 PuTTY 0.71 Teraterm 4.103 ■Compute VM.Standard2.1 OEL 7.6 ■Autonomous Database 18c
2. Autonomous Database の ACL(Access Control List)設定
Computeインスタンス の Public IP からのみ接続を許可するように、Autonomous Database の ACL(Access Control List) を設定します。
なおスクショはSGW(Service Gatewary)経由のPrivate Networkからの接続を許可する設定も入ってます。
ハンバーガーメニュー ⇒ ATP or ADW ⇒ DB名クリック ⇒ Action ⇒ Access Control List ⇒ IP Address を記述して Save
参考マニュアルは下記となります。
Autonomous Data Warehouseでのアクセス制御リストの設定
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/autonomous-acess-control-list.html#GUID-B6389402-3F4D-45A2-A4DE-EAF1B31D8E50
3. Autonomous Database のウォレットをダウンロードして PC端末に展開
以下の手順で Autonomous Database の ウォレットをダウンロードします。
ハンバーガーボタン > Autonomous Data Warehouse or Transaction Processing > DB名 > DB Connection > Download
ダウンロードした Wallet の zip を PC端末で展開します。本記事では C:\tools\wallet\ に展開したものとします。
4. PC端末の環境変数設定
環境変数TNS_ADMIN を Wallet の zip を展開したフォルダに指定します。
設定 > コントロールパネル > システム > システムの詳細設定 > 環境変数 > ユーザ環境変数 > 新規
変数名:TNS_ADMIN
変数値:C:\tools\wallet
5. Walletを展開したフォルダ内の sqlnet.ora を修正
Walletを展開したフォルダ内の sqlnet.ora を修正します。WALLET_LOCATION の DIRECTORY を明示的に記述します。
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin"))) ↓ WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="C:\tools\wallet")))
6. Walletを解凍したフォルダ内のtnsmanes.oraの内容を置換
tnsnames.ora の port番号 および host名を修正します。
port番号は Well-known port ではない 任意のport にします。本記事では 15222 に修正します。
host は localhost に置換します。単純に置換すると CN= のホスト名も置換されてしまうので、
host=xxx.xxx.oraclecloud.com -> host=localhost で置換します。
※置換する前のホスト名はどこかにメモしておきます。
prdatp_tp = (description= (address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_xxxxxx_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn= "CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")) ) ↓ prdatp_tp = (description= (address=(protocol=tcps)(port=15222)(host=localhost))(connect_data=(service_name=xxxxxxxxxxxxxxx_xxxxxx_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn= "CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")) )
7a. SSH転送(SSH Tunnel)を設定(PuTTYの場合)
SSH転送(SSH Tunnel)を設定します。PyTTY の場合は下記のように設定します。
■Session ・Host Name(or IP address) => 踏み台サーバのIPアドレスを入力 ・Port =>22(自動入力) ■Connection > SSH > Auth Authentication parameter > Private Key File 踏み台インスタンスにログインするための秘密鍵を指定 ■Connection > SSH > Tunnel > 以下の設定を入力してAdd Source Port:15222 ※6.で記述した任意のポート Destination :xxx.xxx.oraclecloud.com:1522(※6.のtnsnames.oraの変更前ホスト名を入力) ホスト:tnsnames.oraの旧ホスト名 ポート:1522 ■Sessionに戻って任意の名前でSave ■Open ⇒ ユーザー名(opc)を入力して踏み台インスタンスにログインします。
7b. SSH転送を設定(Teratermの場合)
SSH転送を設定します。Teraterm の場合は下記のように設定します。
■設定 ⇒ SSH転送 ⇒ 追加 ⇒ 以下を設定してOK ⇒ OK ローカルのポート:15222 ※6.で記述した任意のポート リッスン:空(何も設定しない) リモート側ホスト:tnsnames.oraの旧ホスト名(※6.のtnsnames.oraの変更前ホスト名を入力) ポート:1522 ■上記の設定を保存する。 設定 ⇒ 設定の保存 ⇒ Teratermのインストールディレクトリに TERATERM.INI として保存 ■ターミナルソフト(Teraterm)をクローズして、起動し直す。 ■踏み台Computeにログインして、上記のSSH転送設定が反映されているかを確認する。 ログイン後に 設定 ⇒ SSH転送 ⇒ 上記の転送設定が残っていればOK
8. SQL Developer の接続を新規作成、テスト、保存
ターミナルでComputeインスタンスに接続後、SQL Developerを起動してデータベースの接続を新規作成します。
接続名:任意の接続名 ユーザー名:ADBのユーザー名 パスワード:ADBユーザーのパスワード 接続タイプ:TNS ロール:デフォルト ネットワーク別名 or 接続識別子:接続するtnsnames.oraのTNS名を指定 ※ ※環境変数が適切に設定されていれば、ネットワーク別名にtnsnames.oraの接続文字列が表示される
上記の接続を作成して、テストボタンを押して成功が出力されればOKです。
テストが成功したら、SQL Developerの接続設定を保存します。
9. まとめ
Computeの鍵とWalletのzipを持っているユーザーだけが、SQL DeveloperでAutonomous Database にアクセスできるようになります。
より安全に Autonomous Database に接続して、ガンガン活用や!彡(^)(^)
Oracle Cloud "Always Free" の Compute oCPU 1/8 をどうやって実現しているのか、推測してみる。
- 1. Oracle Cloud の Always Free について
- 2. /proc/cpuinfo の結果
- 3. vmstat と mpstat を流しながら yes > /dev/null で CPUをぶん回す
- 4. KVM の CPU割当時間制御(vcpu_period と vcpu_quota)
- 5. まとめ
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 :
%steal の値が上昇するということは、仮想化レイヤでGuest OSに割り当てているCPUに何かしらの制御が入ってるということ彡(゚)(゚)
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 は 2,000,000μs になる計算です。
推測なんですが、1/8 oCPU は 2スレッド分を丸々占有した CPU時間の 1/8、
vcpu_period=1,000,000, vcpu_quota=250,000 (または同一比の数値) を
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環境 を 楽々構築
- 1. VirtualBox をインストール
- 2. Database Virtual Box Appliance / Virtual Machine の ovaイメージをダウンロード
- 3. ovaイメージのインポート
- 4. 仮想マシンの起動
- 5. 仮想マシンへのアクセス(ssh + sqlplus)
- 6. 仮想マシン上のDBへのアクセス(SQL Developer)
- 7. 仮想マシンのAPEX ADMIN環境にホストマシンのWebブラウザからアクセス(Oracle APEX)
- 8. OS認証で CDB$ROOT にSYSユーザーでログイン(※2019/8/23追記)
- 9. まとめ
以前の記事の 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にインポートします。基本ポチポチするだけ彡(゚)(゚)
4. 仮想マシンの起動
インポートが成功したら、仮想マシンを起動します。起動するだけ彡(゚)(゚)
5. 仮想マシンへのアクセス(ssh + sqlplus)
インポートされた仮想マシンにはNATのポートフォワード設定が下記のように設定されています。
sshのポートフォワードは 2222(HOST)→22(GUEST) に設定されているので、
ホストOSのターミナルソフトから「localhost:2222」でsshログインが可能です。
ユーザ名とパスワードは元ページに書かれている通り両方とも oracle 彡(゚)(゚)
(Username and password is oracle.)
Teratermでログインしてみます。
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
接続後、試しに V$VERSION を SELECT してみます。
成功(`・ω・)Ъ
7. 仮想マシンのAPEX ADMIN環境にホストマシンのWebブラウザからアクセス(Oracle APEX)
仮想マシンの8080ポート(HOST)は8080ポート(GUEST)にフォワードされていて、
ホストマシンのブラウザから仮想マシンのAPEX ADMIN環境にアクセスできます。下記は接続情報となります。
URL…………http://localhost:8080/apex
Workspace…INTERNAL
Username …ADMIN
Password …oracle
接続画面キャプチャはこちら
接続後のキャプチャはこちら
この接続情報元ネタは下記、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 SQLPlusの環境変数
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 に接続してみる。
- 1. Oracle Instant Client 12.1.0.2 をダウンロード&解凍
- 2. Autonomous Database のウォレットをダウンロード&解凍
- 3. Autonomous Database のウォレットのsqlnet.oraを編集
- 4. テスト用のサンプルコード
- 5. コードのコンパイルと実行
- 6. 参考ドキュメント
- 補足. Thin Driver では接続できないのか?
ゆえ有って、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 のウォレットをダウンロードして展開します。下記記事等を参照して下さい。
- 自律型データベース(Autonomous Transaction Processing)に Golang を使って接続
https://qiita.com/sugimount/items/69e11c116a895c9feb97
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でコンパイルして実行します。実行時には下記の環境変数を指定します。
実行コマンドは下記の通りです。
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. 参考ドキュメント
- Connection using JDBC-OCI driver using Wallets
https://www.oracle.com/technetwork/database/application-development/jdbc-eecloud-3089380.html#jdbcoci
- Oracle JDBCのリリースとJDKのバージョンの関連について教えてください。
https://www.oracle.com/technetwork/jp/database/application-development/jdbc/overview/default-090281-ja.html#01_03_1
- Oracle JDBC Driver スタート・ガイド - インストール、動作保証、その他 (ドキュメントID 1999901.1) ※要ログイン
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1999901.1
補足. Thin Driver では接続できないのか?
Autonomous Database は TLSv1.2 で通信する必要があり、JDK8以降では標準装備、JDK7ではバックポート用のパッチが提供されているのですが、JDK6 だとこのバックポートが提供されていない模様で、苦しそう?彡(゚)(゚)
- JDBC Thin Connections and Wallets
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/connect-jdbc-thin-wallet.html#GUID-5ED3C08C-1A84-4E5A-B07A-A5114951AA9EAutonomous Data Warehouse mandates a secure connection that uses Transport Layer Security (TLSv1.2).
- JDBC ThinおよびUCPを使用した接続のためのソフトウェア要件
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connecting-jdbc-thin-driver.html#GUID-EEB8AC2B-AE63-486A-A7DB-96460DCA881Eパッチ適用済の12.1.0.2 JDBC Thinドライバ (ojdbc7.jar)と12.1.0.2 UCP (ucp.jar)をダウンロードし、その場所をクラスパスに追加します。
- Doc ID 2122800.1 "IO Error: No appropriate protocol" When Trying to Connect to Oracle Database 12.1 with TLSv1.1 and TLSv1.2 Protocols ※要ログイン
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2122800.1
(追記)下記で 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を指定して接続
参考情報は下記となります。
- Java SE and JRockit Archived Downloads on MOS for Java Versions that Have Reached EOL (Doc ID 1534791.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1534791.1- JDBC TLS Connections Fail with java.io.EOFException: SSL peer shut down incorrectly After Patching the Database With APRIL 2018 PSU + TLS 1.2 Patch:28362304 (Doc ID 2477104.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2477104.1- JDBC Thin Driver receives "java.security.NoSuchAlgorithmException: SSO KeyStore not available" (Doc ID 2321763.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2321763.1- "IO Error: No appropriate protocol" When Trying to Connect to Oracle Database 12.1 with TLSv1.1 and TLSv1.2 Protocols (ドキュメントID 2122800.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2122800.1- Java SE 6 Advanced and Java SE 6 Support (formerly known as Java SE for Business 6) Release Notes
https://www.oracle.com/technetwork/java/javase/downloads/overview-156328.html#R160_181
⇒ (6u181)The SHA224withDSA and SHA256withDSA algorithms are now supported in the TLS 1.2- How To Configure Oracle JDBC Thin Driver To Connect To Database Using TLS v1.2 (ドキュメントID 2436911.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2436911.1
WLS(WebLogic)からAutonomous Database(ATP/ADW)に接続するデータソース(コネクションプール)を作成してみる。
※(2019/7/4追記) 本記事は単体のWLS(WebLogic)からAutonomous Databaseに接続するデータソースを作成する記事として修正しました。
- 1. JDBC Driver 19.3 Full版のダウンロード
- 2. JDBC Driver 19.3 Full版をWLSのOSに格納&展開
- 3. Autonomous DatabaseのWalletファイルをダウンロードして展開
- 4. WLS(WebLogic)起動シェルの編集(CLASSPATHの指定)
- 5. WLS(WebLogic)の管理コンソールからデータソースを作成
- 6. まとめ
- 7. 参考ドキュメント(※2019/06/17追記)
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-3B174F75D4B1Python (cx_Oracle) から2つ目のAutonomous Database (ADWやATP)に接続してみる
https://qiita.com/mikika/items/5d157c2fcdd80d560bd4Tableauを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管理コンソールにログインします。
左上の「ロックして編集」をクリックして……
「GridLink for RACデータソースの構成」のリンクをクリック
「新規」⇒「GridLinkデータ・ソース」
「名前」⇒任意の文字列、「スコープ」⇒グローバル、「JNDI名」⇒任意の文字列、「データベース・ドライバ」⇒Oracles Driver(thin) for GridLink Connections;
「1フェーズ・コミット」以外のチェックは全て無し
「完全なJDBC URLの入力」をチェック
「完全な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ユーザーのパスワード、「プロトコル」はTCP、oracle.jdbc.DRCPConnectionClassは無し
次画面で「すべてのリスナーのテスト」を実行すると、接続テストが成功。やったぜ。彡(^)(^)
今回はFAN/ONS関連の設定は無し。
データソースをデプロイするWLSクラスタを選択して、終了
「変更のアクティブ化」を押して完了です。
6. まとめ
基本は以前の記事と同様や!彡(゚)(゚)
Autonomous DB(ADW/ATP) に Java の JDBC 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マニュアルの記述
- 2. リスナーの役割
- 3. データベース・サービスとは?
- 4. サンプル1:sqlclでJDBC URLを指定しつつ接続確認
- 5. サンプル2:OCI DB(DBaaS)のCDBにsqlclでJDBC URLを指定しつつ接続
- 6. サンプル3:Autonomous DB(ATP/ADW)の場合のJDBC URL
- 7. サンプル4:tnsnames.oraっぽい書き方でJDBC URLを記述
- 8. まとめ
- おまけ. サンプル:Autonomous DB(ATP/ADW) に sqlclで接続
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) に Java の JDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/26/023534
何かしらの方法でウォレットの格納場所をTNS_ADMINに指定します。
JDBC URL に TNS_ADMIN を直接記述するやり方だと、下記の通り彡(゚)(゚)
- 方法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. マニュアル
- 11gR2(データベース・リファレンス、V$ACTIVE_SESSION_HISTORY)
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1007.htm- 12cR1(データベース・リファレンス、V$ACTIVE_SESSION_HISTORY)
https://docs.oracle.com/cd/E57425_01/121/REFRN/GUID-69CEA3A1-6C5E-43D6-982C-F353CD4B984C.htm- 12cR2(データベース・リファレンス、V$ACTIVE_SESSION_HISTORY)
https://docs.oracle.com/cd/E82638_01/refrn/V-ACTIVE_SESSION_HISTORY.html#GUID-69CEA3A1-6C5E-43D6-982C-F353CD4B984C- 18c(データベース・リファレンス、V$ACTIVE_SESSION_HISTORY)
https://docs.oracle.com/cd/E96517_01/refrn/V-ACTIVE_SESSION_HISTORY.html#GUID-69CEA3A1-6C5E-43D6-982C-F353CD4B984C
マニュアルと実定義で少し差(SAMPLE_TIME_UTCとか)が有る?彡(゚)(゚)