Oracle SQL查询以列出数据库中的所有模式。

22 浏览
0 Comments

Oracle SQL查询以列出数据库中的所有模式。

我想在我们的Oracle数据库中删除一些未使用的模式。

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

很可能你想要的是:

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_tablespaceSYSTEM的情况并不罕见,因此在尝试以这种方式过滤掉Oracle提供的模式之前,请确保这些假设是成立的。

0
0 Comments

使用sqlplus

sqlplus / as sysdba

执行:

SELECT * 
FROM dba_users

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

SELECT username 
FROM dba_users
0