本文将基于 Oracle Database 23ai Free 镜像部署一个 Oracle 数据库并演示如何使用 JumpServer 进行纳管。
该示例仅作演示使用,生产环境容器化部署请使用其他方式或做数据持久化。
参考 Oracle 官方文档:https://container-registry.oracle.com/ords/f?p=113:4:8232848927451
一、部署 Oracle
docker pull container-registry.oracle.com/database/free:latest-lite #精简镜像 建议使用
docker pull container-registry.oracle.com/database/free:latest #可选 完整镜像 文件较大 10G
#启动容器 BD_PASSWD后输入设置的密码
docker run -d --name oracle -p 1521:1521 -e DB_PASSWD=Your_Password container-registry.oracle.com/database/free:latest-lite:latest
#本地测试连接
docker exec -it oracle sqlplus sys/Your_Password@FREE AS SYSDBA二、纳管至 JumpServer
1.以SYSDBA身份用户进行连接
JumpServer默认创建了一个 Oracle 平台,但该平台的协议设置未开启SYSDBA身份用户登录,若使用SYSDBA身份用户,需要克隆一个 Oracle 平台,协议设置中启用该选项。



创建完成后,前往控制台创建 Oracle 资产,选择为刚才创建的平台,添加使用的特权账户 sys 即完成纳管。
协议使用的端口、默认数据库依据实际部署的环境进行配置。

2.使用普通账号进行连接
使用默认的 Oracle 平台创建资产,即协议设置不勾选使用 SYSDBA,其余设置同上根据实际环境配置即可正常连接。
三、使用 JumpServer 连接 Oracle
JumpServer 提供 Web、客户端(X-PACK)、远程应用三种连接方式。
Web方式即直接网页打开会话窗口,命令行或者图形化连接进行操作。
优点:零客户端依赖、轻量便捷、团队共享友好。 缺点:图形化操作能力有限,大结果集或高并发场景下易卡顿。 适用场景:日常轻量操作、临时 / 应急场景、团队协作。
客户端连接方式基于 Magnus 组件,为企业版功能,可以由 JumpServerClient 拉起本地客户端工具或提供连接向导。
优点:支持 Oracle 高版本(11g+)、OCI 连接方式(Oracle 原生调用接口),兼容性更强。可拉起本地客户端工具(如 PL/SQL Developer),利用本地算力处理大数据(如数据迁移、存储过程调试)。
缺点:需要手动配置本地工具和环境。
适用场景:企业级 Oracle 运维、高版本 Oracle 连接、需本地客户端加速的场景。
远程应用方式即调起远程应用发布机上安装的客户端工具如 DBeavor 在网页打开窗口进行连接。
优点:开箱即用,无需手动配置本地环境、规避本地环境差异(如客户端版本冲突、驱动缺失)。
缺点:需要管理员配置好远程应用功能、需要一台单独的Windows机器提供服务
适用场景:需使用完整图形化工具的场景、本地环境受限(如无法安装客户端的隔离环境)、团队工具版本统一

四、支持矩阵
| 数据库版本 | Navicat | Windows SQL Plus(21.7.0.0.0) | Windows SQL Plus(19.16) | Linux SQL Plus(21.8) | Linux SQL Plus(19.17) |
|---|---|---|---|---|---|
| Oracle 11g Enterprise Edition (11.2.0.1.0) | × | × | × | × | × |
| Oracle 11g Express Edition(11.2.0.2.0) | √ | √ | √ | × | × |
| Oracle 12c(12.1.0.2.0) | √ | √ | √ | × | × |
| Oracle 19c(19.3.0.0.0 ) | √ | √ | √ | × | × |
| Oracle RAC(12.2.0.1.0) | × | × | × | × | × |
五、常见问题及解决
1.如何获取 SID 或 Service Name ?
#使用SYSDBA账户连接
SELECT instance_name FROM v$instance; #查询SID
SELECT name FROM v$database; #查询Service Name2.连接时提示 “ORA-01017: invalid username/password; logon denied
可能原因:
- JumpServer 配置的 Oracle 账号 / 密码与实际不符(含大小写问题,Oracle 12c+ 密码默认区分大小写)
- Oracle 账号因多次密码错误被锁定。
- Oracle 从 11g 升级到 19c 后,WebCLI / WebGUI 可以正常登录,但通过 Magnus 拉起 DBeaver 登录时报 ORA-01017。
排查思路:
① 确认 JumpServer 中配置的 Oracle 账号、密码、端口、SID / Service Name 是否正确。
② 使用 DBA 账号检查目标用户状态:
SELECT username, account_status, password_versions
FROM dba_users
WHERE username = UPPER('用户名');如果 ACCOUNT_STATUS 为 LOCKED ,需要先解锁:
ALTER USER 用户名 ACCOUNT UNLOCK;③ 如果该数据库是从 Oracle 11g 升级到 19c,并出现以下现象:
Web CLI/Web GUI 可以正常登录;Magnus 拉起 DBeaver 后登录失败;DBeaver 报 ORA-01017: invalid username/password; logon denied重点检查 PASSWORD_VERSIONS 字段。如果查询结果中目标用户的 PASSWORD_VERSIONS 仅包含:
10G 11G说明该用户仍使用 11g 时期的旧密码认证版本(如 10G 11G)。Oracle 升级到 19c 后,历史用户不会自动生成新的 12C 密码认证版本。部分客户端或 JDBC 驱动连接 19c 时无法兼容旧密码版本,因此即使账号密码正确,也可能在数据库连接工具中报 ORA-01017。
解决方法:
由 DBA 重新设置一次该 Oracle 用户密码,使数据库生成新版本密码认证信息:
ALTER USER 用户名 IDENTIFIED BY "新密码";如果业务要求保持原密码,也需要由 DBA 按客户密码管理规范重新设置一次原密码。
重置后再次检查:
SELECT username, password_versions
FROM dba_users
WHERE username = UPPER('用户名');确认 PASSWORD_VERSIONS 中包含 12C,例如:
11G 12C或
10G 11G 12C然后通过 Magnus 再次拉起 DBeaver 连接验证。
3.执行 SQL 时提示 “字符集不匹配” 或中文乱码
可能原因:Oracle 数据库字符集与 JumpServer 客户端字符集不一致(如 Oracle 用 AL32UTF8,JumpServer 用 GBK)。
解决方法:
#连接Oracle执行如下sql
SELECT parameter, value FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
#登录JumpServer服务器,设置环境变量 永久生效需写入/etc/profile
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 替换为 Oracle 的 NLS_CHARACTERSET