Я хотел удалить некоторые неиспользуемые схемы в нашей БД oracle.
Как я могу запросить все имена схем?
Использование sqlplus
sqlplus / as sysdba
run:
ВЫБРАТЬ * FROM dba_users
Если вам нужны только имена пользователей, сделайте следующее:
SELECT имя пользователя 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, таким образом.
SELECT username FROM all_users ORDER BY username;
Как насчет :
SQL> select * from all_users;
он возвращает список всех пользователей/схемы, их id's и дата создания в БД :
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Ниже перечислены все схемы в SQL в Oracle, которые создаются после установки ORACLE_MAINTAINED='Н' это фильтр. Этот столбец является новым в 12С.
в <предварительно>выберите имя пользователя,ORACLE_MAINTAINED из dba_users, где ORACLE_MAINTAINED='Н';</пре>
Следующие SQL возвращает все схемы в БД Oracle.