กำลังตรวจสอบ Oracle Sid และชื่อฐานข้อมูล


115

ฉันต้องการตรวจสอบ SID และชื่อฐานข้อมูลปัจจุบัน

ฉันใช้แบบสอบถามต่อไปนี้เพื่อตรวจสอบ oracle SID

select instance from v$thread;

แต่ตารางหรือมุมมองไม่มีข้อผิดพลาดเกิดขึ้น

ฉันใช้แบบสอบถามต่อไปนี้เพื่อตรวจสอบชื่อฐานข้อมูลปัจจุบัน

select name from v$database;

แต่ตารางหรือมุมมองไม่มีข้อผิดพลาดเกิดขึ้น

มีความคิดสำหรับปัญหาสองประการข้างต้นหรือไม่?

คำตอบ:


148

ฉันคิดว่าSELECT user FROM dual;ควรให้ผู้ใช้ปัจจุบันแก่คุณ

และSELECT sys_context('userenv','instance_name') FROM dual;ชื่อของอินสแตนซ์

ฉันเชื่อว่าคุณจะได้รับ SID เป็น SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
ขอบคุณสำหรับการตอบกลับอย่างรวดเร็วอินสแตนซ์และ oracle SID เป็นสิ่งเดียวกันหรือไม่
Adnan

2
@Adnan พวกเขาไม่จำเป็นต้องเหมือนกันเนื่องจากจะมีหลายอินสแตนซ์ของ DB ที่ทำงานบนเครื่องเดียวที่ SID ระบุ
V4Vendetta

@adnan คุณได้รับค่าที่คุณต้องการหรือไม่?
V4Vendetta

8
select sys_context('userenv','db_name') from dual;สำหรับชื่อฐานข้อมูลและ sid ฉันได้เพิ่มคำตอบแล้ว หวังว่านี่จะให้สิ่งที่คุณต้องการ
V4Vendetta

2
โปรดตรวจสอบลิงค์
V4Vendetta

57

ถ้าเช่นฉันเป้าหมายของคุณคือรับโฮสต์ฐานข้อมูลและ SID เพื่อสร้าง Oracle JDBC url เป็น

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

คำสั่งต่อไปนี้จะช่วย:

คำสั่งแบบสอบถาม Oracle เพื่อตรวจสอบ SID (หรือชื่ออินสแตนซ์):

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

คำสั่งแบบสอบถาม Oracle เพื่อตรวจสอบชื่อฐานข้อมูล (หรือโฮสต์เซิร์ฟเวอร์):

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

อัฐ Sergio Marcelo


สมบูรณ์ นี่คือสิ่งที่ฉันอยากรู้ แต่ไม่รู้ว่าจะพูดอย่างไร
แอดดิสัน

ฉันด้วย. ขอบคุณ Sergio!
Horseatingweeds

48

เพื่อความสมบูรณ์คุณยังสามารถใช้ ORA_DATABASE_NAME

อาจเป็นที่น่าสังเกตว่าไม่ใช่ทุกวิธีที่ให้ผลลัพธ์เหมือนกัน:

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

ไม่จำเป็นต้องมีสิทธิ์พิเศษสำหรับข้อความค้นหาด้านบน ยืนยันโดยการสร้างผู้ใช้ใหม่ที่มีสิทธิ์ CONNECT เท่านั้น
bdeem

22

มุมมอง V $ ส่วนใหญ่เป็นมุมมองแบบไดนามิกของเมตริกระบบ พวกเขาจะใช้สำหรับการปรับแต่งประสิทธิภาพการตรวจสอบเซสชั่น ฯลฯ ดังนั้นการเข้าถึงจะถูก จำกัด ให้กับผู้ใช้ DBA ORA-00942โดยค่าเริ่มต้นซึ่งเป็นเหตุผลที่คุณจะได้รับ

วิธีที่ง่ายที่สุดในการค้นหาชื่อฐานข้อมูลคือ:

select * from global_name;

มุมมองนี้มอบให้แก่ PUBLIC ดังนั้นทุกคนสามารถสอบถามได้


Oracle SID เป็นอย่างไร มีวิธีการตรวจสอบจากบัญชี scott หรือไม่?
Adnan

1
นั่นคือชื่อบริการไม่ใช่ SID
jpmc26

5

พิมพ์sqlplusพร้อมรับคำสั่ง

SQL> select * from global_name;

จากนั้นคุณจะเห็นผลลัพธ์ในพรอมต์คำสั่ง

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

อันดับแรก "ORCL" คือชื่อฐานข้อมูลอาจเป็นระบบของคุณ "XE" และอื่น ๆ ที่ได้รับเมื่อเวลาดาวน์โหลด oracle


ขอบคุณคุณทำให้วันของฉัน
Muhammad Ashikuzzaman

2

ดังที่ได้กล่าวไปแล้วข้างต้นว่า

select global_name from global_name;

คือหนทางที่จะไป

คุณไม่สามารถสอบถาม v $ database / v $ instance / v $ thread เนื่องจากผู้ใช้ของคุณไม่มีสิทธิ์ที่จำเป็น คุณสามารถให้สิทธิ์ได้ (ผ่านบัญชี DBA) ด้วย:

grant select on v$database to <username here>;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.