[DB2] Tablespace와 그 상태 분석하기

현재 IBM® DB2® Universal Database™ (DB2 UDB)에서는 최소 25개의 테이블/테이블 공간에 대한 상태정보를 가지고 있습니다. 이러한 상태정보들은 특정 상황에서, 데이터 액세스를 제어하는데 사용되거나 특정 사용자 액션을 알아내서 데이터베이스의 무결성을 보호하는데 사용됩니다. 이벤트에서 생긴 결과 대부분이 로드 유틸리티나 백업과 복구 유틸리티 같은 DB2 유틸리티의 작동과 관련이 있습니다.

이 글에서 각각의 지원 받는 테이블 또는 테이블 공간 상태(표 1참조)를 설명합니다. 상태의 이름을 클릭하면 자세한 설명을 볼 수 있다. 또한 상태를 정확히 인터프리팅 하고 응답하는 방법을 예제를 통해 설명하겠습니다. 예제들은 AIX에서 실행되었던 명령어 스크립트에서 가져온 것입니다. 이를 복사한 후 실행해야 합니다. 유닉스 계열 외 시스템에서 DB2 UDB를 실행한다면 경로 이름이 알맞은 포맷으로 되었는지를 확인합니다. 예제 대부분이 DB2 UDB에서 제공하는 SAMPLE 데이터베이스에 있는 테이블에 기반하고 있다. 몇 가지는 SAMPLE 데이터베이스의 일부가 아닌 시나리오도 필요하지만 시작점으로서 SAMPLE 데이터베이스를 사용하도록 합니다.

표 2에서는 테이블 공간 상태를, 표 3에서는 현재 지원되는 테이블 상태를 설명하겠습니다.

 

표 1. DB2 UDB Version 8.1.4에서 정의된 테이블과 테이블 공간 상태

상태 범위 상태 범위
Backup Pending 테이블 공간 Quiesced Update 테이블 공간
Backup in Progress 테이블 공간 Read Access Only 테이블
Check Pending 테이블 Reorg in Progress 테이블 공간
DMS Rebalance in Progress 테이블 공간 Restore Pending 테이블 공간
Disable Pending 테이블 공간 Restore in Progress 테이블 공간
Drop Pending 테이블 공간 Roll Forward Pending 테이블 공간
Load Pending 테이블 Roll Forward in Progress 테이블 공간
Load in Progress 테이블 공간 또는 테이블 Storage May be Defined 테이블 공간
Normal 테이블 공간 또는 테이블 Storage Must be Defined 테이블 공간
Not Load Restartable 테이블 Table Space Creation in Progress 테이블 공간
Offline and Not Accessible 테이블 공간 Table Space Deletion in Progress 테이블 공간
Quiesced Exclusive 테이블 공간 Unavailable 테이블
Quiesced Share 테이블 공간    

 

테이블 스페이스 상태

db2tbst 명령어는 16진수의 상태 값을 받아들여 이에 상응하는 테이블 공간 상태(그림 1)를 리턴한다. 예를 들어, db2tbst 0x0008 명령어는 State = Load Pending을 리턴한다. “LIST TABLESPACES “ 명렁어를 수행하면 16진수로 된 상태정보값을 볼 수 있다. ( 그림 2) IBM DB2 Universal Database Command Reference를 참조하면 좀 더 자세한 정보를 얻을 수 있다.

 

외부에 보여지는 테이블 공간의 상태는 개별 상태 값들의 16진수 합으로 구성된다. 테이블 공간의 상태가 Backup Pending Load in Progress이면 16진수 리턴 값은 0x20020 (0x00020 + 0x20000)이다. 이 경우 db2tbst 0x20020 명령어는 다음을 리턴한다.

 

 


그림 2. LIST TABLESPACES 명령어는 연결된 데이터베이스에 있는 테이블 공간의 현재 상태를 결정하는데 사용된다.

표 2. 테이블 공간 상태

상태 16진수 상태 값 설명 예제
Backup Pending 0x20 테 이블 공간은 지정시점(point-in-time) 테이블 공간 롤포워드(rollforward) 연산 후 또는 COPY NO 옵션이 지정된 (복구 가능한 데이터베이스에 대한) 로드 연산 후에 이 상태가 된다. 이 상태가 되면 테이블 공간 (또는 전체 데이터베이스)는 사용되기 전에 백업되어야 한다. 테이블 공간이 백업되지 않으면 그 테이블 공간 안에 있는 테이블들은 쿼리 될 수는 있지만 업데이트는 되지 않는다. 주: 데이터베이스의 복구 모드를 롤포워드로 변경하게 되면 변경한 즉시 백업해야 한다. logretain 데이터베이스 설정 매개변수가 RECOVERY로 설정되거나 userexit 데이터베이스 설정 매개변수가 YES로 설정되면 데이터베이스는 복구 가능하다. 데이터베이스가 백업되기 전까지는 데이터베이스를 활성화 하거나 데이터베이스로 연결할 수 없다. 백업이 완료되면 backup_pending 정보형 데이터베이스 설정 매개변수가 NO로 설정된다. 1. 로드를위한 데이터 파일 staff_data.del 과 내용 11, "Melnyk",20,"Sales",10,70000,15000:
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
load from staff_data.del of del messages load.msg insert into staff copy no;
update staff set salary = 69000 where id = 11;
2. update db cfg for sample using logretain recovery;
connect to sample;
Backup in Progress 0x800 이것은 백업 연산 동안에만 유효한 일시적인 상태이다. 온라인 BACKUP DATABASE 명령어를 실행한다.:
backup db sample online;
백업 연산이 실행될 때 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1에서 리턴된 정보를 통해 이 테이블 공간이 Backup in Progress 상태에 있다는 것을 알 수 있다.
DMS Rebalance in Progress 0x10000000 데 이터 리밸런싱(rebalancing) 연산 동안에만 유효한 일시적 상태이다. 새로운 컨테이너들이 데이터베이스 관리형 공간(DMS)로 정의된 테이블 공간에 추가되거나 기존 컨테이너들이 확장될 때 테이블 공간 데이터의 리밸런싱이 발생한다. 리밸런싱은 데이터가 게속 스트라이핑 되도록 테이블 공간의 Extent 들을 또 다른 위치로 옮기는 작업이다. Extent 는 컨테이너 공간( 페이지로 측정됨 ) 의 단위이고 스트라이프는 테이블 공간 컨테이너 집합의 Extent Layer 이다. 2만개 이상의 레코드를 가진 데이터 파일 sfaffdata.del :
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 1024);
create table newstaff like staff in ts1;
load from staffdata.del of del insert into newstaff nonrecoverable;
alter tablespace ts1 add (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c2' 1024);
list tablespaces;
connect reset;
TS1에서 리턴된 정보를 통해 이 테이블 공간이 DMS Rebalance in Progress 상태에 있음을 알 수 있다.
Disable Pending 0x200 이 상태는 데이터베이스 롤포워드 연산중에 발생될 수 있으며 롤포워드 연산이 완료될 때는 이 상태에서 벗어난다. 이 상태는 테이블 공간이 오프라인이 되고 Transaction을 위한 로그가 아직 쓰여지지 않은 상황에서 발생될 수 있다. 이 상태는 일시적으로 생겼다가 사라질 수 있으므로 사용자에게는 보여지지 않을 수도 있다. 예제 없음.
Drop Pending 0x8000 데 이터베이스를 재시작할 때 한 개이상의 컨테이너에 문제가 있을 경우 테이블 공간은 이 상태가 된다. ( 이전 세션에서 전원 오류등 비정상적으로 데이터베이스가 종료되었다면 데이터베이스는 재시작 되어야 한다. ) 테이블 공간이 Drop Pending 상태에 있다면 사용은 불가능 하고 삭제만 가능하다. 예제 없음.
Load in Progress 0x20000 COPY NO 옵션을 지정한 (복구 가능한 데이터베이스에 대한) 로드 연산 중에만 유효한 일시적인 상태이다. Load in Progress 테이블 상태를 참조한다. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (약 20000 개 이상의 레코드):
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
create table newstaff like staff;
load from staffdata.del of del insert into newstaff copy no;
connect reset;
로드 연산이 실행될 때 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
list tablespaces;
connect reset;
USERSPACE1에서 리턴된 정보는 이 테이블 공간이 Load in Progress (그리고 Backup Pending) 상태에 있음을 나타내고 있다.
Normal 0x0 테이블 공간은 문제가 없다면 Normal 상태에 놓여진다. Normal 상태는 테이블 공간이 생성된 후의 초기 상태이다. connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
list tablespaces show detail;
Offline and Not Accessible 0x4000 한 개 이상의 컨테이너에 문제가 있다면 테이블 공간은 이 상태에 머무르게 된다. 컨테이너는 부주의하게 재명명, 이동, 또는 손상을 입었을 것이다. 문제가 해결되면 이 테이블 공간에 속하는 컨테이너에 다시 액세스 할 수 있고, 데이터베이스에 연결된 모든 애플리케이션의 접속을 끊었다 다시 연결하면 이 비정상적인 상태에서 벗어날 수 있다. 또는 SWITCH ONLINE 구문이 지정된  ALTER TABLESPACE 문을 실행하면 Offline and Not Accessible 상태에서 벗어날 수 있다. connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
alter tablespace ts1 add (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
export to st_data.del of del select * from staff;
create table stafftemp like staff in ts1;
import from st_data.del of del insert into stafftemp;
connect reset;
테이블 공간 컨테이너를 tsc1 에서 tsc3 으로 바꾸고 STAFFTEMP 테이블을 쿼리한다.:
connect to sample;
select * from stafftemp;
이 쿼리는 SQL0290N (테이블 공간 액세스는 허용되지 않음)을 리턴하고 LIST TABLESPACES 명령어는 TS1에 대해 상태 값 0x4000 (Offline and Not Accessible)을 리턴한다. 다시 테이블 공간 컨테이너 이름을 tsc3에서 tsc1로 바꾼다. 이번에는 쿼리가 성공적이다.
Quiesced Exclusive 0x4 애 플리케이션이 테이블 공간에 대해 Quiesce 함수를 호출하여 그 테이블 공간에 배타적( 읽기 또는 쓰기) 권한을 가질 때 이 상태가 된다.  QUIESCE TABLESPACES FOR TABLE 명령어를 실행하여, 테이블 공간을 Quiesced Exclusive 상태에 둘 수 있다. Quiesced Exclusive로 설정하기 전에 테이블 공간 상태가 Normal로 되어 있는지 확인한다. 
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff exclusive;
connect reset;
또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
select * from staff where id=60;
update staff set salary=50000 where id=60;
list tablespaces;
connect reset;
USERSPACE1에서 리턴된 정보는 이 테이블 공간이 Quiesced Exclusive 상태에 있다는 것을 말해주고 있다.
Quiesced Share 0x1 Quiesce 함수를 호출하는 애플리케이션과 동시에 접속한 애플리케이션이 읽기 ( 쓰기는 아님) 액세르를 할 때 이 상태가 된다. QUIESCE TABLESPACES FOR TABLE 명령어를 실행하여 Quiesced Share 상태에 테이블 공간을 둘 수 있다. Quiesced Share로 설정하기 전에 테이블 공간 상태가 Normal로 되어 있는지 확인한다. 
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff share;
connect reset;
또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
select * from staff where id=40;
update staff set salary=50000 where id=40;
list tablespaces;
connect reset;
USERSPACE1에 리턴된 정보는 이 테이블 공간이 Quiesced Share 상태에 있다는 것을 나타내고 있다.
Quiesced Update 0x2 Quiesce 함수를 호출하는 애플리케이션이 테이블 공간에 대해 배타적인 쓰기 액세스를 할 때 이 상태가 된다. QUIESCE TABLESPACES FOR TABLE 명령어를 실행하여 Quiesced Update 상태가 되게 할 수 있다. Quiesced Update로 설정하기 전에 테이블 공간 상태가 Normal로 되어 있는지 확인한다.
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff intent to update;
connect reset;
또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
select * from staff where id=50;
update staff set salary=50000 where id=50;
list tablespaces;
connect reset;
USERSPACE1에 리턴된 정보는 이 테이블 상태가 Quiesced Update 상태에 있다는 것을 알려주고 있다.
Reorg in Progress 0x400 reorg 연산 중에만 일어 나는 일시적인 상태이다. REORG TABLE 명령어를 실행한다:
connect to sample;
. reorg table staff;
connect reset;
reorg 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1에 리턴된 정보를 통해 이 테이블 공간이 Reorg in Progress 상태에 있다는 것을 알 수 있다. 주: 테이블 재구성 연산은 매우 짧은 시간 동안 수행된다. 따라서 이 방식을 사용하면 Reorg in Progress 상태를 관찰하기 힘들다.
Restore Pending 0x100 리 다이렉션 된 복구 연산의 첫 번째 부분이 수행된 후에 (SET TABLESPACE CONTAINERS 명령어가 실행되기 전에) 데이터베이스의 테이블 공간은 이 상태가 된다. 테이블 공간(또는 전체 데이터베이스)은 테이블 공간이 사용되기 전에 복구되어야 한다. 복구 연산이 성공적으로 완료될 때까지 데이터베이스에 연결할 수 없다. 복구연산이 성공적으로 완료되면 rollfwd_pending 정보형 데이터베이스 연산 매개변수의 값이 NO 로 설정된다. Storage May be Defined에서 리다이렉션된 복구 연산의 첫 번째 부분이 완료되면 모든 테이블 공간은 Restore Pending 상태가 된다.
Restore in Progress 0x2000 복구 연산 중에만 일어 나는 일시적인 상태이다. update db cfg for sample using logretain recovery;
backup db sample;
backup db sample tablespace (userspace1);
백업 이미지용 타임스탬프: 20040611174124
restore db sample tablespace (userspace1) online taken at 20040611174124;
복구 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1에 리턴된 정보는 이 테이블 공간이 Restore in Progress 상태에 있다는 것을 알려주고 있다.
Roll Forward Pending 0x80 복구 가능한 데이터베이스에 대해 복구 연산이 수행된 후에 테이블 공간은 이 상태에 놓이게 된다. 테이블 공간(또는 전체 데이터베이스)는 테이블 공간이 사용되기 전에 롤포워드 되어야 한다. logretain 데이터베이스 설정 매개변수가 RECOVERY로 설정되거나 userexit 데이터베이스 설정 매개변수가 YES로 설정되면 데이터베이스는 복구 가능하다. 롤포워드 연산이 성공적으로 완료될 때까지는 데이터베이스를 활성화 하거나 데이터베이스에 연결할 수 없다. 롤포워드 연산이 완료되면 rollfwd_pending 정보형 데이터베이스 연산 매개변수의 값이 NO로 설정된다. Restore in Progress에 있는 온라인 테이블 공간 복구 연산이 완료되면 테이블 공간 USERSPACE1은 Roll Forward Pending 상태가 된다.
Roll Forward in Progress 0x40 롤포워드 연산 중에만 일어 나는 일시적인 상태이다. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (for example, 20000 or more records):
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 1024);
create table newstaff like staff in ts1;
connect reset;
backup db sample tablespace (ts1) online;
백업 이미지용 타임스탬프: 20040630000715
connect to sample;
load from staffdata.del of del insert into newstaff copy yes to /home/melnyk/backups;
connect reset;
restore db sample tablespace (ts1) online taken at 20040630000715;
rollforward db sample to end of logs and stop tablespace (ts1) online;
롤포워드 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
TS1에 리턴된 정보는 이 테이블 공간이 Roll Forward in Progress 상태에 있다는 것을 알려준다.
Storage May be Defined 0x2000000 리다이렉션된 복구 연산의 첫 번째 부분이 수행된 후에(SET TABLESPACE CONTAINERS 명령어가 실행되기 전에) 데이터베이스의 테이블 공간은 이 상태에 놓이게 된다. 원한다면 컨테이너를 재정의 할 수 있다. (Cloning DB2 Databases Using Redirected Restore참조) backup db sample;
백업 이미지용 타임스탬프 20040613204955:
restore db sample taken at 20040613204955 redirect;
list tablespaces;
LIST TABLESPACES 명령어에 의해 리턴된 정보는 모든 테이블 공간이 Storage May be Defined 와Restore Pending 상태에 있다는 것을 말해주고 있다.
Storage Must be Defined 0x1000 테 이블 공간 컨테이너 설정 단계가 생략되거나, 테이블 공간 컨테이너 설정 단계 동안 지정된 컨테이너를 얻을 수 없다면, 새로운 데이터베이스에 대한 리다이렉션된 복구 연산 동안 테이블 공간은 이 상태에 있다. 후자의 경우 무효 경로 이름이 지정정되었거나 디스크 공간이 부족할 때 발생할 수 있다. backup db sample;
백업 이미지용 타임스탬프 20040613204955:
restore db sample taken at 20040613204955 into mydb redirect;
set tablespace containers for 2 using (path 'ts2c1');
list tablespaces;
LIST TABLESPACES 명령어에 의해 리턴된 정보는 테이블 공간 SYSCATSPACE와 테이블 공간 TEMPSPACE1이 Storage May be Defined Restore Pending상태에 있다는 것을 말해주고 있다. Storage Must be Defined 상태는 Storage May be Defined 상태 보다 앞선다.
Table Space Creation in Progress 0x40000000 테이블 공간 생성 연산 중에만 일어 나는 일시적인 상태이다. connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
create tablespace ts2 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
create tablespace ts3 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc3' 1024);
테이블 공간 생성 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
TS1, TS2, TS3에 리턴된 정보는 이 테이블 공간이 Table Space Creation in Progress 상태에 있다는 것을 알려준다.
Table Space Deletion in Progress 0x20000000 테이블 공간 삭제 연산 중에만 일어 나는 일시적인 상태이다. connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
create tablespace ts2 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
create tablespace ts3 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc3' 1024);
drop tablespace ts1;
drop tablespace ts2;
drop tablespace ts3;
테이블 공간 삭제 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
1. list tablespaces show detail; or
2. get snapshot for tablespaces on sample;
connect reset;
TS1, TS2, TS3에 리턴된 정보는 이 테이블 공간이 Table Space Deletion in Progress 상태에 있다는 것을 알려준다.

위로

테이블 상태

DB2 UDB Version 8 로드 유틸리티는 테이블 상태(그리고 잠금)를 사용하여 테이블에 액세스 하고 로드 연산 동안 데이터베이스 일관성을 보존한다. 로드 연산이 중지되더라도 테이블 상태는 유지된다. LOAD QUERY 명령어(그림 3)을 사용하여 특정 테이블의 상태를 알아 볼 수 있다. LOAD QUERY 명령어는 로드 연산이 실행중인 동안 로드 연산의 상태를 검사하고 테이블 상태를 리턴한다. 로드 연산이 완료(또는 중지)되면 이 명령어는 오직 테이블 상태만 리턴한다.IBM DB2 Universal Database Command Reference를 참조하면 더 자세한 정보를 얻을 수 있다.

 

 


그림 3. LOAD QUERY 명령어는 특정 테이블의 상태를 결정하는데 사용된다.

로드작업 수행전에 종속 테이블 공간이 quiesce 상태가 아닐지라도 테이블 공간 상태가 “Load in Progress” 일 경우 로드 작업중에는 종속 테이블 공간에 대한 백업을 수행할 수 없다. 테이블 공간 상태가 “Load in Progress” 인것과 테이블 상태가 “Load in Progress” 는 다른 상태이다. 로드 작업을 수행할 때 테이블 상태는 “Load in Progress” 가 된다. 하지만 COPY NO 옵션이 지정된 로드 작업은 테이블 공간 상태를 “Load in Progress”로 놓는다.

테이블은 동시에 여러 상태가 될 수 있다. 예를 들어, 데이터가 테이블 체크 제약조건이 정의된 테이블로 로딩되고 ALLOW READ ACCESS 옵션이 지정되면, 테이블은 로드 연산 중에 Check Pending, Load in Progress, Read Access Only 상태에 있게 된다.

표 3. 테이블 상태

상태 설명 예제
Check Pending 테 이블 체크 제약조건이 정의되었지만, 새롭게 정의된 제약조건과 새로운 데이터의 순응성이 아직 입증되지 않았을 경우 테이블은 이 상태가 된다. 예를 들어, DB2 로드 유틸리티가 테이블 체크 제약조건이 정의된 테이블에 대해 로드 연산을 시작할 때 Check Pending 상태를 설정한다. 테이블을 Normal 상태로 리턴하려면 SET INTEGRITY 문을 실행한다. 자세한 내용은Constraints를 참조하라. 로드 인풋 파일 staff_data.del과 콘텐트: 11,"Melnyk",20,"Sales",10,70000,15000:
connect to sample;
alter table staff add constraint max_salary check (100000 - salary > 0);
load from staff_data.del of del insert into staff;
load query table staff;
LOAD QUERY 명령어에 의해 리턴된 정보는 STAFF 테이블이 Check Pending 상태에 있다는 것을 말해주고 있다.
Load Pending 테이블에 대해 활성화 된 로드 연산이 데이터가 커밋되기 전에 중단되었을 경우 테이블은 이 상태가 된다. 테이블을 Normal 상태로 돌리려면 load terminate, load restart, load replace 연산을 호출한다. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (약 20000 개 이상의 레코드), 로드 연산의 목표 테이블과 NEWSTAFF 라고 하는 새로운 테이블을 포함하고 있는 작은 테이블을 만든다.:
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 256);
create table newstaff like staff in ts1;
load from staffdata.del of del insert into newstaff;
load query table newstaff;
load from staffdata.del of del terminate into newstaff;
load query table newstaff;
connect reset;
LOAD QUERY 명령어에 의해 리턴된 정보는 NEWSTAFF 테이블이 Load Pending 상태에 있다는 것을 알려주고 있다. 로드 종료 연산 후에 테이블은Normal 상태가 된다.
Load in Progress 로드 연산 중에만 유효한 일시적인 상태이다. 로드 연산이 잘못되었거나 인터럽트 될 경우 Load in Progress 상태에서 벗어나는 방법은 IBM DB2 Universal Database Data Movement Utilities Guide and Reference Load in Progress table space state를 참조하라. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (약 20000 개 이상의 레코드):
connect to sample;
create table newstaff like staff;
load from staffdata.del of del insert into newstaff;
로드 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
load query table newstaff;
connect reset;
LOAD QUERY 명령어로 리턴된 정보는 NEWSTAFF 테이블이 Load in Progress 상태에 있다는 것을 나타내고 있다.
Normal 테이블에 어떤 문제도 없다면 Normal 상태가 된다. Normal 상태는 테이블이 생성된 후 첫 상태이다. connect to sample;
create table newstaff like staff;
load query table newstaff;
LOAD QUERY 명령어로 리턴된 정보는 NEWSTAFF 테이블이 Normal 상태에 있다는 것을 나타내고 있다.
Not Load Restartable 롤포워드 작업이 실패한 로드 작업( 로드작업을 성공적으로 재시작하거나 종료하지 않았을 때 )후에 수행되었다면 테이블은 이 상태에 놓여지게 된다. 테이블은 또한 “Load Pending” 상태에도 걸리게 된다. . 테이블을 Normal 상태로 되돌리려면 LOAD TERMINATE 명령어를 실행한다. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (약 20000 개 이상의 레코드):
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 256);
create table newstaff like staff in ts1;
connect reset;
backup db sample;
백업 이미지용 타임스탬프 : 20040629205935
connect to sample;
load from staffdata.del of del insert into newstaff copy yes to /home/melnyk/backups;
connect reset;
restore db sample taken at 20040629205935;
rollforward db sample to end of logs and stop;
connect to sample;
load query table newstaff;
connect reset;
LOAD QUERY 명령어로 리턴된 정보는 NEWSTAFF 테이블이 Not Load Restartable과 Load Pending 상태에 있다는 것을 나타내고 있다. 
connect to sample;
load from staffdata.del of del terminate into newstaff copy yes to /home/melnyk/backups;
load query table newstaff;
connect reset;
LOAD QUERY 명령어로 리턴된 정보는 NEWSTAFF 테이블이 이제는 Normal 상태에 있다는 것을 나타내고 있다.
Read Access Only ALLOW READ ACCESS 옵션이 지정되었다면 로드 연산 중에 이 상태가 된다. Read Access Only는 일시적인 상태로서, 다른 애플리케이션과 유틸리티는 로드 연산 전에 존재하는 데이터로 읽기 액세스를 할 수 있다. 로드 인풋 파일 staffdata.del과 상당량의 데이터 (약 20000 개 이상의 레코드):
connect to sample;
export to st_data.del of del select * from staff;
create table newstaff like staff;
import from st_data.del of del insert into newstaff;
load from staffdata.del of del insert into newstaff allow read access;
로드 연산이 실행될 때, 또 다른 세션에서 다음 스크립트를 실행한다.:
connect to sample;
load query table newstaff;
select * from newstaff;
connect reset;
LOAD QUERY 명령어로 리턴된 정보는 NEWSTAFF 테이블이 Read Access Only와 Load in Progress 상태에 있다는 것을 나타내고 있다. 이 쿼리는 STAFF 테이블의 반출된 콘텐트만 리턴한다. 이것은 로드 연산 전에 NEWSTAFF 테이블에 존재했던 데이터이다.
Unavailable 복구 불가능한 로드 연산이 롤포워드 되면 이 상태가 된다. 이와 같은 테이블은 삭제되거나 백업 이미지에서 복구될 수 있다. 로드 인풋 파일 staff_data.del with content: 11,"Melnyk",20,"Sales",10,70000,15000:
update db cfg for sample using logretain recovery;
backup db sample;
백업 이미지용 타임스탬프 : 20040629182012
connect to sample;
load from staff_data.del of del insert into staff nonrecoverable;
connect reset;
restore db sample taken at 20040629182012;
rollforward db sample to end of logs and stop;
connect to sample;
load query table staff;
connect reset;
LOAD QUERY 명령어로 리턴된 정보는 STAFF 테이블이 Unavailable 상태에 있다는 것을 나타내고 있다.

 

요약

DB2 UDB에서 사용되는 테이블과 테이블 공간 상태는 데이터로의 액세스를 제어하거나 특정 상황 속에서 데이터베이스의 무결성을 보호하는데 사용된다. 이 글에서는 예제를 통해서, 특정 상태를 야기시키는 공통적인 조건들, 어떤 상태가 문제인지를 규명할 때 사용할 수 있는 명령어들, 대응 방법 등을 설명했다. 위에 제시한 예제들을 직접 사용해 보는 것도 좋다. 여러 가지 상태에 대한 자신만의 해결책을 찾아낼 수 있고 데이터베이스 작동에 대한 이해도 높아질 것이다.

기사의 원문보기

 

참고자료

댓글(0)

Designed by JB FACTORY