I'm trying to connect to an Oracle Cloud Database using the instant client from a CentOS 7 machine.
I created the databases in the OCI interface, I downloaded the wallet files and created one user with the DWROLE role.
I installed the bellow packages on the system
oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm
oracle-instantclient19.8-devel-19.8.0.0.0-1.x86_64.rpm
oracle-instantclient19.8-sqlplus-19.8.0.0.0-1.x86_64.rpm
oracle-instantclient19.8-tools-19.8.0.0.0-1.x86_64.rpm
I created set the bellow folders and set the env vars
export ORACLE_HOME=/usr/lib/oracle/19.8/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
then I unzipped the wallet files to TNS_ADMIN
[root@workvm admin]# ll
total 40
-rw-r--r-- 1 root root 6733 Sep 17 2020 cwallet.sso
-rw-r--r-- 1 root root 6688 Sep 17 2020 ewallet.p12
-rw-r--r-- 1 root root 3276 Sep 17 2020 keystore.jks
-rw-r--r-- 1 root root 691 Sep 17 2020 ojdbc.properties
-rw-r--r-- 1 root root 317 Sep 17 2020 README
-rw-r--r-- 1 root root 114 Sep 17 2020 sqlnet.ora
-rw-r--r-- 1 root root 1813 Sep 16 14:18 tnsnames.ora
-rw-r--r-- 1 root root 3336 Sep 17 2020 truststore.jks
[root@workvm admin]# pwd
/usr/lib/oracle/19.8/client64/network/admin
The tnsnames.ora
files have some autogenerated services defined
otakudb_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=...)
otakudb_low = (...)
otakudb_medium = (...)
According to what I have read, I should be able to connect to the database by executing
sqlplus metalbob@otakudb_high
However, when I run it the connection halts and then errors out with the following message
[donhk@workvm ~]$ sqlplus metalbob@otakudb_high
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Sep 16 14:01:52 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
ERROR: ORA-28791: certificate verification failure
[donhk@workvm ~]$
What is the correct procedure to connect to the remote database?
Edit after Joe answer:
This is how my sqlnet.ora
file was prior to the changes
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes
This is how I changed to make it work after joe answer
NAMES.DIRECTORY_PATH= (TNSNAMES)
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes
There is no need to change the DIRECTORY
, the trick was this
NAMES.DIRECTORY_PATH= (TNSNAMES)
Hope this helps someone!
Edit 2
I realized that after I bounced the machine, I was able to connect, maybe it was a network problem on the machine or a library not properly loaded
I wrote this up last week in How to connect to Oracle Autonomous Cloud Databases.
You can edit sqlnet.ora if you don't have the config files in the default network/admin
directory. If they are in that directory then you don't need to edit it, because the pre-supplied path "?/network/admin"
maps to the network/admin
subdirectory under where the libclntsh.so
file is.
The other alternative is to use "Easy Connect Plus" syntax like:
tcps://adb.ap-sydney-1.oraclecloud.com:1522/abc_cjjson_high.adb.oraclecloud.com?wallet_location=/Users/cjones/Cloud/CJJSON
Extract cwallet.so
from the wallet zip, and stick it in a directory (I used /Users/cjones/Cloud/CJJSON
). Then find the host, servicename, port etc from the wallet tnsnames.ora file and build up your easy connect string. Then you can 'throw away' the zip file since it is not needed :)