Oracle DB上の未使用のスキーマをいくつか削除したかった。
すべてのスキーマ名を照会するにはどうすればよいですか?
Sqlplusの使用
sqlplus/sysdbaとして
実行:
SELECT * FROM dba_users
ユーザー名のみを次のようにしたい場合:
ユーザー名を選択 FROM dba_users
おそらく、あなたが欲しい
SELECT username
FROM dba_users
これにより、システム内のすべてのユーザー(およびすべての潜在的なスキーマ)が表示されます。 「スキーマ」の定義でスキーマを空にできる場合、それが目的です。ただし、実際に少なくとも1つのオブジェクトを所有している場合にのみスキーマと呼ばれるセマンティックな区別があり、オブジェクトを決して所有しない数百のユーザーアカウントは除外されます。その場合
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')
ただし、誰かがシステム以外のユーザーにSYSTEM
のdefault_tablespace
を誤って与えたシステムに出くわすことはそれほど珍しいことではありません。
SELECT username FROM all_users ORDER BY username;
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;
dBで作成されたすべてのユーザー/スキーマ、ID、および日付のリストを返します。
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
以下のsqlは、インストール後に作成されるOracleのすべてのスキーマをリストしますOracle_MAINTAINED = 'N'はフィルターです。この列は12cで新しく追加されました。
oracle_MAINTAINED = 'N'のdba_usersから別個のユーザー名Oracle_MAINTAINEDを選択します。
次のSQLのいずれかは、Oracle DBのすべてのスキーマを返します。
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;