Bir DB'deki tüm Şemaları listelemek için Oracle SQL Sorgusu


98

Oracle DB'mizdeki bazı kullanılmayan şemaları silmek istedim.

Tüm şema adlarını nasıl sorgulayabilirim?


1
"Kullanılmayan" tanımınız nedir?
APC

Bir veri taşıma projesi üzerinde çalışıyorum ve her geliştiricinin kendi şemaları var. (Bazı geliştiriciler ayrıldı ve bazı şema kümeleri artık kullanılmıyor).
vicsz

Yanıtlar:


131

Sqlplus kullanma

sqlplus / sysdba olarak

Çalıştırmak:

SEÇ * 
DBA_users'DAN

Yalnızca kullanıcı adlarının aşağıdakileri yapmasını istiyorsanız:

Kullanıcı adı seçiniz 
DBA_users'DAN

1
Bununla birlikte, kullanıcınız için izinlere sahip olduğunuzdan emin olun.
diagonalbatman

2
@Andy: bu yüzden "ayrıcalıklı bir kullanıcı olarak" yazdım;)
a_horse_with_no_name

@horse Özür dilerim bunu kaçırdım.
diagonalbatman

@a_horse_with_no_name, oracle'daki bir şema onun bir kullanıcı olduğu anlamına mı geliyor? Şema = kullanıcı demek istiyorum? ve bu kullanıcının altında tüm tablolar MySQL gibi aynı mı oluşturuldu?
Usame Al-Banna

66

Büyük olasılıkla istiyorsun

SELECT username
  FROM dba_users

Bu size sistemdeki tüm kullanıcıları (ve dolayısıyla tüm potansiyel şemaları) gösterecektir. "Şema" tanımınız bir şemanın boş olmasına izin veriyorsa, istediğiniz budur. Bununla birlikte, insanların yalnızca en az bir nesneye sahip olan bir şeyi şema olarak adlandırmak istedikleri, böylece hiçbir nesneye sahip olmayacak yüzlerce kullanıcı hesabının hariç tutulduğu anlamsal bir ayrım olabilir. Bu durumda

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )

Şemaları yaratanın varsayılan tablo alanlarını atama konusunda mantıklı olduğunu ve Oracle'ın sunduğu şemalarla ilgilenmediğinizi varsayarak, bu şemaları default_tablespace, örn.

SELECT username
  FROM dba_users
 WHERE default_tablespace not in ('SYSTEM','SYSAUX')

veya

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

Birisi yanlış olmayan bir sistem kullanıcı a vermiş bir sisteme rastlamak korkunç nadir değildir default_tablespaceait SYSTEMböylece olsa da, varsayımlar Oracle teslim şemalar üzerinden filtreye bu şekilde denemeden önce tuttukları emin olun.


Bunu, FeRtoll'un sorgusundan alınan yer tahminiyle birleştirin ve oldukça güvenli (SYS veya SYSTEM gibi) bir sorguya sahip olacaksınız.
Karl

1
Bu nasıl farklı select distinct owner from dba_objects?
Dawood ibn Kareem

1
Temiz bir Oracle örneğinde, @David sorgunuz ek bir PUBLIC sahibi sağlar
2013

28
SELECT username FROM all_users ORDER BY username;

2
Kullanıcınız üzerinde ayrıcalıklara sahip değilse çok kullanışlıdır dba_users(örn: hata ORA-00942 : table or view does not exist)
Dinei

1
ancak çıktı dba_users ve all_users arasında aynı mı?
Shailesh Pratapwar

8
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));

Anladığım kadarıyla, bu sorgu herhangi bir tabloyu içeren tüm şemaları getirecek. Bu doğru mu?
Andrew Spencer

1
Bu yalnızca Oracle'ın eski sürümlerinde güvenilir bir şekilde çalışacaktır. Ertelenmiş segment oluşturma ile segment olmadan bir nesneye sahip olmak mümkündür.
Jon Heller

4

Peki ya:

SQL> select * from all_users;

tüm kullanıcıların / şemaların listesini, kimliklerini ve DB'de yaratılma tarihini döndürür:

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15

4

Aşağıda sql oracle'da kurulumdan sonra oluşturulan tüm şemaları listeler ORACLE_MAINTAINED = 'N' filtredir. Bu sütun 12c'de yenidir.

ORACLE_MAINTAINED = 'N' olan dba_users'dan ORACLE_MAINTAINED ayrı bir kullanıcı adı seçin;

2

Aşağıdaki SQL'den herhangi biri Oracle DB'deki tüm şemayı döndürür.

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

1
İçlerinde yalnızca tablo olmayan nesnelerin bulunduğu ve sorgularınızın listelemeyeceği şemalar olabilir.
Matthew McPeak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.