How to Connect PL/SQL Developer to Oracle Autonomous Transaction Processing (ATP)

之前写过一篇如何使用SQL Developer连接Oracle Autonomous Database,那么如果主要使用的客户端并非Oracle SQL Developer,而是PL/SQL Developer的话,该如何连接呢?

首先,下载Oracle instant client,目前的最新版本是19.3。解压到任何目录都可以。如果你的Windows机器中已经安装了Oracle数据库软件,比如Oracle Database 18c (18.3) for Microsoft Windows x64,或者是Oracle客户端,比如Oracle Database 18c Client (18.3) for Microsoft Windows x64,那么可以跳过这一步。

其次,假设你已经按照我之前的那篇文章,下载了连接Oracle自治数据库服务的wallet zip文件,需要将该zip文件解压(在使用SQL Developer连接ATP或者ADW的时候无需解压zip文件)。

解压之后的目录中 包含了以下这些文件。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
PS C:\oracle\Wallet_DB201909261518> dir
目录: C:\oracle\Wallet_DB201909261518
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/10/12 3:40 6661 cwallet.sso
-a---- 2019/10/12 3:40 6616 ewallet.p12
-a---- 2019/10/12 3:40 3243 keystore.jks
-a---- 2019/10/12 3:40 87 ojdbc.properties
-a---- 2019/10/12 12:54 130 sqlnet.ora
-a---- 2019/10/12 3:40 1776 tnsnames.ora
-a---- 2019/10/12 3:40 3335 truststore.jks
PS C:\oracle\Wallet_DB201909261518> dir 目录: C:\oracle\Wallet_DB201909261518 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2019/10/12 3:40 6661 cwallet.sso -a---- 2019/10/12 3:40 6616 ewallet.p12 -a---- 2019/10/12 3:40 3243 keystore.jks -a---- 2019/10/12 3:40 87 ojdbc.properties -a---- 2019/10/12 12:54 130 sqlnet.ora -a---- 2019/10/12 3:40 1776 tnsnames.ora -a---- 2019/10/12 3:40 3335 truststore.jks
PS C:\oracle\Wallet_DB201909261518> dir


    目录: C:\oracle\Wallet_DB201909261518


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019/10/12      3:40           6661 cwallet.sso
-a----       2019/10/12      3:40           6616 ewallet.p12
-a----       2019/10/12      3:40           3243 keystore.jks
-a----       2019/10/12      3:40             87 ojdbc.properties
-a----       2019/10/12     12:54            130 sqlnet.ora
-a----       2019/10/12      3:40           1776 tnsnames.ora
-a----       2019/10/12      3:40           3335 truststore.jks

需要修改sqlnet.ora文件,将WALLET_LOCATION的位置修改为解压之后的目录的绝对地址。在我的机器上,修改以后如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="C:\oracle\Wallet_DB201909261518")))
SSL_SERVER_DN_MATCH=yes
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="C:\oracle\Wallet_DB201909261518"))) SSL_SERVER_DN_MATCH=yes
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="C:\oracle\Wallet_DB201909261518")))
SSL_SERVER_DN_MATCH=yes

然后,设置Windows系统的环境变量TNS_ADMIN到wallet文件解压目录,设置方法不再赘述。设置完毕以后echo命令显示如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
C:\oracle\Wallet_DB201909261518>echo %TNS_ADMIN%
C:\oracle\Wallet_DB201909261518
C:\oracle\Wallet_DB201909261518>echo %TNS_ADMIN% C:\oracle\Wallet_DB201909261518
C:\oracle\Wallet_DB201909261518>echo %TNS_ADMIN%
C:\oracle\Wallet_DB201909261518

最后,启动PL/SQL Developer,新增Connection。

新增Connection时候的Database处,填写wallet文件解压目录里tnsnames.ora文件中的任何一个连接串名称。

如果你的PL/SQL Developer没有自动探测到Oracle instant client的安装位置,那么可以在配置中手工指定。

现在,可以在PL/SQL Developer中访问ATP或者ADW服务了。

Enjoy the Oracle Cloud always free tier. 😀

8 Comments Add yours

  1. Jiajun says:

    按这个配置方式,是不是意味着,如果我有俩个不同的环境用的不同的Wallet,那么我每次切换环境就必须重新配置一遍且无法同时连接俩个不同环境数据库,因为Wallet不一样。

    1. kamus says:

      Oracle Cloud里有instance wallet和regional wallet的区别,如果直接下载regional wallet的话,可以访问同一个区域的所有实例。
      参考这个链接:
      https://docs.oracle.com/en-us/iaas/Content/Database/Tasks/adbconnecting.htm#AboutDownloadingClientCredentials

      1. Jiajun says:

        我搜到一个解决方案,实测有效。跨域也可以的,不用被限制在同一区域的数据库实例:
        https://smart4solutions.nl/blog/oci-connections-to-multiple-autonomous-transaction-databases-in-the-oracle-always-free-cloud/

        1. kamus says:

          我没有太看懂这个解决方案是怎么完成的?
          security=(MY_WALLET_DIRECTORY = “C:\\Oracle\\wallets\\dev”
          这里指向的目录跟文章中说创建的两个目录(devdomain和tstdomain),完全没有关系,是怎么找到密钥的呢?

          1. JIAJUN says:

            它是每个TNS都有自己的MY_WALLET_DIRECTORY ,这是个绝对路径,然后密钥文件就在这个绝对路径里,我理解连接的时候会在这个路径里去找。

  2. TUGUFU says:

    大哥您好~為什麼我照您的步驟~但最後卻顯示??
    ORA-28864:SSL 連線順利關閉?

    是ORACLE ADW 那邊還需要設定什麼嗎?

    1. kamus says:

      你通过本地的SQL*Plus可以顺利连接ADW吗?如果是连线关闭,可能是本地防火墙的问题?ADW那边没有什么额外需要设置的,只需要下载好Wallet之后,就是可以正常连接的。

Leave a Reply

Your email address will not be published. Required fields are marked *