[20250812]一些cdb开头的视图存在隐藏列.txt --//昨天看了链接https://mikedietrichde.com/2025/08/11/were-you-aware-of-the-two-hidden-columns-in-cdb-views/,给出一些信 --//息一些cdb视图存在2个隐藏列(实际上不止2个,只不过这两个比较有意义罢了)。 --//在我的机器上测试一下,看看一些相关细节。 1.环境: SYS@book> @ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.测试: SYS@book> @ desc CDB_DIRECTORIES Name Null? Type ------------------------------- -------- ---------------------------- 1 OWNER NOT NULL VARCHAR2(128) 2 DIRECTORY_NAME NOT NULL VARCHAR2(128) 3 DIRECTORY_PATH VARCHAR2(4000) 4 ORIGIN_CON_ID NUMBER 5 CON_ID NUMBER --//desc信息显示5个字段。看看视图定义。 SYS@book> @ v2 CDB_DIRECTORIES Show SQL text of views matching "CDB_DIRECTORIES"... V_OWNER VIEW_NAME TEXT TEXT_VC ------- --------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- SYS CDB_DIRECTORIES SELECT k."OWNER",k."DIRECTORY_NAME",k."DIRECTORY_PATH",k."ORIGIN_CON_ID",k."CON_ID", k.CON$NAME, SELECT k."OWNER",k."DIRECTORY_NAME",k."DIRECTORY_PATH",k."ORIGIN_CON_ID",k."CON_ID", k.CON$NAME, k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG FROM CONTAINERS("SYS"."DBA_DIRECTORIES") k k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG FROM CONTAINERS("SYS"."DBA_DIRECTORIES") k no rows selected --//仔细看一下就是发现视图定义还存在4个字段,分别是 --//k.CON$NAME,k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG CDB_* views include these hidden columns: CON$NAME: This column includes the name of the container whose data a given CDB_* row represents CDB$NAME: This column displays the name of the CDB whose data a given CDB_* row represents --//作者测试例子: SYS@book> select * from CDB_DIRECTORIES where DIRECTORY_NAME='DATA_PUMP_DIR'; OWNER DIRECTORY_NAME DIRECTORY_PATH ORIGIN_CON_ID CON_ID ----- -------------- ------------------------------------------------------------------ ------------- ---------- SYS DATA_PUMP_DIR /u01/app/oracle/admin/book/dpdump/ 1 1 SYS DATA_PUMP_DIR /u01/app/oracle/admin/book/dpdump/1F36F47256D41C08E0636538A8C03260 1 3 SYS@book> column CON$ERRMSG format a20 SYS@book> select con$name,cdb$name,CON$ERRNUM,CON$ERRMSG,a.* from CDB_DIRECTORIES a where DIRECTORY_NAME='DATA_PUMP_DIR'; CON$NAME CDB$NAME CON$ERRNUM CON$ERRMSG OWNER DIRECTORY_NAME DIRECTORY_PATH ORIGIN_CON_ID CON_ID -------- -------- ---------- ------------ ----- -------------- ------------------------------------------------------------------ ------------- ---------- CDB$ROOT book 0 SYS DATA_PUMP_DIR /u01/app/oracle/admin/book/dpdump/ 1 1 BOOK01P book 0 SYS DATA_PUMP_DIR /u01/app/oracle/admin/book/dpdump/1F36F47256D41C08E0636538A8C03260 1 3 --//这样做的好处就是不用使用连接操作,就可以获得CON$NAME。 --//尝试在toad下查看定义: CREATE OR REPLACE FORCE VIEW SYS.CDB_DIRECTORIES (OWNER, DIRECTORY_NAME, DIRECTORY_PATH, ORIGIN_CON_ID, CON_ID) BEQUEATH DEFINER AS SELECT k."OWNER",k."DIRECTORY_NAME",k."DIRECTORY_PATH",k."ORIGIN_CON_ID",k."CON_ID", k.CON$NAME, k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG FROM CONTAINERS("SYS"."DBA_DIRECTORIES") k; --//前面仅仅5个,select显示多了4个字段,能这样定义视图吗?自己做一个尝试。 SCOTT@book01p> create or replace view v_emp(EMPNO,ENAME) as select EMPNO,ENAME,DEPTNO from emp; create or replace view v_emp(EMPNO,ENAME) as select EMPNO,ENAME,DEPTNO from emp * ERROR at line 1: ORA-01730: invalid number of column names specified SCOTT@book01p> CREATE OR REPLACE FORCE VIEW v_emp (empno,ename) BEQUEATH DEFINER AS select EMPNO,ENAME,DEPTNO from emp; Warning: View created with compilation errors. SCOTT@book01p> show error Errors for VIEW V_EMP: LINE/COL ERROR -------- ------------------------------ 0/0 ORA-01730: invalid number of column names specified SCOTT@book01p> CREATE OR REPLACE FORCE VIEW v_emp (empno,ename) BEQUEATH DEFINER AS select EMPNO,ENAME,DEPTNO from CONTAINERS(emp); Warning: View created with compilation errors. --//不行!! --//你可以查询cdb视图,许多类似包含 FROM CONTAINERS的视图都存在类似的情况,在最后多定义4个字段。 --//添加的风格都与前面不同k.CON$NAME, k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG,字段名没有双引号。
[20250812]一些cdb开头的视图存在隐藏列.txt
来源:这里教程网
时间:2026-03-03 22:34:36
作者:
编辑推荐:
- [20250812]一些cdb开头的视图存在隐藏列.txt03-03
- 第46期 DataPump Export (EXPDP) Fails With Errors ORA-31693 ORA-31617 ORA-1950503-03
- 苹果ios签名ipa文件平台靠谱吗,我们该如何选择可靠的平台03-03
- 使用什么命令能删除 FOREIGN ARCHIVED LOG03-03
- OraInventory目录不存在处理方法03-03
- 苹果app安卓apk应用App内用微信授权登录游戏时会显示登录失败签名不一致怎么解决03-03
- [20250727]关于访问系统视图v$sqlXXXX的问题.txt03-03
- [20250729]绑定变量的字符串长度与字符集相关问题.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 使用什么命令能删除 FOREIGN ARCHIVED LOG
使用什么命令能删除 FOREIGN ARCHIVED LOG
26-03-03 - 记一次Oracle数据库归档日志暴增故障案例分析
记一次Oracle数据库归档日志暴增故障案例分析
26-03-03 - 外连接嵌套循环为何无法更改驱动表
外连接嵌套循环为何无法更改驱动表
26-03-03 - Oracle AWR夺命33问,你能过几关?
Oracle AWR夺命33问,你能过几关?
26-03-03 - 东北已经装上空调,欧洲人还在“装”?
东北已经装上空调,欧洲人还在“装”?
26-03-03 - OGG 同步奇案:医疗数据 “消失” 之谜
OGG 同步奇案:医疗数据 “消失” 之谜
26-03-03 - 已知100多个数据库CVE漏洞编号,如何快速查询这些漏洞影响的数据库版本等...
- 老铺黄金逆势爆发,是一场高端消费价值观的重塑
老铺黄金逆势爆发,是一场高端消费价值观的重塑
26-03-03 - 数据库管理-第352期 从需求看懂Oracle RAC多租户环境的Service(20250729)
- 三器合一,根治SQL痼疾,降低80%性能事故!
三器合一,根治SQL痼疾,降低80%性能事故!
26-03-03
