Oracle SQL Query для перечисления всех схем в БД - PullRequest
84 голосов
/ 29 января 2011

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

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

Ответы [ 7 ]

117 голосов
/ 29 января 2011

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

sqlplus / as sysdba

run:

SELECT * 
FROM dba_users

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

SELECT username 
FROM dba_users
60 голосов
/ 29 января 2011

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

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, таким образом.

22 голосов
/ 29 января 2011
SELECT username FROM all_users ORDER BY username;
8 голосов
/ 29 января 2011
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
4 голосов
/ 29 февраля 2016

Как насчет:

SQL> select * from all_users;

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

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15
3 голосов
/ 13 апреля 2017

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

select distinct username,ORACLE_MAINTAINED from dba_users where ORACLE_MAINTAINED='N';
1 голос
/ 10 августа 2017

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

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...