Oracle에서 데이터베이스 목록을 보는 방법은 무엇입니까?


33

MySQL SHOW DATABASES문장 과 동등한가 ?

클러스터에서 데이터베이스를 찾을 수 있습니까? 즉, 다른 시스템의 네트워크에 데이터베이스가 있습니까?

Oracle 설치에있는 파일을 분석하여 동일한 파일을 찾을 수 있습니까?

Oracle 시스템에 대한 완전한 액세스 자격 증명이 주어지면 존재하는 모든 데이터베이스를 어떻게 열거합니까?


4
또한 MySQL과 Oracle Database간에 용어 불일치가 있습니다. 아키텍처 측면에서 Oracle은 테이블-> 스키마-> 데이터베이스와 동시에 테이블-> 테이블 스페이스-> 데이터베이스를 가지고 있습니다. MySQL은 단순히 테이블-> 데이터베이스를 가지고 있습니다. 따라서 실제로 Oracle 스키마 목록 (생각 : 테이블의 SQL 네임 스페이스) 또는 Oracle 테이블 공간 목록 (생각 : 테이블의 OS 파일 그룹)을 검색하고 있습니다.
kubanczyk

답변:


22

MySQL SHOW DATABASES문장 과 동등한가 ?

그와 같은 일은 없다. 머신 ( lsnrctl status)에서 리스너를 쿼리하여 등록 된 서비스를 확인할 수 있지만 일대일 데이터베이스에 매핑되지 않으며 동일한 머신에 여러 리스너가있을 수 있습니다. 그렇지 않으면 일반적으로 사용되는 도구는 하나의 데이터베이스 인스턴스에 연결되고 인스턴스는 단일 데이터베이스에 속합니다.

Oracle RAC 클러스터에 대해 이야기하는 경우 각 인스턴스는 피어 (동일한 데이터베이스를 제공하는 다른 인스턴스)를 알고 있으며 gv$instance뷰를 사용하여 해당 데이터베이스에 대해 현재 시작된 다른 인스턴스를 찾을 수 있습니다. 유틸리티를
사용 crsctl하여 클러스터에 등록 된 서비스 (데이터베이스 포함) 및 상태를 나열 할 수도 있습니다 .
다른 공급 업체의 클러스터링 소프트웨어에 대해 이야기하고 있다면, 이러한 유형의 리소스 관리 유틸리티에 모두 쿼리해야합니다.

많은 머신에 대해 이야기하고 있다면 네트워크의 모든 데이터베이스를 100 % 신뢰할 수있는 방법으로 열거 할 수는 없습니다.

활성 (즉, 시작된) 데이터베이스를 찾으려면 *_pmon_*Unix (데이터베이스 인스턴스 당 하나)와 Windows의 Oracle 서비스에서 프로세스 를 찾으십시오 .

Oracle 데이터베이스 소프트웨어 설치를 찾으려면 /etc/oratabUnix를보십시오. ORACLE_HOME설치된 모든 파일이 포함 되어 있어야합니다. $ORACLE_HOME/dbsfor spfile<SID>.ora및 / 또는 init<SID>.ora파일 에있는 각각의 내부를 살펴볼 수 있습니다 . 각 데이터베이스마다 하나씩 있습니다.

( oratab아래의 Windows 레지스트리 키에서 동등한 정보를 찾을 수 있다고 생각 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE하지만 그 구조를 모르겠습니다.)

물론 모든 데이터베이스를 설치할 때 OEM (Enterprise Manager) 서버에 모든 데이터베이스를 등록한 경우 전체 목록을 찾을 수 있습니다. 그러나 그렇지 않은 경우에는 그럴 것입니다.


12

Oracle에는 데이터베이스 외에 스키마가 없으므로 다음과 같이 나열 할 수 있습니다.

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

또는 이와 같은 것 :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
테이블 스페이스는 일반적으로 스키마에 연결되지 않습니다.
Mat

2
모든 사용자들? USER_TABLESPACES?
kubanczyk

"MySQL SHOW DATABASES 문에 해당합니까?" 그 질문에 대답하려고합니다. 몰라 u 몰라
DevYudh

1
@DevYudh : Oracle의 테이블 스페이스 는 MySQL의 "데이터베이스"와 완전히 다릅니다. 첫 번째 쿼리는 정확하고 두 번째 쿼리는 명백하지 않습니다
a_horse_with_no_name

11

간단히 말해서, Oracle의 MySQL '데이터베이스'또는 '클러스터'에 대한 직접적인 비유는 없습니다. 가장 일치하는 것은 '스키마'이지만 여전히 매우 다릅니다.

이것은 플러그 형 데이터베이스의 도입으로 12c에서 변경 될 것입니다 .

데이터베이스 작업을 사용자의 콘텐츠와 깔끔하게 나누는 것은 기존 데이터베이스 아키텍처에서 크게 변형 된 것입니다. Kyte는 Oracle 11g와 그 이전 모델은 한 번에 하나의 데이터베이스 만 실행할 수 있다고 말했다. 조직이 단일 서버에서 여러 데이터베이스를 실행하려면 각 데이터베이스마다 하나씩 Oracle 11g의 여러 인스턴스를 실행해야합니다. 이름에서 알 수 있듯이, 플러그 가능 데이터베이스는 여러 테넌트 데이터베이스가 Oracle 12c의 한 복사본에서 실행될 수 있도록합니다.


어, 더 복잡하고, 더 많은 직업 보안 ...
kubanczyk

6

* nix의 향후 브라우저에 대한 대답은 다음과 같습니다.

고양이 / etc / oratab


3

ASM에 연결하고 데이터베이스 클라이언트를 확인하십시오.

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
이것은 ASM이 사용되고 있다고 가정합니다! 파일 시스템 또는 SAN에 저장된 데이터베이스는 어떻습니까?
Colin 't Hart

3

Oracle 12에 Pluggable Databases (권장)가있는 경우 다음을 수행 할 수 있습니다.

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

0

독립형 데이터베이스의 경우 호스트 재부팅 후 자동으로 시작되는 데이터베이스 목록을 가져옵니다.

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

또는 모든 데이터베이스 목록을 얻으려면 다음을 수행하십시오.

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

RAC 데이터베이스의 경우 다음 방법이 유용 할 수 있습니다.

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

또한 이미 언급했듯이 MySQL의 데이터베이스는 Oracle의 데이터베이스와 다릅니다. Oracle에서는 스키마에 더 가깝습니다. 즉 사용자 개체의 컨테이너라는 이름입니다. 체계 목록을 얻으려면 다음 SQL 문을 사용할 수 있습니다.

select username from dba_users order by 1;

또는 시스템 관련 체계가 아닌 목록을 얻으려면 (버전 12c부터 Oracle RDBMS에서 사용 가능) :

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.