Bagaimana cara melihat daftar database di Oracle?

33

Apakah ada yang setara dengan SHOW DATABASESpernyataan MySQL ?

Apakah mungkin untuk menemukan database dalam sebuah cluster? database yaitu hadir di jaringan pada beberapa sistem lain?

Bisakah saya menganalisis file yang ada pada instalasi Oracle untuk menemukan yang sama?

Diberi kredensial akses lengkap ke sistem Oracle, bagaimana Anda akan menghitung semua database yang ada?

Kshitiz Sharma
sumber
4
Perhatikan juga ada ketidakcocokan terminologi antara MySQL dan Oracle Database. Dalam hal arsitektur, Oracle memiliki database table-> schema->, dan pada saat yang sama juga table-> tablespace-> database. MySQL hanya memiliki tabel-> basis data. Jadi mungkin Anda benar-benar mencari daftar skema Oracle (pikirkan: ruang nama SQL untuk tabel) atau daftar tablespace Oracle (pikirkan: grup file OS untuk tabel).
kubanczyk

Jawaban:

22

Apakah ada yang setara dengan SHOW DATABASESpernyataan MySQL ?

Tidak ada hal seperti itu. Anda dapat meminta pendengar pada mesin ( lsnrctl status) untuk melihat layanan apa yang terdaftar di sana, tetapi itu tidak memetakan satu-ke-satu ke basis data (dan mungkin ada beberapa pendengar pada mesin yang sama). Kalau tidak, alat yang biasa digunakan terhubung ke satu contoh database, dan sebuah instance milik satu database.

Jika Anda berbicara tentang klaster Oracle RAC, maka setiap instance tahu tentang rekan-rekannya (contoh lain yang melayani database yang sama) dan Anda dapat menemukan contoh lain yang saat ini dimulai untuk database tersebut menggunakan gv$instancetampilan.
Anda juga dapat menggunakan crsctlutilitas untuk membuat daftar layanan (termasuk basis data) yang terdaftar di cluster, dan statusnya.
Jika Anda berbicara tentang perangkat lunak pengelompokan vendor lain, saya cukup yakin mereka semua memiliki jenis utilitas manajemen sumber daya ini untuk di-query.

Jika Anda hanya berbicara tentang sekelompok mesin, maka tidak, tidak ada cara yang dapat diandalkan 100% untuk menghitung semua database di jaringan.

Untuk menemukan database aktif (mis. Dimulai), cari *_pmon_*proses pada Unix (ada satu per database contoh), dan layanan Oracle pada Windows.

Untuk mencari instalasi perangkat lunak database Oracle, lihat di /etc/oratabUnix. Ini harus berisi semua yang ORACLE_HOMEdiinstal. Anda dapat melihat ke dalam masing-masing di $ORACLE_HOME/dbsbagi spfile<SID>.oradan / atau init<SID>.orafile - akan ada satu untuk setiap database.

(Saya percaya Anda dapat menemukan informasi yang setara di oratabdalam kunci registri Windows di bawah ini HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, tetapi saya tidak tahu strukturnya.)

Sekarang, tentu saja, jika Anda telah mendaftarkan semua basis data Anda dengan server OEM (Enterprise Manager) ketika Anda menginstalnya, Anda dapat menemukan daftar lengkapnya di sana - tetapi saya kira jika Anda bertanya bukan itu masalahnya.

Tikar
sumber
12

Oracle tidak memiliki database selain skema, Anda dapat mendaftarnya

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

atau sesuatu seperti ini :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
sumber
2
Tablespaces tidak ditautkan ke skema pada umumnya.
Mat
2
SEMUA PENGGUNA? USER_TABLESPACES?
kubanczyk
"Apakah ada pernyataan yang setara dengan MySQL SHOW DATABASES?" Saya mencoba menjawab pertanyaan itu. jangan bilang kamu tidak tahu
DevYudh
1
@ DevYudh: tablespace di Oracle adalah sesuatu yang sama sekali berbeda dari "database" di MySQL. Kueri pertama jika benar, kueri kedua salah
a_horse_with_no_name
11

Sederhananya, tidak ada analogi langsung untuk 'database' MySQL atau 'cluster' pada Oracle: pasangan terdekat adalah 'skema' tetapi itu masih sangat berbeda.

Ini tampaknya akan berubah dalam 12c dengan diperkenalkannya pluggable databases:

Membagi operasi basis data secara bersih dari konten pengguna adalah transformasi besar dari arsitektur basis data tradisional. Oracle 11g, dan semua pendahulunya, hanya bisa menjalankan satu basis data pada satu waktu, kata Kyte. Jika suatu organisasi ingin menjalankan beberapa basis data pada satu server, ia perlu menjalankan beberapa contoh Oracle 11g, satu untuk setiap basis data. Seperti namanya, database pluggable memungkinkan beberapa basis data penyewa berjalan di bawah satu salinan Oracle 12c.

Jack Douglas
sumber
Uh hebat, lebih rumit, lebih banyak keamanan pekerjaan ...
kubanczyk
6

Saya pikir jawaban untuk peramban masa depan di * nix adalah:

cat / etc / oratab

rlblyler
sumber
3

Cukup sambungkan ke ASM dan periksa klien basis data.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;
t. penjaga
sumber
1
Ini mengasumsikan ASM sedang digunakan! Bagaimana dengan basis data yang disimpan pada sistem file atau SAN?
Colin 't Hart
3

Jika Anda memiliki Pluggable Databases (disarankan) di Oracle 12, Anda dapat melakukan hal berikut:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Peter
sumber
0

Untuk database mandiri untuk mendapatkan daftar database yang dimulai secara otomatis setelah host reboot:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

atau hanya untuk mendapatkan daftar semua basis data:

cat /etc/oratab | grep -v "^#"

Untuk database RAC, metode berikut dapat bermanfaat:

crsctl stat res -t | grep "\.db"

Juga seperti yang telah disebutkan database di MySQL tidak sama dengan database di Oracle. Di Oracle lebih dekat ke skema - yang bernama wadah untuk objek pengguna. Untuk mendapatkan daftar skema, Anda dapat menggunakan pernyataan SQL berikut:

select username from dba_users order by 1;

atau untuk mendapatkan daftar bukan skema terkait sistem (tersedia di Oracle RDBMS mulai dari versi 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prokhozhii
sumber