web-dev-qa-db-ja.com

DB内のすべてのスキーマをリストするためのOracle SQLクエリ

Oracle DB上の未使用のスキーマをいくつか削除したかった。

すべてのスキーマ名を照会するにはどうすればよいですか?

84
vicsz

Sqlplusの使用

sqlplus/sysdbaとして

実行:

 SELECT * 
 FROM dba_users 

ユーザー名のみを次のようにしたい場合:

ユーザー名を選択
 FROM dba_users 
117

おそらく、あなたが欲しい

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')

ただし、誰かがシステム以外のユーザーにSYSTEMdefault_tablespaceを誤って与えたシステムに出くわすことはそれほど珍しいことではありません。

60
Justin Cave
SELECT username FROM all_users ORDER BY username;
22
suhprano
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
8
FeRtoll

どうですか:

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
4
mauek unak

以下のsqlは、インストール後に作成されるOracleのすべてのスキーマをリストしますOracle_MAINTAINED = 'N'はフィルターです。この列は12cで新しく追加されました。

oracle_MAINTAINED = 'N'のdba_usersから別個のユーザー名Oracle_MAINTAINEDを選択します。
3
sidnakoppa

次のSQLのいずれかは、Oracle DBのすべてのスキーマを返します。

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;
1
Sreeju