关于 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 配置如下即可