今天有一个同学问我一个问题,因为白天比较忙也没有在意,在下班后坐地铁的时候抽空看了这个问题,感觉还是蛮有意思的。但是当时也没有任何答案,就准备自己回去好好实验一下再做答复,至少不能敷衍别人嘛。

他的问题大体思路如下,查看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中的细节相关推荐

  1. oracle找不到mts,oracle 11g启动时找不到OracleMTSRecoveryService的解决方法

    很多人在安装orcl数据库时,出现很多报错,我也不例外,因上次数据库出现问题,无法修复,只能从新安装,无奈的是,安装时报启动服务出现错误,找不到OracleMTSRecoveryService错MMP ...

  2. 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化

    一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主要参 ...

  3. 全面解析Oracle等待事件的分类、发现及优化

    作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构.设计.开发经验.著有<SQL优 ...

  4. oracle 会话数上不去_程序员笔记|全面解析Oracle等待事件的分类、发现及优化

    一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主要参 ...

  5. 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换。

    题目: /* 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换. */ 代码: c++做的. #include<iostream> using names ...

  6. 砸下数百万美元分析CEO语气,这帮投资者用AI发现了比财报更多的细节

    梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 上市公司的CEO一言一行都得谨慎,不然股价分分钟跌给你看. 回想这轮缺芯潮刚刚开始的时候,IT行业高管们还在发言中回避或淡化供应链问题. 几 ...

  7. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset

    原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...

  8. 黑客发现瑞士电子选举系统中的多个漏洞并获奖2.7万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 研究人员已经从瑞士新推出的电子选举系统漏洞奖励计划中赚取了数千欧元的奖励. 20多年前,瑞士出现电子选举,不过负责电子选举的瑞士邮政已经在着手推 ...

  9. oracle存储过程sql拼接日期,Oracle 存储过程中的细节-日期处理

    今天在存储过程中用 to_char来查询制定日期是星期几,本以为时没什么问题的,结果出现了自己不想要的问题. select to_char(sysdate,'day','NLS_DATE_LANGUA ...

最新文章

  1. 做好技术管理,你必须要跨越的4道槛
  2. php 复选框 数组,php数组的复选框
  3. Docker (3)核心概念
  4. MySQL 隐式类型转换导致条件等号的异常
  5. OpenGL® ES 3.0 Programming Guide - Book Website
  6. 【2016年第5期】面向图数据管理系统基准评测的知识图谱统计特征分析
  7. redis缓存穿透,缓存击穿与缓存雪崩详解
  8. 一张速查表看懂Git命令,搞定版本控制照做就ok丨新手福利
  9. C语言基础教程之enum
  10. 博文搬家到公众号了~~~
  11. Ace Admin前端框架笔记二导航栏Navba
  12. Android中动态调整ImageView的宽高比
  13. 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
  14. PR菜鸟教程:如何剪切掉其中不需要的片段
  15. 奥克兰大学计算机it专业介绍,奥克兰大学IT硕士专业介绍
  16. Filebeat 轻量级日志采集器
  17. ValueError: X has 597 features, but SVC is expecting 605 features as input.
  18. Found multiple @SpringBootConfiguration annotated classes
  19. RSSI 平面 三点定位算法(C语言、JS源码例程)
  20. 滴滴 NewSQL 演进之 Fusion 实践

热门文章

  1. YTU-2324-约瑟夫环
  2. Mysql 四舍五入 取整
  3. 网络流三·二分图多重匹配
  4. 基于PSO工具箱的函数寻优算法
  5. IT兄弟连 Java语法教程 Java平台的版本划分
  6. 某IOT设备漏洞分析
  7. vue 多行输入框显示行号
  8. C语言strlen()函数用法
  9. c语言把char转化为string,浅析string 与char* char[]之间的转换
  10. creo管道设计教程_Pro/E Pro/PIPING 管道设计教程|就上UG网