oracle找不到 dba_tables,不经意发现的dba_objects和dba_tables中的细节
今天有一个同学问我一个问题,因为白天比较忙也没有在意,在下班后坐地铁的时候抽空看了这个问题,感觉还是蛮有意思的。但是当时也没有任何答案,就准备自己回去好好实验一下再做答复,至少不能敷衍别人嘛。
他的问题大体思路如下,查看sys用户下object_type为TABLE的对象
SQL> select owner,count(*) from dba_objects where object_type='TABLE' and owner='SYS' group by owner;
OWNER COUNT(*)
------------------------------ ----------
SYS 1007
然后查看dba_tables中owner为sys的表
SQL> select owner,count(*)from dba_tables where owner='SYS' group by owner;
OWNER COUNT(*)
------------------------------ ----------
SYS 994
这两个语句看起来表达的意思应该相同,但是查出来的结果却出人意料,这位同学的疑问也再次。
于是我写了下面这个语句,可以看到确实有10多个不同的对象,但是object_type确实为TABLE
select owner,object_name,object_type from dba_objects where object_type='TABLE' and owner='SYS' and object_name not in (select table_name from dba_tables where owner='SYS') ;
OWNER OBJECT_NAME OBJECT_TYPE
--------------- ------------------------------ -------------------
SYS KOTTD$ TABLE
SYS KOTTB$ TABLE
SYS KOTAD$ TABLE
SYS KOTMD$ TABLE
SYS KOTTBX$ TABLE
SYS KOTADX$ TABLE
SYS S_PROPS_TAB TABLE
SYS PROPERTIES_TAB TABLE
SYS USR_PROPERTIES_TAB TABLE
SYS SCHEDULER$_RJQ_ANT TABLE
SYS SCHEDULER$_FWQ_ANT TABLE
SYS SYSNTIzu9FjIBDzDgUy2FfwrwMA== TABLE
SYS SYSNTIzu9FjIDDzDgUy2FfwrwMA== TABLE
SYS SYSNTIzu9FjIFDzDgUy2FfwrwMA== TABLE
SYS SYSNT5LbVzBZPECLgQ6yq6ApJJw== TABLE
SYS SYSNT5LbVzBZRECLgQ6yq6ApJJw== TABLE
SYS SYSNT5LbVzBZTECLgQ6yq6ApJJw== TABLE
SYS SYSNTIzu9FjIKDzDgUy2FfwrwMA== TABLE
SYS SYSNTIzu9FjIMDzDgUy2FfwrwMA== TABLE
SYS SYSNTIzu9FjIODzDgUy2FfwrwMA== TABLE
20 rows selected.
这个结果是在11.2.0.4.0的环境中的,在12c中会有一些差别。
而且更奇怪的是使用desc命令直接无效,也不提示错误,也没有输出结果。
SQL> desc "KOTAD$"
SQL> desc KOTADX$
当然使用count(*)来查看数据条数,却能显示出来。
SQL> select count(*)from KOTADX$;
COUNT(*)
----------
3
如果尝试查看这个table的内容,也给出ORA错误。
SQL> select * from KOTADX$;
select * from KOTADX$
*
ERROR at line 1:
ORA-30732: table contains no user-visible columns
SQL> select count(*)from KOTAD$;
COUNT(*)
----------
22511
对于这个错误,官方的解释如下:
SQL> !oerr ora 30732
30732, 00000, "table contains no user-visible columns"
// *Cause: An attempt was made to query on a system table which has no
// user-visible columns.
// *Action: Do not query on a system table that has no user-visible
// columns.
那么这个问题看起来是一个蛮神秘的细节,是不是和回收站有关系呢,我随机用了一个环境测试。
查看一个普通用户下,回收站中存在几个表。
SQL> select * from cat;
TABLE_NAME TABLE_TYPE
------------------------------ -----------
BIN$JGiHLuOWWNvgUy2FfwrNqg==$0 TABLE
BIN$JGiHLuOXWNvgUy2FfwrNqg==$0 TABLE
CS_MONGO_SYNC_ID TABLE
。。。
19 rows selected.
然后使用同样的语句来测试,使用dba_objects,以object_type='TABLE'过滤,得到17条纪录。
SQL> select owner,count(*) from dba_objects where object_type='TABLE' and owner='TEST' group by owner;
OWNER COUNT(*)
------------------------------ ----------
TEST 17
使用dba_tables来过滤,得到17条纪录。
SQL> select owner,count(*)from dba_tables where owner='TEST' group by owner;
OWNER COUNT(*)
------------------------------ ----------
TEST 17
所以两者的数据条数是一致的,可见这个问题不是因为回收站导致的,那么问题的原因在哪呢。
其实还有一个部分可能会被遗忘,那就是对象表,我们使用下面的语句来查看。使用的是sys用户。可以看到这些都是对象表。
SQL> select table_name,table_type from user_object_tables;
TABLE_NAME TABLE_TYPE
------------------------------ ------------------------------
SYSNTIzu9FjIBDzDgUy2FfwrwMA== KUPC$_FILEINFO
SYSNTIzu9FjIDDzDgUy2FfwrwMA== KU$_LOGLINE1010
SYSNTIzu9FjIFDzDgUy2FfwrwMA== KU$_LOGLINE1010
SYSNTIzu9FjIKDzDgUy2FfwrwMA== KUPC$_FILEINFO
SYSNTIzu9FjIMDzDgUy2FfwrwMA== KU$_LOGLINE1010
SYSNTIzu9FjIODzDgUy2FfwrwMA== KU$_LOGLINE1010
KOTTD$ KOTTD
KOTTB$ KOTTB
KOTAD$ KOTAD
KOTMD$ KOTMD
KOTTBX$ KOTTBX
KOTADX$ KOTADX
S_PROPS_TAB DBMS_DBFS_CONTENT_PROPERTY_T
PROPERTIES_TAB DBMS_DBFS_CONTENT_PROPERTY_T
USR_PROPERTIES_TAB DBMS_DBFS_CONTENT_PROPERTY_T
SCHEDULER$_RJQ_ANT SCHEDULER$_REMOTE_ARG
SCHEDULER$_FWQ_ANT SCHEDULER_FILEWATCHER_REQUEST
SYSNT5LbVzBZPECLgQ6yq6ApJJw== KUPC$_FILEINFO
SYSNT5LbVzBZRECLgQ6yq6ApJJw== KU$_LOGLINE1010
SYSNT5LbVzBZTECLgQ6yq6ApJJw== KU$_LOGLINE1010
20 rows selected.
这个时候,可以从官网得到一些更详细的信息。官方的解释如下:
USER_OBJECT_TABLES describes the object tables owned by the
current user. This view does not display the OWNER column.
那么我们想得到更明细的信息,其实还是有办法的,比如使用metadata得到ddl语句。
SELECT dbms_metadata.get_ddl('TABLE', 'KOTAD$', 'SYS') FROM DUAL;
CREATE TABLE "SYS"."KOTAD$" OF "SYS"."KOTAD"
OIDINDEX ( PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" )
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM"
所以这些信息就会一览无余的暴露在我们面前,如果想了解更多的信息,就看看对象表的内容吧。这也是关系型之外的兼容,也可以说扩展吧。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1880204/,如需转载,请注明出处,否则将追究法律责任。
oracle找不到 dba_tables,不经意发现的dba_objects和dba_tables中的细节相关推荐
- oracle找不到mts,oracle 11g启动时找不到OracleMTSRecoveryService的解决方法
很多人在安装orcl数据库时,出现很多报错,我也不例外,因上次数据库出现问题,无法修复,只能从新安装,无奈的是,安装时报启动服务出现错误,找不到OracleMTSRecoveryService错MMP ...
- 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化
一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主要参 ...
- 全面解析Oracle等待事件的分类、发现及优化
作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构.设计.开发经验.著有<SQL优 ...
- oracle 会话数上不去_程序员笔记|全面解析Oracle等待事件的分类、发现及优化
一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主要参 ...
- 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换。
题目: /* 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换. */ 代码: c++做的. #include<iostream> using names ...
- 砸下数百万美元分析CEO语气,这帮投资者用AI发现了比财报更多的细节
梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 上市公司的CEO一言一行都得谨慎,不然股价分分钟跌给你看. 回想这轮缺芯潮刚刚开始的时候,IT行业高管们还在发言中回避或淡化供应链问题. 几 ...
- Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...
- 黑客发现瑞士电子选举系统中的多个漏洞并获奖2.7万美元
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 研究人员已经从瑞士新推出的电子选举系统漏洞奖励计划中赚取了数千欧元的奖励. 20多年前,瑞士出现电子选举,不过负责电子选举的瑞士邮政已经在着手推 ...
- oracle存储过程sql拼接日期,Oracle 存储过程中的细节-日期处理
今天在存储过程中用 to_char来查询制定日期是星期几,本以为时没什么问题的,结果出现了自己不想要的问题. select to_char(sysdate,'day','NLS_DATE_LANGUA ...
最新文章
- 做好技术管理,你必须要跨越的4道槛
- php 复选框 数组,php数组的复选框
- Docker (3)核心概念
- MySQL 隐式类型转换导致条件等号的异常
- OpenGL® ES 3.0 Programming Guide - Book Website
- 【2016年第5期】面向图数据管理系统基准评测的知识图谱统计特征分析
- redis缓存穿透,缓存击穿与缓存雪崩详解
- 一张速查表看懂Git命令,搞定版本控制照做就ok丨新手福利
- C语言基础教程之enum
- 博文搬家到公众号了~~~
- Ace Admin前端框架笔记二导航栏Navba
- Android中动态调整ImageView的宽高比
- 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
- PR菜鸟教程:如何剪切掉其中不需要的片段
- 奥克兰大学计算机it专业介绍,奥克兰大学IT硕士专业介绍
- Filebeat 轻量级日志采集器
- ValueError: X has 597 features, but SVC is expecting 605 features as input.
- Found multiple @SpringBootConfiguration annotated classes
- RSSI 平面 三点定位算法(C语言、JS源码例程)
- 滴滴 NewSQL 演进之 Fusion 实践