
Budibase 集成 Oracle 数据库实战指南Docker 部署、Instant Client 安装与 Schema 管理【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase导读本文基于 Budibase 仓库中packages/server/scripts/integrations/oracle/oracle.md文档系统讲解在 Budibase 服务端接入 Oracle 数据库的完整链路如何通过 Docker 快速拉起 Oracle 数据库实例、如何为 Node.js 安装 Oracle Instant Client 原生驱动、以及如何通过 SQL*Plus 完成 Schema用户创建、密码设置与测试数据解锁等日常管理操作。读完本文你将掌握在 x86-64 环境下从零搭建 Oracle 测试环境并成功接入 Budibase 数据源的完整实战方案同时了解 Budibase 侧 Oracle 数据源插件oracle.ts的底层连接原理。适用前提本指南中的部署与管理步骤以当前仓库 oracle 目录下实际提供的脚本与配置为准适用于 Budibase 服务端所在的x86-64Intel/AMDLinux环境。一、架构限制仅支持 x86-64 平台在开始之前必须先明确 Oracle 接入的两个硬性约束原文档中明确标注为ImportantOracle 数据库仅支持x86-64 架构Oracle 数据库不支持 Mac ARM 架构无论通过 Docker 还是 Linux 虚拟化方式运行均不可用。同样的限制也适用于 Oracle Instant Client详见下文第三节Oracle 客户端仅支持x86-64 架构Oracle 客户端不支持 Mac ARM 架构。这一限制的直接原因可以从仓库测试代码中得到印证集成测试工具 中注释写道 couldnt build 19.3.0 for X64、there isnt an ARM compatible 23.2 build即 Oracle 官方镜像本身缺乏可用的 ARM 构建。测试代码因此在 ARM 架构上回退使用budibase/oracle-database:19.3.0-ee-slim-faststart镜像而在 x86-64 上使用 23.2 版本镜像——这再次说明Oracle 在 ARM 环境下的支持是受限且非标准的。二、数据库安装Docker Compose 一键拉起 Oracle原文档给出的安装方式是直接运行docker-compose up并说明会创建一个名为xepdb1的单实例可插拔数据库PDBPluggable Database默认密码配置在 compose 文件中为oracle且system与pdbadmin两个用户共用该密码。仓库中实际提供的 docker-compose.yml 与文档略有演进以当前仓库实际配置为准其完整内容为# For more information see: # https://container-registry.oracle.com/ # - Database Express version: 3.8 services: db: restart: unless-stopped platform: linux/x86_64 image: gvenzl/oracle-free:23.2-slim-faststart environment: ORACLE_PWD: Password1 ports: - 1521:1521 - 5500:5500 volumes: - oracle_data:/opt/oracle/oradata volumes: oracle_data:对该 compose 文件的关键配置项说明如下配置项值说明platformlinux/x86_64显式锁定 x86-64 平台与文档的架构限制要求一致imagegvenzl/oracle-free:23.2-slim-faststart基于 Oracle Free 版 23.2 的社区镜像slim-faststart变体启动更快、体积更小ORACLE_PWDPassword1管理员system/sys初始密码注意与文档中oracle的写法存在版本差异实际以 compose 文件为准端口1521数据库监听端口Budibase Oracle 数据源默认端口正是 1521见下文源码分析端口5500Oracle Enterprise Manager 控制台端口用于 Web 管理界面访问卷oracle_data/opt/oracle/oradata数据持久化容器重建后数据不丢失文档描述的xepdb1对应 Oracle Express Edition 版本的习惯命名当前仓库使用的 Oracle Free 23.2 镜像默认 PDB 名为FREEPDB1这一点同样能从 测试工具 中database: FREEPDB1得到验证。若你使用的镜像/版本不同请通过SELECT name FROM v$pdbs;确认实际的 PDB 服务名因为该名称将直接作为 Budibase 数据源配置中的 Service Name 使用。小贴士原文档与当前 compose 文件在默认密码上的差异说明随着 Oracle 镜像从 XE 迁移到 Free 版本默认凭据发生了变化。无论使用哪种方案都建议在首次启动后立即修改密码并避免将默认密码用于生产环境。三、Instant ClientNode.js 连接 Oracle 的必需驱动为什么必须安装 Instant Client原文档明确指出Before oracle can be connected to from nodejs, the oracle client must be installed. 这是因为 Budibase 服务端通过node-oracledb官方驱动访问 Oracle见 package.json 中oracledb: 6.5.1依赖而该驱动在多数 Linux 发行版上依赖 Oracle 提供的原生客户端库Thick 模式来完成 TCP 协议通信与网络加密。再次强调架构约束Oracle 客户端同样仅支持 x86-64 架构不支持 Mac ARM 架构。官方下载页面可参考 Oracle Instant Client Downloads文章末尾给出相关路径说明。Linux 安装在原文档给出的一行式安装命令中安装脚本路径为scripts/integrations/oracle/instantclient/linux/x86-64/install.sh从server根路径执行sudo /bin/bash -e scripts/integrations/oracle/instantclient/linux/x86-64/install.sh命令参数解析sudo以管理员权限执行因为安装需要写入系统级目录如/opt/oracle并配置动态链接库路径/bin/bash -e以-eerrexit模式运行脚本中任意一步失败即终止避免半安装状态脚本路径前缀scripts/integrations/oracle/instantclient/linux/x86-64/明确了脚本面向 Linux x86-64 平台。Mac 安装原文档对 Mac 平台的标注为This has not yet been tested尚未经过测试仅给出官方下载链接指引。结合第一节的架构限制在 Mac ARMApple Silicon设备上即便安装了客户端也无法连接 Oracle 数据库Mac Intelx86-64平台理论上可尝试但仓库并未提供经过验证的安装脚本不建议在生产链路中使用。四、连接与管理SQL*Plus 命令行实操数据库容器启动后即可通过 Oracle 自带的 SQL*Plus 命令行工具进行连接和管理。以管理员身份连接原文档给出的连接命令为docker exec -it oracle-xe sqlplus -l system/oraclelocalhost/xepdb1命令分解docker exec -it oracle-xe进入名为oracle-xe的容器注意当前仓库 docker-compose.yml 中服务名定义为db若按该文件启动容器名应为db或对应的随机名请用docker ps确认实际容器名sqlplus -l-llogin模式登录失败时立即退出而非停留在交互提示符system/oraclelocalhost/xepdb1用户名system、密码oracle、连接串localhost/xepdb1本地主机 PDB 服务名。同样地密码与 PDB 名请以实际镜像为准compose 文件中为Password1与FREEPDB1。创建新 Schema用户在 Oracle 中用户User与 Schema 是同一概念——创建一个用户即创建了一个同名的 Schema。原文档以创建名为sales的 Schema 为例define USERNAME sales create user USERNAME; alter user USERNAME default tablespace users temporary tablespace temp quota unlimited on users; grant create session, create view, create sequence, create procedure, create table, create trigger, create type, create materialized view to USERNAME;逐步解读define USERNAME sales定义 SQL*Plus 替换变量USERNAME后续所有USERNAME都会被替换为sales便于复用脚本create user USERNAME;创建用户此时无密码处于未激活状态alter user ...将用户的默认表空间设为users、临时表空间设为temp并在users表空间上授予无限配额——这决定了该 Schema 新建表的数据落盘位置grant ...授予最小必要权限集合包括建会话create session、建表create table、建视图create view、建序列create sequence、建存储过程create procedure、建触发器create trigger、建类型create type、建物化视图create materialized view。这些权限恰好覆盖了 Budibase 作为外部数据源对表进行 CRUD、以及buildSchema元数据探测所需的全部能力。从 Budibase 侧源码看数据源元数据探测正是依赖这些系统视图Oracle 集成在buildSchema中执行COLUMNS_SQL查询user_tables、user_tab_columns、user_cons_columns、user_constraints和TRIGGERS_SQL查询all_triggers来还原表结构、列类型与约束见 oracle.ts。因此授予上述权限可确保 Budibase 能完整发现该 Schema 下的表并构建数据模型。设置 Schema 密码用户创建后需要为其设置密码原文档给出了以下方式define USERNAME sales define PASSWORD sales alter user USERNAME identified by PASSWORD;这里使用两个替换变量通过ALTER USER ... IDENTIFIED BY ...设置密码。随后即可用该凭据连接docker exec -it oracle-xe sqlplus -l sales/saleslocalhost:1521/xepdb1注意此连接串显式写明了端口1521localhost:1521/xepdb1与 compose 文件中映射的数据库端口一致。这个连接串格式host:port/service_name与 Budibase 服务端的连接构建逻辑完全吻合——在 oracle.ts 中getConnection方法拼接的连接串为const connectString ${this.config.host}:${this.config.port || 1521}/${this.config.database}即主机:端口/服务名三段式结构其中database字段在 Budibase 数据源配置界面中显示为 Service Name见 oracle.ts 中display: Service Name。解锁内置 HR Schema测试数据Oracle 镜像默认内置HRSchema 并预置了演示数据用于测试。原文档说明需先解锁账户并更新密码ALTER USER hr ACCOUNT UNLOCK; ALTER USER hr IDENTIFIED BY hr;执行后即可使用hr/hr凭据连接 HR Schema。这一步的意义在于Budibase 接入 Oracle 数据源后开发者可以立即用 HR 表如EMPLOYEES、DEPARTMENTS验证表发现、查询、增删改等完整流程而无需先手工建表。五、Budibase 侧数据源接入原理源码补充为了让你在 Budibase 界面中配置 Oracle 数据源时有的放矢这里结合 oracle.ts 源码补充几个底层要点1. 数据源配置字段从 SCHEMA 定义 可见Budibase 的 Oracle 数据源需要以下字段字段类型必填默认值说明host字符串是本机地址HOST_ADDRESSOracle 服务器地址port数字是1521数据库监听端口database字符串是—服务名Service Name如xepdb1/FREEPDB1注意不是 SIDuser字符串是—即 Schema 名如salespassword密码是—对应 Schema 的密码2. 类型映射与兼容处理集成在查询时通过fetchTypeHandler做了两类关键转换见 oracle.tsCLOB → 字符串CLOB大文本字段以字符串形式返回避免二进制流无法序列化NUMBER(20,0)→ 字符串Budibase 在 Oracle 中创建表时 BIGINT 会被建成NUMBER(20,0)驱动将其以字符串返回以保持精度源码注释也指出对于外部创建的、精度刻度不同的 NUMBER 列这一启发式判断可能不够健壮属已知边界。另外BLOB与NCLOB两种类型被列入UNSUPPORTED_TYPES见 oracle.ts在构建表 Schema 时会被过滤掉即 Budibase 不会暴露这两种列用于读写。3. 时区对齐getConnection在建立连接后会执行ALTER SESSION SET TIME_ZONE 服务器时区见 oracle.ts。原因是 time-only 等列类型不存储时区信息让数据库会话时区与 Budibase 服务端保持一致可避免存进去一个时间、读出来却是另一个时间的时差问题。前提假设是服务端与数据库运行在同一时区。4. 自动增量列识别Oracle 没有原生的AUTO_INCREMENTBudibase 通过分析all_triggers中 BEFORE INSERT 触发器体是否包含列名与.nextval调用来判定自增列见 markAutoIncrementColumns。这意味着你在手工建表时若为自增列创建了基于序列Sequence 触发器的标准模式Budibase 能自动将其识别为自动编号列。5. 测试验证仓库集成测试通过 testcontainers 动态启动 Oracle 容器用knexclient: oracledb建立连接并创建新用户授予CONNECT, RESOURCE, CREATE VIEW, CREATE SESSION权限及无限表空间配额来验证数据源能力见 tests/utils/oracle.ts。这与文档中创建 Schema 后即可连接的流程相互印证。六、端到端接入流程速查将以上内容整合为一份从零到一的完整操作清单启动数据库在 oracle 目录执行docker-compose up或按原文档方式确认容器正常监听1521端口确认平台仅限 x86-64 Linux 环境Mac ARM 不可用安装 Instant Client在 Budibase 服务端执行sudo /bin/bash -e scripts/integrations/oracle/instantclient/linux/x86-64/install.sh脚本位于 instantclient 目录安装后需确保oracledb能加载原生库创建业务 Schema用管理员账号登录 SQL*Plus执行CREATE USER/ALTER USER/GRANT语句创建并授权设置密码执行ALTER USER 用户名 IDENTIFIED BY 密码可选解锁 HR执行ALTER USER hr ACCOUNT UNLOCK; ALTER USER hr IDENTIFIED BY hr;获取测试数据接入 Budibase在数据源配置中选择 Oracle填写主机:端口/服务名、用户名Schema 名与密码连接测试通过后即可使用。结语Oracle 在 Budibase 中属于功能完备的关系型数据源plus: true支持连接检测与表名拉取见 oracle.ts但其接入链路对环境有明确约束x86-64 平台 Instant Client 原生驱动 正确的 Schema/服务名配置。本文以 oracle.md 为骨架结合 docker-compose.yml 与 oracle.ts 源码完整覆盖了环境准备、数据库部署、客户端安装、Schema 管理到数据源接入的每个环节。按此流程操作即可在 Budibase 中快速获得一个可用的 Oracle 数据源测试环境。【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考