본문 바로가기
Oracle/Oracle DBMS

Oracle Supplemental Logging

by 의미와의미 2017. 11. 7.
반응형

Supplemental Logging 이란


Oracle에서는 Supplemental Logging 사용시 데이터가 변경되면(DML) 


해당 변경된 칼럼에 에 대한 전체 레코드에 대한 정보를 Redo Log File에 기록하게 되며 Redo log file ARCHIVELOG File로 기록합니다.


Supplemental Logging  사용하지 않는다면  변경 정보 칼럼의 정보 하나만 Redo log file ARCHIVELOG File로 기록됩니다.


Supplemental Logging을 통해 Redo Log File에 전체 레코드의 정보가 있다면 활용 가능성이 높아집니다. (REDO LOG 사이즈 크기가 적절하지 않으면 부하의 원인이 될수있음) 


CDC 제품에서 복제의 원본이 되는 "소스 DB"에서 DML 등이 수행 될때  해당 DML 등의 실제로 변경 발생된 컬럼뿐만 아니라

 

나머지 컬럼 들의 정보를 함께 REDO LOG FILE , ARCHIVELOG FILE 에 남기기 위해서 Supplemental Logging이 활성화 되어야 합니다.


Oracle 9.0.1 버전까지 supplemental logging 에서는  기본값 이였으나


Oracle 9.2 버전부터는 no supplemental logging으로 변경 되었습니다. 


필요할 경우 enable 변경해야  Log Miner를 사용 할수 있게 되었습니다.



2. Supplemntal Logging 설정

 

- Supplemnatal Logging은 크게  databae level 과 table level  나눠진다.


#####################################

#Database-Level Supplemental Logging#

#####################################


#minimal logging


- Log miner가 SQL재생성하는데 필요한 최소한의 정보만 기록하며 REDO 발생량이 적다

#생성

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;


#조회 

SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 





#Identification key logging 


#생성


ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL | PRIMARY KEY | UNIQUE | FOREIGN KEY) COLUMNS;



#실습


SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 


S_MIN    S_P S_U S_F S_A

-------- --- --- --- ---

YES      NO  NO  NO  NO 



SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 


S_MIN    S_P S_U S_F S_A

-------- --- --- --- ---

IMPLICIT NO  NO  NO  YES



SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 


S_MIN    S_P S_U S_F S_A

-------- --- --- --- ---

IMPLICIT YES NO  NO  NO 

 

 

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 

 

S_MIN    S_P S_U S_F S_A

-------- --- --- --- ---

IMPLICIT NO  YES NO  NO  

 

 

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY , UNIQUE , FOREIGN KEY) COLUMNS;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI, SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ; 

  

S_MIN    S_P S_U S_F S_A

-------- --- --- --- ---

IMPLICIT YES YES YES NO 

 

 

#삭제


ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;




################################## 

#Table-Level Supplemental Logging#

################################## 


TABLE 전체 Column 지정과 특정 Column들만 지정할수 있다




#전체 Column 지정

- Table 전체(모든 Column)를 지정하면, 해당 table 의 모든 column 에 Supplemental Logging 이 활성화 됩니다.

- 해당 Table 의 column 이 추가되면, 자동으로 추가된 column 에 Supplemental Logging 이 활성화 됩니다.


ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;


#생성

ALTER TABLE [Table Owner].[TABLE Name] ADD SUPPLEMENTAL LOG DATA (ALL|PRIMARY KEY|UNIQUE) COLUMNS;


#실습 

SQL> ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS ;


#조회

SQL> SELECT * FROM DBA_LOG_GROUPS WHERE TABLE_NAME ='EMPLOYEES';


OWNER   LOG_GROUP_NAME    TABLE_NAME    LOG_GROUP_TYPE       ALWAYS     GENERATED 

------- ---------------   ------------  -------------------  ------  --------------

HR      SYS_C0011453     EMPLOYEES     ALL COLUMN LOGGING ALWAYS GENERATED NAME


#삭제

SQL> ALTER TABLE HR.EMPLOYEES DROP SUPPLEMENTAL LOG DATA (ALL) COLUMNS ;




#특정 Column 지정

- Table 의 특정 Column 들만 지정하면, 해당 table 의 지정된 column 들에 Supplemental Logging 이 활성화 됩니다.

- 해당 table 의 column 이 추가되면, 추가된 column 들은 자동으로 Supplemental Logging 되지 않습니다.

- Supplemental logging을 할 때 변경이 일어나는 칼럼 외에 추가로 저장할 다른 칼럼들을 지정하는 기능이 Supplemental log group 라는 기능입니다.


#생성

ALTER TABLE [Table Owner].[Table Name] ADD SUPPLEMENTAL LOG GROUP [LOG Group Name] (column1, column2, ...); 


#실습

SQL> ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP GT_1 (EMPLOYEE_ID , EMAIL) ; 


#조회

SQL> SELECT LOG_GROUP_NAME, TABLE_NAME, COLUMN_NAME, POSITION FROM DBA_LOG_GROUP_COLUMNS WHERE TABLE_NAME='EMPLOYEES';


LOG_GROUP_NAME  TABLE_NAME COLUMN_NAME  POSITION

--------------  --------- ------------- ---

GT_1 EMPLOYEES EMPLOYEE_ID   1

GT_1 EMPLOYEES EMAIL         2


#삭제

SQL> ALTER TABLE HR.EMPLOYEES DROP SUPPLEMENTAL LOG GROUP GT_1;

반응형

댓글