我想在我们的oracle数据库上删除一些未使用的模式。
我怎样才能查询到所有模式的名称?
使用sqlplus
sqlplus / as sysdba
运行。
选择 * FROM dba_users
如果你只想获得用户名,请执行以下操作。
选择用户名 FROM dba_users
最有可能的是,你想
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交付的模式之前,要确定这些假设是成立的。