You need to enable JavaScript to run this app. JavaScript通过Wallet连接Oracle云数据库的配置与类型错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript通过Wallet连接Oracle云数据库的配置与类型错误咨询

代码告警问题定位与修复

该告警的触发原因:

  • 你导出的oracleDBConfig是一个返回配置对象的工厂函数,但代码直接把函数本身传入了oracledb.getConnection(),没有执行函数拿到实际的配置对象。getConnection要求传入包含user/password/connectString等字段的配置实体,而非生成配置的方法,因此触发类型不匹配告警。
  • 原生oracledb.getConnection()是异步Promise方法,原代码未做异步适配、也没有连接释放逻辑,即使绕过类型校验也无法正常执行SQL。

修正后的可运行代码

1. 调整后的oracleDBConfig.ts

直接导出实际的配置对象,而非导出生成配置的函数:

const oracleDBConfig = {
  user: "目标数据库的账号名",
  password: "目标数据库的账号密码",
  connectString: "从云端控制台获取的连接串",
  // 若使用Wallet建立TCPS加密连接,需补充以下两个字段
  walletLocation: "Wallet文件存放目录的绝对路径",
  walletPassword: "Wallet压缩包的解压密码"
};

export default oracleDBConfig;

2. 调整后的oracleLoader.ts

适配异步逻辑、补充连接释放逻辑,避免连接泄漏:

const oracledb = require('oracledb');
import dbConfig from "./oracleDBConfig";
import log from "../utils/winston";

// 连接操作为异步逻辑,函数需添加async标记
async function oracleLoader(sql: string) {
  let connection;
  try {
    // 等待连接建立,获取真实连接对象
    connection = await oracledb.getConnection(dbConfig);
    await connection.execute(sql);
    log.info("Table created.");
  } catch (e) {
    log.error("SQL script do not executed!" + e);
  } finally {
    // 无论SQL执行成功或失败,都强制释放连接
    if (connection) {
      try {
        await connection.close();
      } catch (closeErr) {
        log.error("Failed to close connection!" + closeErr);
      }
    }
  }
}

export default oracleLoader;
云端Oracle连接配置规则说明
  • user字段取值规则:填写目标Oracle数据库本身的账号用户名,不是Oracle云平台的登录账号(云平台账号一般为邮箱格式)。数据库用户名是云数据库控制台分配的、拥有目标schema操作权限的账号,例如默认管理员账号ADMIN、自行创建的业务账号名,无需填写邮箱。
  • password取值规则:填写上述数据库账号对应的密码,即创建数据库/创建数据库账号时自定义的账号密码,和登录Oracle云控制台的平台账号密码完全独立,不是同一个值。如果使用Wallet做TCPS加密连接,也可以通过Wallet内置的凭证完成认证,无需额外填写账号密码。
  • connectString取值规则:如果是Oracle云端部署的数据库,可直接在数据库详情控制台的「连接信息」板块,选择匹配运行环境网络可达的连接字符串(分公有网、私有网等不同场景)直接复制使用,无需自行拼接。如果是普通云主机上的自建Oracle数据库,可向运维人员索要对应数据库的主机地址、端口、服务名拼接的连接串。
  • zip格式Oracle Wallet处理流程:
    1. 将下载好的Wallet压缩包解压到项目运行环境下的固定目录(例如项目根目录下的wallet文件夹),确保运行代码的进程拥有该目录的读取权限。
    2. 修改Wallet目录内的sqlnet.ora文件,将文件内的路径配置修改为实际存放Wallet的绝对路径,例如DIRECTORY="/usr/app/my-project/wallet"。
    3. 在数据库连接配置中补充walletLocation(填上述Wallet目录的绝对路径)、walletPassword(填下载Wallet时设置的压缩包解压密码)两个字段,即可正常建立加密连接。
    4. 注意不要将Wallet文件提交到公开代码仓库,避免凭证泄露。

内容的提问来源于stack exchange,提问作者Даня Сингл

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 21:27:07