어노테이션 (Annotation)

2023. 4. 14.·Oracle/Administration

Oracle 23c에 오브젝트의 메타데이터를 관리할 수 있는 어노테이션 (Annotation) 기능이 추가되었습니다.

Annotations enable you to store and retrieve metadata about database objects. These are name-value pairs or simply a name. These are freeform text fields applications can use to customize business logic or user interfaces. Annotations help you use database objects in the same way across all applications. This simplifies development and improves data quality.

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다. ANNOTATIONS 절로 테이블과 칼럼에 대한 어노테이션을 생성합니다. 어노테이션은 key-value 또는 key only 형식으로 저장할 수 있습니다.

-- 1
DROP TABLE t1 PURGE;

CREATE TABLE t1 (
    c1 NUMBER ANNOTATIONS (name 'Column 1')
  , c2 NUMBER ANNOTATIONS (name 'Column 2', system)
) ANNOTATIONS (name 'Table 1', type 'Test');

 

*_ANNOTATIONS, *_ANNOTATIONS_USAGE 뷰에서 어노테이션 정보를 조회할 수 있습니다.

-- 2-1
SELECT * FROM user_annotations;
 
ANNOTATION_NAME
---------------
NAME
TYPE
SYSTEM

3 행이 선택되었습니다.

-- 2-2
SELECT * FROM user_annotations_usage WHERE object_name = 'T1';

OBJECT_NAME OBJECT_TYPE COLUMN_NAME DOMAIN_NAME DOMAIN_OWNER ANNOTATION_NAME ANNOTATION_VALUE
----------- ----------- ----------- ----------- ------------ --------------- ----------------
T1          TABLE                                            NAME            Table 1
T1          TABLE                                            TYPE            Type 1
T1          TABLE       C1                                   NAME            Column 1
T1          TABLE       C2                                   NAME            Column 2
T1          TABLE       C2                                   SYSTEM

5 행이 선택되었습니다.

 

커서 무효화를 테스트하기 위해 아래 쿼리를 수행하겠습니다.

-- 3-1
SELECT /* TEST1 */ * FROM t1;

선택된 레코드가 없습니다.

-- 3-2
SELECT loads, invalidations, executions FROM v$sql WHERE sql_text = 'SELECT /* TEST1 */ * FROM t1';

LOADS INVALIDATIONS EXECUTIONS
----- ------------- ----------
    1             0          1

1개의 행이 선택되었습니다.

 

어노테이션은 DROP 또는 ADD할 수 있으며, 어노테이션을 변경하기 위해서는 DROP 후 ADD하는 방식을 사용해야 합니다.

-- 4-1
ALTER TABLE t1 ANNOTATIONS (DROP type, ADD type 'Type 2');

-- 4-2
ALTER TABLE t1 MODIFY (c2 ANNOTATIONS (DROP system, ADD system 'True'));

 

*_ANNOTATIONS_USAGE 뷰를 조회하면 어노테이션이 변경된 것을 확인할 수 있습니다.

-- 5
SELECT * FROM user_annotations_usage WHERE object_name = 'T1';

OBJECT_NAME OBJECT_TYPE COLUMN_NAME DOMAIN_NAME DOMAIN_OWNER ANNOTATION_NAME ANNOTATION_VALUE
----------- ----------- ----------- ----------- ------------ --------------- ---------------
T1          TABLE                                            NAME            Table 1
T1          TABLE                                            TYPE            Type 2
T1          TABLE       C1                                   NAME            Column 1
T1          TABLE       C2                                   NAME            Column 2
T1          TABLE       C2                                   SYSTEM          True

5 행이 선택되었습니다.

 

커서 무효화 테스트 쿼리를 다시 수행하면 커서가 무효화된 것을 확인할 수 있습니다. 어노테이션은 파싱과 무관하므로 향후 Fine-Grained Cursor Invalidation 기능에 어노테이션이 추가되어야 할 것으로 보입니다.

-- 6-1
SELECT /* TEST1 */ * FROM t1;

선택된 레코드가 없습니다.

-- 6-2
SELECT loads, invalidations, executions FROM v$sql WHERE sql_text = 'SELECT /* TEST1 */ * FROM t1';

LOADS INVALIDATIONS EXECUTIONS
----- ------------- ----------
    2             1          1

1개의 행이 선택되었습니다.

 

참고로 COMMENT 문은 커서를 무효화시키지 않습니다.

-- 7-1
SELECT /* TEST2 */ * FROM t1;

선택된 레코드가 없습니다.

-- 7-2
SELECT loads, invalidations, executions FROM v$sql WHERE sql_text = 'SELECT /* TEST2 */ * FROM t1';

LOADS INVALIDATIONS EXECUTIONS
----- ------------- ----------
    1             0          1

1개의 행이 선택되었습니다.

-- 7-3
COMMENT ON TABLE t1 IS 'Table 1';

주석이 생성되었습니다.

-- 7-4
SELECT /* TEST2 */ * FROM t1;

선택된 레코드가 없습니다.

-- 7-5
SELECT loads, invalidations, executions FROM v$sql WHERE sql_text = 'SELECT /* TEST2 */ * FROM t1';

LOADS INVALIDATIONS EXECUTIONS
----- ------------- ----------
    1             0          2

1개의 행이 선택되었습니다.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Administration' 카테고리의 다른 글
  • UPDATE 문에 대한 DEFAULT ON NULL 절
  • DB_DEVELOPER_ROLE 롤
  • IOT에 대한 Advanced LOW 압축
  • Inline LOB의 최대 크기 변경
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • Oracle (173)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
어노테이션 (Annotation)
상단으로

티스토리툴바