TAS 디스크 스페이스 관리
본 장에서는 TAS 디스크 스페이스를 관리하는 방법에 대해 설명합니다.
디스크 스페이스 속성
디스크 스페이스 속성은 디스크 스페이스 생성 또는 수정할 때 설정할 수 있습니다.
디스크 스페이스를 생성하는 경우 AU_SIZE 속성을 설정합니다. 할당 단위와 익스텐트에 대한 자세한 정보는 “ TAS 소개”의 "할당 단위"와 "익스텐트(Extent)"를 참고합니다. 디스크 스페이스에 AU_SIZE를 설정하는 방법은 [예 1]를 참고합니다.
디스크 스페이스 생성
본 절에서는 디스크 스페이스 생성 방법을 설명합니다.
디스크 스페이스에서 사용할 수 있는 디바이스는 다음과 같습니다.
Character Device 물리 디스크 디바이스를 Charcater Device로 만들어 사용할 수 있습니다.
Block Device Linux OS에서는 물리 디스크 디바이스를 Block Device로 만들어 사용할 수 있습니다. Linux 외의 OS에서는 Block device를 사용하는 경우 Direct I/O가 보장되지 않으므로 지원하지 않습니다.
CREATE DISKSPACE SQL 문 사용
CREATE DISKSPACE SQL 문을 사용하여 디스크 스페이스를 생성할 수 있습니다.
디스크 스페이스를 생성할 때 다음의 사항들을 고려해야 합니다.
중복 레벨 TAS의 미러링 기능을 사용하기 위해 디스크 중복 레벨을 설정합니다.
실패 그룹 정의 실패 그룹을 설정할 수 있습니다. 실패 그룹을 나누게 되면, 하나의 실패 그룹에 문제가 발생해도 서비스를 유지할 수 있습니다. 실패 그룹을 설정하게 되면 미러링을 사용할 때 복제본을 서로 다른 실패 그룹에 만듭니다. 실패 그룹을 설정하지 않으면 각 디스크가 실패 그룹이 됩니다.
디스크 스페이스 속성 할당 단위 크기 등의 속성을 설정할 수 있습니다.
TAS는 각 디스크 장치의 크기를 자동으로 인식합니다. 만약 디스크 장치의 크기를 자동으로 인식하지 못했거나 디스크 장치의 사용 공간을 제한하려면, 디스크 스페이스를 생성할 때 디스크에 SIZE 절을 사용할 수 있습니다. 또한 NAME 절을 사용하여 디스크에 이름을 부여할 수 있습니다.
...
'/devs/disk101' NAME disk101 SIZE 1TB,
...
디스크 크기와 이름 정보는 V$AS_DISK 뷰로 확인할 수 있습니다.
예제
다음은 중복 레벨이 NORMAL이고 실패 그룹 fg1, fg2가 있는 디스크 스페이스 ds0을 만듭니다. 이때AS_DISKSTRING 초기화 파라미터를 "/devs/disk*"로 설정하여 발견한 디스크 장치들을 TAS 디스크로 사용합니다.
[예 1] 디스크 스페이스 ds0 생성
CREATE DISKSPACE ds0 NORMAL REDUNDANCY
FAILGROUP fg1 DISK
'/devs/disk101' NAME disk101,
'/devs/disk102' NAME disk102,
'/devs/disk103' NAME disk103,
'/devs/disk104' NAME disk104
FAILGROUP fg2 DISK
'/devs/disk201' NAME disk201,
'/devs/disk202' NAME disk202,
'/devs/disk203' NAME disk203,
'/devs/disk204' NAME disk204
ATTRIBUTE 'AU_SIZE'='4M';
위 예제에서는 NAME 절을 사용해서 각 디스크에 이름을 부여했습니다. 직접 디스크 이름을 부여하지 않으면 "{디스크 스페이스 이름}_####" 형태의 기본 이름을 부여하며, '####'은 디스크 스페이스 내에서의 디스크 번호입니다.
AU_SIZE 속성으로는 할당 단위의 크기를 4MB로 설정했습니다. 디스크 스페이스를 생성할 때 설정한 할당 단위 크기는 V$AS_DISKSPACE 뷰로 확인할 수 있습니다.
디스크 스페이스 수정
ALTER DISKSPACE 문으로 디스크 스페이스 설정을 수정할 수 있습니다. 디스크 스페이스 서비스를 제공하 면서 디스크를 디스크 스페이스에 추가하거나 디스크 스페이스로부터 제거할 수 있으며, 디스크 스페이스 리밸런싱을 수행할 수 있습니다.
디스크 추가/제거를 수행해도 바로 디스크 스페이스에 반영하는 것은 아닙니다. 이는 기존 디스크들의 데이터를 추가할 디스크에 재배치해야 모든 디스크를 공평하게 사용할 수 있으며, 제거할 디스크의 데이터를 남은 디스크들에 재배치해야 데이터 손실을 방지할 수 있기 때문입니다.
이와 같이 디스크 스페이스에 있는 데이터를 디스크에 공평하게 재배치하는 과정을 리밸런싱이라고 합니다. 디스크 추가/제거는 디스크 스페이스 리밸런싱을 통해 디스크 스페이스에 반영됩니다.
디스크 추가
ALTER DISKSPACE 문의 ADD 절을 사용해서 디스크를 디스크 스페이스에 추가할 수 있습니다. ADD 절에는CREATE DISKSPACE 문에서 사용했던 실패 그룹과 디스크 관련 절을 그대로 사용합니다.
다음 예제는 디스크 스페이스 ds0에 디스크를 추가하는 SQL 문을 보여줍니다. 이 예제에서는 새로운 디스크 장치 '/devs/disk105'와 '/devs/disk106'을 디스크 스페이스 ds0의 실패 그룹 fg1에 추가합니다. 또한 RE BALANCE 절로 디스크 추가와 동시에 디스크 스페이스 리밸런싱을 수행하도록 합니다.
[예 2] 디스크 스페이스 ds0에 디스크 추가
ALTER DISKSPACE ds0
ADD FAILGROUP fg1 DISK
'/devs/disk105' NAME disk105,
'/devs/disk106' NAME disk106
REBALANCE;
디스크 제거
ALTER DISKSPACE 문의 DROP 절을 사용해서 디스크를 디스크 스페이스에서 제거할 수 있습니다.
다음은 디스크 스페이스 ds0에서 디스크를 제거하는 SQL 문입니다. 이 예제에서는 디스크 disk105와 disk106을 디스크 스페이스 ds0에서 제거합니다.
[예 3.3] 디스크 스페이스 ds0에서 디스크 제거
ALTER DISKSPACE ds0 DROP DISK disk105;
ALTER DISKSPACE ds0 DROP DISK disk106;
디스크 고장 등으로 인해 디스크 상태가 FAIL일 때는 FORCE 옵션을 이용해 디스크를 제거할 수 있습니다. 다음 예제는 FAIL 상태인 디스크를 제거하는 SQL 문입니다.
[예 4] 디스크 스페이스 ds0에서 FAIL 상태인 디스크를 제거
ALTER DISKSPACE ds0 DROP DISK disk105 FORCE;
디스크 스페이스에서 특정 실패 그룹에 속한 모든 디스크들을 제거할 수 있습니다. 다음 예제는 디스크 스페이스 ds0의 실패 그룹 fg1에 속한 모든 디스크들을 제거하는 SQL 문입니다.
[예 5] 디스크 스페이스 ds0에서 실패 그룹 fg1의 디스크들 제거
ALTER DISKSPACE ds0 DROP DISKS IN FAILGROUP fg1;
디스크 추가/제거를 한 문장의 SQL로 수행할 수 있습니다.
다음 예제는 디스크 스페이스 ds0에서 디스크 disk204를 제거하고, 디스크 장치 '/devs/disk205'를 디스크 스페이스 ds0의 실패 그룹 fg2에 추가합니다.
[예 6] 디스크 스페이스 ds0에 디스크 추가/제거
ALTER DISKSPACE ds0
DROP DISK disk204
ADD FAILGROUP fg2 DISK '/devs/disk205' NAME disk205;
디스크 크기 변경
ALTER DISKSPACE 문의 RESIZE 절을 통해서 디스크의 크기를 변경할 수 있습니다.
변경할 크기는 실제 디스크의 물리적 크기보다 작거나 같아야 하며, 아직 기존의 크기보다 더 작은 크기로의 변경은 지원하고 있지 않으므로 기존의 디스크 크기보다는 큰 값을 입력해야만 합니다.
RESIZE 명령을 수행하면 디스크의 상태는 PREPARE_RESIZE 상태로 변경되며, 이 상태에서는 아직 디스크의 크기가 변경 이전의 크기로 유지됩니다. 디스크의 크기를 완전히 변경하기 위해서는 REBALANCE 명령을 수행해야하며, 크기 변경을 취소하고 디스크의 상태를 원래대로 되돌리려면 UNPREPARE 명령을 수행해 준비상태를 취소해야 합니다.
다음 예제는 디스크 스페이스 ds0에서 disk105의 크기를 512G로 변경하는 명령어입니다.
[예 7] 디스크 스페이스 ds0에서 디스크의 크기를 512G로 변경
ALTER DISKSPACE ds0 RESIZE DISK disk105 size 512G;
하나의 디스크 뿐만 아니라 여러 디스크의 크기를 한 번에 변경하는 것도 가능합니다.
다음 예제는 디스크 스페이스 ds0에서 실패 그룹 fg1에 포함돼 있는 모든 디스크의 크기를 512G로 변경 하는 명령어립니다.
[예 8] 디스크 스페이스 ds0에서 실패 그룹 fg1에 속한 모든 디스크의 크기를 512G로 변경
ALTER DISKSPACE ds0 RESIZE DISKS IN FAILGROUP fg1 size 512G;
다음 예제는 디스크 스페이스 ds0에서 모든 디스크의 크기를 512G로 변경하는 명령어입니다.
[예 9] 디스크 스페이스 ds0에서 모든 디스크의 크기를 512G로 변경
ALTER DISKSPACE ds0 RESIZE ALL size 512G;
디스크 추가/제거 준비상태 취소
ALTER DISKSPACE 문의 UNPREPARE 절을 통해서 디스크 추가/제거 준비상태를 취소할 수 있습니다.
PREPARE_DROP과 PREPARE_RESIZE 상태의 디스크는 ONLINE으로, PREPARE_FORCE 상태의 디스크는 FAIL로, PREPARE_ADD 상태의 디스크는 NOT_USED로 되돌려 줍니다.
PREPARE 상태는 REBAL ANCE 명령을 내리기 전 대기 상태를 의미하므로 REBALANCE 명령이 내려진 이후에는 UNPREPARE 명령어로 복구하는 것이 불가능합니다.
다음 예제는 디스크 스페이스 ds0에서 PREPARE_DROP 상태의 disk105를 ONLINE으로 복구하는 명령어입니다.
[예 10] 디스크 스페이스 ds0에 PREPARE_DROP상태의 디스크를 ONLINE으로 복구
ALTER DISKSPACE ds0 UNPREPARE DISK disk105;
디스크 스페이스 리밸런싱
디스크 추가/제거와 동시에 리밸런싱을 수행하지 않은 경우와 같이 리밸런싱이 수동으로 필요한 경우 다음과 같이 리밸런싱을 수동으로 수행할 수 있습니다.
다음 예제는 디스크 스페이스 ds0의 리밸런싱을 수행하는 SQL 문을 보여줍니다.
[예 11] 디스크 스페이스 ds0 리밸런싱 (1)
ALTER DISKSPACE ds0 REBALANCE;
리밸런스 SQL 문에 WAIT를 붙여주면 리밸런싱이 끝나기를 기다릴 수 있습니다.
[예 12] 디스크 스페이스 ds0 리밸런싱 (2)
ALTER DISKSPACE ds0 REBALANCE WAIT;
리밸런스 SQL 문에 FORCE를 붙여주면 추가/삭제되는 디스크가 없더라도 강제로 리밸런스 작업을 수행합니다. 이 옵션을 사용하는 경우 이동시키는 익스텐트의 양이 많아 수행 시간이 길어집니다.
V$AS_DISK 뷰에서 디스크의 상태를 조회함으로써 리밸런싱이 완료되었는지 확인할 수 있으며, V$AS_OPERATION 뷰에서 진행 중인 리밸런스 작업을 확인할 수 있습니다.
파일 삭제
ALTER DISKSPACE 문의 DROP 절을 사용해서 디스크 스페이스에 존재하는 파일을 삭제할 수 있습니다.
다음 예제는 디스크 스페이스 ds0에서 파일을 삭제하는 SQL 문을 보여줍니다. 이 예제에서는 파일의 경로가 +DS0/file000.dtf인 파일을 디스크 스페이스 ds0에서 삭제합니다.
[예 13] 디스크 스페이스 ds0에서 파일 삭제
ALTER DISKSPACE ds0 DROP FILE '+DS0/file000.dtf';
또한 파일 경로를 콤마(,)로 구분하여 여러 개의 파일을 동시에 디스크 스페이스에서 삭제할 수 있습니다.
다음 예제는 디스크 스페이스 ds0에서 여러 파일을 한 번에 삭제하는 SQL 문을 보여줍니다. 이 예제에서는 파일의 경로가 +DS0/file000.dtf인 파일과 +DS0/file001.dtf인 파일을 디스크 스페이스 ds0에서 삭제합니다.
[예 14] 디스크 스페이스 ds0에서 여러 파일 삭제
ALTER DISKSPACE ds0 DROP FILE '+DS0/file000.dtf', '+DS0/file001.dtf';
디스크 스페이스 삭제
DROP DISKSPACE 문을 사용해서 디스크 스페이스를 삭제할 수 있습니다. 다음 예제는 디스크 스페이스 ds0을 삭제하는 SQL 문을 보여줍니다.
[예 15] 디스크 스페이스 ds0 삭제
DROP DISKSPACE ds0;
디스크 장애 관리
TAS는 미러링과 실패 그룹을 활용해 디스크 장애 시에도 가용성을 보장하며, 디스크가 장애 상태에서 복구되면 리싱크 동작을 수행해 장애가 발생한 동안 수정된 데이터의 정합성을 맞춰줍니다.
디스크 장애 상황에서의 가용성 보장
TAS는 데이터의 복사본을 만들어 저장하는 미러링 기능을 제공하며, 각각의 복사본은 서로 다른 실패 그룹에 저장됩니다. 따라서 디스크 스페이스의 중복 레벨을 NORMAL 또는 HIGH로 설정했을 경우 특정 실패 그룹에 속한 디스크 혹은 하나(중복 레벨이 HIGH인 경우 두 개까지)의 실패 그룹 전체에 장애가 발생하더라도 다른 실패 그룹에 저장되어 있는 복사본을 사용해 서비스의 가용성을 보장합니다.
디스크 장애 후 복구 상황에서의 동작
TAS는 주기적인 DISK 모니터링을 통해 DISK의 상태를 관리하며, DISK의 현재 상태는 “ V$AS_DISK”를 통해 확인할 수 있습니다.
디스크에 장애가 발생하면 디스크의 상태는 FAIL 상태로 전환됩니다. FAIL 상태의 디스크에 대한 I/O는 별도의 메타데이터에 기록 후 건너뛰며 이렇게 건너뛴 I/O는 디스크가 다시 복구되었을 때 리싱크 절차를 거쳐 반영됩니다.
리싱크
리싱크는 디스크가 장애 상태에 있는동안 수정된 데이터의 정합성을 맞춰주기 위해 수행되는 동작이며, 중복 레벨을 NORMAL 또는 HIGH로 설정한 경우에만 수행할 수 있습니다.
TAS는 미러링 기능을 제공하기 때문에 디스크에 장애가 발생하더라도 다른 실패 그룹에 위치한 복사본에는 I/O를 수행할 수 있습니다. 따라서 장애 디스크가 복구되면 해당 디스크에 위치한 데이터들은 다른 실패 그룹에 위치한 복사본을 통해 최신의 데이터로 복원이 가능하며, 이 동작을 리싱크라고 합니다.
디스크 장애 후 복구되지 않는 상황에서의 동작
디스크에 장애가 발생해 디스크의 상태가 FAIL로 바뀐 채로 계속 운영하면 장애 디스크에 위치한 데이터 복사본은 사용할 수 없기 때문에 안정성이 떨어집니다. 따라서 이 상태가 장시간 지속되지 않도록 TAS에서 는 디스크의 FAIL 상태가 일정 시간 이상 지속되면 해당 디스크를 자동으로 제거하고 리밸런싱을 통해 복사본을 다른 디스크로 이동시킴으로써 미러링을 유지합니다.
디스크가 FAIL 상태로 바뀐 이후 자동으로 제거되기까지의 시간은 아래의 파라미터를 통해 설정할 수 있습니다.
AS_DISK_REPAIR_WAIT_TIME
TAS가 디스크의 상태를 FAIL로 바꾼 이후 해당 디스크를 자동으로 제거하기까지의 대기 시간으로, 0으로 설정하는 경우 자동으로 제거하지 않는다. (단위: 분, 기본값: 0)
Last updated