Я хотів видалити кілька невикористаних схем у нашій БД 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> select * from all_users;
він поверне список усіх користувачів / схем, їх ідентифікатори та дату, створену в БД:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Нижче sql перелічує всі схеми в оракулі, створені після встановлення. ORACLE_MAINTAINED = 'N' - це фільтр. Цей стовпець новий у 12с.
вибрати окреме ім’я користувача, ORACLE_MAINTAINED з dba_users, де ORACLE_MAINTAINED = 'N';
Будь-який із наступних SQL поверне всі схеми в БД Oracle.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;