Memeriksa sid oracle dan nama database

115

Saya ingin memeriksa SID dan nama database saat ini.

Saya menggunakan kueri berikut untuk memeriksa oracle SID

select instance from v$thread;

tetapi tabel atau tampilan tidak ada, kesalahan akan datang.

Saya menggunakan kueri berikut untuk memeriksa nama database saat ini

select name from v$database;

tetapi tabel atau tampilan tidak ada, kesalahan akan datang.

Ada ide untuk dua masalah di atas?

Adnan
sumber

Jawaban:

148

Saya kira SELECT user FROM dual;harus memberi Anda pengguna saat ini

dan SELECT sys_context('userenv','instance_name') FROM dual;nama instance

Saya yakin Anda bisa mendapatkan SID sebagai SELECT sys_context('USERENV', 'SID') FROM DUAL;

V4Vendetta
sumber
1
Terima kasih atas respon yang cepat. Apakah instance dan oracle SID sama?
Adnan
2
@Adnan Mereka tidak harus sama karena mungkin ada beberapa contoh DB yang berjalan pada satu mesin yang diidentifikasi oleh SID
V4Vendetta
@adnan Apakah Anda mendapatkan nilai yang Anda butuhkan?
V4Vendetta
8
select sys_context('userenv','db_name') from dual;untuk nama database dan sid sudah saya tambahkan di jawabannya. berharap ini memberi Anda apa yang Anda inginkan
V4Vendetta
2
Silakan periksa tautan
V4Vendetta
57

Jika, seperti saya, tujuan Anda adalah mendapatkan host database dan SID untuk menghasilkan url Oracle JDBC, sebagai

jdbc:oracle:thin:@<server_host>:1521:<instance_name>

perintah berikut akan membantu:

Perintah kueri Oracle untuk memeriksa SID (atau nama contoh):

select sys_context('userenv','instance_name') from dual; 

Perintah kueri Oracle untuk memeriksa nama database (atau host server):

select sys_context('userenv', 'server_host') from dual;

Att. Sergio Marcelo

Sergio MC Figueiredo
sumber
Sempurna. Ini persis seperti yang ingin saya ketahui, tetapi tidak tahu bagaimana mengucapkannya.
Addison
Saya juga. Terima kasih Sergio!
Horseatingweeds
48

Sekadar kelengkapan, Anda juga bisa menggunakan ORA_DATABASE_NAME.

Perlu diperhatikan bahwa tidak semua metode memberi Anda hasil yang sama:

SQL> select sys_context('userenv','db_name') from dual;

SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
orcl

SQL> select ora_database_name from dual;

ORA_DATABASE_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM
Patrick Marchand
sumber
Tidak ada izin khusus yang diperlukan untuk kueri di atas. Diverifikasi dengan membuat pengguna baru hanya dengan hak istimewa CONNECT.
bdeem
22

Tampilan V $ sebagian besar adalah tampilan metrik sistem yang dinamis. Mereka digunakan untuk penyetelan kinerja, pemantauan sesi, dll. Jadi akses dibatasi untuk pengguna DBA secara default, itulah mengapa Anda mendapatkannya ORA-00942.

Cara termudah untuk menemukan nama database adalah:

select * from global_name;

Tampilan ini diberikan kepada PUBLIK, jadi siapa pun dapat menanyakannya.

APC
sumber
Bagaimana dengan oracle SID? Apakah ada metode untuk memeriksanya dari akun scott?
Adnan
1
Itu nama layanannya, bukan SIDnya.
jpmc26
5

Ketik pada sqlplusprompt perintah

SQL> select * from global_name;

Maka Anda akan melihat hasilnya pada command prompt

SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

Di sini yang pertama "ORCL" adalah nama database, mungkin sistem Anda "XE" dan lainnya yang diberikan pada waktu download oracle.

anant kumar
sumber
Terima kasih, Anda membuat hari saya menyenangkan.
Muhammad Ashikuzzaman
2

Seperti yang telah disebutkan di atas,

select global_name from global_name;

adalah cara untuk pergi.

Anda tidak dapat meminta v $ database / v $ instance / v $ thread karena pengguna Anda tidak memiliki izin yang diperlukan. Anda dapat memberikannya (melalui akun DBA) dengan:

grant select on v$database to <username here>;
Phil
sumber