因开发需要监控整个数据库,所以需要获取数据库的基本信息,包括数据库信息,表信息,列信息等。
介绍下使用到的系统表
- all_users
所有的数据库信息
select * from all_users;
官网地址 all_tables
select * from all_tables;
其中我需要的有table_name,num_rows,num_rows * avg_row_len 表size,owner所属数据库,last_analyzed 最后修改时间
官网地址all_objects
select * from all_objects where owner = ‘ZYT’;
owner 拥有者/数据库
object_name 表名或其他名称
object_id 表id
object_type 类型 这里我们只使用table
created 创建时间
last_ddl_time 最后一次修改时间
官网地址- all_tab_columns
select * from all_tab_columns where owner = ‘ZYT’;
column_name 列名
data_type 列类型
nullable 是否允许为空
column_id 列id
官网地址 - all_col_comments
select * from all_col_comments where owner = ‘ZYT’;
comments 列备注
官网地址 - all_tab_comments
select * from all_tab_comments where owner = ‘ZYT’;
comments 表备注
官网地址
如果想了解这些表其他列的含义,请查看官网
查询all_ 开头的表均不需要专门权限,也不需要DBA权限!*
知道了上面的系统表是不是就知道自己需要的数据从哪里获取了,具体的sql语句就不提供了,大家自己调研下就知道了。
问题1:为什么不使用user_*系列的表?
因为我要获取的是当前用户有权限的数据库表,而不只是当前用户自己的表数据。
问题2:为什么不适用dba_*系列的表?
因为不是所有用户都有dba权限,会容易出事情。