Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

oracleXE自作ユーザー(XEDBA1)がJAVAから接続できない

解決したいこと

ORACLEXEが基本デフォルトでXEDBA1に接続されない不親切なやつだったので自作ロールを作成しましたが、
ソースから使用できず、、、、
ORACLEXEで自作ユーザー、スキーマに接続し、JAVAから接続したい
何を確認し、どうすれば接続可能になるのかを教えてください。

発生している問題・エラー

JAVAソースのsysDBAユーザーから自作のユーザーに修正し、接続したが、
リスナーエラーoraclexe ORA-12505
が発生しJAVAからのみ接続できない

該当するソースコード

接続をしているJAVAソースはdefaultユーザでですが、こちらで質問して成功まで確認しています。
https://qiita.com/oraclesyoshinsya/questions/7683f26035480bd96e3a
以下接続のために修正しているものです。
String url = "jdbc:oracle:thin:@localhost:1521:XEPDB1";
String user = "orauser"; ※asでSYSDBAも試し、自作ロールも試しましたが、うまくいかず、、、
String pass = "password";

実行したSQL(例)

DBのコンテナを操作可能なものに変更

SQL> alter session set container = XEPDB1;

スペース作成

CREATE TABLESPACE TEST
DATAFILE '/usr/lib/oracle/xe/TEST.dbf' SIZE 100M
SEGMENT SPACE MANAGEMENT AUTO;

テンポラリスペース作成

CREATE TEMPORARY TABLESPACE TESTTEMP
TEMPFILE '/usr/lib/oracle/xe/TESTTEMP.dbf' SIZE 100M
AUTOEXTEND ON;

ユーザー作成

CREATE USER orauser
identified by Passw0rd
default tablespace TEST
temporary tablespace TESTTEMP;

権限付与 ※接続ツール(SQLDevelopper)で接続の確認

grant connect to orauser;
grant resource to orauser;
他フルで権限を与えました。

接続用のロールを作成

CREATE ROLE XEPDB1

#コマンドプロンプトで接続確認
sqlplus orauser/Passw0rd@//localhost:1521/XEPDB1

自分で試したこと

sqlplus orauser/Passw0rd@//localhost:1521/XEPDB1
例の上で接続成功、SQLDeveloperでも接続成功
JAVAから接続したところリスナーエラーとなりました。
SQLDevelopperもデフォルトロール以外で接続できないです。
作成ユーザーにはフルで管理権限を与えてみました。
SQLPLUSにて作成ユーザーでの接続を確認しています。
tnsnames.oraファイルにXEDBA1を追加しコマンドでリスナーを再起動しましたが
問題なく起動したようです。

0

3Answer

恐らく、色々勘違いされていると思いますので補足をしておきます。

sqlplus orauser/Passw0rd@//localhost:1521/XEPDB1

上記のXEPDB1の部分に設定するのはサービス名(service_name)です。

tnsnames.oraファイルにXEDBA1を追加しコマンドでリスナーを再起動しましたが
問題なく起動したようです。

tnsnames.oraに設定したXEDBA1は、ネットサービス名(net_service_name)です。

String url = "jdbc:oracle:thin:@localhost:1521:XEPDB1";

上記のXEPDB1の部分に設定するのはSIDです。

Thinの接続文字列の書き方に関しては、下記が参考になるかと思います
https://docs.oracle.com/cd/E16338_01/java.112/b56281/jdbcthin.htm

何かの参考になれば幸いです。

0Like

Comments

  1. 下記をさされていますでしょうか?
    下のほう使えそうですが、変数なのか、定義なのかものすごくわかりにくいですね。
    jdbc:oracle:thin:@//test555.testserver.com
    jdbc:oracle:thin:@//test555.testserver.com:1521
    jdbc:oracle:thin:@test555.testserver.com
    jdbc:oracle:thin:@test555.testserver.com:1521
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com)(PORT=1521)))
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com)))
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=)))

    →つまり、
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=loaclhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))
    にすると例にあげた値の設定になると。。。やはり同じく接続に失敗しました。
    mybatis generatorConfigに例の値を入れるとこんな感じですが、これで本物の定義に変換して実行しましたが、相変わらず失敗しました。

    <jdbcConnection
    driverClass="oracle.jdbc.driver.OracleDriver"
    connectionURL="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=loaclhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))"
    userId="orauser"
    password="password"
    />
    質問欄に記載しています値をORACLE SQL DEVELOPERに入れて接続が通っている値が下記なので、この値を実際の値に書き換えたら接続できると思いますが、失敗しています。
    誤りがあれば指摘していただきたいです。

    ホスト名:localhost
    ポート:1521
    サービス名:XEPDB1
    ユーザー:orauser
    パスワード:password

追加成功情報です。
A5SQLにて、oracleクライアント接続にも成功しました。
ODBC接続にも成功しました。
なので、リスナーは正常に動作しているもようですが、サービス名を指定した接続にA5SQLからなぜか失敗しました。
SQLDevelopperは同じ値で接続できています。
ものすごく不思議です。
何か設定不足していますでしょうか?

0Like

tnsnames.oraの中身をテキストエディタ等で確認してみてください。
ネットサービス名と、その設定内容が確認できると思います。

サービス名の確認には「lsnrctl status」というコマンドを使用すると
確認することができます。

余談ですが、
「tnsping」とういうコマンドを使用すると、
ネットサービス名の接続確認をするのに便利です。

何かの参考になれば幸いです。

0Like

Your answer might help someone💌