Kori 8월 18일, 2022에 포스트됨 공유하기 8월 18일, 2022에 포스트됨 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) 1.1 RDB$SUBSCRIPTIONS 1.2 RDB$SUBSCRIBERS 1.3 RDB$ENCRYPTIONS 1.4 RDB$FIELDS 1.5 RDB$TRIGGERS 1.6 RDB$RELATIONS 1.7 RDB$RELATION_FIELDS 1.8 RDB$USER_PRIVILEGES 2 다음 단계 (Advance To) 1 구독/구독자 테이블들 (Subscription/Subscriber Tables) 이 주제는 체이지 뷰스 (Change Views) 기능을 구현하기 위해 새로 추가되고 업데이트된 컬럼들을 다룬다. RDB$SUBSCRIPTIONS와 RDB$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) 애드-혹 구독과 SQL 언어 지원 (Ad-hoc Subscriptions and SQL Language Support) 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.