Oracle DB'mizdeki bazı kullanılmayan şemaları silmek istedim.
Tüm şema adları için nasıl sorgulama yapabilirim?
sqlplus kullanma
sqlplus / as sysdba
Koş:
SELECT * FROM dba_users
Yalnızca kullanıcı adlarını istiyorsanız aşağıdakileri yapın:
Kullanıcı adını seç FROM dba_users
Büyük olasılıkla, şunları istiyorsunuz
SELECT username
FROM dba_users
Bu size sistemdeki tüm kullanıcıları (ve dolayısıyla tüm potansiyel şemaları) gösterecektir. Eğer "schema" tanımınız bir şemanın boş olmasına izin veriyorsa, istediğiniz şey budur. Bununla birlikte, insanların bir şeyi yalnızca en az bir nesneye sahipse şema olarak adlandırmak istedikleri anlamsal bir ayrım olabilir, böylece hiçbir zaman herhangi bir nesneye sahip olmayacak yüzlerce kullanıcı hesabı hariç tutulur. Bu durumda
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Şemaları oluşturanın varsayılan tablo alanlarını atama konusunda mantıklı olduğunu ve Oracle'ın sunduğu şemalarla ilgilenmediğinizi varsayarsak, `default_tablespace' üzerine yüklemler ekleyerek bu şemaları filtreleyebilirsiniz, yani
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')
Yine de, birisinin sistem dışı bir kullanıcıya yanlışlıkla SYSTEM
şeklinde bir default_tablespace
verdiği bir sistemle karşılaşmak çok nadir değildir, bu nedenle Oracle tarafından teslim edilen şemaları bu şekilde filtrelemeye çalışmadan önce varsayımların geçerli olduğundan emin olun.