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

news2024/11/15 11:59:09

关于 Oracle

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 按钮,发送信息,查看控制台输出

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QML界面控件加载与显示顺序

一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同,有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …

Oracle使用fetch first子句报错:ORA-00933 SQL命令未正确结束

问题背景 今天在统计终端厂商告警次数Top10的时候使用SQL查询使用到了fetch first子句,结果执行报错:ORA-00933 SQL命令未正确结束。 报错原因 Oracle数据库中,使用 FETCH FIRST 子句需要启用 Oracle 12c 及以上版本。如果在较低版本的 Or…

德迅与DSV携香港蝴蝶效应集团,创半导体与新能源汽车物流新篇章

在全球经济一体化的大背景下,物流行业作为连接生产与消费的重要纽带,正迎来前所未有的发展机遇。特别是在半导体产业和新能源汽车领域,物流服务的专业性和高效性已成为企业竞争力的重要体现。近日,国际物流巨头德迅(Kuehne Nagel International)与全球汽车行业供应链物流专家D…

GitHub+Picgo图片上传

Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 生成Token令牌 点击头像,点击Settings 滑到最后 过期时间:No expi…

用HTML和CSS实现提示工具(tooltip)及HTML元素的定位

所谓提示工具,是指将鼠标移动到某个HTML元素(工具)时会显示一些提示内容(提示文本),而鼠标移出工具元素的范围时提示文本就消失了。考虑到提示文本元素应当在鼠标进入工具元素时显示,鼠标离开工…

网络安全防御【防火墙NAT智能选举综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、FW2的网络相关配置: 2、路由器需要增加的(接口)命令配置 3、新增加的PC、client、sever的IP地址配置: 4、多对多的NAT,并且需要保留一个公网I…

LeetCode 3011.判断一个数组是否可以变为有序

注:这个题目有序的意思是“升序” 解法一:bubblesort O(nlogn) 核心思想:冒泡每次会将一个数归位到最后的位置上,所以我们如果碰到无法向右交换的数字,即可return false class Solution { public:// 返回一个十进制…

链接追踪系列-05.mac m1 安装es+kibana

运行启动脚本: docker run -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" \-v /Users/jelex/dockerV/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml …

初涉项目架构

初涉项目架构 了解传统项目与互联网项目的区别 传统项目指OA、HR、CRM这种,互联网项目则是常见的app 首先是受众(服务对象)不同,传统项目是面向公司、学校等群体,互联网项目则是面向全体网民 两种对象数量不同&#x…

使用Java连接星火认知大模型:一个实际案例解析

引言: 随着人工智能技术的快速发展,认知大模型如星火在自然语言处理、语音识别等领域发挥着越来越重要的作用。本文将通过一个实际的Java代码示例,详细讲解如何使用Java连接星火认知大模型,并处理其响应。 1.导入依赖&#xff1…

Github 2024-07-13 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目2Go项目2Java项目2Rust项目1非开发语言项目1Solidity项目1从零开始构建你喜爱的技术 创建周期:2156 天Star数量:25…

如何在 Android Studio 中导出并在 IntelliJ IDEA 中查看应用的 SQLite 数据库

在 Android 应用开发过程中,调试和查看应用内的数据库内容是常见的需求。本文将介绍如何使用 Android Studio 导出应用的 SQLite 数据库,并在 IntelliJ IDEA 中查看该数据库。 步骤一:在设备上运行您的应用 首先,确保您的应用已…

T113-i系统启动速度优化方案

背景: 硬件:T113-i + emmc 软件:uboot2018 + linux5.4 + QT应用 分支:longan 问题: 全志T113-i的官方系统软件编译出的固件,开机启动时间10多秒,启动时间太长,远远超过行业内linux系统的开机速度,需要进一步优化。 T113-i 优化后启动速度实测数据 启动阶段启动时间(…

本地部署 EVE: Unveiling Encoder-Free Vision-Language Models

本地部署 EVE: Unveiling Encoder-Free Vision-Language Models 0. 引言1. 快速开始2. 运行 Demo 0. 引言 EVE (Encoder-free Vision-language model) 是一种创新的多模态 AI 模型,主要特点是去除了传统视觉语言模型中的视觉编码器。 核心创新 架构创新&#xff…

装饰模式(大话设计模式)C/C++版本

装饰模式 需求分析: 1. 选择服饰 > 服饰类 2. 输出结果 对象是人 > 人类将Person类中一大堆服饰功能抽象出服饰类,然后通过Person类聚合服饰属性,通过Set行为来设置服饰属性,最后达到灵活打扮的效果 装饰模式 动态地给一个…

如何查找电脑的MAC地址

一. 什么是mac地址? mac地址本质上帮助我们连接到我们遇到的大多数本地网络。每个网络适配器通常由网络接口​​控制器(NIC) 制造商分配一个唯一的 mac 地址。 二. 如何查找mac地址 1.点击网络和Internet设置 2.点击WLAN点击硬件属性 3.即可查看mac地址

css基础(1)

CSS CCS Syntax CSS 规则由选择器和声明块组成。 CSS选择器 CSS选择器用于查找想要设置样式的HTML元素 一般选择器分为五类 Simple selectors (select elements based on name, id, class) 简单选择器(根据名称、id、类选择元素) //页面上的所有 …

【漏洞复现】某赛通 电子文档安全管理系统 多个接口存在远程命令执行漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

WPF学习(3) -- 控件模板

一、操作过程 二、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressio…

Linux系统编程-线程同步详解

线程同步是指多个线程协调工作&#xff0c;以便在共享资源的访问和操作过程中保持数据一致性和正确性。在多线程环境中&#xff0c;线程是并发执行的&#xff0c;因此如果多个线程同时访问和修改共享资源&#xff0c;可能会导致数据不一致、竞态条件&#xff08;race condition…