Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

메타데이터 지원 (Metadata Support)


Recommended Posts

Docwiki에 있는 "Metadata Support"를 번역한 글(최종 번역일: 2022년 8월 18일)

<< 위로 가기: 체인지 뷰스 (Change Views)

구독(subscription) 정보는 새로 추가된 시스템 관계인 RDB$SUBSCRIPTIONS에 자신 만의 고유한 키 (unique key)를 가지고 저장되며 이 키를 통해 RDB$SUBSCRIPTION_NAME, RDB$SUBSCRIBER_NAME, RDB$DESTINATION과 연결된다. RDB$SUBSCRIPTIONS에 있는 부가적인 필드들에는 변경된 데이터의 "체크 인"과 "체크 아웃"을 다룰 수 있는 통제 정보가 저장된다. 통제에 필요한 정보로는 트랜잭션 ID, 타임스탬프, 그리고 해당 스키마 오브젝트에서 발생한 변경 데이터를 가장 마지막에 관찰 (last observation)한 트랜잭션의 문맥(context) 등이 해당된다.

  • "체크 아웃(check out)"이라는 용어의 의미는, 구독이 활성화되어 있는 상황에서, 구독되는 테이블(들)에서 행을 가져오기 즉 변경되는 컬럼을 "읽기(SELECT)"하는 것을 의미한다.
  • "체크 인(check in)"이라는 용어의 의미는 구독이 활성화되어 있는 상황에서, 구독되는 테이블(들)의 행에 "삽입(INSERT)", "업데이트(UPDATE)", "삭제(DELETE)"를 실행하여 구독의  대상인 컬럼에 변경을 발생시키는 것을 의미한다.
  • 데이터베이스에서 SET SUBSCRIPTION ACTIVE가 실행된 세션이 유지되는 동안 구독은 활성화된다.
  • SET SUBSCRIPTION INACTIVE를 실행하면 비활성화 된다.

목차


1 구독/구독자 테이블들 (Subscription/Subscriber Tables)

이 주제는 체이지 뷰스 (Change Views) 기능을 구현하기 위해 새로 추가되고 업데이트된 컬럼들을 다룬다. RDB$SUBSCRIPTIONSRDB$SUBSCRIBERS는 새로 추가된 테이블로써 구독/구독자 요소를 담당한다. 아래에 나열된 테이블 목록에서 위 2개를 뺀 나머지는 이미 있던 테이블에 컬럼이 새로 추가되거나 변경된 테이블들이다.  

1.1 RDB$SUBSCRIPTIONS

ODS 버전 16부터 새로 들어간 시스템 관계/테이블이다.

컬럼 이름 데이터 타입 길이 설명
RDB$SUBSCRIPTION_NAME CHAR 67 구독(subscription)의 이름
RDB$RELATION_COUNTER SMALLINT 2 구독 1개 안에 있는 여러 줄로된 항목들을 추적하기 위해 세는 숫자
RDB$RELATION_NAME CHAR 67 관계(relation) 또는 뷰(view)의 이름
RDB$FIELD_NAME CHAR 67 필드(field)의 이름
RDB$DESCRIPTION BLOB   서브타입(subtype) 텍스트: 구독을 설명하는 글
RDB$SECURITY_CLASS CHAR 67 해당 구독의 보안 클래스(security class), SQL 보안을 위한 해당 소유주
RDB$OWNER_NAME CHAR 67 해당 구독을 생성한 사용자
RDB$RUNTIME BLOB   런-타임(run-time) 바이너리 정보를 빼내어 성능을 강화
RDB$FLAGS SMALLINT 2  
RDB$INSERT BOOLEAN 2 삽입(INSERT)들이 추적된다.
RDB$UPDATE BOOLEAN 2 업데이트(UPDATE)들이 추적된다.
RDB$DELETE BOOLEAN 2 삭제(DELETE)들이 추적된다.
RDB$CHANGE BOOLEAN 2 모든 동작을 추적한다. 하지만 어떤 컬럼이든 변경이되면 즉시 반환한다.

 

1.2 RDB$SUBSCRIBERS

ODS 버전 16부터 새로 들어간 시스템 관계/테이블이다. 구독자(subscriber) 정보가 저장된다.

컬럼 이름 데이터 타입 길이 설명
RDB$SUBSCRIBER_NAME CHAR 31 구독을 받는 사용자의 이름
RDB$SUBSCRIPTION_NAME CHAR 67 구독의 이름
RDB$DESTINATION CHAR 32 구독자의 목적지(DESTINATION)
RDB$FLAGS SMALLINT 2  
RDB$CHECK_OUT_TRANSACTION_ID INT64 8 구독을 가장 마지막에 체크아웃 한 트랜잭션 ID
RDB$CHECK_OUT_TIMESTAMP TIMESTAMP 8 구독을 가장 마지막에 체크아웃 한 일시
RDB$CHECK_OUT_OLDEST_TRANSACTION_ID INT64 8 가장 마지막 체크아웃 당시 가장 오래 전에 활성화되었던 트랜잭션
RDB$CHECK_OUT_TRANSACTIONS BLOB 한글 가장 마지막 체크아웃 당시 활성화되어 있던 트랜잭션 ID들의 세트
RDB$CHECK_IN_TRANSACTION_ID INT64 8 구독을 가장 마지막에 체크인 한 트랜잭션 ID
RDB$CHECK_IN_TIMESTAMP TIMESTAMP 8 구독을 가장 마지막에 체크인 한 일시
RDB$CHECK_IN_TRANSACTIONS BLOB   해당 구독에 의해 체크인된 트랜잭션 ID들의 세트

 

1.3 RDB$ENCRYPTIONS

RDB$ENCRYPTIONS에는 해당 데이터베이스에 저장된 암호화(encryption)의 특성이 기록된다. RDB$FLAGS가 업데이트되었고, 아래에 있는 RDB$ENCRYPTION_ID 컬럼이 새로 추가되었다.

컬럼 이름 데이터 타입 길이 설명
RDB$FLAGS SMALLINT 2
  • 1 무작위(random) 초기화 벡터(vector)가 블록 체인 암호화 모드를 위해 정의된다.
  • 2 일반(plain) 텍스트를 무작위(random)로 덛붙인다.  
  • 4 삭제되도록 암호화(encryption)가 표시되었다.
  • 32 이 관계(relation)에 구독이 1개 이상 붙어 있다는 표시이다.
RDB$ENCRYPTION_ID SMALLINT 2 해당 암호화 키(Encryption Key)를 위한 고유한 식별자 (unique identifier)

1.4 RDB$FIELDS

RDB$FIELDS에는 해당 컬럼(column)의 특성이 기록된다. 각 도메인(domain) 또는 컬럼(column)은 RDB$FIELDS 테이블 안에 상응하는 행(row)을 가지고 있다. 아래에 있는 RDB$SUBSCRIBE_FLAG 컬럼이 새로 추가되었다.

컬럼 이름 데이터 타입 길이 설명
RDB$SUBSCRIBE_FLAG SMALLINT 2 해당 필드에 구독이 1개 이상 붙어 있다는 표시이다.

1.5 RDB$TRIGGERS

트리거를 정의한다. 아래에 있는 RDB$PRIVILEGE 컬럼이 추가되었고 여기에 들어갈 구독 값도 새로 추가되었다.

컬럼 이름 데이터 타입 길이 설명
RDB$PRIVILEGE CHAR 6

RDB$USER 컬럼 안에 나열된 사용자들에게 부여된 권한을 식별한다. 이 필드 안에 들어갈 수 있는 문자와 해당 의미는 아래와 같다. 

  • ALL (A)
  • SELECT (S)
  • DELETE (D)
  • INSERT (I)
  • UPDATE (U)
  • REFERENCE (R)
  • MEMBER OF (역할들) (M)
  • DECRYPT (T)
  • ENCRYPT (E)
  • SUBSCRIBE (B)

기존 메타데이터 관계에도 변화가 있다.

1.6 RDB$RELATIONS

RDB$RELATIONS는 테이블(table)과 뷰(view)의 특성 몇가지를 정의한다. 아래에 있는 RDB$FLAGS 컬럼이 업데이트 되었다.

컬럼 이름 데이터 타입 길이 설명
RDB$FLAGS SMALLINT 2 1 = SQL이 정의된 테이블 (SQL-defined table).
2 = 글로벌 임시 테이블 (Global temporary table).
4 = <다음에 사용할 수 있도록 남겨둠>.
8 = 커밋(commit) 시점에 임시 행(row)들을 삭제
16 = 커밋(commit) 시점에 임시 행(row)들을 보존; 이 행들은 데이터베이스 분리(detach) 시점에 삭제된다.
32 = 이 관계(relation)에 구독이 1개 이상 붙어 있다는 표시이다.

1.7 RDB$RELATION_FIELDS

데이터베이스에 있는 테이블들을 위해, RDB$RELATION_FIELDS는 
아래에 있는 컬럼 4개 즉 RDB$FLAGS, RDB$FIELD_NAME, RDB$RELATION_NAME, RDB$FIELD_SOURCE가 새로 추가되었다. 

컬럼 이름 데이터 타입 길이 설명
RDB$FIELD_NAME CHAR 67 사용자가 정의한 컬럼 이름
RDB$RELATION_NAME CHAR 67 사용자가 정의한 테이블 이름
RDB$FIELD_SOURCE CHAR 67 RDB$FIELDS.RDB$FIELD_NAME과 짝이 맞는 내부용 컬럼 이름
RDB$FLAGS SMALLINT 2 1 =  이 필드(field)에 구독이 1개 이상 붙어 있다는 표시이다.

1.8 RDB$USER_PRIVILEGES

RDB$USER_PRIVILEGES는 SQL GRANT 진술을 통해 사용자에게 부여된 특권(privilege)에 대한 추적을 유지한다. 아래에 있는 RDB$USER 컬럼과 RDB$GRANTOR 컬럼의 크기가 31에서 67로 업데이트되었다.

컬럼 이름 데이터 타입 길이 설명
RDB$USER CHAR 67 RDB$PRIVILEGE 컬럼 안에 등재된 특권(privilege)이 누구에게 부여(grant)되었는지 그 사용자의 이름이 기록된다.
RDB$GRANTOR CHAR 67 특권(privilege)을 부여(grant)한 사용자의 이름
RDB$PRIVILEGE CHAR 6 Subscribe (B)

2 다음 단계 (Advance To)

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.