首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于列出数据库中所有模式的Oracle SQL查询

用于列出数据库中所有模式的Oracle SQL查询
EN

Stack Overflow用户
提问于 2011-01-29 05:58:56
回答 4查看 407.8K关注 0票数 102

我想删除oracle DB上一些未使用的模式。

如何查询所有模式名称?

EN

回答 4

Stack Overflow用户

发布于 2011-01-29 06:03:30

最有可能的是,您希望

代码语言:javascript
复制
SELECT username
  FROM dba_users

这将向您显示系统中的所有用户(从而显示所有可能的模式)。如果您对" schema“的定义允许架构为空,那么这就是您想要的。但是,可能存在语义上的区别,即人们只想在实际拥有至少一个对象的情况下才将其称为模式,以便将不会拥有任何对象的数百个用户帐户排除在外。在这种情况下

代码语言:javascript
复制
SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )

假设创建模式的人在分配默认表空间方面是明智的,并且假设您对Oracle提供的模式不感兴趣,您可以通过在default_tablespace上添加谓词来过滤掉这些模式。

代码语言:javascript
复制
SELECT username
  FROM dba_users
 WHERE default_tablespace not in ('SYSTEM','SYSAUX')

代码语言:javascript
复制
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')

但是,在系统中,有人错误地向非系统用户提供了SYSTEMdefault_tablespace,这种情况并不少见,因此在尝试以这种方式过滤Oracle提供的模式之前,请确保假设成立。

票数 66
EN

Stack Overflow用户

发布于 2011-01-29 06:04:56

代码语言:javascript
复制
SELECT username FROM all_users ORDER BY username;
票数 29
EN

Stack Overflow用户

发布于 2011-01-29 06:03:37

代码语言:javascript
复制
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4833459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档