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=…")) ) :