不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)

今天有一个同学问我一个问题,因为白天比较忙也没有在意,在下班后坐地铁的时候抽空看了这个问题,感觉还是蛮有意思的。但是当时也没有任何答案,就准备自己回去好好实验一下再做答复,至少不能敷衍别人嘛。 他的问题大体思路如下,查看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" 所以这些信息就会一览无余的暴露在我们面前,如果想了解更多的信息,就看看对象表的内容吧。这也是关系型之外的兼容,也可以说扩展吧。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

After the OPEN CURSOR statement, the database cursor is positioned in front of t...

40090
来自专栏杨建荣的学习笔记

ORA-01427问题的分析和解决(r6笔记第51天)

前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因。 java.sql.SQLException: ORA-01427: sin...

30140
来自专栏杨建荣的学习笔记

生产环境sql语句调优实战第九篇(r3笔记第34天)

生产环境中有一些sql语句是不定时炸弹,不声不响的运行着,可能相关的表很大,运行时间达数小时,甚至数天。 上周在生产环境中发现一条sql语句,运行时间几乎是按照...

35250
来自专栏杨建荣的学习笔记

SQL*Loader-805的解决(r2笔记36天)

使用sql*loader是大型项目中数据迁移的利器。如果是外部系统,其他数据库到oracle的数据迁移,使用文本式文件是最兼容的方式。 sqlldr的加载效率是...

32880
来自专栏杨建荣的学习笔记

简单实用的sql小技巧(第一篇) (r3笔记第36天)

今天和大家简单分享几个实用的sql小技巧。还有一些还在整理中,会不断的分享出来。 有些其实也不算是sql的技巧,可能大家在写sql语句的时候没有意识到我们可以通...

31930
来自专栏杨建荣的学习笔记

impdp ORA-39002,ORA-39166,ORA-39164的问题及解决(r2第6天)

今天在做imp和impdp的性能测试时,发现如果表中存在lob字段,加载真是慢的厉害,每秒钟大概1000条的样子,按照这种速度,基本上不用干活了。 比如5千万条...

36370
来自专栏杨建荣的学习笔记

ORACLE数据文件名导致的奇怪问题 (51天)

今天创建了一些表空间,准备做data guard来看看效果。 为了方便起见,我用gridcontrol来做,主库也开了Omf,省去了好多步骤。 一路点下来,就等...

34440
来自专栏乐沙弥的世界

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实例崩溃时进行回滚操作

22610
来自专栏杨建荣的学习笔记

insert中启用错误日志的问题及分析(r2第10天)

在平时的工作中,有时候需要insert一批数据,这些数据可能是临时表,外部表,普通表,子查询等形式,类似下面的格式 insert into xxxx (sele...

34490
来自专栏idba

死锁案例之四

一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想...

10530

扫码关注云+社区

领取腾讯云代金券