Oracle 就好像一张吸满水的面巾纸,你稍一用力它就烂了。
PS:我更新了更好的模组的教程,这篇已经是旧款的教程,但是它仍旧包含了必要的配置环境变量等操作。
最新的模组教程:node-red-contrib-agur-connector 使用教程 oracle 增 删 改 查
我们在使用 node-red 的 node-red-contrib-agur-connector 插件模组时,需要用到 Oracle Client。
因为我们在服务器上也安装了 Oracle(如果你安装了的话),
那么,Oracle Instant Client 的 rpm 文件安装就会和 Oracle EE 发生冲突。
它会直接把你的数据库冲烂(已经试过了,修好花了好半天)
所以,我们采用直接使用压缩包解压的方法,然后手动配置环境变量。
我之前使用的 oracle 插件模组是 node-red-contrib-oracledb-mod,这东西有可能是不兼容 4.0.2 版本,一直爆红。
所以干脆换模块了。
请选择下面的你想要的版本,我是 CentOS7.6,所以我选择 Linux x86_64版本。
https://www.oracle.com/cn/database/technologies/instant-client/downloads.html
选择你想要安装的版本,我安装的是 19.23,你选择你想要的版本。
并且在后续的操作中,请注意所有有版本号的地方,你需要将我的版本号改成你自己的版本号!
先创建一个目录 /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
正常情况下,你应该解压出类似于这样的两个文件,如果可以,我们再进行下一步:
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 会输出过去的值(在你刚改完之后)
进入目录,并且创建一个新文件:
cd /etc/ld.so.conf.d vim oracle-instantclient.conf
这个文件里要放什么内容呢?
放你的 instantclient 的目录路径!
!!请注意,一定要放你自己的 instantclient 的路径,别全照抄!下面是我的路径,你去找你自己的!!
我的是这样:
然后保存退出 vim。
sudo ldconfig
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)
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。
监听文件要好好配置,不然嗷嗷报错
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)) ) )
不会吧,不会有人还不会进 node-RED 的界面吧
不会也不管了去查一查吧。端口:1880
直接安装就好了,搜索这个插件:node-red-contrib-agur-connector,然后安装。
我创建了一个表:CAT
它包含4个字段:ID、COLOR(猫的颜色)、TYPE(猫的品种)、COST(猫的价格)
我插入了3行数据:如下
进入 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 就显示出来了
inject 节点就相当于输入,有点像 scanner
配置 msg.topic = SELECT * FROM CAT。重要的是,要把类型换成“文本”,也就是 STRING 类型,不可以使用 JSON 哦
debug 节点更像是一个升级版的 print,直接在控制台里面输出各种内容
在这个例子中,debug 配置如下即可