Reference : Database Concepts - 6. Data Dictionary and Dynamic Performance Views
*GPT 번역 기반으로 내용이 정확하지 않을 수 있습니다.
각 Oracle 데이터베이스의 read-only 참조 테이블 및 view의 중앙 집합은 총칭하여 Data Dictionary라고 합니다. Dynamic performance view는 데이터베이스가 열리고 사용 중일 때 지속적으로 업데이트되는 특별한 view입니다.
이 장에는 다음 섹션이 포함되어 있습니다:
Oracle 데이터베이스의 중요한 부분인 data dictionary는 데이터베이스에 대한 관리 메타데이터를 제공하는 읽기 전용 테이블 집합입니다.
Data dictionary에는 다음과 같은 정보가 포함됩니다:
Data dictionary는 모든 Oracle Database의 데이터 관리의 중심 부분입니다. 예를 들어 데이터베이스는 다음 작업을 수행합니다:
Oracle Database는 data dictionary 데이터를 다른 데이터와 마찬가지로 테이블에 저장하므로 사용자는 SQL로 데이터를 쿼리할 수 있습니다. 예를 들어 사용자는 SELECT
문을 실행하여 자신의 권한, 스키마에 있는 테이블, 이러한 테이블의 열, 이러한 열에 인덱스가 생성되었는지 등을 확인할 수 있습니다.
참고 자료:
Data dictionary는 base table과 View로 구성됩니다.
이 객체들은 다음과 같이 정의됩니다:
보통 data dictionary view는 세트로 그룹화됩니다. 많은 경우 세트는 유사한 정보를 포함한 세 개의 view로 구성되며 접두사에 따라 구별됩니다. 적절한 뷰를 쿼리하여 자신에게 관련된 정보만 액세스할 수 있습니다.
표 6-1 Data Dictionary View Sets
접두사 | 사용자 액세스 | 내용 | 비고 |
---|---|---|---|
DBA_ | 데이터베이스 관리자 | 모든 객체 | 일부 DBA_ view는 관리자에게 유용한 추가 정보를 포함하는 열이 있습니다. |
ALL_ | 모든 사용자 | 사용자가 권한을 가진 객체 | 사용자가 소유한 객체를 포함합니다. 이러한 view는 현재 설정된 역할 집합을 준수합니다. |
USER_ | 모든 사용자 | 사용자가 소유한 객체 | USER_ 접두사가 붙은 view는 보통 OWNER 열을 제외합니다. 이 열은 USER_ view에서 쿼리를 실행하는 사용자를 나타내는 것으로 암시됩니다. |
모든 view 세트가 세 개의 구성원을 갖는 것은 아닙니다. 예를 들어 data dictionary에는 DBA_LOCK
뷰가 있지만 ALL_LOCK
뷰는 없습니다.
시스템에서 제공하는 DICTIONARY
view는 모든 data dictionary 뷰의 이름과 요약 설명을 포함합니다. 다음은 이 뷰를 쿼리한 예제입니다:
SQL> SELECT * FROM DICTIONARY
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
.
.
.
참고 자료:
DBA_
접두사가 붙은 view는 데이터베이스 전체의 관련 정보를 보여줍니다. DBA_
view는 관리자 전용입니다.
다음 예제 쿼리는 데이터베이스의 모든 객체에 대한 정보를 보여줍니다:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;
참고 자료:
ALL_
접두사가 붙은 view는 사용자의 전체 데이터베이스 관점을 나타냅니다.
이러한 뷰는 사용자가 소유한 스키마 객체 외에도 공용 또는 명시적으로 부여된 권한 및 역할을 통해 사용자가 액세스할 수 있는 스키마 객체에 대한 정보를 반환합니다.
예를 들어 다음 쿼리는 사용자가 액세스할 수 있는 모든 객체에 대한 정보를 반환합니다:
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_
뷰를 저장 프로시저에서 사용할 때, 역할이 기본적으로 활성화되지 않기 때문에 역할의 영향을 인지해야 합니다.
일반 사용자에게 가장 관심이 있을 view는 USER_
접두사가 붙은 view입니다.
이러한 view는 다음을 나타냅니다:
ALL_
뷰의 정보 일부를 반환합니다.OWNER
열이 암시됩니다.PUBLIC
synonym을 가질 수 있습니다.다음 예제는 사용자의 스키마에 포함된 모든 객체를 반환합니다:
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
ORDER BY OBJECT_NAME;
DUAL
은 Oracle Database와 사용자 작성 프로그램이 알려진 결과를 보장하기 위해 참조할 수 있는 작은 테이블입니다.
Dual 테이블은 한 번만 반환되어야 하는 값을 반환할 때 유용합니다. 예를 들어 현재 날짜와 시간을 반환하는 경우입니다. 모든 데이터베이스 사용자는 DUAL
에 액세스할 수 있습니다.
DUAL
테이블에는 DUMMY
라는 하나의 열이 있고 X
값을 포함하는 한 행이 있습니다. 다음 예제는 DUAL
을 쿼리하여 산술 연산을 수행합니다:
SQL> SELECT ((3*4)+5)/3 FROM DUAL;
((3*4)+5)/3
-----------
5.66666667
참고 자료:
Data dictionary 기본 테이블은 모든 Oracle 데이터베이스에서 처음으로 생성되는 객체입니다.
모든 데이터 사전 테이블과 view는 SYSTEM
테이블스페이스에 저장됩니다. SYSTEM
테이블스페이스가 데이터베이스가 열려 있을 때 항상 온라인 상태이므로 data dictionary는 데이터베이스가 열려 있을 때 항상 사용 가능합니다.
참고 자료:
SYSTEM
테이블스페이스에 대한 자세한 정보는 "The SYSTEM Tablespace"를 참조하십시오.Oracle 데이터베이스 사용자 계정 SYS
는 모든 데이터 사전 기본 테이블과 사용자 액세스 가능한 view를 소유합니다.
데이터베이스 작동 중 Oracle 데이터베이스는 스키마 객체가 존재하고 사용자가 적절한 액세스 권한을 가지고 있는지 확인하기 위해 data dictionary를 읽습니다. Oracle 데이터베이스는 데이터베이스 구조, 감시, 권한 부여 및 데이터의 변경을 반영하기 위해 data dictionary을 지속적으로 업데이트합니다.
예를 들어, hr
사용자가 interns
라는 테이블을 생성하면 데이터베이스는 새로운 테이블, 열, 세그먼트, extent 및 hr
이 테이블에 가지고 있는 권한을 반영하는 새 행을 data dictionary에 추가합니다. 이 새로운 정보는 다음 번에 data dictionary view를 쿼리할 때 표시됩니다.
Data dictionary base table의 데이터는 Oracle Database가 작동하는 데 필요합니다. 오직 Oracle Database만이 data dictionary 정보를 작성하거나 변경해야 합니다. 어떤 Oracle 데이터베이스 사용자도 SYS
스키마에 포함된 행이나 스키마 객체를 수정해서는 안 됩니다. 이러한 활동은 데이터 무결성을 손상시킬 수 있습니다. 보안 관리자는 이 중앙 계정을 엄격히 관리해야 합니다.
경고: 데이터 사전 테이블의 데이터를 변경하거나 조작하면 데이터베이스 작동에 영구적이고 치명적인 영향을 미칠 수 있습니다.
참고 자료:
SYS
및 SYSTEM
스키마에 대한 자세한 정보는 "SYS and SYSTEM Schemas"를 참조하십시오.Oracle 데이터베이스는 많은 data dictionary view에 대한 public synonym을 생성하여 사용자가 쉽게 액세스할 수 있도록 합니다.
보안 관리자는 시스템 전반에서 사용되는 스키마 객체에 대해 추가 public synonym을 생성할 수도 있습니다. Oracle은 public synonym과 동일한 이름을 가진 개인 스키마 객체를 사용하는 것을 권장하지 않습니다.
참고 자료:
데이터베이스는 사용자 액세스를 검증하고 스키마 객체 상태를 확인하기 위해 지속적으로 data dictionary 정보를 필요로 하기 때문에 많은 데이터 사전 정보가 data dictionary 캐시에 저장됩니다.
캐시는 보통 구문 분석 정보를 포함합니다. 테이블 및 열을 설명하는 COMMENTS
열은 data dictionary 캐시에 캐시되지 않지만 데이터베이스 버퍼 캐시에 캐시될 수 있습니다.
참고 자료:
기타 Oracle 데이터베이스 제품은 기존 view를 참조하고 추가 data dictionary 테이블이나 view를 생성할 수 있습니다.
Oracle은 data dictionary를 참조하는 프로그램을 작성하는 애플리케이션 개발자가 기본 테이블보다는 public synonym을 사용할 것을 권장합니다. Synonym은 릴리즈 간 변경 가능성이 적습니다.
Oracle 데이터베이스는 운영 중에 현재 데이터베이스 활동을 기록하는 가상 테이블 세트를 유지합니다.
이러한 view는 데이터베이스가 열리고 사용 중일 때 지속적으로 업데이트되기 때문에 동적입니다. View의 이름이 V$
로 시작되기 때문에 이러한 뷰는 때때로 V$ view라고도 합니다.
Dynamic performance view에는 다음과 같은 정보가 포함됩니다:
Dynamic performance view의 주요 사용 용도는 다음과 같습니다:
참고 자료:
Dynamic performance view는 fixed view라고도 불리며 데이터베이스 관리자가 변경하거나 제거할 수 없습니다. 그러나 데이터베이스 관리자는 이 view를 쿼리하고 테이블에 view를 생성하여 다른 사용자에게 접근 권한을 부여할 수 있습니다.
SYS
는 dynamic performance 테이블을 소유하며, 이 테이블들의 이름은 V_$
로 시작됩니다. 테이블에 view가 생성되고, V$
로 시작하는 public synonym이 생성됩니다. 예를 들어, V$DATAFILE
view는 데이터 파일에 대한 정보를 포함합니다. V$FIXED_TABLE
view는 모든 dynamic performance 테이블과 view에 대한 정보를 포함합니다.
대부분의 V$
view에는 해당하는 GV$
view가 있습니다. Oracle Real Application Clusters (Oracle RAC)에서는 GV$
view를 쿼리하면 모든 적격 데이터베이스 인스턴스에서 V$
view 정보를 검색합니다.
Database Configuration Assistant (DBCA)를 사용하여 데이터베이스를 생성할 때 Oracle은 자동으로 데이터 사전을 생성합니다. Oracle 데이터베이스는 자동으로 catalog.sql
스크립트를 실행하여 dynamic performance view에 대한 정의와 public synonym을 포함합니다. 이러한 view와 synonym을 생성하려면 catalog.sql
을 수동으로 실행해야 합니다.
참고 자료:
catalog.sql
을 수동으로 실행하는 방법을 배우십시오.Dynamic performance view는 데이터베이스 메모리 구조에서 빌드된 가상 테이블을 기반으로 합니다.
View는 데이터베이스에 저장된 일반 테이블이 아닙니다. View에 대한 읽기 일관성은 보장되지 않습니다. 데이터가 동적으로 업데이트되기 때문입니다.
Dynamic performance view는 실제 테이블이 아니기 때문에 데이터는 데이터베이스 및 데이터베이스 인스턴스 상태에 따라 달라집니다. 예를 들어 데이터베이스가 시작되었지만 마운트되지 않은 경우 V$INSTANCE
와 V$BGPROCESS
를 쿼리할 수 있습니다. 그러나 데이터베이스가 마운트될 때까지 V$DATAFILE
을 쿼리할 수 없습니다.
참고 자료:
DBMS_METADATA
패키지는 데이터베이스 객체의 전체 정의를 추출하기 위한 인터페이스를 제공합니다.
정의는 XML 또는 SQL DDL로 표현될 수 있습니다. Oracle 데이터베이스는 프로그래밍 제어를 위한 유연하고 정교한 인터페이스와 임시 쿼리를 위한 간단한 인터페이스 두 가지 스타일을 제공합니다.
참고 자료:
DBMS_METADATA
에 대한 자세한 정보는 Oracle Database PL/SQL Packages and Types Reference를 참조하십시오.