본문 바로가기
다른 DBMS/DB2

[DB2] Online 백업&복구 시나리오 테스트

by 취미툰 2023. 3. 16.
반응형

시나리오는 아래와 같습니다.

DB2 version :V11.1

 

1.테이블 생성 및 데이터 INSERT

2.온라인 백업

3.테이블 DROP (장애상황 유발)

4.복구

5.테이블 확인

순서입니다.

 

ONLINE 백업의 경우 ROLL FORWARD 과정이 추가됩니다.

 

1.테이블 생성 및 데이터 INSERT

$ db2 "create table BACKTEST (ID INT,NAME VARCHAR(32))"

$ db2 "INSERT INTO BACKTEST(ID,NAME) VALUES (1,'BAE')"

$ db2 "insert into BACKTEST select * from BACKTEST" x10번

$ db2 "select count(*) from BACKTEST"

1
-----------
       4096

2.온라인 백업

$ db2 backup db DB2TEST online to /home/db2test/ysbae include logs

Backup successful. The timestamp for this backup image is : 20230316144609

$ ls -alrt
total 360608
drwxr-xr-x    5 db2test  db2iadm1       4096 Mar 16 14:44 ..
drwxr-xr-x    2 db2test  db2iadm1        256 Mar 16 14:46 .
-rw-------    1 db2test  db2iadm1  184627200 Mar 16 14:46 DB2TEST.0.db2test.DBPART000.20230316144609.001

3.테이블 DROP (장애상황 유발)

$ db2 "DROP TABLE BACKTEST"
DB20000I  The SQL command completed successfully.

$ db2 "select count(*) from BACKTEST"
SQL0204N  "DB2TEST.BACKTEST" is an undefined name.  SQLSTATE=42704

--테이블이 없다고 나옴.

4.복구

백업파일의 시간을 기입하는게 중요합니다. taken at [백업파일의 시간] 위의 백업파일의 경우에는 DB2TEST.0.db2test.DBPART000.20230316144609.001 중 20230316144609부분입니다.

$ db2 restore db db2test from /home/db2test/ysbae taken at 20230316144609
SQL2539W  The specified name of the backup image to restore is the same as the
name of the target database.  Restoring to an existing database that is the
same as the backup image database will cause the current database to be
overwritten by the backup version.
Do you want to continue ? (y/n) y
DB20000I  The RESTORE DATABASE command completed successfully.

db2diag 로그를 확인하면 restore를 시작하고 완료될때 로그를 남깁니다.

db2diag.log

Starting a full database restore.
Agent EDU ID: 17513

....

MESSAGE : Restore Complete.



[]db2test@dbarac1:/home/db2test$ db2 connect to db2test
SQL1117N  A connection to or activation of database "DB2TEST" cannot be made
because of ROLL-FORWARD PENDING.  SQLSTATE=57019

이상태에서 db 접속을 시도하면 에러가 발생합니다. roll forward하라고 나옵니다. 

이 부분에서는 db2의 아카이브로그 경로를 넣어줘야 합니다. 로그확인은 db2 get db cfg for [db명] 명령어로 확인할 수 있습니다.

$ db2 "rollforward db db2test to end of backup and stop overflow log path (/db2/db2test/archivelog/db2test/DB2TEST/NODE0000/LOGSTREAM0000/C0000001)"

                                 Rollforward Status

 Input database alias                   = db2test
 Number of members have returned status = 1

 Member ID                              = 0
 Rollforward status                     = not pending
 Next log file to be read               =
 Log files processed                    = S0000001.LOG - S0000002.LOG
 Last committed transaction             = 2023-03-16-05.46.12.000000 UTC

DB20000I  The ROLLFORWARD command completed successfully.

 

5.테이블 확인

$ db2 connect to db2test

   Database Connection Information

 Database server        = DB2/AIX64 11.1.4.7
 SQL authorization ID   = DB2TEST
 Local database alias   = DB2TEST

$ db2 "select count(*) from BACKTEST"

1
-----------
       4096

  1 record(s) selected.

 

삭제 전인 4096건이 있는것을 확인하였습니다

완료.

 

반응형

댓글