Я хотел удалить некоторые неиспользуемые схемы в нашей базе данных Oracle.
Как я могу запросить все имена схем?
Я хотел удалить некоторые неиспользуемые схемы в нашей базе данных Oracle.
Как я могу запросить все имена схем?
Ответы:
Использование sqlplus
sqlplus / как sysdba
бегать:
ВЫБРАТЬ * ОТ dba_users
Если вы хотите, чтобы имена пользователей делали следующее:
ВЫБЕРИТЕ имя пользователя ОТ 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 distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(например: ошибка ORA-00942 : table or view does not exist
)
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
Ниже sql перечисляет все схемы в oracle, которые создаются после установки ORACLE_MAINTAINED = 'N' - это фильтр. Этот столбец является новым в 12c.
выберите отдельное имя пользователя ORACLE_MAINTAINED из dba_users, где ORACLE_MAINTAINED = 'N';