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
빠른 응답에 감사드립니다. 인스턴스와 오라클 SID는 같은가요?
Adnan

2
@Adnan 단일 시스템에서 실행되는 DB의 여러 인스턴스가 SID로 식별되므로 동일 할 필요는 없습니다.
V4Vendetta 2011 년

@adnan 필요한 값을 얻었습니까?
V4Vendetta 2011 년

8
select sys_context('userenv','db_name') from dual;데이터베이스 이름과 sid에 대해서는 이미 답변에 추가했습니다. 이것이 당신이 원하는 것을 제공하기를 바랍니다
V4Vendetta 2011 년


57

나처럼 목표가 Oracle JDBC URL을 생성하기 위해 데이터베이스 호스트와 SID를 얻는 것입니다.

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

다음 명령이 도움이 될 것입니다.

SID (또는 인스턴스 이름)를 확인하는 Oracle 쿼리 명령 :

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

데이터베이스 이름 (또는 서버 호스트)을 확인하는 Oracle 쿼리 명령 :

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

Att. 세르지오 마르셀로


완전한. 이것이 제가 알고 싶었던 것과 정확히 일치하지만 표현하는 방법을 몰랐습니다.
애디슨

나도. 감사합니다 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에 부여되므로 누구나 쿼리 할 수 ​​있습니다.


오라클 SID는 어떻습니까? Scott 계정에서 확인하는 방법이 있습니까?
Adnan

1
SID가 아니라 서비스 이름입니다.
jpmc26

5

sqlplus명령 프롬프트에 입력

SQL> select * from global_name;

그러면 명령 프롬프트에 결과가 표시됩니다.

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

여기서 첫 번째 "ORCL"은 데이터베이스 이름이며, 시스템 "XE"및 오라클 다운로드 시간에 제공된 다른 항목 일 수 있습니다.



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.