Saya ingin menghapus beberapa skema yang tidak digunakan pada Oracle DB kami.
Bagaimana saya bisa menanyakan semua nama skema?
Saya ingin menghapus beberapa skema yang tidak digunakan pada Oracle DB kami.
Bagaimana saya bisa menanyakan semua nama skema?
Jawaban:
Menggunakan sqlplus
sqlplus / sebagai sysdba
Lari:
PILIH * DARI dba_users
Jika Anda hanya ingin nama pengguna melakukan hal berikut:
PILIH nama pengguna DARI dba_users
Kemungkinan besar, Anda mau
SELECT username
FROM dba_users
Itu akan menunjukkan kepada Anda semua pengguna di sistem (dan dengan demikian semua skema potensial). Jika definisi Anda tentang "skema" memungkinkan skema menjadi kosong, itulah yang Anda inginkan. Namun, mungkin ada perbedaan semantik di mana orang hanya ingin memanggil sesuatu skema jika sebenarnya memiliki setidaknya satu objek sehingga ratusan akun pengguna yang tidak akan pernah memiliki objek dikecualikan. Dalam hal itu
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Dengan asumsi bahwa siapa pun yang membuat skema bijaksana tentang menetapkan tablespaces default dan menganggap bahwa Anda tidak tertarik dengan skema yang telah dikirimkan Oracle, Anda dapat memfilter skema tersebut dengan menambahkan predikat pada default_tablespace
, yaitu
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
atau
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')
Hal ini tidak terlalu jarang untuk menemukan sebuah sistem di mana seseorang telah salah memberikan pengguna non-sistem default_tablespace
dari SYSTEM
, meskipun, jadi pastikan bahwa asumsi berlaku sebelum mencoba untuk menyaring skema Oracle-disampaikan dengan cara ini.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(mis .: kesalahan 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'));
Bagaimana tentang :
SQL> select * from all_users;
itu akan mengembalikan daftar semua pengguna / skema, ID mereka dan tanggal dibuat di DB:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Di bawah sql daftar semua skema dalam oracle yang dibuat setelah instalasi ORACLE_MAINTAINED = 'N' adalah filternya. Kolom ini baru di 12c.
pilih nama pengguna yang berbeda, ORACLE_MAINTAINED dari dba_users dimana ORACLE_MAINTAINED = 'N';
Salah satu dari SQL berikut ini akan mengembalikan semua skema di Oracle DB.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;