Oracleエラー対応(ORA-02019): ORA-02019発生時の調査対応について
現役DBAが解説-Oracleエラー対応
データベースリンク経由のSELECT文を実行した際に発生する、ORA-02019「指定されたリモート・データベースは存在しません。」というエラーについて、対処法をご紹介します。
1.エラーメッセージ
ORA-02019: 指定されたリモート・データベースは存在しません。
2.事象・原因・対策
データベースリンクを以下のような形で作成します(PDBにて作成を実施)。
SQL> CREATE DATABASE LINK MYLINK.MYDOMAIN.COM CONNECT TO USERNAME IDENTIFIED BY PASSWORD USING 'CONNECT_STRING';
上記で作成したデータベースリンクに対してドメイン名を省略してSELECT文を発行しようとすると、ORA-02019が発生します。
SQL> SELECT INSTANCE_NAME,HOST_NAME,STATUS FROM V$INSTANCE@MYLINK; SELECT INSTANCE_NAME,HOST_NAME,STATUS FROM V$INSTANCE@MYLINK; * 行1でエラーが発生しました。: ORA-02019: 指定されたリモート・データベースは存在しません
原因は global_name にドメイン名が含まれていないためです。
SQL> SELECT * FROM GLOBAL_NAME; GLOBAL_NAME -------------------------------------------------------------- MYPDB
対処法はglobal_nameにドメイン名を付加することです。
しかしPDBではglobal_nameの変更はできないため、CDBで実施します。
SQL> CONNECT / AS SYSDBA SQL> SELECT * FROM GLOBAL_NAME; GLOBAL_NAME -------------------------------------------------------------- MYCDB SQL> ALTER DATABASE MYCDB RENAME GLOBAL_NAME TO MYCDB.MYDOMAIN.COM データベースが変更されました。 SQL> SELECT * FROM GLOBAL_NAME; GLOBAL_NAME -------------------------------------------------------------- MYCDB.MYDOMAIN.COM
CDBでglobal_name を変更したら、PDBを再起動します。
SQL> ALTER PLUGGABLE DATABASE MYPDB CLOSE; プラガブル・データベースが変更されました。 SQL> ALTER PLUGGABLE DATABASE MYPDB OPEN; プラガブル・データベースが変更されました。 SQL> ALTER SESSION SET CONTAINER=MYPDB; セッションが変更されました。 SQL> SELECT * FROM GLOBAL_NAME; GLOBAL_NAME -------------------------------------------------------------- MYPDB.MYDOMAIN.COM
PDBにもドメイン名が付加されました。
この状態でドメイン名を省略してSELECT文を発行した場合、正常に結果が表示されます。
SQL> SELECT INSTANCE_NAME,HOST_NAME,STATUS FROM V$INSTANCE@MYLINK; INSTANCE_NAME HOST_NAME STATUS ---------------- ------------------------------- ------------ MYINST MYHOST OPEN
ORA-02019の解消方法は以上です。
3.最後に
global_nameを適切に設定することにより、DBLINKのドメイン名を省略することが可能になります。
必要に応じて設定・使用してください。