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

我想删除我们的oracle数据库上的一些未使用的模式。

我如何查询所有模式名称?

使用sqlplus

sqlplus / as sysdba

跑:

select * 
从dba_users

如果您只想要用户名,请执行以下操作:

select用户名 
从dba_users

最有可能的,你想要的

SELECT username FROM dba_users 

这将向您显示系统中的所有用户(以及所有潜在的模式)。 如果你的“模式”的定义允许一个模式是空的,那就是你想要的。 但是,如果人们只想实际拥有至less一个对象,那么人们只需要调用某个模式就可以实现语义上的区别,从而排除不会拥有任何对象的数百个用户帐户。 在这种情况下

 SELECT username FROM dba_users u WHERE EXISTS ( SELECT 1 FROM dba_objects o WHERE o.owner = u.username ) 

假设创build模式的人对于分配默认表空间是合理的,并且假定您对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') 

遇到一个系统,有人错误地给了一个非系统用户一个SYSTEMdefault_tablespace ,这样的情况并不罕见,所以在试图用这种方式过滤掉Oracle提供的模式之前,要确定这个假设是成立的。

 SELECT username FROM all_users ORDER BY username; 
 select distinct owner from dba_segments where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX')); 

怎么样 :

 SQL> select * from all_users; 

它将返回在DB中创build的所有用户/模式,ID和date的列表:

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

下面的sql列出了安装后创build的oracle中的所有模式ORACLE_MAINTAINED ='N'是filter。 这一栏是12c的新内容。

 select不同的用户名,来自dba_users的ORACLE_MAINTAINED,其中ORACLE_MAINTAINED ='N'; 

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

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