如何使用CentOS 7中的即时客户端连接到Oracle Cloud Database?

问题描述

我正在尝试使用来自CentOS 7计算机的即时客户端连接到Oracle Cloud Database。

我在OCI界面中创建了数据库,下载了钱包文件并创建了一个具有DWROLE角色的用户。

我在系统上安装了波纹管软件包

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

我创建了下面的文件夹并设置了环境变量

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

然后我将钱包文件解压缩到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

tnsnames.ora文件中定义了一些自动生成的服务

otakudb_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=...)
otakudb_low = (...)
otakudb_medium = (...)

根据我所阅读的内容,我应该能够通过执行连接到数据库

sqlplus metalbob@otakudb_high 

但是,当我运行它时,连接暂停,然后出现以下消息并出错

[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 ~]$ 

连接到远程数据库的正确步骤是什么?

在乔回答后编辑:

这是我的sqlnet.ora文件在更改之前的样子

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes

这是我在乔回答后进行更改使其工作的方式

NAMES.DIRECTORY_PATH= (TNSNAMES)
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes

无需更改DIRECTORY,诀窍就是这样

NAMES.DIRECTORY_PATH= (TNSNAMES)

希望这对某人有帮助!

编辑2

我意识到,弹跳机器后,我就可以连接了,也许是机器上的网络问题或库未正确加载

解决方法

我上周在How to connect to Oracle Autonomous Cloud Databases中写了这篇文章。

如果默认network/admin目录中没有配置文件,则可以编辑sqlnet.ora。如果它们在该目录中,则无需对其进行编辑,因为预先提供的路径"?/network/admin"映射到network/admin文件所在的libclntsh.so子目录。

另一种选择是使用“ Easy Connect Plus”语法,例如:

tcps://adb.ap-sydney-1.oraclecloud.com:1522/abc_cjjson_high.adb.oraclecloud.com?wallet_location=/Users/cjones/Cloud/CJJSON

从钱包拉链中提取cwallet.so,并将其粘贴到目录中(我使用/Users/cjones/Cloud/CJJSON)。然后从钱包tnsnames.ora文件中找到主机,服务名,端口等,并建立简单的连接字符串。然后,因为不需要它,您可以“丢弃”该zip文件:)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...