Oracle中的远程表是什么?同容器不同PDB的表是否属于远程表?
Oracle数据库远程表定义及同CDB下跨PDB表属性判定
远程表核心判定标准
Oracle里的远程表没有复杂的模糊定义,核心判断逻辑非常直白:
- 你当前登录会话所在的数据库服务,能不能直接定位到表对应的存储段、直接读取数据:如果不能,必须通过数据库链路(DB Link)走Oracle Net网络连接到其他独立数据库单元才能访问到的表,全算远程表。
和两个库是不是部署在同一台物理服务器、是不是属于同一个数据库大版本没有任何关系,只看访问时要不要走跨库链路。
同一CDB下不同PDB中的表是否属于远程表
常规业务场景下属于远程表,只有极特殊的CDB级运维场景例外:
- 常规场景:每个PDB都是自带独立元数据、独立系统表空间、独立访问服务名的逻辑独立库,本质和同一台服务器上跑的两个独立非CDB库没有区别。你在PDB1里直接查PDB2的表会直接报ORA-00942表不存在,必须先建指向PDB2的DB Link,通过
表名@dblink名的语法才能访问,完全符合远程表的判定标准。
操作示例:-- 当前会话连接PDB1,直接访问PDB2的表直接报错 SELECT * FROM HR.EMP; -- ORA-00942: 表或视图不存在 -- 创建指向PDB2的DB Link后才能正常访问 CREATE DATABASE LINK pdb2_dbl CONNECT TO HR IDENTIFIED BY "你的密码" USING 'PDB2_TNS服务名'; SELECT * FROM HR.EMP@PDB2_DBL; -- 此时访问的就是远程表 - 例外场景:如果你用CDB公共用户登录根容器CDB$ROOT,通过
CONTAINERS()函数跨PDB查询同Schema下的同名表,Oracle会通过内部容器映射机制直接读取各PDB的存储数据,不需要配置DB Link也不需要走跨库网络连接,这种场景下访问的跨PDB表不属于远程表。
注意:这个例外只针对CDB根容器级别的运维操作,普通业务用户都是直接连接具体PDB开展业务,日常开发、业务操作里跨PDB访问的表,全算远程表。
内容的提问来源于stack exchange,提问作者oramas
相关产品推荐
相关产品推荐

