2020. 1. 7. 11:56ㆍSecurity/oracle database
리두 로그 파일
- 데이터의 모든 변경 사항 기록
- 복구 방식 제공
- 그룹으로 구성될 수 있음
- 최소 두 개 이상의 그룹 필요
커런트 : 로그 라이터가 정보를 쓰고 있는 그룹.
미러셋 : 파일 2개에 같은 정보를 입력하는 것. 이러한 파일은 미러링 상태이다.
ALTER SYSTEM CHECKPOINT; //
로그 스위치 : 리두 로그 파일에 더 이상 저장할 공간이 없을 경우 다른 그룹에 옮겨가는 것. 관리자가 임의로 로그 스위치를 일으킬 수 있다. 로그 스위치가 일어날때 체크 포인트도 발생한다. 이렇게 로그 스위치가 발생할때 번호를 하나씩 매기는데 이러한 숫자를 로그 시퀀스 넘버라고 한다. 로그 시퀀스 넘버는 리셋되지 않는다. 만약 불완전 복구를 하면 로그 시퀀스 넘버를 1부터 다시 운영할 수 있지만 대부분 원래 번호를 다시 사용한다.
로그 스위치 및 체크포인트 시행
ALTER SYSTEM SWITCH LOGFILE;
로그 스위치 시행. 로그 스위치가 발생해서 그룹1에서 그룹 2로 넘어가면 그룹 1은 Active 상태이다.
ALTER SYSTEM CHECKPOINT;
Active 상태로 존재하는 것을 방지하기 위해서 체크포인트 명령을 사용하기도 한다.
온라인 리두 로그 그룹 추가
ALTER DATABASE ADD LOGFILE GROUP 3
('$HOME/ORADATA/u01/log3a.rdo',
'$HOME/ORADATA/u02/log3b.rdo')
SIZE 1M;
괄호를 해주지 않으면 첫 번째 파일에는 사이즈가 지정되지 않는다.
온라인 리두 로그 파일 멤버 추가
ALTER DATABASE ADD LOGFILE MEMBER
'$HOME/ORADATA/u04/log1c.rdo' TO GROUP 1,
'$HOME/ORADATA/u04/log2c.rdo' TO GROUP 2,
'$HOME/ORADATA/u04/log3c.rdo' TO GROUP 3;
온라인 리두 로그 그룹 삭제
ALTER DATABASE DROP LOGFILE GROUP 3;
그룹을 삭제하면 컨트롤 파일안에 리두 로그 파일 그룹에 대한 정보는 사라지지만 실제 파일은 남아있어서 직접 삭제해줘야 한다.
- 그룹은 최소 2개 이상 존재 해야 한다.
- current 그룹이나 active 그룹은 삭제할 수 없다.
온라인 리두 로그 파일 멤버 삭제
ALTER DATABASE DROP LOGFILE MEMBER
'$HOME/ORADATA/u04/log3c.rdo';
멤버를 삭제할때는 반드시 경로를 같이 입력해준다. 그룹을 삭제할때와 마찬가지로 실제 파일은 남아있어서 직접 삭제해줘야 한다.
- 멤버는 최소 1개 이상 존재 해야한다.
- 현재 사용하는 그룹인 경우 로그 파일 스위치를 시행한후 삭제 가능
같은 디스크에 미러셋되는 멤버가 같이 있으면 미러셋의 장점을 전혀 활용할 수 없다. 또한 그룹 3은 멤버가 하나밖에 존재하기 때문에 이런식으로 리두로그 파일이 구성되어 있어서는 안된다.
[실습]
리두 로그 파일 확인
SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;
// 현재 로그 그룹과 memer의 운영 상황을 조회하는 명령어
GROUP# : 그룹 번호
MEMBER : 멤버 파일의 경로 및 파일명
BYTES : 멤버 파일의 크기
STATUS : 그룹의 상태
로그 스위치와 체크 포인트
ALTER SYSTEM SWITCH LOGFILE; // 로그 스위치 강제로 발생
ALTER SYSTEM CHECKPOINT; // 체크 포인트 강제로 발생
리두 로그 그룹 추가와 삭제
ALTER DATABASE DROP LOGFILE GROUP 3;
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
!ls /app/ora12c/oradata/DB12/
!rm /app/ora12c/oradata/DB12/redo03.log
// 3번 그룹을 삭제해도 redo03.log 파일은 지워지지 않기 때문에 직접 삭제해준다.
ALTER DATABASE ADD LOGFILE GROUP 4
'/app/ora12c/oradata/DB12/redo04.log' SIZE 50M;
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
// 4번으로 리두로그 그룹을 생성해준후 운영 상황 조회
@switch
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
// unuse였던 redo04.log 파일을 사용하는 것을 확인할 수 있다.
ALTER DATABASE ADD LOGFILE GROUP 5
'/app/ora12c/oradata/DB12/redo05.log' SIZE 50M;
@switch
SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;
// 5번 그룹 생성 후 switch를 해주면 다시 unused였던 redo05.log 파일을 사용하는 것을 확인할 수 있다.
리두 로그 멤버 추가와 삭제
ALTER DATABASE ADD LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo04_2.log' TO GROUP 4,
'/app/ora12c/oradata/DB12/redo05_2.log' TO GROUP 5;
// 4번 5번 파일에 각각 redo로그 파일 추가
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
ALTER DATABASE DROP LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo04.log';
// 새로 생긴 redo04_2.log 파일이 있음에도 삭제가 되지 않는다. 아마도 새로 생겼기때문에 없는것으로 시스템에서 인식하는듯
ALTER DATABASE DROP LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo01.log';
// redo01.log 파일은 단 하나기 때문에 삭제되지 않는다.
ALTER DATABASE DROP LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo04.log';
// 강제로 체크포인트를 발생 시킨후 삭제해보면 삭제가 되는것을 확인할 수 있다.
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
리두 로그 파일 재배치
ALTER DATABASE DROP LOGFILE GROUP 2;
// 그룹 2의 로그 파일 삭제
ALTER DATABASE DROP LOGFILE GROUP 1;
// 그룹 1의 로그 파일 삭제
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
ALTER DATABASE ADD LOGFILE GROUP 1
('/app/ora12c/oradata/disk4/redo01.log',
'/app/ora12c/oradata/disk5/redo01.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE GROUP 2
('/app/ora12c/oradata/disk4/redo02.log',
'/app/ora12c/oradata/disk5/redo02.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE GROUP 3
('/app/ora12c/oradata/disk4/redo03.log',
'/app/ora12c/oradata/disk5/redo03.log') SIZE 50M;
// 그룹 1, 2, 3에 각각 redo로그 파일을 2개씩 생성
SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
FROM V$LOGFILE A, V$LOG B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;
ALTER DATABASE DROP LOGFILE GROUP 4;
ALTER DATABASE DROP LOGFILE GROUP 5;
// 5번 그룹이 현재 current기때문에 삭제가 되지 않는다.
@switch
ALTER DATABASE DROP LOGFILE GROUP 5;
// 로그 스위치를 강제로 발생시킨후 삭제해보면 삭제가 되는것을 확인할 수 있다.
'Security > oracle database' 카테고리의 다른 글
오라클 데이터베이스 관리자 기초- (7)테이블 스페이스 및 데이터 파일 관리(2) (0) | 2020.01.09 |
---|---|
오라클 데이터베이스 관리자 기초- (6)테이블 스페이스 및 데이터 파일 관리 (0) | 2020.01.08 |
오라클 데이터베이스 관리자 기초-(4)컨트롤 파일 유지 관리 (0) | 2020.01.07 |
오라클 관리자 실습과정 (0) | 2020.01.06 |
오라클 데이터베이스 관리자 기초-(3)데이터 딕셔너리 및 동적 성능 뷰 사용 (0) | 2020.01.02 |