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


96

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

如何查询所有架构名称?


1
您对“未使用”的定义是什么?
APC

我正在做一个数据迁移项目,每个开发人员都有自己的一套模式。(一些开发人员离开了,不再使用某些模式集)。
vicsz 2011年

Answers:


130

使用sqlplus

sqlplus /作为sysdba

跑:

选择 * 
来自dba_users

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

选择用户名 
来自dba_users

1
但是,请确保您具有用户权限。
对角

2
@Andy:这就是为什么我写“作为特权用户”的原因;)
a_horse_with_no_name 2011年

@horse抱歉,我错过了。
对角

@a_horse_with_no_name是否表示oracle中的模式表示它是用户?我的意思是架构=用户?在该用户下创建的所有表都像MySQL?
Osama Al-Banna 2016年

66

您最有可能想要

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

遇到有人错误地给非系统用户a default_tablespace的系统并不少见SYSTEM,虽然如此,可以肯定,假设试图筛选出了Oracle交付模式这种方式之前举行。


将其与FeRtoll查询中的where谓词结合起来,您将获得一个相当安全的查询(不太可能使SYS或SYSTEM陷入困境)。
卡尔

1
那有什么不同select distinct owner from dba_objects呢?
2013年

1
在一个干净的Oracle实例上,您的查询@David产生了另一个PUBLIC所有者
导致2013年

28
SELECT username FROM all_users ORDER BY username;

2
如果您的用户没有特权dba_users(例如error ORA-00942 : table or view does not exist),则非常有用
Dinei

1
但是dba_users和all_users之间的输出是否相同?
Shailesh Pratapwar

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

据我了解,此查询将调出包含任何表的所有架构。那正确吗?
Andrew Spencer

1
这只能在旧版本的Oracle中可靠地工作。使用延迟的段创建,可以使对象没有段。
乔恩·海勒2015年

4

怎么样 :

SQL> select * from all_users;

它将返回所有用户/方案的列表,其ID和在DB中创建的日期:

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

3

sql下面列出了在安装ORACLE_MAINTAINED ='N'是过滤器之后在oracle中创建的所有架构。该列是12c中的新增内容。

从dba_users中选择不同的用户名ORACLE_MAINTAINED,其中ORACLE_MAINTAINED ='N';

1

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

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

1
可能有其中仅包含非表对象的架构,您的查询不会列出。
马修·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.