control_file
DBwn가 Data file에 데이터를 저장하고 LGwr이 Redo log file을 저장한다. 이 파일들을 통제 해주는 것이 control file이다. control file은 작은 이진파일이고 물리적 데이터베이스의 현재 상태 정의, 동기화 정보를 저장하고 데이터베이스의 무결성을 유지관리한다. 그래서 control file을 이동하거나 복사하게 되면 동기화가 깨져 DB시스템을 사용할수없게 된다. control file은 mount상태에서 open한다.
control file에는 데이터 베이스 이름 및 식별자, 데이터베이스 생성 시간, 테이블 스페이스 이름, 데이터 파일 및 리두 로그 파일의 이름과 위치, 현재 리두로그 파일의 시퀀스 번호, 체크포인트 정보, 실행 취소 세그먼트(undosegment)의 시작 및 종료, 리두로그 아카이브 정보, 백업정보를 저장한다.
가용성을 위해 쓰는 방법은 제어 파일 다중화를 이용한다. 다중화는 mirroring, multiplexint, layed level1이라고도 한다. 제어파일다중화는 다른 H/W에 저장한다. datafile controlfile redologfile 은 따로 저장해서 가용성을 유지해야한다. 이때 사용하는 파라미터는 CONTROL_FILES이고 정적 파라미터이다. 또한 미러링 한 파일의 내용은 동일해야 open이 가능하다.
SPFILE사용시 제어 파일 다중화는 무결성이 훼손되지 않게 하는 것이 포인트다. SPFILE에서 파라미터를 관리하기 때문에 파라미터만 변경하면 무결성이 높아진다. 다중화 순서는 먼저 SPFILE을 변경하고 데이터베이스를 종료 후에 추가제어파일을 생성한다. 그 후 파라미터 변경사항을 적용시키기 위해 다시 시작한다. 만약 추가제어파일을 먼저 생성하게 되면 동기화 정보가 깨지기 때문에 반드시 종료 후에 추가 제어파일을 생성해야 한다.
제어파일 정보는 V$CONTROLFILE, V$PARAMETER, V$CONTROLFILE_RECORD_SECTION, SHOW PARAMETER CONTROL_FILES가 있다.
SHOW PARAMETER control_files // 컨트롤파일 파라미터를 확인한다.
SELECT value FROM V$SPPARAMETER
WHERE name = 'control_files'; // 파라미터파일 안의 값을 확인한다.
DESC v$controlfile; // 컨트롤파일 파라미터를 확인한다.
SELECT name FROM V$CONTROLFILE; // 컨트롤파일 파라미터를 확인한다.
!ls /app/ora12c/oradata/DB12/*ctl // $ORACLE_HOME안에 컨트롤파일을 확인한다.
!env | grep ORACLE // 오라클과 관련된 환경설정 내용을 확인한다.
!ls $ORACLE_HOME/dba
!mount | grep dev/sd // 마운트 된 디스크를 확인한다.
!ls $ORACLE_BASE/oradata
SELECT name, value FROM V$PARAMETER
WHERE name LIKE 'control_files'; // 파라미터파일 안의 값을 확인한다.
ALTER SYSTEM SET control_files =
'/app/ora12c/oradata/disk4/control.ctl',
'/app/ora12c/oradata/disk5/control.ctl' SCOPE = spfile; // sp파일안의 파라미터를 변경한다.
SHUTDOWN IMMEDIATE; // 오라클을 종료한다.
!mv /app/ora12c/oradata/DB12/control01.ctl /app/ora12c/oradata/disk4/control.ctl
// 컨트롤 파일명을 변경하여 미러링을 위해 다른 디스크에 저장한다.
!mv /app/ora12c/oradata/DB12/control02.ctl /app/ora12c/oradata/disk5/control.ctl
!ls /app/ora12c/oradata/disk4 // OS명령어를 사용하여 디스크 안에 파일을 확인한다.
!ls /app/ora12c/oradata/disk5
STARTUP; // 오라클을 시작한다.
SELECT name, value FROM V$PARAMETER
WHERE name LIKE 'control_files'; //
VM에서 하드드라이브를 추가하면 mount로 확인할 수 없으니 'df -Th'로 연결된 디스크를 확인후 'ls -al /dev/sd* '를 사용해서 연결되지 않은 디스크를 확인하여 파티션을 생성하고 mount한다.
==========================================================================
리두 로그 파일은 데이터의 모든 변경 사항 기록, 복구 방식제공, 그룹으로 구성될 수 있다. 또한 최소 두개 이상의 그룹이 필요하다. 그룹이 필요한 이유는 리두로그데이터의 저장때문이다. 리두로그 버퍼에서 시간순서에 의해 리두로그파일에 데이터가 저장이 된다. 리두로그파일에가 다 차게되면 아카이브된 파일로 데이터가 저장되는데 저장하는 도중에 리두로그버퍼의 데이터가 저장될수없기때문에 데이터를 저장할 다른 공간이 필요한것이다.
파일을 복구하는 것에서 실제적 복구는 데이터 파일을 복구하는 것이다. 이 작업은 리두로그버퍼 데이터를 이용해서 복구하게 된다. 데이터 파일, 컨트롤파일, 리두로그파일 전부 다른 위치에 저장, 미러링도 동시 수행
리두 로그 파일의 구조는 아래와 같다.
리두로그파일구조에서 특이한 점은 미리 사용할 공간을 확보하는 것으로 그룹의 크기는 정하고, 그룹안에 멤버에는 크기는 따로 정하지 않는다. 멤버에 저장되는 값은 리두로그엔트리값이고 멤버는 컨트롤파일과 같이 그룹별로 미러파일이 존재해야한다. 리두로그는 리두로그그룹의 크기가 모두 차게되면 다음 그룹으로 넘어가는데 이 방향은 오라클시스템이 결정하고 사람은 관여할수없다. 로그 스위치 명령을 실행하면 로그그룹의 크기가 모두 차지 않아도 다음 그룹으로 넘어간다. 리두로그상태는 current, active, inactive 3가지가 있다. current는 현재 로그정보를 기록하고 있는 리두로그파일이고, active는 사용하고 있는 리두로그파일이다, inactive는 사용했던 리두로그파일이다.
리두로그파일은 순환 방식으로 작동하며, 리두 로그 파일이 가득 차면 LGWR은 다음 로그 그룹으로 이동한다. 이때 로그스위치를 호출하고, 체크포인트 작업이 발생하며, 제어파일에 정보를 기록한다.
로그 시퀀스 번호 Log Sequence Number개요
LSN은 RESTORE 순서 중에 내부적으로 사용되어 데이터가 복원될 지정 시간을 추적합니다. 백업을 복구할 때 데이터는 백업이 이루어진 지정 시간에 해당하는 LSN으로 복원됩니다. 차등 및 로그 백업의 경우 데이터베이스는 보다 나중의 것으로 복원되며 이는 더 높은 LSN에 해당합니다. LSN에 대한 자세한 내용은 SQL Server 트랜잭션 로그 아키텍처 및 관리 가이드를 참조하세요 또한 로그 시퀀스 번호는 초기화 되지 않는다.
DB->DB 데이터 옮기는 것을 마이그레이션이라고 한다.
만약 복구를 수행했는데 불완전 복구가 된다면 LSN은 1로 초기화 된다. 하지만 실무에서는 LSN을 다시 원래상태로 복원하는 것이 매우 중요하다.
로urrent나 active상태의 리두로그파일은 변경이 불가능하며, inactive상태의 리두로그파일만 변경이 가능하다.
체크포인트는 unused를inactive로 변경한다.
리두로그파일의 그룹은 무한대로 생성할수없고 오라클 설치시 정해진다.
다수의 그룹 생성시 괄호를 하지 않으면 한 그룹에만 크기를 지정한다. 여러그룹에 크기를 지정하고 싶다면 괄호로 묶어주고 크기를 지정해야 한다.
리두로그 그룹 및 멤버 삭제는 리두로그를 사용하는 파라미터가 적힌 컨트롤 파일 정보에서만 삭제되고 실제 파일은 os상에 남아있어 직접 삭제해야 한다.
리두로그파일제거는 엑티브 전단계에서만 제거된다.
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; // 리두로그파일의 그룹정보를 출력한다.
ARCHIVE LOG LIST // 아카이브된 로크파일의 정보를 출력한다.
ALTER DATABASE DROP LOGFILE GROUP #; // 리두로그파일의 그룹을 제거한다.
ALTER SYSTEM CHECKPOINT; // 체크포인트를 실행한다.
!vi switch.sql
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT; // 리두로그 스위치와 체크포인트를 실행하는 문장을 생성한다.
!ls /app/ora12c/oradata/DB12/ // OS명령어를 이용해 지정된 디렉토리의 파일을 본다.
!rm /ap/ora12c/oradata/DB12/redo#.log // 리두로그파일을 삭제한다.
ALTER DATABASE ADD LOGFILE GROUP #
'/app/ora12c/oradata/DB12/redo#.log' SIZE = 50M; // 리두로그파일과 멤버가 속할 그룹의 크기를 정한다.
@SWITCH; // 관리자계정이 Oracle에 접속 한 디렉토리에 있는 sql파일을 실행한다.
ALTER DATABASE ADD LOGFILE GROUP #
('/app/ora12c/oradata/DB12/redo#.log',
'/app/ora12c/oradata/DB12/redo#.log') SIZE = 50M; // 리두로그파일 2개와 멤버들이 속할 그룹의 크기를 정한다.
ALTER DATABASE ADD LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo#.log' TO GROUP#,
'/app/ora12c/oradata/DB12/redo#.log' TO GROUP#; // 리두로그파일과 멤버들이 각각 속할 그룹을 정한다.
ALTER DATABASE DROP LOGFILE MEMBER
'/app/ora12c/oradata/DB12/redo#.log'; // 멤버를 제거한다.
'교육 > Oracle' 카테고리의 다른 글
Day 37(Oracle) (0) | 2020.01.09 |
---|---|
Day 36(Oracle) (0) | 2020.01.08 |
Day 34 (Oracle DB) (0) | 2020.01.06 |
Day 33 (Oracle) (0) | 2020.01.03 |
Day 32 (Oracle) (0) | 2020.01.02 |