본문 바로가기

Note

[관리] 데이터베이스 옮기는 방법

고객사에 지원을 하다 보면, 현재의 Database를 다른 곳으로 옮기거나 특정 tablespace의 위치를 바꿔야 하는 경우가 발생한다.

이유는 디스크 공간이 부족해서 여유있는 곳으로 옮겨야 하는 상황이 되었거나, 외장 스토리지의 IO 성능 개선 작업을 하면서 Container로 사용 중인 Raw device의 경로가 변경되거나, 사용자 실수로 데이터가 삭제되서 데이터 복구를 하고자 하는 경우 등이라 할 수 있겠다.

DB 백업 이미지로 위와 같은 작업을 하기에는 시간이 걸린다. 최종 백업을 받고 새로운 곳으로 restore를 해야 되므로 어느 정도 소요시간이 발생한다.

이런 경우 db2relocatedb 유틸리티를 사용하면 백업/복구 방법보다는 작업 시간을 단축할 수 있다.

작업은 db2 중지 후 진행한다.

db2relocatedb 수행을 위한 설정 파일

DB_NAME=데이터베이스명
DB_PATH=데이터베이스 홈 경로
INSTANCE=인스턴스명
NODENUM=0
LOG_DIR=oldDirPath,newDirPath
STORAGE_PATH=스토리지 경로
CONT_PATH=콘테이너경로

<시나리오>

데이터베이스 명 : 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
DB_PATH=/instance/inst10,/database
INSTANCE=inst10
NODENUM=0
LOG_DIR=/instance/inst10/inst10/NODE0000/SQL00001/LOGSTREAM0000/,

              /database/test/active/
STORAGE_PATH=/instance/inst10,/database/test/data

 

위치 변경되는 파일들을 옮긴다.

$> 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.
Database was catalogued successfully.
DBT1000I  The tool completed successfully.

변경 확인

# db2 list db directory

System Database Directory

Number of entries in the directory = 1

Database 1 entry:

Database alias                       = TEST
Database name                        = TEST
Local database directory             = /database
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =


# db2 get db cfg for test | grep -i "path to log files"
Changed path to log files                  (NEWLOGPATH) =
Path to log files                                       = /database/test/active/NODE0000/LOGSTREAM0000/

 

# db2 connect to test

   Database Connection Information

Database server        = DB2/AIX64 10.1.1
SQL authorization ID   = INST10
Local database alias   = TEST

 

# db2pd -db test -storage

Storage Group Paths:
Address            SGID  PathID    PathState    PathName
0x0A00020010BC0000 0     0         InUse        /database/test/data

 

# db2 "select count(*) from emp"

1
-----------
         42

  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
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'
;

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
SQL1277W  A redirected restore operation is being performed. During a table
space restore, only table spaces being restored can have their paths
reconfigured. During a database restore, storage group storage paths and DMS
table space containers can be reconfigured.
DB20000I  The RESTORE DATABASE command completed successfully.

SET STOGROUP PATHS FOR IBMSTOGROUP ON '/instance/inst10'
DB20000I  The SET STOGROUP PATHS command completed successfully.


RESTORE DATABASE TEST CONTINUE

DB20000I  The RESTORE DATABASE command completed successfully.

 

확인

$> db2 list db directory

Database 2 entry:

Database alias                       = SAMPLE
Database name                        = SAMPLE
Local database directory             = /instance/inst10
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =

$> db2 connect to sample

$> db2pd -db sample –storage

Storage Group Paths:
Address            SGID  PathID    PathState    PathName
0x0A00020010BC0000 0     0         InUse        /instance/inst10