데이터 딕셔너리 및 동적 성능 뷰

읽기 전용 참조 테이블의 중앙 집합과 각 Oracle 데이터베이스의 뷰를 총체적으로 데이터 딕셔너리라고 합니다. 동적 성능 뷰는 데이터베이스가 열려 있고 사용 중인 동안 지속적으로 업데이트되는 특수 뷰입니다.

데이터 딕셔너리 개요

Oracle 데이터베이스의 중요한 부분은 데이터베이스에 대한 관리 메타 데이터를 제공하는 읽기 전용 테이블 집합인 데이터 딕셔너리입니다.

데이터 딕셔너리의 목적

데이터 딕셔너리에는 데이터베이스 내용을 설명하는 메타 데이터가 포함됩니다.

예를 들어, 데이터 딕셔너리에는 다음과 같은 정보가 포함됩니다.

데이터 관리

데이터 딕셔너리는 모든 Oracle 데이터베이스에 대한 데이터 관리의 핵심 부분입니다.

예를 들어, 데이터베이스는 다음 작업을 수행합니다.

Oracle AI Database는 다른 데이터와 마찬가지로 데이터 딕셔너리 데이터를 테이블에 저장하므로 사용자는 SQL을 사용하여 데이터를 질의할 수 있습니다. 예를 들어, 사용자는 SELECT 문을 실행하여 권한, 스키마에 존재하는 테이블, 이러한 테이블에 있는 열, 이러한 열에 인덱스가 구축되는지 여부 등을 확인할 수 있습니다.

참조:

CDB에서 데이터 딕셔너리 구분

CDB에서 데이터 딕셔너리 메타 데이터는 CDB 루트와 PDB 간에 분할됩니다. 유저 및 응용 프로그램 측면에서는 CDB의 각 컨테이너에 있는 데이터 딕셔너리가 구분됩니다.

아직 사용자 데이터를 포함하지 않는 새로 생성된 CDB에서 CDB 루트의 데이터 딕셔너리는 시스템 메타 데이터만 포함합니다. 예를 들어, TAB$ 테이블에는 Oracle에서 제공하는 테이블(예: TRIGGER$ 및 SERVICE$)만 설명하는 행이 포함됩니다. 다음 그림은 세 개의 기본 데이터 딕셔너리 테이블을 보여주며 빨간색 막대는 시스템을 설명하는 행을 나타냅니다.

그림 1: CDB 루트의 데이터 딕셔너리 메타 데이터

그림 cncpt_vm_363.png에 대한 설명

PDB를 생성한 다음 이 PDB에 employees 및 departments 테이블을 포함하는 hr 스키마를 생성한다고 가정합니다. PDB의 데이터 딕셔너리에는 Oracle 제공 엔티티를 설명하는 일부 행과 유저 생성 엔티티를 설명하는 기타 행이 포함됩니다. 예를 들어, PDB 딕셔너리의 TAB$ 테이블에는 employees 테이블에 대한 메타데이터 행과 departments 테이블에 대한 행이 있습니다.

그림 2: CDB의 데이터 딕셔너리 구조

그림 cncpt_vm_361.png에 대한 설명

앞의 그림은 PDB의 데이터 딕셔너리에 CDB 루트의 데이터 딕셔너리에 대한 포인트가 포함되어 있음을 보여줍니다. 내부적으로 데이터 딕셔너리 테이블 정의 및 PL/SQL 패키지와 같은 Oracle 제공 객체는 CDB 루트에서 한 번만 표시됩니다. 이 아키텍처는 CDB 내에서 다음 두 가지 주요 목표를 달성합니다.

데이터 딕셔너리 구성 요소

데이터 딕셔너리는 기본 테이블 및 뷰로 구성됩니다.

이러한 객체는 다음과 같이 정의됩니다.

일반적으로 데이터 딕셔너리 뷰는 집합으로 그룹화됩니다. 대부분의 경우 집합은 다음 표에 나오는 것처럼 유사한 정보를 포함하고 접두어로 구분되는 세 개의 뷰로 구성됩니다. 적절한 뷰를 조회하면 관련된 정보만 접근할 수 있습니다.

테이블 1 데이터 딕셔너리 뷰 세트

접두어 사용자 접근 내용 노트
DBA_ 데이터베이스 담당자 모든 오브젝트 일부 DBA_ 뷰에는 관리자에게 유용한 정보가 포함된 추가 열이 있습니다.
ALL_ 모든 사용자 사용자에게 권한이 있는 객체 사용자가 소유한 객체를 포함합니다. 이러한 뷰는 활성화된 현재 롤 집합을 따릅니다.
USER_ 모든 사용자 사용자가 소유한 오브젝트 접두어가 USER_인 뷰는 일반적으로 OWNER 열을 제외합니다. 이 열은 USER_ 뷰에서 질의를 실행하는 사용자가 되도록 암시됩니다.

모든 뷰 집합에 세 개의 멤버가 있는 것은 아닙니다. 예를 들어, 데이터 딕셔너리에는 DBA_LOCK 뷰가 포함되지만 ALL_LOCK 뷰는 포함되지 않습니다.

시스템에서 제공하는 DICTIONARY 뷰에는 모든 데이터 딕셔너리 뷰의 이름 및 축약된 설명이 포함됩니다. 이 뷰의 다음 질의에는 부분 샘플 출력이 포함되어 있습니다.

SQL> SELECT * FROM DICTIONARY
  2  ORDER BY TABLE_NAME;

TABLE_NAME                     COMMENTS
------------------------------ ----------------------------------------
ALL_ALL_TABLES                 Description of all object and relational
                               tables accessible to the user

ALL_APPLY                      Details about each apply process that
                               dequeues from the queue visible to the
                               current user
.
.
.

참조:

CDB의 컨테이너 데이터 객체

컨테이너 데이터 객체는 여러 컨테이너 또는 전체 CDB와 관련된 데이터를 포함하는 테이블 또는 뷰입니다.

컨테이너 데이터 권한은 여러 PDB가 단일 CDB에 있지만 로컬 관리 요구사항이 서로 다른 일반적인 요구사항을 지원합니다. 예를 들어, 응용 프로그램 DBA가 로컬에서 관리하지 않으려는 경우 일반 유저에게 적절한 뷰에 대한 컨테이너 데이터 권한을 부여할 수 있습니다. 이 경우 CDB 관리자는 이러한 PDB에 대한 데이터에 액세스할 수 있습니다. 반면, CDB 관리자가 데이터에 액세스하지 않도록 하려는 PDB 관리자는 컨테이너 데이터 권한을 부여하지 않습니다.

컨테이너 데이터 객체의 예로는 이름이 V$ 및 CDB_로 시작하는 Oracle 제공 뷰가 있습니다. 모든 컨테이너 데이터 객체에는 CON_ID 열이 있습니다. 다음 표에서는 이 열의 값 의미를 보여줍니다.

테이블 2 컨테이너 ID 값

컨테이너 ID 다음과 관련된 행
0 전체 CDB
1 CDB$ROOT
2 PDB$SEED
기타 모든 ID 유저 생성 PDB, 응용 프로그램 루트 또는 응용 프로그램 시드

CDB에서는 모든 DBA_ 뷰에 대해 해당 CDB_ 뷰가 존재합니다. CDB_ 뷰의 소유자는 해당 DBA_ 뷰의 소유자입니다. 다음 그림은 딕셔너리 뷰의 여러 범주 간 관계를 보여줍니다.

그림 3: CDB의 딕셔너리 뷰

그림 cncpt_vm_366.png에 대한 설명

현재 컨테이너가 PDB인 경우 사용자는 현재 PDB에 대한 데이터 딕셔너리 정보만 볼 수 있습니다. 그러나 현재 컨테이너가 CDB 루트인 경우 공통 사용자는 CDB_ 뷰를 질의하여 CDB 루트 및 이 사용자에게 권한이 부여된 PDB에 대한 메타데이터를 볼 수 있습니다. 주: CDB 루트에서 질의할 때 CDB_ 및 V$ 뷰는 암시적으로 데이터를 AL32UTF8 문자 집합으로 변환합니다. 문자 집합이 AL32UTF8로 변환될 때 문자를 나타내기 위해 더 많은 바이트가 필요하고 뷰 열 너비가 특정 PDB의 데이터를 수용할 수 없는 경우 데이터 잘림이 가능합니다.

다음 표에서는 CDB_ 뷰의 쿼리에 대해 설명합니다. 각 행은 이전 행의 작업 이후에 발생하는 작업을 설명합니다.

표 3 CDB_ 뷰 질의

작업 설명
SQL> CONNECT SYSTEM
 Enter password: ********
 Connected.

CDB의 모든 컨테이너에 공통되는 SYSTEM 사용자는 CDB 루트에 연결됩니다("공통 사용자 계정" 참조).

SQL> SELECT COUNT(*) FROM CDB_USERS
  WHERE CON_ID=1;

  COUNT(*)
 --------
 38
SYSTEM는 CDB_USERS를 질의하여 CDB 루트의 일반 사용자 수를 가져옵니다. 출력은 CDB 루트에 공통 사용자 38명이 있음을 나타냅니다.
SQL> SELECT COUNT(DISTINCT(CON_ID))
  FROM CDB_USERS;

  COUNT(DISTINCT(CON_ID))
 -----------------------
 4
SYSTEM는 CDB_USERS를 질의하여 CDB의 개별 컨테이너 수를 확인합니다.
SQL> CONNECT SYSTEM@hrdb
 Enter password: ********
 Connected.
이제 SYSTEM 사용자가 hrpdb라는 PDB에 접속합니다.
SQL> SELECT COUNT(*) FROM CDB_USERS;

  COUNT(*)
 ----------
 48
SYSTEM는 CDB_USERS를 질의합니다. 출력은 현재 컨테이너(hrpdb)에 48명의 일반 및 로컬 사용자가 존재함을 나타냅니다.
SQL> SELECT COUNT(*) FROM DBA_USERS;

  COUNT(*)
 ----------
 48
SYSTEM는 DBA_USERS를 질의합니다. 출력은 이전 query와 동일합니다. SYSTEM는 CDB 루트에 연결되지 않으므로 DBA_USERS 뷰에는 CDB_USERS와 동일한 출력이 표시됩니다. DBA_USERS는 current 컨테이너의 사용자만 표시하므로 48이 표시됩니다.

접두어가 DBA_인 뷰

접두어가 DBA_인 뷰는 전체 데이터베이스의 모든 관련 정보를 보여줍니다. DBA_ 뷰는 관리자용으로만 사용됩니다.

다음 예제 query는 데이터베이스의 모든 객체에 대한 정보를 보여줍니다.

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

참조: 관리 권한에 대한 자세한 내용은 Oracle AI Database Administrator's Guide를 참조하십시오.

접두어가 ALL_인 뷰

접두어가 ALL_인 뷰는 데이터베이스에 대한 유저의 전반적인 관점을 나타냅니다.

이러한 뷰는 유저가 소유한 스키마 객체 외에도 권한 및 롤의 공용 또는 명시적 권한 부여를 통해 액세스할 수 있는 스키마 객체에 대한 정보를 반환합니다.

예를 들어, 다음 질의는 액세스 권한이 있는 모든 객체에 대한 정보를 반환합니다.

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   ALL_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

ALL_ 뷰는 사용으로 설정된 현재 롤 집합을 준수하기 때문에 다음 예제에 표시된 것처럼 사용으로 설정된 롤에 따라 질의 결과가 달라집니다.

SQL> SET ROLE ALL;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
68295

SQL> SET ROLE NONE;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
53771

응용 프로그램 개발자는 저장된 프로시저에서 ALL_ 뷰를 사용할 때 역할이 미치는 영향을 파악해야 합니다. 여기서 역할은 기본적으로 사용으로 설정되지 않습니다.

접두어가 USER_인 뷰

일반적인 데이터베이스 사용자가 관심을 가질 만한 뷰는 접두어가 USER_인 뷰입니다.

이러한 뷰는 다음과 같습니다.

예를 들어, 다음 질의는 스키마에 포함된 모든 객체를 반환합니다.

SELECT OBJECT_NAME, OBJECT_TYPE
FROM   USER_OBJECTS
ORDER BY OBJECT_NAME;

DUAL 테이블

DUAL는 Oracle AI Database 및 사용자가 작성한 프로그램에서 참조할 수 있는 데이터 딕셔너리의 작은 테이블로, 알려진 결과를 보장합니다.

이중 테이블은 값이 현재 날짜 및 시간과 같이 한 번만 반환되어야 하는 경우에 유용합니다. 모든 데이터베이스 사용자는 DUAL에 액세스할 수 있습니다.

DUAL 테이블에는 DUMMY이라는 하나의 열과 X 값을 포함하는 하나의 행이 있습니다. 다음 예제는 DUAL를 질의하여 산술 연산을 수행합니다.

SQL> SELECT ((3*4)+5)/3 FROM DUAL;

((3*4)+5)/3
-----------
 5.66666667

참조: DUAL 테이블에 대한 자세한 내용은 Oracle AI Database SQL Language Reference를 참조하십시오.

데이터 딕셔너리의 작동 방식

Oracle AI Database 사용자 계정 SYS은 데이터 딕셔너리의 모든 기본 테이블 및 사용자가 액세스할 수 있는 뷰를 소유합니다.

데이터베이스 작업 중에 Oracle AI Database는 데이터 딕셔너리를 읽어 스키마 객체가 존재하는지, 사용자에게 적절한 액세스 권한이 있는지 확인합니다. Oracle AI Database는 데이터베이스 구조, 감사, 권한 부여, 데이터의 변경 사항을 반영하기 위해 데이터 딕셔너리를 지속적으로 업데이트합니다.

예를 들어, 사용자 hr가 interns라는 테이블을 생성하는 경우 데이터베이스는 새 테이블, 열, 세그먼트, 확장 영역 및 hr가 테이블에 대해 가지는 권한을 반영하는 새 행을 데이터 딕셔너리에 추가합니다. 이 새 정보는 다음에 딕셔너리 뷰를 query할 때 표시됩니다.

데이터 딕셔너리의 기본 테이블에 있는 데이터는 Oracle AI Database가 작동하는 데 필요합니다. Oracle AI Database만 데이터 딕셔너리 정보를 작성하거나 변경해야 합니다. Oracle AI Database 사용자는 데이터 무결성을 손상시킬 수 있기 때문에 SYS 스키마에 포함된 행 또는 스키마 객체를 변경해서는 안됩니다. 보안 관리자는 이 중앙 계정을 엄격하게 관리해야 합니다.

경고: 데이터 딕셔너리 테이블의 데이터를 변경하거나 조작하면 데이터베이스 작업에 영구적으로 해로운 영향을 줄 수 있습니다.

메타데이터 및 데이터 링크

CDB는 내부 연결 방식을 사용하여 데이터 딕셔너리 정보를 구분합니다.

특히 Oracle AI Database는 다음과 같은 자동 관리 포인터를 사용합니다.

Oracle AI Database는 CDB$ROOT에 대한 메타데이터 및 데이터 링크를 자동으로 생성하고 관리합니다. 사용자는 이러한 링크를 추가, 수정 또는 제거할 수 없습니다.

참조:

데이터 딕셔너리 뷰에 대한 공용 동의어

Oracle AI Database는 많은 데이터 딕셔너리 뷰에 대한 공용 동의어를 생성하므로 사용자가 편리하게 액세스할 수 있습니다.

보안 관리자는 시스템 차원에서 사용되는 스키마 객체에 대해 추가 공용 동의어를 생성할 수도 있습니다. Oracle은 전용 스키마 객체와 공용 동의어에 대해 동일한 이름을 사용하지 않을 것을 권장합니다.

참조: "동의어 개요"

데이터 딕셔너리 캐시

대부분의 데이터 딕셔너리 정보는 데이터 딕셔너리 캐시에 있습니다. 데이터베이스에서는 사용자 액세스를 검증하고 스키마 객체의 상태를 확인하는 정보가 지속적으로 필요하기 때문입니다.

캐시에는 일반적으로 구문 분석 정보가 포함됩니다. 테이블 및 해당 열을 설명하는 COMMENTS 열은 딕셔너리 캐시에 캐시되지 않지만 데이터베이스 버퍼 캐시에 캐시될 수 있습니다.

참조: "데이터 딕셔너리 캐시"

기타 프로그램 및 데이터 사전

다른 Oracle AI Database 제품은 기존 뷰를 참조하고 추가 데이터 딕셔너리 테이블 또는 뷰를 생성할 수 있습니다.

Oracle은 데이터 딕셔너리를 참조하는 프로그램을 작성하는 응용 프로그램 개발자가 기본 테이블이 아닌 공용 동의어를 사용할 것을 권장합니다. 동의어는 릴리스 간에 변경될 가능성이 적습니다.

데이터 딕셔너리 저장 영역

CDB의 메타 데이터를 전체적으로 저장하는 데이터 딕셔너리는 시스템 테이블스페이스에만 저장됩니다.

특정 PDB의 메타 데이터를 저장하는 데이터 딕셔너리는 이 PDB 전용의 자체 포함 테이블스페이스에 저장됩니다. PDB 테이블스페이스에는 응용 프로그램 백엔드의 데이터와 메타 데이터가 모두 포함됩니다. 따라서 각 데이터 딕셔너리 테이블 집합은 고유한 전용 테이블스페이스 집합에 저장됩니다.

참조: SYSTEM 테이블스페이스에 대한 자세한 내용은 "SYSTEM 테이블스페이스"를 참조하십시오.

Dynamic Performance 뷰 개요

Oracle AI Database는 운영 전반에 걸쳐 현재 데이터베이스 활동을 기록하는 가상 테이블 세트를 유지 관리합니다.

이러한 뷰는 데이터베이스가 열려 있고 사용 중인 동안 지속적으로 갱신되기 때문에 동적입니다. 뷰 이름은 V$로 시작하므로 뷰를 V$ 뷰라고도 합니다.

Dynamic Performance 뷰에는 다음과 같은 정보가 포함됩니다.

Dynamic Performance 뷰의 주요 용도는 다음과 같습니다.

Dynamic Performance 뷰의 내용

동적 성능 뷰는 데이터베이스 관리자가 변경하거나 제거할 수 없으므로 고정 뷰라고 합니다. 그러나 데이터베이스 관리자는 테이블에 대한 뷰를 질의 및 생성하고 이러한 뷰에 대한 액세스 권한을 다른 사용자에게 부여할 수 있습니다.

SYS는 이름이 V_$로 시작하는 동적 성능 테이블을 소유합니다. 뷰는 이러한 테이블에 생성된 다음 공용 동의어 앞에 V$가 붙습니다. 예를 들어, V$DATAFILE 뷰는 데이터 파일에 대한 정보를 포함합니다. V$FIXED_TABLE 뷰는 모든 동적 성능 테이블 및 뷰에 대한 정보를 포함합니다.

거의 모든 V$ 뷰에 대해 해당 GV$ 뷰가 존재합니다. Oracle RAC(Oracle Real Application Clusters)에서 GV$ 뷰를 질의하면 모든 적격 데이터베이스 인스턴스에서 V$ 뷰 정보가 검색됩니다.

DBCA(Database Configuration Assistant)를 사용하여 데이터베이스를 생성하면 Oracle이 자동으로 데이터 딕셔너리를 생성합니다. Oracle AI Database는 동적 성능 뷰에 대한 뷰 및 공용 동의어의 정의를 포함하는 catalog.sql 스크립트를 자동으로 실행합니다. 이러한 뷰와 동의어를 생성하려면 catalog.sql를 실행해야 합니다.

참조:

동적 성능 뷰의 저장 영역

Dynamic Performance 뷰는 데이터베이스 메모리 구조에서 작성된 가상 테이블을 기반으로 합니다.

뷰는 데이터베이스에 저장된 일반 테이블이 아닙니다. 데이터가 동적으로 갱신되기 때문에 뷰에서는 읽기 일관성이 보장되지 않습니다.

동적 성능 뷰는 실제 테이블이 아니므로 데이터는 데이터베이스 및 데이터베이스 인스턴스의 상태에 따라 달라집니다. 예를 들어, 데이터베이스가 시작되었지만 마운트되지 않은 경우 V$INSTANCE 및 V$BGPROCESS를 질의할 수 있습니다. 그러나 데이터베이스가 마운트될 때까지는 V$DATAFILE를 질의할 수 없습니다.

참조: "데이터 동시성 및 일관성"

데이터베이스 객체 메타데이터

DBMS_METADATA 패키지 및 DBMS_DEVELOPER.GET_METADATA 함수는 데이터베이스 객체의 전체 정의를 추출하기 위한 인터페이스를 제공합니다.

DBMS_METADATA 패키지를 사용하면 정의를 XML 또는 SQL DDL로 표현할 수 있습니다. Oracle AI Database는 프로그래밍 제어를 위한 유연하고 정교한 인터페이스와 임시 쿼리를 위한 간소화된 인터페이스라는 두 가지 스타일의 인터페이스를 제공합니다.

DBMS_DEVELOPER.GET_METADATA 함수를 사용하면 객체 메타데이터가 JSON 문서로 반환됩니다.

참조: DBMS_METADATA에 대한 자세한 내용은 Oracle AI Database PL/SQL Packages and Types Reference를 참조하십시오. DBMS_DEVELOPER.GET_METADATA에 대한 자세한 내용은 Oracle AI Database PL/SQL Packages and Types Reference를 참조하십시오.