用于列出数据库中的所有模式的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')
遇到一个系统,有人错误地给了一个非系统用户一个SYSTEM
的default_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中的所有模式。
-
select owner FROM all_tables group by owner;
-
select distinct owner FROM all_tables;