我想在oracle DB上删除一些未使用的模式。
如何查询所有架构名称?
答案 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中的所有架构。
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;