【node-RED 4.0.2】连接 Oracle 数据库踩坑解决,使用模组:node-red-contrib-agur-connector

关于 Oracle

Oracle 就好像一张吸满水的面巾纸,你稍一用力它就烂了。
PS:我更新了更好的模组的教程,这篇已经是旧款的教程,但是它仍旧包含了必要的配置环境变量等操作。
最新的模组教程:node-red-contrib-agur-connector 使用教程 oracle 增 删 改 查

一、发现的问题

1.为什么需要 Oracle Instant Client && 不能使用 rpm 安装的原因

我们在使用 node-red 的 node-red-contrib-agur-connector 插件模组时,需要用到 Oracle Client。
因为我们在服务器上也安装了 Oracle(如果你安装了的话),
那么,Oracle Instant Client 的 rpm 文件安装就会和 Oracle EE 发生冲突。
它会直接把你的数据库冲烂(已经试过了,修好花了好半天)
所以,我们采用直接使用压缩包解压的方法,然后手动配置环境变量。

2.其他的 oracle 插件一直不识别 Oracle 的信息,导致一直报错

我之前使用的 oracle 插件模组是 node-red-contrib-oracledb-mod,这东西有可能是不兼容 4.0.2 版本,一直爆红。
所以干脆换模块了。

二、操作

2.Oracle Instant Client 下载

2.1 官网下载:

请选择下面的你想要的版本,我是 CentOS7.6,所以我选择 Linux x86_64版本。
https://www.oracle.com/cn/database/technologies/instant-client/downloads.html

在这里插入图片描述

2.2 选择版本

选择你想要安装的版本,我安装的是 19.23,你选择你想要的版本。
并且在后续的操作中,请注意所有有版本号的地方,你需要将我的版本号改成你自己的版本号!

在这里插入图片描述

2.3 下载之后,使用 Xftp 将压缩文件 instantclient-basic-linux.x64-19.23.0.0.0dbru.zip 导入服务器

先创建一个目录 /opt/oracle/instantclient ,用来承装 oracle client:

cd /opt/oracle/
mkdir instantclient
cd instantclient

在此目录打开 Xftp,传输压缩包:

在这里插入图片描述

执行命令,解压 oracle instant client:

unzip instantclient-basic-linux.x64-19.23.0.0.0dbru.zip

正常情况下,你应该解压出类似于这样的两个文件,如果可以,我们再进行下一步:

在这里插入图片描述


3.修改环境变量

vim ~/.bashrc

参考下面的内容修改,目的是为了区别 oracle EE 和 oracle client 的环境变量,否则会发生冲突:
请不要照搬全抄,你要写你自己的路径,和ORACLE_SID等等,我只是提供一个文件格式

# Oracle Database 19c 环境变量
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export ORACLE_SID=RAGDOLL

# Oracle Instant Client 环境变量
export INSTANT_CLIENT_PATH=/opt/oracle/instantclient/instantclient_19_23
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$INSTANT_CLIENT_PATH:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$INSTANT_CLIENT_PATH:$PATH

# 语言设置
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

重新加载环境变量使它生效:

source ~/.bashrc

测试环境变量,看看它们是否指向了正确的目录:

echo $ORACLE_HOME
echo $ORACLE_SID

echo $INSTANT_CLIENT_PATH
echo $LD_LIBRARY_PATH
echo $PATH

输出只要不是空值就可以,如果出现了空值,说明你的环境变量设置的有问题,
最好的方案是,你可以关掉当前的 shell 窗口,重新连接服务器,再执行 echo 命令。
这样可以更准确,因为有时候环境变量的 echo 会输出过去的值(在你刚改完之后)

4.加载 Oracle instantclient 库

进入目录,并且创建一个新文件:

cd /etc/ld.so.conf.d
vim oracle-instantclient.conf

这个文件里要放什么内容呢?
放你的 instantclient 的目录路径!

!!请注意,一定要放你自己的 instantclient 的路径,别全照抄!下面是我的路径,你去找你自己的!!

我的是这样:

在这里插入图片描述
然后保存退出 vim。

5.更新库配置

sudo ldconfig

6.配置 sqlnet.ora 文件,打开 EASY 模式

vim /opt/oracle/product/19c/dbhome_1/network/admin/sqlnet.ora
# 请你自己修改成自己的路径

在文件中添加以下内容:

# sqlnet.ora Network Configuration File: /opt/oracle/product/19c/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
SQLNET.AUTHENTICATION_SERVICES = (BEQ, NONE)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

7.配置 tnsnames.ora 文件

vim /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora

内容示范(别照抄,把 RAGDOLL 改成你自己的数据库 SID):

# tnsnames.ora Network Configuration File: /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

RAGDOLL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 120.46.160.61)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RAGDOLL)
    )
  )

LISTENER_RAGDOLL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 120.46.160.61)(PORT = 1521))
       

一般来说,如果你配置过 oracle EE,那么这个文件就应该被配置过了。
还是看一下我的格式吧:

!!!注意,我里面使用的 RAGDOLL 是我的数据库的 SID 名称,请你也换成你的。
包括所有有 RAGDOLL 的地方,都请换成你自己的数据库的 SID。默认的 SID 是 ORCL。

在这里插入图片描述

8.配置 listener.ora 文件

监听文件要好好配置,不然嗷嗷报错

vim /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora

内容示范(别照抄,把 RAGDOLL 改成你自己的数据库 SID):

# listener.ora Network Configuration File: /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = RAGDOLL)
      (ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
      (SID_NAME = RAGDOLL)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

在这里插入图片描述

9.在 node-RED 安装模组插件 node-red-contrib-agur-connector

不会吧,不会有人还不会进 node-RED 的界面吧
不会也不管了去查一查吧。端口:1880

在这里插入图片描述
直接安装就好了,搜索这个插件:node-red-contrib-agur-connector,然后安装。

在这里插入图片描述

10.在 Oracle 里面创建一个 表,设置字段,并插入一些数据,用于测试

我创建了一个表:CAT
它包含4个字段:ID、COLOR(猫的颜色)、TYPE(猫的品种)、COST(猫的价格)

在这里插入图片描述

我插入了3行数据:如下

在这里插入图片描述

11.配置 node-RED 的 easy-oracle 节点

进入 node-RED 的配置界面。
请不要在意 SELECT * FROM CAT 的 inject 节点,让我们拖拽创建一个 easy-oracle 节点。
在这里插入图片描述

配置的样式如下(Role 请看下面的解析,再填写!!!!):

在这里插入图片描述

请注意!在配置 Role 字段的时候,你需要使用命令来查看你的用户到底是什么 Role
请把下面命令中的 your_username、your_password、your_database_sid,分别换成你的 用户名、密码、数据库SID

su oracle
sqlplus your_username/your_password@your_database_sid

进入 sqlplus 命令行之后执行:

SELECT * FROM USER_ROLE_PRIVS;

你这个用户的 Role 就显示出来了

在这里插入图片描述

12.配置 node-RED 的 inject 节点

inject 节点就相当于输入,有点像 scanner

配置 msg.topic = SELECT * FROM CAT。重要的是,要把类型换成“文本”,也就是 STRING 类型,不可以使用 JSON 哦

在这里插入图片描述

13.配置 node-RED 的 debug 节点

debug 节点更像是一个升级版的 print,直接在控制台里面输出各种内容

在这个例子中,debug 配置如下即可

在这里插入图片描述

14.检查所有节点的连接状态,确认如下:

在这里插入图片描述

15.点击 inject 按钮,发送信息,查看控制台输出

在这里插入图片描述

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MicroLindb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值