Kiểm tra oracle sid và tên cơ sở dữ liệu


115

Tôi muốn kiểm tra SID và tên cơ sở dữ liệu hiện tại.

Tôi đang sử dụng truy vấn sau để kiểm tra SID oracle

select instance from v$thread;

nhưng bảng hoặc chế độ xem không tồn tại lỗi đang đến.

Tôi đang sử dụng truy vấn sau để kiểm tra tên cơ sở dữ liệu hiện tại

select name from v$database;

nhưng bảng hoặc chế độ xem không tồn tại lỗi đang đến.

Bất kỳ ý tưởng cho hai vấn đề trên?

Câu trả lời:


148

Tôi đoán SELECT user FROM dual;sẽ cung cấp cho bạn người dùng hiện tại

SELECT sys_context('userenv','instance_name') FROM dual;tên của phiên bản

Tôi tin rằng bạn có thể nhận được SID như SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
Cảm ơn bạn đã phản hồi nhanh. Ví dụ và SID oracle có giống nhau không?
Adnan

2
@Adnan Họ không nhất thiết phải giống nhau vì có coould có nhiều trường hợp của DB đang chạy trên một máy duy nhất họ được xác định bởi SID
V4Vendetta

@adnan Bạn có nhận được các giá trị cần thiết không?
V4Vendetta

8
select sys_context('userenv','db_name') from dual;cho tên cơ sở dữ liệu và sid tôi đã thêm vào câu trả lời. hy vọng điều này mang đến cho bạn những gì bạn muốn
V4Vendetta

2
Vui lòng kiểm tra liên kết
V4Vendetta

57

Nếu, giống như tôi, mục tiêu của bạn là lấy máy chủ cơ sở dữ liệu và SID để tạo url Oracle JDBC, như

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

các lệnh sau sẽ giúp:

Lệnh truy vấn Oracle để kiểm tra SID (hoặc tên phiên bản):

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

Lệnh truy vấn Oracle để kiểm tra tên cơ sở dữ liệu (hoặc máy chủ lưu trữ máy chủ):

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

Att. Sergio Marcelo


Hoàn hảo. Đây chính xác là những gì tôi muốn biết, nhưng không biết cách diễn đạt.
Addison,

Tôi cũng vậy. Cảm ơn Sergio!
Horseatingweeds

48

Chỉ để hoàn thiện, bạn cũng có thể sử dụng ORA_DATABASE_NAME.

Có thể cần lưu ý rằng không phải tất cả các phương pháp đều cung cấp cho bạn cùng một kết quả:

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

Không cần quyền đặc biệt cho các truy vấn trên. Được xác minh bằng cách tạo người dùng mới chỉ có đặc quyền CONNECT.
bdeem

22

Chế độ xem V $ chủ yếu là chế độ xem động của các chỉ số hệ thống. Chúng được sử dụng để điều chỉnh hiệu suất, giám sát phiên, v.v. Vì vậy, quyền truy cập bị giới hạn cho người dùng DBA theo mặc định, đó là lý do tại sao bạn nhận được ORA-00942.

Cách dễ nhất để tìm tên cơ sở dữ liệu là:

select * from global_name;

Chế độ xem này được cấp cho PUBLIC, vì vậy bất kỳ ai cũng có thể truy vấn nó.


Còn về oracle SID? Có phương pháp nào để kiểm tra nó từ tài khoản scott không?
Adnan

1
Đó là tên dịch vụ, không phải SID.
jpmc26

5

Nhập vào sqlplusdấu nhắc lệnh

SQL> select * from global_name;

sau đó bạn sẽ thấy kết quả trên dấu nhắc lệnh

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

Đây đầu tiên "ORCL" là tên cơ sở dữ liệu, có thể là hệ thống của bạn "XE" và những gì khác đã được cung cấp vào thời gian tải xuống oracle.


Cảm ơn, bạn đã làm cho ngày của tôi.
Muhammad Ashikuzzaman

2

Như đã được đề cập ở trên,

select global_name from global_name;

là con đường để đi.

Bạn không thể truy vấn v $ database / v $ instance / v $ thread vì người dùng của bạn không có các quyền cần thiết. Bạn có thể cấp cho chúng (thông qua tài khoản DBA) với:

grant select on v$database to <username here>;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.