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

Oracle 19c无需每次执行alter session切换容器访问orclpdb表的方案咨询

Oracle 19c无需每次切换PDB访问数据的解决方法

问题原因说明

Oracle 12c及后续版本默认采用CDB多租户架构,你安装的Oracle 19c默认登录SQL Plus时连接的是根容器CDB$ROOT,你之前创建的用户、数据表都存储在可插拔数据库orclpdb中,因此退出重登后默认在根容器无法访问PDB内的资源。在根容器中创建普通用户不符合全局用户命名规则(默认需加C##前缀),因此会触发ORA-65096报错。

解决方案

方案1:登录时直接指定PDB(官方推荐,无需修改系统参数)

该方案不会修改数据库核心配置,无兼容性风险,适合绝大多数场景:

  • 先编辑Oracle安装路径下的tnsnames.ora配置文件,路径为%ORACLE_HOME%\network\admin\tnsnames.ora,添加orclpdb的连接配置:
ORCLPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb)
    )
  )
  • 后续登录SQL Plus时直接指定连接orclpdb即可,无需额外执行容器切换语句:
    • 普通用户登录:sqlplus tester/tester@orclpdb
    • SYS管理员登录PDB:sqlplus sys/你的SYS密码@orclpdb as sysdba

方案2:创建无C##前缀的全局公共用户(满足跨容器访问需求)

如果需要创建可以访问所有容器、无需C##前缀的全局用户,可按以下步骤操作:

  1. 以SYS AS SYSDBA身份登录根容器,执行参数修改语句:
    alter system set "_common_user_prefix" = '' scope=spfile;
  2. 重启数据库使配置生效:
shutdown immediate;
startup;
  1. 创建全局用户并授权,指定container=all让权限对所有容器生效:
    create user kaley identified by ThisIsMyPassword;
    grant dba to kaley container=all;
  2. 该用户登录后如果需要访问orclpdb内的表,可直接加PDB前缀查询:select * from orclpdb.表名,也可按方案1的方式登录时直接指定orclpdb服务名。

内容的提问来源于stack exchange,提问作者rtn60350

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:45:02