Oracle SQL Query для перечисления всех схем в БД

Я хотел удалить некоторые неиспользуемые схемы в нашем Oracle.

Как я могу запросить имена всех схем?

Ответ 1

Использование sqlplus

sqlplus/as sysdba

пробег:

SELECT * 
FROM dba_users

Если вы хотите, чтобы имена пользователей выполнялись следующим образом:

SELECT username 
FROM dba_users

Ответ 2

Скорее всего, вы хотите

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, i.e.

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 of SYSTEM, однако, будьте уверены, что предположения сохраняются, прежде чем пытаться отфильтровать поставляемый Oracle схемы таким образом.

Ответ 3

SELECT username FROM all_users ORDER BY username;

Ответ 4

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

Ответ 5

Как насчет:

SQL> select * from all_users;

он вернет список всех пользователей/схем, их идентификатор и дату, созданные в БД:

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

Ответ 6

Ниже в sql перечислены все схемы в оракуле, созданные после установки ORACLE_MAINTAINED = 'N' - фильтр. Этот столбец является новым в 12c.

select distinct username,ORACLE_MAINTAINED from dba_users where ORACLE_MAINTAINED='N';

Ответ 7

Любой из следующих SQL вернет всю схему в Oracle DB.

  • select owner FROM all_tables group by owner;
  • select distinct owner FROM all_tables;