You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Liquibase命令连接安装APEX的Oracle PDB求助

问题

本地安装了Oracle Database 21c(XE),并在可插拔数据库(PDB)XEPDB1中安装了Oracle APEX。完成Liquibase和SQLcl的安装后,成功登录到XEPDB1中的用户apexschema,但执行导出APEX代码的Liquibase命令时,Liquibase并未使用当前的PDB连接,而是尝试连接XE或ORCL服务,导致连接失败。

操作过程及错误信息

D:\Software\sqlcl-latest\sqlcl\bin>sql

SQLcl: Release 23.1 Production on Mon May 01 14:13:37 2023

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Username? (''?) apexschema@xepdb1
Password? (**********?) ***********
Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL> lb generate-apex-object  -applicationid 100
--Starting Liquibase at 14:14:17 (version 4.17.0 #0 built at 2022-11-02 21:48+0000)

  USER          = apexschema
  URL           = jdbc:oracle:oci8:@
  Error Message = ORA-01017: invalid username/password; logon denied
  USER          = apexschema
  URL           = jdbc:oracle:thin:@localhost:1521/orcl
  Error Message = Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
  (CONNECTION_ID=6gv3AlqBTtaD1dBjIbKGxQ==)
  USER          = apexschema
  URL           = jdbc:oracle:thin:@localhost:1521/xe
  Error Message = ORA-01017: invalid username/password; logon denied

SQL>
解决方案

问题根源是Liquibase没有自动继承SQLcl当前的PDB连接上下文,而是使用默认服务名尝试连接。可通过以下方式解决:

  • 方式一:执行命令时显式指定连接参数
    在lb generate-apex-object命令中直接指定指向XEPDB1的JDBC URL、用户名和密码:

    lb generate-apex-object -applicationid 100 -url jdbc:oracle:thin:@localhost:1521/XEPDB1 -username apexschema -password 你的密码
    
  • 方式二:预先设置Liquibase连接属性
    在SQLcl中先配置好Liquibase的连接参数,再执行导出命令:

    -- 设置连接URL
    lb set-property url jdbc:oracle:thin:@localhost:1521/XEPDB1
    -- 设置用户名
    lb set-property username apexschema
    -- 设置密码
    lb set-property password 你的密码
    -- 执行导出命令
    lb generate-apex-object -applicationid 100
    
  • 方式三:使用TNS别名连接
    确保本地tnsnames.ora文件中添加XEPDB1的条目,示例如下:

    XEPDB1 =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = XEPDB1)
        )
      )
    

    之后直接用TNS别名作为URL参数:

    lb generate-apex-object -applicationid 100 -url jdbc:oracle:thin:@XEPDB1 -username apexschema -password 你的密码
    

内容的提问来源于stack exchange,提问作者chk.buddi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:45:05