db운영중에 테이블 스페이스를 begin backup ~ end backup명령으로
hotbackup을 할시 트랜잭션이 발생되면 (해당 테이블스페이스에..)
발생된 트랜잭션 처리는 어떻게 되나요??
제 기억으로는 백업중에 발생한것은 백업되지 않습니다.
BEGIN BACK명령 이전의 이미지만 백업됩니다.
도중에 발생한 트랜잭션은 END BACKUP후에 정상적으로 적용될겁니다.
커밋을 하면 트랜잭션에 scn이 할당되는것을 알고 있을 것입니다.그리고 복구는 트랜잭션단위로 이루어집니다.
데이타베이스가 오픈될 때, 제어파일과 데이타파일의 checkpoint카운터를 비교합니다. 각각의 데이타파일에 대한 checkpoint 카운터는 제어파일에서 가지고 있어서 일단 이 값이 다르다는 것은 새로운 파일(예:restore)로 대치되었다는 것을 의미합니다. 일단은 restore되지 않았았으면 같겠죠.
그 뒤에 제어파일의 SCN과 각 데이타파일의 scn을 비교합니다. 만약 crash나 instance failuer가 발생되지 않았다면 데이타베이스가close될때에 동일한 scn으로 세팅되므로 당연히 같을 것입니다.
여기서 님께서 알고 싶은것은 begin backup시에 트랜잭션이 어떻게 되는것인가 하는것입니다.우선 begin backup시 checkpoint가 발생해서 dirty buffer를 데이타파일에 쓴 후 깨끗한 상태(^^)에서 백업을 시작합니다.그리고 checkpoint카운터는 핫백업중에도 계속 다른 파일과같이 증가합니다. 하지만 checkpoint SCN은 증가되지 않습니다. 따라서핫백업시작할때 모든 제어파일과 데이타파일의 SCN이 100이었고중간에 트랜잭션이 발생하였고 commit을 실행했다면 핫백업모드에 있는파일은 그대로 100일 것이고 다른 파일과 제어파일은 아마도 110이 되었다고 칩시다.나중에 restore할때에는 SCN이 가장 낮은 100이 그 복구 시작점되겠습니다.
LGWR은 여러 트랜잭션에서 발생하는 변경사항인 로그파일을 쓰느라고 정신이 없겠네요.트랜잭션이 많다면 말이죠. 즉, 핫모드 상태에 있는 데이타파일에는 체크포인트가 되지 않고SCN 100인 상태의 스탭샷을 가지고, 변경사항은 로그파일에 쌓입니다. 변경후에는 checkpoint조건에 의해서 변경사항이 데이타파일에기록됩니다.
내일 휴가여서 오늘 피시방에 왔는데, ㅋㅋㅋ 그럼