내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
OS환경 : Oracle Linux 6.8 (64bit)
DB 환경 : Oracle Database 11.2.0.4
방법 : redo log size 를 50MB에서 200MB로 변경하고자 함 + 이중화
리두 로그 추가, redo 추가
Redo Log 파일 사이즈 변경 순서 요약
1. inactive 상태의 리두로그 삭제
2. 신규 리두로그 추가
3. 이중화 리두 추가
--리두로그 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 set pages 1000 col member for a60 select l.group#, member, archived, l.status, (bytes/1024/1024) MB from v$log l, v$logfile f where f.group# = l.group# order by 1 / GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log YES INACTIVE 50 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES INACTIVE 50 3 /oracle/app/oracle/oradata/ORCL11/redo03.log NO CURRENT 50 |
--리두로그 조회구문 저장
1 2 3 | SQL> save log.sql Created file log.sql |
1. 리두로그 상태가 INACTIVE 인 경우
--리두로그 그룹 삭제
1 2 3 | SQL> alter database drop logfile group 1; Database altered. |
--OS 에서 파일 삭제
1 | SQL> !rm /oracle/app/oracle/oradata/ORCL11/redo01.log |
--REDO 사이즈 변경 후 다시 추가
1 2 3 | SQL> alter database add logfile group 1 '/oracle/app/oracle/oradata/ORCL11/redo01.log' size 200m; Database altered. |
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log YES UNUSED 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES INACTIVE 50 3 /oracle/app/oracle/oradata/ORCL11/redo03.log NO CURRENT 50 |
2. 리두로그 상태가 ACTIVE 인 경우
-- ACTIVE 상태에서 INACTIVE 상태가 될때까지 기다린 후 작업
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log YES UNUSED 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES INACTIVE 50 3 /oracle/app/oracle/oradata/ORCL11/redo03.log NO CURRENT 50 |
--리두로그 그룹 삭제
1 2 3 | SQL> alter database drop logfile group 2; Database altered. |
--OS 에서 파일 삭제
1 | SQL> !rm /oracle/app/oracle/oradata/ORCL11/redo02.log |
--REDO 사이즈 변경 후 다시 추가
1 2 3 | SQL> alter database add logfile group 2 '/oracle/app/oracle/oradata/ORCL11/redo02.log' size 200m; Database altered. |
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log YES UNUSED 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log NO CURRENT 50 |
3. 리두로그 상태가 CURRENT 인 경우
-- 로그 스위치 진행
1 2 3 | SQL> alter system switch logfile; System altered. |
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log NO CURRENT 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log YES ACTIVE 50 |
체크 포인트 실행
1 2 3 | SQL> alter system checkpoint; System altered. |
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log NO CURRENT 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log YES INACTIVE 50 |
--INACTIVE 상태로 된것을 확인 후 작업
--리두로그 그룹 삭제
1 2 3 | SQL> alter database drop logfile group 3; Database altered. |
--OS 에서 파일 삭제
1 | SQL> !rm /oracle/app/oracle/oradata/ORCL11/redo03.log |
--REDO 사이즈 변경 후 다시 추가
1 2 3 | SQL> alter database add logfile group 3 '/oracle/app/oracle/oradata/ORCL11/redo03.log' size 200m; Database altered. |
--리두로그 재확인
1 2 3 4 5 6 7 | SQL> @log.sql GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log NO CURRENT 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log YES UNUSED 200 |
--1번 리두부터 이중화를 해보려함
--기존 추가 구문과 다르게 용량을 적지 않아도됨 제일뒤에 group 을 명시해줌
1 2 3 | SQL> alter database add logfile member '/oracle/app/oracle/oradata/ORCL11/redo01_2.log' to group 1; Database altered. |
--리두로그 재확인
1 2 3 4 5 6 7 8 | SQL> @log GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log NO CURRENT 200 1 /oracle/app/oracle/oradata/ORCL11/redo01_2.log NO CURRENT 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log YES UNUSED 200 |
--용량을 적지 않았지만 자동으로 기준 redo size인 200M을 할당함
--2번, 3번 group의 redo log파일도 생성
1 2 3 4 5 6 7 | SQL> alter database add logfile member '/oracle/app/oracle/oradata/ORCL11/redo02_2.log' to group 2; Database altered. SQL> alter database add logfile member '/oracle/app/oracle/oradata/ORCL11/redo03_2.log' to group 3; Database altered. |
--리두로그 재확인
1 2 3 4 5 6 7 8 9 10 11 12 | SQL> @log GROUP# MEMBER ARC STATUS MB ---------- ------------------------------------------------------------ --- ---------------- ---------- 1 /oracle/app/oracle/oradata/ORCL11/redo01.log NO CURRENT 200 1 /oracle/app/oracle/oradata/ORCL11/redo01_2.log NO CURRENT 200 2 /oracle/app/oracle/oradata/ORCL11/redo02_2.log YES UNUSED 200 2 /oracle/app/oracle/oradata/ORCL11/redo02.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03_2.log YES UNUSED 200 3 /oracle/app/oracle/oradata/ORCL11/redo03.log YES UNUSED 200 6 rows selected. |
정삭적으로 redo 그룹이 이중화됨
*LogSwitch(로그 스위치)
모든 트랜잭션을 시간 순서대로 리두 로그 버퍼에 저장. 리두로그버퍼는 매우 작은 원형 큐(circular queue) 의 형태로 구현.
다음 네가지 상황이 발생하는 경우에 LGWR(log writer)는 리두 로그 버퍼의 리두 엔트리를 로그파일에 내려 씀
1. 트랜잭션이 커밋될 때
2. 리두 로그 버퍼가 1/3이상 채워졌을 때
3. 리두 로그 버퍼에서 변경된 레코드의 크기가 1M을 넘기는 경우
4. DBWR(DB Writer)가 dirty block을 데이터 파일에 저장하기 직전
LGWR이 리두 엔트리를 지정하는 리두 그룹의 상태가 current
LGWR가 다른 그룹을 사용하기 위해 이동하는 것을 로그 스위치(log switch)
*CheckPoint(체크포인트) 종류
체크포인트는 동기화를 의미함
"체크포인트 직후의 데이터 파일은 모든 변경내역을 반영했으므로, 체크포인트 전에 생성된 리두는 불필요하다." 는 것을 의미
로그스위치 체크포인트는 각 로그 파일이 꽉 찼을때 발생.
체크포인트 발생 -> dbwr 데이터 블록을 디스크로 기록 -> 기록 완료시점에 데이터파일 헤더 블록의 SCN변경.
ckpt 는 incremental 체크포인트를 위해 컨트롤파일 내 low RBA (또는 SCN, 혹은 둘다) 를 매 3초마다 변경함
*Oracle Database가 체크 포인트를 시작하는 경우
checkpoint process (CKPT)는 체크 포인트를 data file header 및 control file 에 기록함
checkpoint는은 다양한 상황에서 발생함
예를 들어, Oracle Database는 다음 유형의 checkpoint를 사용함
Thread checkpoints(쓰레드 체크포인트)
데이터베이스는 특정 대상 이전의 특정 스레드에서 redo에 의해 수정된 모든 버퍼를 디스크에 기록함
데이터베이스의 모든 인스턴스에서 Thread checkpoints 집합은 database checkpoint임
Thread checkpoints는 다음 상황에서 발생함
1. 데이터베이스 정상 종료시
2. ALTER SYSTEM CHECKPOINT 구문 실행시
3. Online redo log switch 시
4. ALTER DATABASE BEGIN BACKUP 구문 실행시
Tablespace and data file checkpoints(테이블스페이스 및 데이터 파일 체크포인트)
데이터베이스는 특정 대상 이전에 redo에 의해 수정 된 모든 버퍼를 디스크에 기록함
Tablespace checkpoints는 data file checkpoints 집합으로, 테이블스페이스의 data file에 대해 각각 존재함
이러한 checkpoints는 테이블스페이스를 읽기 전용으로 만들거나 오프라인으로 전환하거나, 데이터 파일을 축소하거나, Alter TABLESPACE BEGIN BEGIN BACE Backup을 실행하는 등 다양한 상황에서 발생함
Incremental checkpoints(증분 체크포인트)
Incremental checkpoints는 온라인 리두 로그 스위치에서 많은 수의 블록을 쓰지 않도록 의도 된 일종의 스레드 체크 포인트입니다.
Incremental checkpoints는 부분적으로 Online redo log switch 시 많은 수의 블록을 쓰지 않도록 의도된 유형의 스레드 체크포인트임
DBWn 은 최소한 3초마다 점검하여 수행 할 작업이 있는지 확인함
DBWn 은 더티 버퍼를 쓸 때 검사 점 위치를 진행시켜 CKPT가 검사 점 위치를 제어 파일에 기록하지만 데이터 파일 헤더에는 기록하지 않습니다.
DBWn이 더티 버퍼를 쓸 때 checkpoint position를 첨부하여 CKPT가 checkpoint position를 control file에 기록하지만 data file header에는 기록하지 않게함
(checkpoint position: 인스턴스 복구 시작점)
참조 : https://blog.naver.com/hanajava/220762899503
https://sksstar.tistory.com/104
http://wiki.gurubee.net/pages/viewpage.action?pageId=26745419
https://docs.oracle.com/cd/E11882_01/server.112/e40540/startup.htm#CNCPT89045
https://positivemh.tistory.com/147
'ORACLE > Admin' 카테고리의 다른 글
Buffer Cache Full DB Caching mode changing from FULL CACHING ENABLED to FULL CACHING DISABLED 란? (0) | 2018.11.16 |
---|---|
Oracle 12.2.0.1 Cluster: New Location / Name For Alert Log 새로운 경로 및 새로운 이름 (0) | 2018.11.16 |
failed login attempts 설정 후 실패한 세션 확인 (0) | 2018.10.24 |
rman 으로 아카이브로그 정리하기 (0) | 2018.10.12 |
oracle dba_data_files의 maxsize (2) | 2018.09.07 |