1.查找空表
select TABLE_NAME from user_tables where num_rows=0 ORDER BY TABLE_NAME;
(用num_rows查找空表的前提是表的统计信息是实时的)
更新统计信息的方法:Oracle num_rows统计表的行数有延迟的解决方法_耶尔*的博客-CSDN博客
2.查看表大小
select SEGMENT_NAME as TABLE_NAME,BYTES/1024/1024 as 大小MB
from USER_SEGMENTS
where SEGMENT_TYPE='TABLE'
order by BYTES desc;
查看当前用户占用的总储存空间:
select sum(BYTES/1024/1024/1024) as 大小GB
from USER_SEGMENTS
3.查看数据库中的所有用户和用户下表的数量
select distinct owner from all_objects
--或
SELECT * FROM ALL_USERS
select owner,count(1) cnt from all_tables group by owner order by cnt desc;
查看当前用户的权限:
select * from user_role_privs;
4.查看当前连接的数据库实例
sqplus连接某一实例(本机上的)
sqlplus /@orcl as sysdba;
select name from v$database;
5.查看表的创建时间和最后修改时间
SELECT CREATED,LAST_DDL_TIME from user_objects where object_name=upper('表名');
6.查表得主键或其他约束
SELECT *
FROM user_cons_columns
WHERE constraint_name IN (select constraint_name from user_constraints WHERE constraint_type ='P') --筛选主键约束
7.查表数据的插入时间
(oracle的伪列ORA_ROWSCN存放了行插入的时间)
select SCN_TO_TIMESTAMP(ORA_ROWSCN),t.* from COMPARE_CITY_PY_ALL t
关于此方法获取时间的其他问题,参考文章 关于获取oracle中数据变更的时间戳的探索(待更新)-阿里云开发者社区
8.释放表空间
1.开启允许行移动, 此操作后允许rowid改变。
执行语句:alter table 你的表名 enable row movement;
2.回收空间。
执行语句:alter table 你的表名 shrink space;
9)查看一台服务器上数据库的版本
select * from v$version
10)查表的索引所在列
select a.INDEX_NAME,b.COLUMN_NAME
from user_indexes a,user_ind_columns b
where a.INDEX_NAME = b.INDEX_NAME
and a.TABLE_NAME = 'BASE_USERLOG' ;