数据字典:dba_users、dba_tables、dba_tablespaces、Dba_Segments
1.查看所有表空间
select * from Dba_Tablespaces;
呈现的信息表空间名称以及表空间的大小等。
2.查看表空间下所有的表
select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME=‘表空间名’;
3.查看用户默认表空间
select username,default_tablespace from dba_users order by username;
3.1查看当前用户默认表空间
select * from user_users;
4.查看所有schema
select username from sys.dba_users;
5.查看schema下所有的表
select table_name from dba_tables where owner=‘schema名称’;
6. 统计ORACLE schema下所有表大小包含clob,blob
schema下的空间主要有两类表的空间和clob的空间。
SELECT Owner
,SUM(Dx) dx
FROM (SELECT Owner
,SUM(Bytes) / 1024 / 1024 / 1024 AS Dx
FROM Dba_Segments
/*WHERE (Owner, Segment_Name) IN (SELECT Owner
,Table_Name
FROM Dba_Tables
WHERE Owner = '&schema')*/
GROUP BY Owner
UNION ALL
SELECT Lob.Owner
,SUM(Seg.Bytes) / 1024 / 1024 / 1024 AS Dx
FROM Dba_Lobs Lob
,Dba_Segments Seg
WHERE Lob.Segment_Name = Seg.Segment_Name
--AND Lob.Owner = '&schema'
GROUP BY Lob.Owner
,Lob.Table_Name)
GROUP BY Owner
ORDER BY 1 DESC;
7.schema的理解
在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表。一个用户想访问另外一个用户,也就是另外一个schema的表的时候,
可以用 username.tablename的形式来访问,完全不需要分布式事务。分布式事务不是给你做这个用的。
Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决。
Oracle在创建一个用户的同时会为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。
深入理解user和schema的区别
不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名, 也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下, 每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表, 可以存入不同的数据(即schema用户自己的数据)。 好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。
你可以也是一个房子的主人(user),拥有自己的房子(schema)。可以通过alter session的方式
进入别人的房子。 这个时候,你可以看到别人房子里的家具(desc)。 如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。 至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的
主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。
如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym, 同时又不想把其他schema名字放入代码中,就可以首先使用