Oracle veritabanlarının listesini nasıl görebilirim?


33

MySQL SHOW DATABASESdeyimine eşdeğer bir var mı ?

Bir kümede veritabanlarını bulmak mümkün mü? yani başka bir sistemde ağda bulunan veritabanları?

Bunları bulmak için Oracle yüklemesinde bulunan dosyaları analiz edebilir miyim?

Bir Oracle sistemine tam erişim bilgileri verildiğinde, mevcut tüm veritabanlarını nasıl sıralarsınız?


4
Ayrıca MySQL ve Oracle Database arasında terminoloji uyuşmazlığı olduğuna dikkat edin. Mimari açısından Oracle, table-> schema-> veritabanına ve aynı zamanda table-> tablespace-> veritabanına sahiptir. MySQL basitçe masa-> veri tabanına sahiptir. Belki de gerçekten Oracle şema listesini (düşünün: tablolar için SQL ad alanlarını) veya Oracle tablo alanı listesini (düşünün: tablolar için işletim sistemi dosya gruplarını) arıyorsunuz.
kubanczyk

Yanıtlar:


22

MySQL SHOW DATABASESdeyimine eşdeğer bir var mı ?

Öyle bir şey yok. lsnrctl statusHangi servislerin orada kayıtlı olduğunu görmek için bir makinedeki dinleyicileri sorgulayabilirsiniz , ancak bu veritabanına birebir eşleşmez (ve aynı makinede birden fazla dinleyici olabilir). Aksi halde, yaygın olarak kullanılan araçlar bir veritabanı örneğine bağlanır ve bir örnek tek bir veritabanına aittir.

Oracle RAC kümeleri hakkında konuşuyorsanız, her bir örnek kendi eşini bilir (aynı veritabanına hizmet veren diğer örnekler) ve gv$instancegörünümü kullanarak o veritabanı için şu anda başlatılan diğer örnekleri bulabilirsiniz . Yardımcı programı, kümeye kayıtlı hizmetleri (veritabanları dahil) ve durumlarını listelemek için
de kullanabilirsiniz crsctl.
Başka bir satıcının kümelenme yazılımı hakkında konuşuyorsanız, hepsinin sorgulamak için bu tür kaynak yönetimi araçlarına sahip olduklarından eminim.

Sadece bir grup makineden bahsediyorsanız, hayır, bir ağdaki tüm veritabanlarını numaralandırmanın% 100 güvenilir yolu yoktur.

Etkin (yani başlatılmış) veritabanlarını bulmak için *_pmon_*Unix'te (veritabanı örneği başına bir tane vardır) ve Windows'taki Oracle hizmetlerinde işlemleri arayın .

Oracle veritabanı yazılımı kurulumlarını bulmak için, /etc/oratab için Unix'e bakın. Bu ORACLE_HOMEyüklü tüm s içermelidir . Sen bunların her biriyle içine bakabilirsiniz $ORACLE_HOME/dbsiçin spfile<SID>.orave / veya init<SID>.oradosyaları - Her veritabanı için bir tane olacak.

(Bilginin eşdeğerini oratabaşağıdaki Windows kayıt defteri anahtarlarında bulabileceğinize inanıyorum HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, ancak yapısını bilmiyorum.)

Tabi ki, eğer veritabanınızı kurduğunuzda tüm veritabanınızı bir OEM (Enterprise Manager) sunucusuna kaydettiyseniz, tüm listeyi orada bulabilirsiniz - ama sanırım bu böyle değil mi diye soruyorsunuz.


12

Oracle'ın veritabanları yok, ancak şemaları listeleyebilirsiniz.

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

ya da böyle bir şey:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
Tablo alanları genel olarak şemalarla bağlantılı değildir.
Mat

2
TÜM KULLANICILAR? USER_TABLESPACES?
kubanczyk

"MySQL SHOW DATABASES ifadesine eşdeğer var mı?" ben bu soruya cevap vermeye çalışıyorum. bilmiyorum deme
DevYudh 23:12

1
@DevYudh: Oracle'daki bir tablo alanı, MySQL'deki bir "veritabanından" tamamen farklı bir şeydir . İlk sorgu doğruysa, ikinci sorgu düz yanlıştır
a_horse_with_no_name

11

Basitçe konuşursak, MySQL 'veritabanları' veya Oracle'daki bir 'küme' için doğrudan bir benzetme yoktur: en yakın eşleşme bir 'şema' ama bu yine de çok farklı.

Bu görünüşte takılabilir veritabanlarının tanıtımıyla 12c'de değişecek :

Veritabanı işlemlerini kullanıcının içeriğinden temiz bir şekilde bölmek, geleneksel veritabanı mimarilerinden büyük bir dönüşümdür. Kyte, Oracle 11g ve öncüllerinin hepsinin yalnızca bir veritabanını çalıştırabileceğini söyledi. Bir kuruluş tek bir sunucuda birden fazla veritabanı çalıştırmak isterse, her veritabanı için bir tane olmak üzere birden çok Oracle 11g örneği çalıştırması gerekir. Adından da anlaşılacağı gibi, takılabilir veritabanları birden fazla kiracı veritabanının bir Oracle 12c kopyası altında çalışmasına izin verir.


Daha fazla, daha fazla komplikasyon, daha fazla iş güvenliği ...
kubanczyk

6

Sanırım * nix'teki gelecekteki tarayıcılar için bir cevap olabilir:

kedi / etc / oratab


3

Sadece ASM'ye bağlanın ve veritabanı istemcisini kontrol edin.

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;

1
Bu, ASM'nin kullanıldığını varsayar! Bir dosya sisteminde veya SAN'da depolanan veritabanları ne durumda?
Colin 'Hart

3

Oracle 12'de Eklenebilir Veritabanlarına (önerilen) sahipseniz, aşağıdakileri yapabilirsiniz:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

0

Bağımsız veritabanı için, ana bilgisayar yeniden başlatıldıktan sonra otomatik olarak başlatılan veritabanlarının listesini almak için:

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

veya sadece tüm veritabanlarının listesini almak için:

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

RAC veritabanları için aşağıdaki yöntem yararlı olabilir:

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

Ayrıca daha önce de belirtildiği gibi MySQL'deki veritabanı Oracle'daki veritabanı ile aynı değildir. Oracle'da şemaya daha yakın - kullanıcının nesneleri için konteyner olarak adlandırılır. Şema listesi almak için aşağıdaki SQL ifadesini kullanabilirsiniz:

select username from dba_users order by 1;

veya sistemle ilgili olmayan programları listelemek için (sürüm 12c'den başlayarak Oracle RDBMS'de bulunur):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
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.