고객사에 지원을 하다 보면, 현재의 Database를 다른 곳으로 옮기거나 특정 tablespace의 위치를 바꿔야 하는 경우가 발생한다.
이유는 디스크 공간이 부족해서 여유있는 곳으로 옮겨야 하는 상황이 되었거나, 외장 스토리지의 IO 성능 개선 작업을 하면서 Container로 사용 중인 Raw device의 경로가 변경되거나, 사용자 실수로 데이터가 삭제되서 데이터 복구를 하고자 하는 경우 등이라 할 수 있겠다.
DB 백업 이미지로 위와 같은 작업을 하기에는 시간이 걸린다. 최종 백업을 받고 새로운 곳으로 restore를 해야 되므로 어느 정도 소요시간이 발생한다.
이런 경우 db2relocatedb 유틸리티를 사용하면 백업/복구 방법보다는 작업 시간을 단축할 수 있다.
작업은 db2 중지 후 진행한다.
db2relocatedb 수행을 위한 설정 파일
DB_NAME=데이터베이스명 |
<시나리오>
데이터베이스 명 : sample –> test
데이터베이스 위치 : /instance/inst10 –> /database
트랜잭션 로그 경로 : /instance/inst10/inst10/NODE0000/SQL00001/LOGSTREAM0000/
-> /database/test/active/
스토리지 경로 : /instance/inst10 –> /database/test/data
설정 파일 (db2relo.cfg )
DB_NAME=sample,test /database/test/active/ |
위치 변경되는 파일들을 옮긴다.
$> cp -R /instance/inst10/ins* /database $> cp -R ./LOGSTREAM00*/ /database/test/active/NODE0000/LOGSTREAM0000/ $> cp -R NODE00* /database/test/data/inst10 $>mv /database/test/data/inst10/NODE0000/SAMPLE/ /database/test/data/inst10/NODE0000/TEST/ |
DB 위치 변경
$> db2relocatedb -f db2relo.cfg Files and control structures were changed successfully. |
변경 확인
# db2 list db directory System Database Directory Number of entries in the directory = 1 Database 1 entry: Database alias = TEST # db2 get db cfg for test | grep -i "path to log files"
# db2 connect to test Database Connection Information Database server = DB2/AIX64 10.1.1
# db2pd -db test -storage Storage Group Paths:
# db2 "select count(*) from emp" 1 1 record(s) selected. |
* DB 홈 경로 및 트랜잭션 로그 경로, 스토리지 경로의 경우 DB 생성 시 DB2가 자동으로 생성하는 경로명들이 있기 때문에 번거로울 수 있다. 경우에 따라서는 파일 옮기는 작업이 복잡하기 때문에 주의가 필요하고, 특정 콘테이너 단위로 변경하는 작업 정도로 사용하는 것이 안전하다 할 수 있겠다. (위 작업 수행 시, 원본을 copy 해서 db2relocatedb 작업 후 문제없는 경우 원본을 삭제해야 할 것이다.)
db2relocatedb 작업 중 일부가 번거로운 경우, 경로재지정 복구를 통하여 수행할 수 있다.
$> db2 backup db test to /work/backup compress Backup successful. The timestamp for this backup image is : 20121109141428 |
경로 재지정 복구를 위한 복구 스트립트를 생성한다.
$> db2 restore db test from /work/backup taken at 20121109141428 redirect generate script db2redir.clp |
복구 스트립트를 수정한다.
데이터베이스 명 : test –> sample
데이터베이스 위치 : /database –> /instance/inst10
트랜잭션 로그 경로 : /database/test/active/ –> /instance/inst10/inst10/NODE0000/SQL00001/LOGSTREAM0000/
스토리지 경로 : /database/test/data –> /instance/inst10
RESTORE DATABASE TEST RESTORE DATABASE TEST CONTINUE; |
restore 실행
$> db2 -tvf db2redir.clp RESTORE DATABASE TEST FROM '/work/backup' TAKEN AT 20121109141428 ON '/instance/inst10' DBPATH ON '/instance/inst10' INTO SAMPLE NEWLOGPATH '/instance/inst10/inst10/NODE0000/SQL00001/LOGSTREAM0000/' REDIRECT WITHOUT ROLLING FORWARD SET STOGROUP PATHS FOR IBMSTOGROUP ON '/instance/inst10'
DB20000I The RESTORE DATABASE command completed successfully. |
확인
$> db2 list db directory Database 2 entry: Database alias = SAMPLE $> db2 connect to sample $> db2pd -db sample –storage Storage Group Paths: |
'Note' 카테고리의 다른 글
[아키텍처] DB2 Virtual Memory 란? (0) | 2012.12.17 |
---|---|
[성능] 오라클 IFS 환경에서 varchar 문자열의 검색 키 (0) | 2012.11.26 |
[이중화] db2havend (pureScale:db2instance) (0) | 2012.10.29 |
[개발] DB2 JDBC Driver 버전 (0) | 2012.10.29 |
[SQL] rownum 사용 시 주의점 (0) | 2012.10.22 |