SCN(System Change Number)
SCN(System Change Number)이란 데이터베이스의 특정 시점에 커밋된 버전을 나타내는 고유한 식별자이자 데이터베이스 구조이다. SCN은 트랜잭션 추적, 데이터 일관성 유지, 복제와 복구, 동시성을 제어하는 데 중요한 역할을 한다.
SCN은 데이터베이스가 시작된 시점부터 시간이 경과하면서 생성된다. 또한 데이터베이스에 발생하는 트랜잭션, 데이터 변경, 로그 등 변경 작업이 발생할 때 증가한다.
SCN의 종류
SCN의 종류 중 하나로는 Commit SCN이 있다. 만약 사용자가 Transaction을 Commit 하면 그 Transaction은 해당 Transaction을 구분할 수 있는 SCN을 부여받게 된다. 데이터베이스에 매 Commit이 수행될 때마다 새로운 SCN이 생성되며, SCN은 증가되기만 하고 감소되지 않는다.
Transaction이 Commit할 때마다 SCN은 보통 1씩 증가하는데, 이렇게 Commit 할 때 부여되는 SCN을 Commit SCN이라고 한다. 이 Commit SCN은 동시성 제어(Concurrency Control) 또는 Recovery 할 때 사용된다.
만약 트랜잭션이 롤백되면 변경된 내용이 취소되고 해당 트랜잭션의 시작 SCN으로 되돌아간다.
SCN의 종류에는 Commit SCN 외에도 현재 데이터베이스의 상태를 나타내는 Curren SCN, 로그 파일 내에 로그 레코드를 식별할 때 사용하는 Log Sequence Number, Oracle Golden Gate에서 사용하는 Change Data Capture 등이 있다.
SCN 확인하기
SCN을 확인하는 방법은 다음과 같이 가능하다.
#현재 데이터베이스의 SCN 조회
SELECT CURRENT_SCN FROM V$DATABASE;
#과거 SCN 조회
SELECT SCN, FIRST_TIME FROM V$LOG_HISTORY ORDER BY 2 DESC;
#Flashback 쿼리 사용
SELECT SCN_TO_TIMESTAMP(SCN_VALUE) AS TIMESTAMP FROM V$DATABASE;
SCN과 복구와 복제
SCN은 CKPT 프로세스에 의해 모든 데이터 파일의 헤드 영역과 컨트롤 파일에 저장된다. 이 작업을 통해 데이터베이스에 문제가 발생했을 때 특정 시간의 특정 SCN 시점으로 복구할 수 있다.
CKPT 프로세스는 백그라운드 프로세스 중 하나로, 주기적으로 데이터베이스의 변경 내용을 디스크에 기록하는 작업을 수행한다. 체크포인트 작업은 주로 데이터베이스의 Redo 로그 파일에 기록된 변경 내용을 디스크에 반영하는 과정을 포함한다.
또한 SCN은 데이터베이스를 기동할 때 무결성 검증을 위해 사용된다. 기동 단계 중 마지막 OPEN 단계에서 데이터베이스는 오라클 서버의 모든 데이터 파일과 컨트롤 파일이 같은 시점인지 확인하기 위해 SCN을 검증하는데, 만약 데이터 파일과 컨트롤 파일의 SCN이 다르다면 OPEN 할 수가 없다.
SCN은 데이터베이스를 복제하는 작업에서도 사용된다. 원본 데이터베이스에서 SCN은 변경 내역을 기록한다. 데이터베이스 복제는 일정 주기로 수행하는데, 이 SCN을 통해 동기화 지점을 구별한다. 또한 원본 데이터베이스의 SCN과 복제 데이터베이스의 SCN을 비교하는 과정에서 복제 지연 여부를 확인할 수 있다.
출처 : 오라클 서버의 구조와 백업/복구원리