오라클 관리
( Control File, Redo Log File, Undo, Redo )
1. Control File
A. Control File 란?
Database의 구조변경이 있거나 변경사항이 있을 때 자동으로 업데이트 되며 모든 데이터파일과 로그파일의 정보를 보유했다. DB의 mount, open에 필수적인 파일이며 오라클이 사용하며 DBA도 변경할 수 없다. Database의 구조를 포함하는 바이너리 파일로 복구시 필요한 동기화(Synchronization) 정보를 저장한다.
☞ Control File과 Data File의 SCN[1] 값을 비교하여 다르면 복구함
☞ 차이나는 SCN만큼을 Control File의 Log File Records 부분을 참고하여 Redo Log와 Archive Log에서 가져옴.
B. 포함되는 내용
i. 데이터베이스의 이름, 생성시간, 식별자와 위치
ii. 온라인 리두로그 파일의 위치
iii. 현재 로그 시퀀스 번호
iv. 테이블스페이스의 이름
v. 체크포인트 정보
vi. 현재까지의 로그 기록
vii. 백업정보
C. 관련 Query
i. Control File 확인
SQL 1
select * from v$controlfile;
SQL 2
select value from v$parameter where name=’control_files’;
SQL 3
show parameter control_files;
ii. Control File 지정 (다중화)
alter system set control_files =
’C:\orcle\Administrator\oradata\control01.ctl’,
‘C:\oracle\Administrator\oradata\control02.ctl’
scope = spfile;
iii. Check Point 생성
Alter system checkpoint;
D. Control File 다중화하는 이유
디스크 장애나 사용자 실수로 Control File이 손상되더라도 다시 복구하기 수월하도록 하기 위해서 다중화를 한다.
2. Redo Log File
A. Redo Log File 이란?
DB에서 생긴 모든 변화를 기록하는 파일로 Instance Fail 상황에서 데이터파일에 쓰여지지 않은 Commit된 데이터를 복구하기 위해서 사용된다. SGA[2] 내의 Redo Log Buffer Cache에 저장된 데이터들은 일정 수준[3] 이상 채워지게 되면 LGWR에 의해서 Redo Log File로 저장이된다.
B. Redo Log File의 구성
i. Group과 member의 개념으로 관리된다.
ii. 같은 group의 member의 크기는 모두 동일해야한다.
iii. 같은 group의 member는 서로 다른 디스크에 저장하는 것이 좋다.
C. Redo Log를 활요하는 경우
i. Database가 깨졌을 경우
ii. 데이터를 복구해야 할 일이 생겼을 경우
D. 관련 Query
i. 현재 Database의 로그 확인
select a.group#, a.type, a.member, b.bytes, b.archived, b.status
from v$logfile a, v$log b
where a.group#=b.group#
order by a.group# asc, a.type asc;
ii. Redo Log 그룹 추가
Alter database add logfile group# ‘C:\oracle\Administrator\oradata\redo04.log’ size 50M;
iii. Redo Log 작동 확인
Alter system switch logfile;
iv. Redo Log 그룹 삭제
Alter database drop logfile group#;
3. Undo
A. Undo 란?
Read Consistency와 Transaction Recovery를 위해 존재한다. Rollback과 같은 뜻으로 Oracle 9i 이전에는 Rollback이라 불렸으며, 이후에는 undo 라고 칭한다.
Read Consistency: Transaction이 진행되는 동안 Database의 다른 사용자는 이 Consistent Read에 의해 Commit되지 않은 변경 사항을 볼 수 없다는 것
Transaction Recovery: Transction이 진행되는 동안 instance가 실패한 경우 Database가 다시 열릴 때, Commit되지 않은 사항은 Rollack되어야하므로 Undo Segment정보가 사용된다. (Undo Segment의 변경사항이 Redo Log File에 의해 보호되므로 복구가 가능)
B. Undo Segment의 종류
i. System: System Tablespace에 존재하는 객체에서 사용
ii. Non-System: System Tablespace가 아닌 다른 Tablespace에 존재하는 객체에서 사용
iii. Deferred: Tablespace를 offline immediate 명령으로 offline 시켰거나, Recovery 진행 중 사용
C. Redo vs Undo
i. Redo: 복구의 역할, Re-Do를 통해 데이터 손실을 방지
ii. Undo: 롤백, 읽기 일관성을 위해 Un-Do 작업
iii. Redo와 Undo의 예시
◎ 비정상 종료 Query
Update tstudy set patient_id=patient_id+100 where patient_key=777;
◎ Session 복구 중 redo의 작업
Update tstudy set patient_id=patient_id+100 where patient_key=777;
◎ Session 복구 중 undo의 작업
Update tstudy set patient_id=patient_id-100 where patient_key=777;
[1] SCN: Commit이 발생할 때 Transaction에 부여하는 고유한 번호
[2] SGA : System Global Area: 오라클서버의 메모리 영역으로 Shared Pool(Library cache,Dictionary cache), Database Buffer Cache, Redo Log Buffer, Java Pool, Large Pool로 이뤄져있다.
[3] LGWR 작동하는 경우: 3초 마다, Redo log buffer의 전체 크기의 1/3이 차거나 1M가 넘었을 때, 사용자가 commit/rollback 했을 때, DBWR이 LGWR에 쓰기를 요청 했을 때 작동한다.
'PC · IT · DB > Oracle' 카테고리의 다른 글
[오라클] 정규식 REGEXP_LIKE 이메일주소 유효성 검사 (Validate Email Address) (0) | 2023.08.29 |
---|---|
[오라클] 정규식 REGEXP_LIKE 정의 및 패턴, 매개변수 (REGEXP_LIKE definition and pattern, parameters) (0) | 2023.08.28 |
[오라클] 오라클 쿼리 튜닝 예시 (Oracle Query Tuning Example) (0) | 2023.08.27 |
[오라클] 오라클 실행 계획 Cost &CPU, 플랜 보는법 (Oracle Explain plan Cost & CPU) (0) | 2023.08.24 |
[오라클] ORA-28056 이벤트 로그에 감사 레코드 쓰기를 실패했습니다. (0) | 2023.08.12 |