Oracle SQL Query用于列出数据库中的所有模式

时间:2011-01-28 21:58:56

标签: oracle plsql

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

如何查询所有架构名称?

7 个答案:

答案 0 :(得分:117)

使用sqlplus

sqlplus / as sysdba

运行:

SELECT * 
FROM dba_users

您是否只希望用户名执行以下操作:

SELECT username 
FROM dba_users

答案 1 :(得分:60)

最有可能的是,你想要

SELECT username
  FROM dba_users

这将显示系统中的所有用户(以及所有可能的模式)。如果您对“架构”的定义允许架构为空,那就是您想要的。然而,可以存在语义上的区别,其中人们仅想要在其实际拥有至少一个对象的情况下调用某个模式,以便排除将永远不拥有任何对象的数百个用户帐户。在那种情况下

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')

虽然遇到某人错误地向非系统用户default_tablespace SYSTEM提供错误的系统并不是非常罕见,但在尝试过滤掉之前请确保这些假设保持不变以这种方式提供Oracle提供的模式。

答案 2 :(得分:22)

SELECT username FROM all_users ORDER BY username;

答案 3 :(得分:8)

select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));

答案 4 :(得分:4)

怎么样:

SQL> select * from all_users;

它将返回所有用户/模式的列表,它们在数据库中创建的ID和日期:

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15

答案 5 :(得分:3)

下面的sql列出了安装后创建的oracle中的所有模式 ORACLE_MAINTAINED ='N'是过滤器。此列是12c中的新内容。

select distinct username,ORACLE_MAINTAINED from dba_users where ORACLE_MAINTAINED='N';

答案 6 :(得分:1)

以下任一SQL都将返回Oracle DB中的所有架构。

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;