我想删除oracle DB上一些未使用的模式。
如何查询所有模式名称?
发布于 2011-01-29 06:03:30
最有可能的是,您希望
SELECT username
FROM dba_users
这将向您显示系统中的所有用户(从而显示所有可能的模式)。如果您对" schema“的定义允许架构为空,那么这就是您想要的。但是,可能存在语义上的区别,即人们只想在实际拥有至少一个对象的情况下才将其称为模式,以便将不会拥有任何对象的数百个用户帐户排除在外。在这种情况下
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
假设创建模式的人在分配默认表空间方面是明智的,并且假设您对Oracle提供的模式不感兴趣,您可以通过在default_tablespace
上添加谓词来过滤掉这些模式。
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
或
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
AND default_tablespace not in ('SYSTEM','SYSAUX')
但是,在系统中,有人错误地向非系统用户提供了SYSTEM
的default_tablespace
,这种情况并不少见,因此在尝试以这种方式过滤Oracle提供的模式之前,请确保假设成立。
发布于 2011-01-29 06:04:56
SELECT username FROM all_users ORDER BY username;
发布于 2011-01-29 06:03:37
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
https://stackoverflow.com/questions/4833459
复制相似问题