U N I T 백업과복구 백업방법으로데이터베이스백업과온라인, 테이블스페이스, 인크리멘탈, 델타백업등을소개합니다. 복구방법으로크래쉬, 버전, 롤포워드복구방법이소개되며, 백업이미지파일과아카이브로그파일을보관한다면, 손상직전시점까지데이터베이스를복구할수있습니다. UNIT 권한과특권 99
Administrator Edition 데이터베이스로깅데이터베이스로그를위한구성변수순환로깅아카이브로깅 USER EXIT 복구기록파일 LIST HISTORY 명령어 PRUNE HISTORY 명령어백업의종류 BACKUP DB 명령어백업이미지파일 FULL 백업 INCREMENTAL 백업 DELTA 백업테이블스페이스백업복구의종류 RESTART DB 명령어 RESTORE DB 명령어 ROLLFORWARD DB 명령어크래쉬복구버전복구경로재지정복구 롤포워드복구 INCREMENTAL 복구 DELTA 복구테이블스페이스의상태테이블스페이스복구 00
데이터베이스로깅 INSERT, UPDATE, DELETE 문이실행되면, 버퍼풀의데이터가변경됩니다. 변경이전의값과변경이후의값은로그버퍼를통해서로그파일에기록되어트랜잭션의롤백작업에사용됩니다. 보관된로그파일은데이터베이스복구에사용됩니다. 데이터베이스단위로로그파일을운영합니다. 한데이터베이스에대해실행되는모든트랜잭션은공통으로사용되는로그파일에로깅을합니다. 새로운 SQL문이요청되는시점부터 COMMIT 또는 ROLLBACK문이요청되는시점까지를한개의트랜잭션또는 UOW(Unit Of Work) 라고합니다. 데이터베이스가활성화되면고정된개수의로그파일들이로그디렉토리에새롭게생성됩니다. SQL 문의처리에필요한데이터는테이블스페이스컨테이너에서버퍼풀로로드됩니다. 버퍼풀의데이터를변경하면변경내용은로그버퍼에기록되어로그버퍼가가득차거나, 트랜잭션이 COMMIT 되면로그파일로반영됩니다. 버퍼풀의변경된페이지가지정한비율을초과하면변경내용은로그파일에먼저반영되고, 디스크의컨테이너에반영됩니다. 기본적으로로그파일한개분량의로깅이완료되면버퍼풀의변경내용이컨테이너로반영됩니다. 변경이전의값을 ' 사전 (Before 또는 Old) 이미지 ' 라고하며, 변경이후의값을 ' 사후 (After 또는 New) 이미지 ' 라고합니다. 버퍼풀에서이미변경되었으나, 디스크에반영되지않은데이터가포함된페이지를 ' 더티 (Dirty) 페이지 ' 라고합니다. 변경된데이터가디스크에반영될때는반드시로그파일에먼저반영되는데, 이것을 ' 로그먼저쓰기 (Log Ahead Write)' 라고합니다. Figure A 버퍼풀과데이터베이스로깅 SQL문의종류에따라로그파일에기록되는내용이다릅니다. SQL문 설명 SELECT 문 기록되지않습니다. INSERT 문 추가된데이터에대한사후이미지가기록됩니다. UPDATE 문 변경된데이터에대한사전, 사후이미지가기록됩니다. DELETE 문 삭제된데이터에대한사전이미지가기록됩니다. 로그파일은용도와상태에따라 가지로구분됩니다. 로그 설명 활성 종료되지않은트랜잭션정보를포함하고있는로그 비활성로그 종료된트랜잭션정보를포함하고있는로그 온라인아카이브 재사용되지않고현재의활성로그디렉토리에보관된비활성로그 오프라인아카이브 재사용되지않고다른저장위치에보관된비활성로그 로그파일을운영하는방법에따라 가지의로깅방법으로구분됩니다. 로깅방법 설명 순환로깅 비활성로그를재사용하는방식입니다. 아카이브로깅 비활성로그를아카이브로그로보관하는방식입니다.
0 데이터베이스로그를위한구성변수 로깅과관련된환경은 LOGPRIMARY, LOGSECOND, LOGFILSIZ, LOGBUFSZ, MINCOMMIT, NEWLOGPATH, LOGRETAIN, USEREXIT, SOFTMAX 등의데이터베이스구성변수를이용하여제어합니다. 기본로그디렉토리는데이터베이스가생성된디렉토리의 SQLOGDIR 서브디렉토리입니다. 데이터베이스로그와관련된주요데이터베이스구성변수는다음과같습니다. NEWLOGPATH 에서지정하는경로명은미리생성되어야합니다. 변경후에데이터베이스가재활성화되면 NEWLOGPATH에지정했던값이 < 로그파일에대한경로 > 에표시되고, NEWLOGPATH 에는표시되지않습니다. LOGRETAIN과 USEREXIT, LOGARCHMETH 구성변수가모두 OFF인경우는순환로깅이사용됩니다. LOGRETAIN 변수를 ON으로설정하면 LOGARCHMETH 변수가 LOGRETAIN 으로자동적으로설정됩니다. USEREXIT 변수를 ON으로설정하면 LOGARCHMETH 변수가 USEREXIT 으로자동적으로설정됩니다. SOFTMAX는로그파일의크기를이용한백분율로표시됩니다. MINCOMMIT 변수의기본값은 이므로 COMMIT 이요청돨때마다로그버퍼의내용이로그파일로반영됩니다. logsecond 변수의값이 - 이면, logprimary <= 56 입니다. logsecond 의값이 -이아니면, (logprimary + logsecond) <= 56입니다 Figure 0A 구성변수 LOGPRIMARY LOGSECOND 로깅과연관된데이터베이스구성변수 UPDATA DB CFG 명령어로변경하며, 데이터베이스가재활성화가필요할수있습니다. 설명 차로그 (Primary Log) 의개수입니다. 데이터베이스의변경내용을기록하며, 데이터베이스가활성화될때미리할당됩니다. 차로그 (Secondary Log) 의개수입니다. 차로그가모두사용되면필요에따라한개씩할당됩니다. LOGFILSIZ 로그파일한개의크기로 K 페이지단위로설정합니다. LOGBUFSZ 로그파일을위한버퍼의크기로 K 페이지단위로설정합니다. NEWLOGPATH 활성로그파일을저장할경로명을지정합니다. LOGRETAIN 비활성로그를아카이브로그로보관합니다. ON 으로설정하면, 아카이브로깅방식이사용됩니다. USEREXIT LOGARCHMETH, LOGARCHMETH MINCOMMIT 사용자가제공한프로그램을이용하여아카이브로그를이동시킵니다. ON 으로설정하면, 아카이브로깅방식이사용됩니다. 비활성로그를현재의로그디렉토리가아닌위치에아카이브하도록합니다. 기본값은 OFF 이며, LOGRETAIN, USEREXIT, DISK, TSM, VENDER 중에서설정합니다. DISK 를이용한아카이브경로명은 <DISK: 절대경로명 > 의형태로설정합니다. 지정한개수의 COMMIT 요청을수행할때까지로그파일에기록하는것을지연합니다. 최대지연시간은 초입니다. SOFTMAX 응급복구시에사용되는활성로그의양을지정합니다. CHNGPGS_THRESH 버퍼풀에서디스크로반영되지않은변경된페이지의최대비율을설정합니다. UNIT 백업과복구 0
0 순환로깅 고정된개수의로그파일을순환하며재사용하는방식입니다. 기본적으로적용되는로깅방식으로운영하는로그파일의최대개수는 LOGPRIMARY 와 LOGSECOND 데이터베이스구성변수에의해결정됩니다. 로그파일명은 S0000000.LOG 부터시작합니다. 활성로그는응급복구시에사용됩니다. 비활성로그는재사용되므로데이터베이스복구에이용될수없습니다. 데이터베이스가활성화되면 LOGPRIMARY 데이터베이스구성변수에설정된개수의로그파일들이로그디렉토리에새롭게생성됩니다. 생성된로그파일의번호는 0 번부터시작합니다. $ db get db cfg for <DB 명 > grep LOGPRIMARY $ db get db cfg for <DB 명 > grep LOGSECOND N M Figure 0A 비활성로그를재사용하는순환로깅 LOGRETAIN과 USEREXIT 변수를모두 OFF로설정해도순환로깅모드로전환됩니다. 이전버전과의호환을위해유지하는구성변수이므로사용하지않을것을권장합니다. LOGSECOND의값을 -로설정하면 차로그가무제한으로할당됩니다. 트랜잭션의개수나크기에는제한이없어지지만, 응급복구시에많은시간이소모될수있으므로주의가필요합니다. 임시로사용되었던 차로그는비활성로그가되면엔진에의해비동기적으로제거됩니다. 활성로그가 LOGPRIMARY 와 LOGSECOND 의합을초과하면 'LOG FULL' 상태라고합니다. 5 6 7 update db cfg 명령어로 LOGARCHMETH 구성변수의값을 OFF 로설정합니다. $ db update db cfg for <DB 명 > using LOGARCHMETH OFF UOW 가시작되면 0 번로그는활성로그가되어기록을시작하고, 0 번을모두채우면 번이활성로그가되어 0 번로그에이어서기록을시작합니다. 0 번로그에포함된트랜잭션들이모두종료되었다면, 0 번로그는비활성로그가되어서다음번에재사용됩니다. 0 번로그에아직종료되지않은트랜잭션이포함되어있다면, 0 번로그와 번로그는모두활성로그가됩니다. 유사한방법으로현재 N 번로그가활성로그이고, 더이상기록할공간이없으면다음번호의로그파일을요청합니다. 이시점에서 0 번로그가비활성로그였다면, N 번로그에뒤를이어재사용됩니다. 0 번로그가활성로그였다면, LOGSECOND 에서지정한로그가사용되어전체활성로그의수는 N+ 이됩니다. 유사한방법으로 LOGSECOND 가지정한 M 개의로그가모두활성로그가된상태에서더이상기록할공간이없으면, 로그공간부족현상이발생하면서, 진행중이던트랜잭션은모두롤백됩니다. 즉, 활성로그의최대개수는 LOGPRIMARY 구성변수와 LOGSECOMD 구성변수의합을초과할수없습니다. LOGSECOND 로생성된 M 개의로그들이비활성로그가되면, 비동기식으로엔진에의해제거되고, 다시 LOGPRIMARY 의값인 N 개의로그가남게됩니다. 0
0 아카이브로깅 한개의로그파일이비활성화되면, 새로운로그파일을생성하여항상고정된개수의로그파일을운영하는방식입니다. 데이터베이스구성변수인 LOGARCHMETH 의값을 LOGRETAIN 으로설정하면됩니다. 보관된로그파일은롤포워드복구시에사용됩니다. 보관된로그파일중에서특정시점이전의불필요한로그파일은제거해도됩니다. 아카이브로깅에서순환로깅으로전환하면로그파일의번호는 0 부터다시시작됩니다. 데이터베이스가활성화되면 LOGPRIMARY 데이터베이스구성변수에설정된개수의로그파일들이로그디렉토리에새롭게생성됩니다. 생성된로그파일의번호는최근에사용했던로그파일의다음번호입니다. $ db get db cfg for <DB 명 > grep " 처음에사용되는로그파일 " 순환로깅에서아카이브로깅으로전환되면복구시에사용될최초의데이터베이스백업이필요하게되므로, 데이터베이스는백업보류 'Backup Pending' 상태가됩니다. backup db 명령어로데이터베이스백업을실행하면됩니다. LOGRETAIN 또는 USEREXIT 변수를 ON으로설정해도아카이브로깅모드로전환됩니다. 이전버전과의호환을위해유지하는구성변수이므로사용하지않을것을권장합니다. Figure 0A 온라인아카이브로그와오프라인아카이브로그 update db cfg 명령어로 LOGARCHMETH 구성변수의값을 LOGRETAIN 으로설정합니다. 비활성로그는기본적으로활성로그와동일한로그디렉토리에보관되는데, 이러한로그를 ' 온라인보관로그 ' 라고합니다. 사용자의수작업또는 user exit 프로그램에의해다른저장공간으로이동된비활성로그 ' 오프라인보관로그 ' 라고합니다. 활성로그가 LOGPRIMARY 와 LOGSECOND 의합을초과하면 'LOG FULL' 상태라고합니다. 5 6 7 $ db update db cfg for <DB 명 > using LOGARCHMETH LOGRETAIN UOW 가시작되면 0 번로그는활성로그가되어기록을시작하고, 0 번을모두채우면 번이활성로그가되어 0 번로그에이어서기록을시작합니다. 0 번로그에포함된트랜잭션들이모두종료되었다면, 0 번로그는비활성로그가되어더이상사용되지않고보관됩니다. 새로운 N+ 번의로그파일을생성하여전체로그파일의개수는 N 개를유지하도록합니다. 0 번로그에아직종료되지않은트랜잭션이포함되어있다면, 0 번로그와 번로그는모두활성로그가됩고, N+ 번로그는생성되지않습니다. 현재 N 개의로그가활성로그이고, 더이상기록할공간이없으면 LOGSECOND 에서지정한로그가사용되어전체활성로그의수는 N+ 이됩니다. 유사한방법으로 LOGSECOND 가지정한 M 개의로그가모두활성로그가된상태에서더이상기록할공간이없으면, 로그공간부족현상이발생하면서, 진행중이던트랜잭션은모두롤백됩니다. 즉, 활성로그의최대개수는 LOGPRIMARY 구성변수와 LOGSECOMD 구성변수의합을초과할수없습니다. LOGSECOND 로생성된 M 개의로그들이비활성로그가되면, 제거되지않고그대로보관됩니다. 다시 LOGPRIMARY 의값인 N 개의로그가남게됩니다. UNIT 백업과복구 0
05 USER EXIT 아카이브로깅방식을운영할때, 비활성로그는기본적으로활성로그와동일한디렉토리에보관됩니다. LOGARCHMETH 구성변수를설정하여비활성로그를지정한저장영역으로이동시킬수있습니다. 아카이브디렉토리는미리생성되어있지않으면, SQL5099N 오류가반환됩니다. LOGARCHMETH 변수는 TSM 서버와 VENDER API를이용한 USEREXIT도지원합니다. deactivate db 명령어를실행하기전에데이터베이스에접속된모든응용프로그램은종료되어야합니다. update db cfg 명령어로 LOGARCHMETH 구성변수의값을 DISK:< 경로명 > 으로설정합니다. < 경로명 > 은절대경로명으로표현합니다. $ db update db cfg for <DB 명 > using LOGARCHMETH DISK:< 경로명 > get db cfg 명령어의 show detail 옵션으로변경값이반영되었는지확인합니다. $ db connect to <DB 명 > $ db get db cfg for <DB 명 > SHOW DETAIL grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = OFF update db cfg 명령어를실행한후에 SQL6W 경고를받았다면, 변경값이동적으로반영되지않았으므로데이터베이스를재활성화합니다. $ db terminate $ db deactivate db <DB명 > activate db 명령어로데이터베이스를재활성화하면 SQL6N 오류가반환됩니다. $ db get db cfg for <DB명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = DISK:< 경로명 > $ db activate db <DB명 > SQL6N BACKUP PENDING 때문에데이터베이스 "<DB명 >" 에연결하거나활성화할수없습니다. SQLSTATE=579 5 LOGARCHMETH 의값이 OFF 가아닌경우는아카이브로깅모드로설정되므로최초의오프라인모드의데이터베이스 FULL 백업이필요합니다. backup db 명령어를실행하여데이터베이스의 ' 백업보류 ' 상태를해제하고, 다시데이터베이스를재활성화합니다. $ db backup db <DB명 > $ db activate db <DB명 > 6 다양한트랜잭션을실행시키면로그파일에변경내용이기록되고, 비활성로그가되면자동적으로 LOGARCHMETH 변수가지정한 < 경로명 > 로이동됩니다. $ ls R < 경로명 > S0000000.LOG S00000.LOG S000000.LOG 7 활성로그파일의시작번호를확인하면마지막아카이브로그의번호를알수있습니다. $ db get db cfg for <DB명 > grep " 처음에사용되는로그파일 " 처음에사용되는로그파일 = S000000.LOG 05
06 복구기록파일 데이터베이스를생성하면복구실행기록파일이생성되어, 데이터베이스에대한 BACKUP, RESTORE, ROLLFORWARD, LOAD 등의작업에대한정보가관리됩니다. 복구기록파일이손상되면, restore db 명령어로복구할수있습니다. create db 명령어로데이터베이스를생성하면복구기록파일이생성됩니다. Figure 06A 복구기록파일의생성과갱신 복구기록파일은다음과같은명령어가실행될때갱신됩니다. 대상데이터베이스테이블스페이스테이블로그 명령어 BACKUP DATABASE RESTORE DATABASE ROLLFORWARD DATABASE BACKUP DATABASE RESTORE DATABASE ROLLFORWARD DATABASE CREATE TABLESPACE ALTER TABLESPACE QUIESCE TABLESPACE RENAME TABLESPACE DROP TABLESPACE LOAD REORG TABLE REORG INDEXES DROP TABLE ARCHIVE LOG 로그파일이아카이브로그로저장될때 UNIT 백업과복구 06
07 LIST HISTORY 명령어 LIST HISTORY 명령어로복구실행기록파일에서작업유형별로기록을확인할수있습니다. SINCE 옵션을이용하면특정시점이후의기록을확인할수있으며, CONTAINING 옵션을이용하면지정한오브젝트와관련된기록만추출할수있습니다. restore db 명령어를실행한기록을 BACKUP 옵션으로 backup db 명령어를실행한기록과함께확인합니다. list history 명령어를이용하여복구기록파일의내용을조회할수있습니다. drop tablespace 문을실행한기록을 CREATE TABLESPACE 옵션으로 create tablespace문을실행한기록과함께확인합니다. 조작종류 (Op) 는다음과같습니다. Figure 07A LIST HISTORY 명령어 list history 명령어를이용하여복구기록파일의내용을조회할수있습니다. 조작대상 (Obj) 은다음과같습니다. $ db list history ALL for <DB 명 > $ db list history BACKUP all for <DB 명 > $ db list history ROLLFORWARD all for <DB 명 > $ db list history backup SINCE < 시간소인 > for <DB 명 > $ db list history rollforward CONTAINING < 스키마명 >.< 테이블명 > for <DB 명 > $ db list history REORG all for sample 조작유형은다음과같습니다. 복구기록파일이저장하는정보는다음과같습니다. 조작종류 조작대상 조작시작시간 저장장치의유형 롤포워드조작에필요한최소시점로그 조작유형 롤포워드조작에필요한첫번째로그 연관된테이블스페이스 연관된명령어 조작시작시점과완료시점 백업이미지파일의위치 Figure 07B backup db 명령어의실행에관한기록정보 07
08 PRUNE HISTORY 명령어 PRUNE HISTORY 명령어로복구실행기록파일에서특정 < 시간소인 > 이전의기록을제거할수있습니다. 복구실행기록파일의기본보관주기는 66 일이며, REC_HIS_RETENTN 데이터베이스구성변수로조절할수있습니다. prune history 명령을이용하여복구기록파일의내용중에서지정한시점이전의기록을삭제할수있습니다. Figure 08A PRUNE HISTORY 명령어 prune history 명령을이용하여복구기록파일의내용중에서지정한시점이전의기록을삭제할수있습니다. < 시간소인 > 은 <yyyymmddhhmmss> 형식으로표시합니다. <yyyy> 이상을명시할수있습니다. $ db prune history <yyyy> $ db prune history <yyyymmdd> $ db prune history <yyyymmddhhmmss> WITH FORCE 옵션을이용하면복구기록파일의모든항목을완전히제거합니다. 옵션을지정하지않으면, 최근의 FULL 백업정보와연관되는복구작업의기록은유지됩니다. $ db prune history <yyyymmddhhmmss> WITH FORCE OPTION AND DELETE 옵션을이용하면복구기록파일에서항목이삭제되고, 해당항목과관련된아카이브로그파일도물리적으로제거됩니다. USEREXIT 프로그램을사용하여아카이브로그파일을관리하는경우에는지원되지않습니다. $ db prune history <yyyymmddhhmmss> AND DELETE 5 prune logfile prior to 명령어로지정한번호보다작은번호의로그파일을모드제거합니다. LOGRETAIN 변수가 ON 으로설정되어야합니다. 로그파일명은 S00000.LOG 와같은형식으로표시합니다. $ get db cfg for <DB명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = LOGRETAIN $ db prune logfile prior to < 로그파일명 > update db cfg 명령어를실행한후에 SQL6W 경고를받았다면, 변경값이동적으로반영되지않았으므로데이터베이스를재활성화합니다. 6 update dbm cfg 명령어를이용하여 REC_HIS_RETENTN 데이터베이스구성변수를변경합니다. < 기간 > 은 일단위로지정합니다. 기본값은 66 일입니다. $ db get db cfg for <DB 명 > grep REC_HIS_RETENTN 복구실행기록보유 ( 일 ) (REC_HIS_RETENTN) = 66 $ db update db cfg for <DB 명 > using REC_HIS_RETENTN < 기간 > UNIT 백업과복구 08
09 백업의종류 BACKUP DB 명령어를이용하여특정한데이터베이스의모든데이터와제어정보를저장한이미지파일을생성할수있습니다. ONLINE/OFFLINE 백업, FULL/TABLESPACE 백업, FULL/INCREMENTAL/DELTA 백업으로분류됩니다. 백업이미지는한개이상의파일로생성되어디스크, 테이프, TSM 등으로저장됩니다. SYSADM, SYSCTRL, SYSMAINT 권한의사용자가원격또는지역데이터베이스에대해백업을실행하면백업이미지파일이생성됩니다. 백업이미지에는해당데이터베이스에대한모든정보와데이터가저장되므로, 새로운데이터베이스를생성하는데이용되기도합니다. Figure 09A 지역또는원격데이터베이스의백업 백업의모드는 가지로분류됩니다. 모드 OFFLINE ONLINE 백업의수준은 가지로분류됩니다. 대상 설명 데이터베이스에접속된사용자가없는상태에서백업하는모드입니다. 백업이진행되는동안데이터의변경은발생하지않으므로, 백업이미지파일만보관하면복구에사용할수있습니다. 사용자가데이터베이스에접속하고있는상태에서백업하는모드입니다. 백업이진행되는동안데이터가변경중일수도있으므로, 백업이미지파일과백업이진행되는동안변경된데이터에대한로그파일을함께보관해야복구에사용할수있습니다. 아카이브로깅에서만지원됩니다. 설명 DATABASE 데이터베이스의모든테이블스페이스를백업합니다. TABLESPACE 지정한테이블스페이스만백업합니다. 아카이브로깅에서만지원됩니다. 백업의범위는 가지로분류됩니다. 범위 설명 FULL 데이터베이스의모든데이터와제어정보를백업합니다. INCREMENTAL DELTA 최근의 FULL 백업이후에변경된부분만백업합니다. 아카이브로깅에서만지원됩니다. 최근의 FULL 또는 INCREMENTAL 백업이후에변경된부분만백업합니다. 아카이브로깅에서만지원됩니다. 09
0 BACKUP DB 명령어 다양한방식의데이터베이스백업은모두 BACKUP DB 명령어를이용해서실행합니다. SYSADM, SYSCTRL, SYSMAINT 권한을가진사용자가실행하며, 백업이미지파일을생성합니다. BACKUP DB 명령어의형식은다음과같습니다. Figure 0A BACKUP DB 명령어 오프라인모드의데이터베이스백업을받으려면, 접속된모든응용프로그램을종료해야합니다. INCREMENTAL 백업, DELTA 백업은아카이브로깅모드에서 TRACKMOD 구성변수가 YES로설정되어야가능합니다. 원격데이터베이스의백업이미지는서버머신에생성되므로 TO 옵션에는원격서버의경로명을지정합니다. 백업이완료되면, 사용되던마지막활성로그는 truncate 되고, 새로운로그파일이사용됩니다., 자주사용되는옵션은다음과같습니다. DB 명 옵션 USER, USING 설명 지역 DB 명또는 catalog db 명령어로등록된원격 DB 명을지정합니다. 백업을실행하는사용자명과암호명을지정합니다. 원격데이터베이스의백업에는반드시 USER 와 USING 옵션으로사용자명과암호명을지정해야합니다. TABLESPACE 괄호안에백업을원하는테이블스페이스의이름들만나열합니다. ONLINE 온라인모드의백업을실행합니다. 아카이브로깅에서만지원됩니다. INCREMENTAL DELTA TO WITH ~ BUFFERES INCREMENTAL 백업을실행합니다. 아카이브로깅에서만지원됩니다. DELTA 백업을실행합니다. INCREMENTAL 옵션과함께사용합니다. 아카이브로깅에서만지원됩니다. 백업이미지파일이생성되는디렉토리를지정할수있습니다. 한개이상의경로명을지정하면, 백업이미지파일은여러개의파일로분할되어생성됩니다. 옵션을지정하지않으면, 현재디렉토리에한개의파일로생성됩니다. 백업작업을위해데이터베이스공유메모리에서할당하는버퍼의개수를지정합니다. BUFFER 백업작업을위해할당하는버퍼의크기를지정합니다. INCLUDE LOGS 복구에필요한최소한의로그파일을백업이미지에함께저장하는옵션으로오프라인백업에는적용되지않습니다. UNIT 백업과복구 0
백업이미지파일 백업이미지파일은기본적으로한개입니다. UNIX 에서백업이미지파일의이름에는 DB 명, 백업의유형, 인스턴스명, 데이터베이스파티션번호, 백업완료시간소인, 파일일련번호등의정보가반영됩니다. 테이프장치에생성된백업이미지는 dbckbkp 유틸리티를이용하여헤더파일에저장된백업정보를확인할수있습니다. UNIX 에서는복구시에임의의디렉토리에이미지파일을복사하면됩니다. Windows 인경우에는하위경로명이백업이미지를생성했을때와동일해야합니다. UNIX에서백업이미지파일명이백업에관한정보를반영하고있습니다.. 데이터베이스별명인스턴스명카탈로그파티션번호일련번호 DBALIAS.0.POST.NODE0000.CATN0000.996059.0 백업유형데이터베이스파티션번호시간소인 Figure A UNIX 에서생성된백업이미지파일명 Windows 에서는서브경로명과백업이미지파일명이함께백업정보를반영합니다. 데이터베이스별명인스턴스명카탈로그파티션번호시간소인 (hhmmss) DBALIAS.0\POS\NODE0000\CATN0000\00600\59.0 백업유형데이터베이스파티션번호시간소인 (yyyymmdd) 일련번호 Figure B Windows 에서생성된백업이미지파일명 백업이미지파일의이름에온라인, 오프라인유형정보는반영되지않습니다. 상세한 list history 명령어로확인할수있습니다. 백업이미지파일의크기가 OS에서지정한한계를초과하거나 backup db 명령어의 TO 옵션으로강제로분할해서생성한경우에는두개이상의파일로분할됩니다. 백업이미지파일명의각항목은다음과같습니다. DB 명 백업유형 인스턴스명 옵션 데이터베이스파티션번호 설명 지역 DB 명또는 catalog db 명령어로등록된원격 DB 명을표시합니다. 0 은데이터베이스백업이미지, 은테이블스페이스백업이미지, 는 LOAD 유틸리티의 COPY YES 옵션으로생성된백업이미지를나타냅니다. 데이터베이스가존재하는서버의인스턴스이름입니다. 원격데이터베이스인경우에는원격서버머신에백업이미지파일이생성되고, 원격인스턴스명이표시됩니다. 백업된데이터베이스파티션의번호입니다. DPF 환경에서는파티션별로백업이미지가생성되며, 단일파티션인경우에는항상 NODE0000 이됩니다. 카탈로그파티션번호카탈로그테이블이생성된데이터베이스파티션의번호입니다. 시간소인 일련번호 단일파티션인경우에는항상 CATN0000 이됩니다. 백업작업이완료된시간소인입니다. UNIX 머신에서는 <yyyymmddhhmmss> 의형태로표시되고, Windows 에서는 <yyyymmdd> 과 <hhmmss> 로분리됩니다. 백업이미지파일이두개이상의파일로분할된경우에는동일한이름을가지며, 일련번호가다른여러개의백업이미지파일이생성됩니다.
FULL 백업 BACKUP DB 명령어로데이터베이스전체에대한백업이미지파일을생성합니다. 순환로깅에서는오프라인백업만지원되며, 아카이브로깅모드에서는오프라인백업과온라인백업을모두지원합니다. 원격데이터베이스도백업할수있습니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 주기적으로 FULL 백업을실행합니다. 마지막으로생성한 FULL 백업의이미지는복구시에사용되므로안전하게보관합니다. 온라인백업이라면백업작업동안사용된로그파일을함께보관해야합니다. 아카이브로깅모드를사용하면백업을실행하는시간동안연관되었던로그파일들도함께보관해야복구를완료할수있습니다. 순환로깅에서생성된백업이미지는로그파일과연관되지않습니다. 일요일월요일화요일수요일목요일금요일 :00 :00 :00 :00 :00 :00 토요일 :00 FULL 백업이미지 FULL 백업이미지 FULL 백업이미지 FULL 백업이미지 FULL 백업이미지 FULL 백업이미지 FULL 백업이미지 Figure A FULL 백업 backup db 명령어를실행하는세션은내부적으로데이터베이스에접속하여백업이미지파일을생성하고, 작업이완료되면데이터베이스에대한접속을종료합니다. 온라인백업을받은세션도마찬가지로종료됩니다. 순환로깅모드인경우에는오프라인모드의 FULL 백업만가능합니다. $ get db cfg for <DB명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = OFF $ db backup db <DB명 > 아카이브로깅모드인경우에만오프라인백업과온라인백업이모두가능합니다. $ get db cfg for <DB명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = LOGRETAIN $ db backup db <DB명 > $ db backup db <DB명 > ONLINE 원격데이터베이스의백업이미지파일은원격데이터베이스서버머신에생성됩니다. 원격데이터베이스의백업경로명은원격데이터베이스서버머신의유효한경로명으로지정합니다. 5 원격데이터베이스의백업을실행할때는반드시 < 사용자명 > 과 < 암호명 > 를입력해야합니다. $ db backup db <DB명 > user < 사용자명 > using < 암호명 > TO 옵션을이용하여백업이미지를독립적인디렉토리에따로생성하는것이좋습니다. $ db backup db <DB명 > TO < 경로명 > $ db backup db <DB명 > TO < 경로명>, < 경로명> FULL 백업은 <Obj> 항목에 'D' 라고표시되며, < 유형 > 항목에오프라인백업이면 'F', 온라인백업이면 'N' 이라고표시됩니다. 6 list history 명령어로해당 INCREMENTAL 백업과연관된로그파일의번호를확인합니다. $ db list history backup for <DB 명 > UNIT 백업과복구
INCREMENTAL 백업 BACKUP DB 명령어의 INCREMENTAL 옵션을이용하여최근의 FULL 백업이후에변경된부분만백업이미지파일에저장합니다. 아카이브로깅모드이고, TRACKMOD 구성변수가 ON 으로설정되어있어야합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 주기적으로 FULL 백업을실행하고, 다음 FULL 백업이되기전까지는 INCREMENTAL 백업을여러번실행합니다. 기준이되는 FULL 백업이미지와마지막으로생성한 INCREMENTAL 백업의이미지, 백업작업동안사용된로그파일은복구를대비하여안전하게보관해야합니다. 증분식 (cumulative) 백업이라고도합니다. 일요일월요일화요일수요일목요일금요일 토요일 :00 :00 :00 :00 :00 :00 :00 FULL 백업 INCREMENTAL 백업 Figure A FULL, INCREMENTAL 백업 아카이브로깅모드를사용하므로백업을실행하는시간동안연관되었던로그파일들도함께보관해야복구를완료할수있습니다. 아카이브로깅모드에서만지원되므로 LOGARCHMETH 데이터베이스구성변수의값이 OFF 가아닌것을확인합니다. $ get db cfg for <DB 명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = LOGRETAIN TRACKMOD 데이터베이스구성변수의값이 ON 인것을확인합니다. $ db get db cfg for <DB명 > grep TRACKMOD 트랙수정페이지 (TRACKMOD) = ON backup database 명령에서 INCREMENTAL 옵션을이용하여최근의 FULL 백업이후에변경된부분에대해서만백업이미지를생성합니다. $ db backup db <DB 명 > INCREMENTAL $ db backup db <DB 명 > ONLINE incremental $ db backup db <DB 명 > online incremental TO < 디렉토리명 > $ db backup db <DB 명 > online incremental to < 디렉토리명 > INCLUDE LOGS INCREMENTAL 백업은 < 유형 > 항목에오프라인백업이면 'I', 온라인백업이면 'O' 라고표시됩니다. 5 list history 명령어로해당 INCREMENTAL 백업과연관된로그파일의번호를확인합니다. $ db list history backup for <DB 명 >
DELTA 백업 BACKUP DB 명령어의 INCREMENTAL DELTA 옵션을이용하여최근의 FULL 또는 INCREMENTAL 백업이후에변경된부분만백업이미지파일에저장합니다. 아카이브로깅모드이고, TRACKMOD 구성변수가 ON 으로설정되어있어야합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 주기적으로 FULL 백업을실행하고, 다음 FULL 백업이되기전까지는 INCREMENTAL 백업또는 DELTA 백업을여러번실행합니다. 기준이되는 FULL 백업이미지와마지막으로생성한 INCREMENTAL 백업이미지, 최근까지의 DELTA 백업이미지, 백업작업동안사용된로그파일은복구시에사용되므로안전하게보관해야합니다. 일요일월요일화요일수요일목요일금요일 토요일 :00 :00 :00 :00 :00 :00 :00 FULL 백업 INCREMENTAL 백업 DELTA 백업 Figure A FULL, INCREMENTAL, DELTA 백업 아카이브로깅모드를사용하므로백업을실행하는시간동안연관되었던로그파일들도함께보관해야복구를완료할수있습니다. 아카이브로깅모드에서만지원되므로 LOGARCHMETH 데이터베이스구성변수의값이 OFF 가아닌것을확인합니다. $ get db cfg for <DB 명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = LOGRETAIN TRACKMOD 데이터베이스구성변수의값이 ON 인것을확인합니다. $ db get db cfg for <DB명 > grep TRACKMOD 트랙수정페이지 (TRACKMOD) = ON backup database 명령에서 INCREMENTAL DELTA 옵션을이용하여최근의 FULL 또는 INCREMENTAL 백업이후에변경된부분에대해서만백업이미지를생성합니다. $ db backup db <DB 명 > INCREMENTAL DELTA $ db backup db <DB 명 > ONLINE incremental delta $ db backup db <DB 명 > online incremental delta TO < 디렉토리명 > $ db backup db <DB 명 > online incremental delta to < 디렉토리명 > INCLUDE LOGS DELTA 백업은 < 유형 > 항목에오프라인백업이면 'D', 온라인백업이면 'E' 라고표시됩니다. 5 list history 명령어로해당 INCREMENTAL 백업과연관된로그파일의번호를확인합니다. $ db list history backup for <DB 명 > UNIT 백업과복구
5 테이블스페이스백업 데이터베이스전체를백업하는것이아니라, 중요한테이블스페이스만백업합니다. BACKUP DB 명령어에서 TABLESPACE 옵션을이용합니다. 한개이상의테이블스페이스를함께백업할수있으며, 아카이브로깅모드에서지원됩니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 카탈로그테이블스페이스또는중요한테이블스페이스만별도로백업합니다. 테이블스페이스에대한백업이미지파일과백업작업동안사용된로그파일을안전하게보관해야합니다. 데이터베이스 FULL 백업 테이블스페이스백업 테이블스페이스백업 Figure 5A 테이블스페이스백업 아카이브로깅모드에서만지원되므로 LOGARCHMETH 데이터베이스구성변수의값이 OFF 가아닌것을확인합니다. $ get db cfg for <DB 명 > grep LOGARCHMETH 첫번째로그아카이브메소드 (LOGARCHMETH) = LOGRETAIN backup database 명령에서 TABLESPACE 옵션을이용하여한개이상의테이블스페이스에대한백업이미지를생성합니다. 연관된테이블스페이스는함께백업합니다. $ db "backup db <DB 명 > TABLESPACE (<TS 명 >)" $ db "backup db <DB 명 > TABLESPACE (<TS 명 >, <TS 명 >)" ONLINE, TO, INCREMENTAL, DELTA 등의옵션과함께사용될수있습니다. $ db "backup db <DB 명 > tablespace (<TS 명 >) ONLINE " $ db "backup db <DB 명 > tablespace (<TS 명 >) online TO < 디렉토리명 >" $ db "backup db <DB 명 > tablespace (<TS 명 >) online INCREMENTAL" $ db "backup db <DB 명 > tablespace (<TS 명 >) online INCREMENTAL DELTA" TABLESPACE 백업은 <Obj> 항목에 'P' 라고표시됩니다. 5 list history 명령어로해당 INCREMENTAL 백업과연관된로그파일의번호를확인합니다. $ db list history backup for <DB 명 > 5
6 복구의종류 RESTORE DB, ROLLFORWARD DB 명령어에서백업이미지와아카이브로그로원하는시점으로복구합니다. CRASH/ VERSION/ROLLFORWARD, DATABASE/TABLESPACE, FULL/INCREMENTAL/DELTA 복구로분류됩니다. 데이터베이스를사용할수없는상태가되면 SYSADM, SYSCTRL, SYSMAINT 권한의사용자가원격또는지역데이터베이스의백업이미지파일, 아카이브로그파일, 활성로그파일등을이용하여데이터베이스를복구합니다. 백업이미지는한개이상의파일로생성되어디스크, 테이프, TSM 등으로저장됩니다. VERSION 버전복구 CRASH 크래쉬복구 ROLLFORWARD 롤포워드복구 롤포워드복구, 테이블스페이스복구, INCREMENTAL 복구, DELTA 복구는아카이브로깅에서만지원되며, 백업이미지와연관된최소한의아카이브로그가반드시존재해야합니다. Figure 6A 다양한복구방법 복구의유형은세가지로분류됩니다. 방법 설명 크래쉬복구정전등의비상시에활성로그파일을이용하여자동실행됩니다. 버전복구 롤포워드복구 복구의수준은 가지로분류됩니다. 대상 과거시점에생성했던오프라인모드의데이터베이스백업이미지를이용하여과거의시점과동일한상태로데이터베이스를복구합니다. 버전복구를완료한후에아카이브로그파일을이용하여원하는시점까지의로그파일을적용하는복구입니다. 설명 DATABASE 데이터베이스의모든테이블스페이스를복원합니다. TABLESPACE 지정한테이블스페이스만복원합니다. 복구의범위는 가지로분류됩니다. 범위 설명 FULL FULL 백업이미지를이용하여복구합니다. INCREMENTAL DELTA 최근의 INCREMENTAL 백업이미지와기준이되는 FULL 백업이미지를이용하여복구합니다. 최근의 DELTA 백업이미지들과기준이되는 INCREMENTAL 백업이미지, 기준이되는 FULL 백업이미지를이용하여복구합니다. UNIT 백업과복구 6
7 RESTART DB 명령어 시스템정전등의비상시에실행되는크래쉬복구를실행하는명령어입니다. 인스턴스가비정상적으로종료되는경우에도크래쉬복구가필요합니다. 크래쉬복구의자동실행여부는 AUTORESTART 데이터베이스구성변수로조절합니다. restart db 명령어를실행하는세션은내부적으로데이터베이스에접속합니다. 작업을완료한후에데이터베이스에대한접속은유지됩니다. RESTART DB 명령어의형식은다음과같습니다. Figure 7A RESTART DB 명령어 사용되는옵션은다음과같습니다. DB 명 옵션 USER, USING DROP PENDING TABLESPACES 설명 지역 DB 명또는 catalog db 명령어로등록된원격 DB 명을지정합니다. 크래쉬복구를실행하는사용자명과암호명을지정합니다. 원격데이터베이스의복구에는반드시 USER 와 USING 옵션으로사용자명과암호명을지정해야합니다. 테이블스페이스의컨테이너가손상되면해당테이블스페이스는사용할수없게됩니다. 이러한테이블스페이스가발견되면, 크래쉬복구를완료할수없습니다. 괄호안에 DROP 을원하는테이블스페이스의이름들을나열하면해당테이블스페이스는 'DROP 보류 ' 상태가됩니다. 크래쉬복구가완료된후에데이터베이스에접속하여테이블스페이스를재생성해야합니다. 7
8 RESTORE DB 명령어 BACKUP DB 명령어로생성된백업이미지파일을이용하여데이터베이스를과거의시점과동일한버전으로복구합니다. SYSADM, SYSCTRL, SYSMAINT 권한을가진사용자가실행하며, 백업이미지파일이필요합니다. RESTORE DB 명령어의형식은다음과같습니다. Figure 8A RESTORE DB 명령어 지정한디렉토리에동일한데이터베이스에대한백업이한개만있으면 TAKEN AT 옵션이필요없습니다. INCREMENTAL 복구, DELTA 복구는아카이브로깅모드에서 TRACKMOD 구성변수가 YES로설정되어야가능합니다. FULL 데이터베이스복구시에는데이터베이스가비활성화되어야하므로접속된모든응용프로그램을종료해야합니다. 원격데이터베이스의백업이미지는서버머신에존재하므로 FROM 옵션에는원격서버의경로명을지정합니다. 자주사용되는옵션은다음과같습니다. 옵션 설명 DB 명지역 DB 명또는등록된원격 DB 의별명을지정합니다. USER, USING 복구를실행하는사용자명과암호명을지정합니다. 원격데이터베이스에는반드시사용자명과암호명을지정해야합니다. TABLESPACE 괄호안에복구를원하는테이블스페이스의이름들만나열합니다. HISTORY FILE 복구실행기록파일만복구합니다. ONLINE 온라인모드로복구합니다. TABLESPACE 복구에지원됩니다. INCREMENTAL INCREMENTAL 또는 DELTA 백업이미지의복구를실행합니다. FROM TAKEN AT 백업이미지파일이존재하는디렉토리를지정합니다. 백업이미지파일이여러개의파일로분할되어생성되었으면, 한개이상의경로명을지정해야합니다. 옵션을지정하지않으면, 현재디렉토리에한개의백업이미지파일을이용합니다. 지정한경로명에동일한 DB 에대한백업이미지가여러개있는경우에는백업이미지의생성시간소인을명시하여구별합니다. TO 새로운데이터베이스가생성될경로명을지정합니다. INTO 새로생성될데이터베이스명을지정합니다. WITH ~ BUFFERES 복구작업을위해데이터베이스공유메모리에서할당하는버퍼의개수를지정합니다. BUFFER 복구작업을위해할당하는버퍼의크기를지정합니다. UNIT 백업과복구 8
9 ROLLFORWARD DB 명령어 RESTORE DB 명령어로데이터베이스가과거의시점으로버전복구가완료된후에아카이브로그를차례로읽어들여로그에기록된변경내용을데이터베이스에반영합니다. 버전복구에사용된백업이미지가생성된시점이후의아카이브로그가필요합니다. ROLLFORWARD DB 명령어의형식은다음과같습니다. Figure 9A ROLLFORWARD DB 명령어 로그파일의내용은표준시간으로기록됩니다. 한국에서사용하는데이터베이스서버는대부분 TIMEZONE 의값이 +9 이므로, 원하는시점에서 -9를하면표준시간이산출됩니다. USING LOCAL TIME 옵션을사용할것을권장합니다. END OF LOGS 는최근의로그까지적용한다는의미가아니라, 로그디렉토리에존재하는모든아카이브로그를적용한다는의미이므로구별해야합니다. ROLLFORWARD 명령은여러번반복적으로실행할수있습니다. 적용할아카이브로그파일이너무많아서로그디렉토리로한꺼번에복사할수없는경우에는일정개수씩분할하여여러번반복해서 END OF LOGS 옵션으로적용합니다. 마지막적용이끝나면 STOP 옵션으로롤포워드를종료합니다. 자주사용되는옵션은다음과같습니다. 옵션 설명 DB 명롤포워드의대상이되는데이터베이스의별명을지정합니다. USER, USING 롤포워드를실행하는사용자명과암호명을지정합니다. 원격데이터베이스는반드시사용자명과암호명을지정해야합니다. TO isotime < 표준시간 > 으로표시한시점까지의로그파일을적용합니다. OS 의 TIMEZONE 값을이용한환산이필요합니다. < 표준시간 > 은 <yyyy-mm-dd-hh.mm.ss.nnnnnn> 의형태로표현합니다. USING LOCAL TIME TO END OF LOGS TO isotime 옵션과함께사용합니다. < 표준시간 > 대신에현시스템의시간대에서사용하는 < 지역시간 > 을지정합니다. < 지역시간 > 도 <yyyy-mm-dd-hh.mm.ss.nnnnnn> 의형태로표현합니다. 로그디렉토리에존재하는온라인아카이브로그파일의최대번호까지롤포워드를실행합니다. STOP 롤포워드를종료하고, ' 롤포워드보류 ' 상태를해제합니다. CANCEL 롤포워드를중단하고, 데이터베이스를다시 ' 리스토어보류 ' 상태가되게합니다. RESTORE DB 명령어로다시복구작업을실행해야합니다. QUERY STATUS 롤포워드작업의진행정보를알려줍니다. TABLESPACE 테이블스페이스수준의롤포워드작업시에사용합니다. ONLINE 테이블스페이스수준의롤포워드를온라인모드로실행합니다. 다른테이블스페이스는액세스할수있습니다. 9
0 크래쉬복구 데이터베이스가비정상적으로종료되면, 데이터의일관성을보장하기위해 restart db 명령어로활성로그파일을읽어서실행중이던트랜잭션의 COMMIT 과 ROLLBACK 을완료합니다. AUTORESTART 변수가 ON 이므로자동적으로실행됩니다. 특별한권한이필요하지않습니다. 크래쉬복구는로깅모드와상관이없습니다. 크래쉬복구에필요한것은손상직전의활성로그입니다. 응용프로그램이연결되어있을때데이터베이스가비정상종료하는경우에는크래쉬복구가필요합니다. 데이터베이스의비정상종료는전원공급중단이나시스템소프트웨어장애로인해발생할수있습니다. 이러한종료는실패시데이터베이스버퍼풀에있으나디스크에기록되지않은커미트트랜잭션에적용됩니다. 또한디스크에기록된미확약트랜잭션을롤백시킵니다. get dbm cfg 명령어로데이터베이스구성변수인 AUTORESTART 의기본값이 ON 인것을확인합니다. ON 은필요시에크래쉬복구가자동적으로실행되는것을의미합니다. $ login < 인스턴스사용자 > $ db get db cfg for <DB명 > grep AUTORESTART 자동재시작사용 (AUTORESTART) = ON AUTORESTART 값을 OFF 로설정하면, 필요시에크래쉬복구가자동적으로실행되지않습니다. activate db 명령어로데이터베이스를활성화시키거나, connect 명령어로최초의데이터베이스접속을요청하면, SQL5N 오류가반환됩니다. restart db 명령어를사용하여크래쉬복구를실행합니다. 크래쉬복구가완료되면데이터베이스를사용할수있습니다. $ db RESTART DATABASE <DB 명 > $ db ACTIVATE DATABASE <DB 명 > $ db CONNECT TO <DB 명 > 크래쉬복구에대한정보는오류진단파일인 dbdiag.log 파일에서확인할수있습니다. $ vi $HOME/sqllib/dbdiag.log Figure 0A 크래쉬복구에관한메시지 UNIT 백업과복구 0
버전복구 RESTORE DB 명령어로원격또는지역데이터베이스를이전버전으로복구하는유틸리티입니다. 오프라인모드의 FULL 백업이미지파일이필요합니다. RESTBUFSZ 옵션으로복구작업을위한버퍼를할당할수있습니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 데이터베이스가손상된경우에는최근에생성했던 FULL 백업이미지파일만있으면, restore db 명령으로데이터베이스를이전버전으로복구할수있습니다. 복구에사용된백업이미지가생성되었던시점이후부터현재까지의데이터베이스에대한모든변경내용은유실됩니다. 백업이미지는한개이상의파일로서디스크, 테이프, TSM 등에미리저장되어있어야됩니다. Figure A RESTORE DB 명령어를이용한버전복구 restore database 명령을이용하여데이터베이스의백업이미지로부터기존데이터베이스로복구합니다. 접속된모든응용프로그램은종료되어야합니다. $ db force applications all $ db restore db <DB명 > 신규데이터베이스로복구하는경우에는 SYSADM 또는 SYSCTRL 권한이필요합니다. INTO 옵션을사용하면신규데이터베이스로복구할수있습니다. $ db restore db <DB명 > INTO < 신규 DB명 > 백업이미지가다른디렉토리에있는경우에는 restore 명령어의 FROM 옵션을이용합니다. $ db restore db <DB명 > FROM < 디렉토리명 > < 백업시간소인 > 은백업이미지파일명의 <yyyymmddhhmmss> 형태로지정합니다. 5 백업이미지가여러개있으면 restore 명령어의 TAKEN AT 옵션을이용합니다. $ db restore db <DB 명 > taken at < 백업시간소인 > restore db 명령어는 <Op> 항목에 'R' 이라고표시됩니다. 6 list history 명령어로해당버전복구와연관된기록을확인합니다. $ db list history backup for <DB 명 >
경로재지정복구 백업이미지파일에저장된테이블스페이스의컨테이너구성을사용자가변경하여복구하는방식입니다. 테이블스페이스컨테이너가손상된경우의복구에유용합니다. RESTORE DB 명령어의 REDIRECT 옵션을이용합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. restore db 명령어와 set tablespace containers 명령어는동일한세션에서실행합니다. 백업이미지파일에는테이블스페이스의컨테이너에대한정보가함께저장되어있으므로복구가시작되면, 백업이미지파일에설정된정보에의해테이블스페이스가생성됩니다. 지정한테이블스페이스컨테이너를액세스할수없는상태가되면복구작업은진행될수없습니다. RESTORE DB 명령어의 REDIRECT 옵션과 SET TABLESPACE CONTAINERS 문을이용하여액세스불가능한컨테이너에대한경로를재지정하면새로운컨테이너로복구됩니다. 백업이미지는기본적으로기존의데이터베이스를복구할때사용됩니다. 백업이미지에는데이터베이스에대한모든정보가저장되어있으므로새로운데이터베이스로복구하는것도가능합니다. 동일한데이터베이스서버에서새로운데이터베이스로복구하게되면, 테이블스페이스의컨테이너가중복되므로경로재지정복구방법이사용됩니다. RESTORE DB 명령어에서 REDIRECT 옵션을사용하면경로재지정복구를지정됩니다. $ RESTORE DB < 백업이미지의 DB 명 > INTO < 새로운 DB 명 > REDIRECT 원본데이터베이스의테이블스페이스의 ID와컨테이너에대한정보를미리알고있어야합니다. 원본데이터베이스에서 list tablespace containers 명령어또는 dblook 명령어를이용합니다. SET TABLESPACE CONTAINERS 명령어에서컨테이너에대한경로를재지정합니다. FOR 옵션에서사용되는번호는테이블스페이스 ID 입니다. 기존의테이블스페이스의컨테이너를제거또는변경할수있으며, 새로운컨테이너를추가할수도있습니다. Figure A SET TABLESPACE CONTAINERS 명령어 $ SET TABLESPACE CONTAINERS FOR 0 USING (FILE "< 파일명 >" < 크기 >) $ SET TABLESPACE CONTAINERS FOR USING (PATH "< 경로명 >") 5 RESTORE DB 명령어에서 ABORT 옵션을사용하면경로재지정복구가취소됩니다. $ RESTORE DB < 백업이미지의 DB 명 > INTO < 새로운 DB 명 > ABORT 6 RESTORE DB 명령어에서 CONTINUE 옵션을사용하면경로재지정복구가시작됩니다. $ RESTORE DB < 백업이미지의 DB 명 > INTO < 새로운 DB 명 > CONTINUE 7 ROLLFORWARD DB 명령어로아카이브로그를적용합니다. $ ROLLFORWARD DB < 새로운 DB 명 > TO END OF LOGS AND STOP UNIT 백업과복구
롤포워드복구 RESTORE DB 명령어로버전복구를완료하고, ROLLFORWARD DB 명령어로로그디렉토리에제공된아카이브로그파일들을차례로이용하여과거의 UOW 에의한변경내역을복구합니다. 아카이브로깅방식에서만지원됩니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 롤포워드복구는 restore db 명령어를이용한데이터베이스버전복구와 rollforward db 명령어를이용한로그재적용과정을합친복구방법입니다. rollforward db 명령어는아카이브로그파일을데이터베이스에재적용하는조작이므로롤포워드복구와구별해야합니다. 데이터베이스가손상된경우에는최근에생성했던 FULL 백업이미지파일과아카이브로그가있으면, restore db 명령어와 rollforward db 명령어로데이터베이스를원하는시점으로복구할수있습니다. 복구에사용된마지막아카이브로그에저장된트랜잭션이후부터현재까지의데이터베이스에대한변경내용은유실됩니다. :00 :5 :0 :0 아카이브로그 S0000.LOG 로그를적용하지않는경우 STOP 복구에사용된백업이미지의생성시간소인 아카이브로그 S0000.LOG 최소한의로그만적용하는경우 TO < 시간소인 > ROLLFORWARD DB sample 아카이브로그 S00000.LOG 아카이브로그 S000000.LOG 원하는특정시점까지의로그를적용하는경우 TO < 시간소인 > 시간소인 데이터베이스로그디렉토리 로그디렉토리의마지막로그까지적용하는경우 TO END OF LOGS Figure A ROLLFORWARD DB 명령어를이용한로그재적용의범위 ROLLFORWARD 명령은여러번반복적으로실행할수있습니다. END OF LOGS 옵션은로그디렉토리에존재하는로그파일을모드적용시키는옵션입니다. 최근의로그파일을의미하는것이아닙니다. 최초의 rollforward db 명령어는버전복구를완료된이후에시작할수있습니다. $ db restore db <DB 명 > $ db rollforward db <DB 명 > to end of logs 적용할로그파일의크기가크고, 개수가많은경우에는로그디렉토리에로그파일의일부만옮겨두고, 여러번에걸쳐 rollforward db 명령어를실행합니다. $ db rollforward db <DB 명 > to end of logs USING LOCAL TIME 옵션이없으면, GMT 시간을명시해야합니다. < 시간소인 > 은 yyyy-mm-ddhh:mm:ss 형태로지정합니다. 5 마지막 rollforward db 명령을입력할때, TO 옵션을이용하여원하는시점까지의복구가가능합니다. < 시간소인 > 은 USING LOCAL TIME 옵션으로지정합니다. $ db rollforward db <DB 명 > to < 시간소인 > using local time STOP 옵션을이용하면, 로그재적용작업은중지되고, 마지막으로적용된로그파일의다음번호부터데이터베이스로깅이다시시작됩니다. $ db rollforward db <DB 명 > stop rollforward db 명령어는 <Op> 항목에 'F' 라고표시됩니다. END OF LOGS 옵션은 'E', < 시간소인 > 옵션은 'P' 로표시됩니다. 6 list history 명령어로해당롤포워드복구와연관된기록을확인합니다. $ db list history rollforward for <DB 명 >
INCREMENTAL 복구 최근의 FULL 백업이미지파일과 FULL 백업이후에생성된최근의 INCREMENTAL 백업이미지파일, INCREMENTAL 백업시점이후의아카이브로그파일이보관되어있으면, INCREMENTAL 복구가가능합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. restore db 명령어로최근의 FULL 백업이미지를이용하여버전복구를합니다. restore db 명령어로 FULL 백업시점이후의 INCREMENTAL 백업이미지중에서최근것으로 FULL 백업과 INCREMENTAL 백업시점구간에있는변경내용을복구합니다. 마지막으로 INCREMENTAL 백업이후시점부터현재까지의아카이브로그를차례로적용하면데이터베이슨손상직전의상태로복구됩니다. 일요일월요일화요일수요일목요일금요일 :00 :00 :00 :00 :00 :00 금요일 0:00 DB 장애발생 + + = 복구 일요일 FULL 백업이미지 목요일 목요일백업이후 INCREMENTAL 백업이미지 현재까지아카이브로그 Figure A FULL, INCREMENTAL 이미지, 아카이브로그를이용한복구 INCREMENTAL AUTOMATIC 옵션을이용하면, 복구기록파일을이용하여필요한 INCREMENTAL 백업이미지를자동적으로찾아서복구를실행합니다. 최근의 FULL 백업이미지파일을이용하여 restore database 명령으로데이터베이스를이전시점으로버전복구합니다. $ db restore db <DB 명 > restore database 명령의 INCREMENTAL 옵션으로최근의 INCREMENTAL 백업이미지파일을이용하여 FULL 백업이후의변경분을복구합니다. $ db restore db <DB 명 > INCREMENTAL 손상직전의시점으로복구하려면, 마지막 INCREMENTAL 백업이후부터손상직점시점까지의아카이브로그파일을로그디렉토리에모두복사하고, TO END OF LOGS AND STOP 옵션을사용합니다. 5 rollforward db 명령으로아카이브로그파일을이용하여최근의 INCREMENTAL 백업이미지생성시점이후부터원하는시점까지의변경분을복구합니다. $ db rollforward db <DB 명 > to < 시간소인 > using local time and stop list history 명령어로해당롤포워드복구와연관된기록을확인합니다. $ db list history rollforward for <DB 명 > UNIT 백업과복구
5 DELTA 복구 최근의 FULL 백업이미지파일과 INCREMENTAL 백업또는 DELTA 백업이미지파일, 데이터베이스로그파일이보관되어있으면, INCREMENTAL 복구가가능합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 최근의 FULL 백업이미지파일, 최근의 INCREMENTAL 백업이미지, 현시점까지의 DELTA 백업이미지파일, 아카이브로그파일을준비하고, restore db 명령어와 rollforward db 명령어를실행합니다. 일요일월요일화요일수요일목요일금요일 :00 :00 :00 :00 :00 :00 금요일 0:00 DB 장애발생 일요일 FULL 백업이미지 = + + + + 복구 화요일 수요일 INCREMENTAL DELTA 백업이미지 백업이미지 목요일 DELTA 백업이미지 목요일백업이후부터현재까지아카이브로그 Figure 5A FULL, INCREMENTAL, DETA 이미지, 아카이브로그를이용한복구 restore db 명령어에서사용하는옵션은 INCREMENTAL 복구와동일합니다. INCREMENTAL AUTOMATIC 옵션을이용하면, 복구기록파일을이용하여필요한 INCREMENTAL 백업이미지를자동적으로찾아서복구를실행합니다. 최근의 FULL 백업이미지파일을이용하여 Restore database 명령으로데이터베이스를과거의시점으로복구합니다. $ db restore db <DB 명 > 최근의 INCREMENTAL 백업이미지파일이있다면 restore db 명령으로 FULL 백업이후의변경분을복구합니다. restore db 명령을반복적으로사용하여최근까지의 DELTA 백업이미지파일들로부터변경분을복구합니다. $ db restore db <DB 명 > INCREMENTAL 손상직전의시점으로복구하려면, 마지막 INCREMENTAL 백업이후부터손상직전시점까지의아카이브로그파일을로그디렉토리에모두복사하고, TO END OF LOGS AND STOP 옵션을사용합니다. 5 데이터베이스로그파일을이용하여 rollforward database 명령으로최근의 DELTA 백업이미지생성시점이후의변경분을복구합니다. $ db rollforward db <DB명 > to end of logs $ db rollforward db <DB명 > to < 시간소인 > using local time and stop list history 명령어로해당롤포워드복구와연관된기록을확인합니다. $ db list history rollforward for <DB 명 > 5
6 테이블스페이스의상태 테이블스페이스의컨테이너액세스에문제가발생하면, 테이블스페이스의상태가 OFFLINE 이되어해당테이블스페이스를액세스할수없습니다. 문제가발생한테이블스페이스를제외한다른테이블스페이스는사용가능합니다. 컨테이너에문제가발생한테이블스페이스는 OFFLINE 상태가되고, 사용할수없습니다. Example : Example : TBS TBS CONNECT / ACTIVATE NORMAL CTNR (Before) CONNECT / ACTIVATE BACKUP_PENDING CTNR (Before) CTNR CTNR OFFLINE (After) BACKUP_PENDING + OFFLINE (After) Figure 6A 테이블스페이스오프라인 테이블스페이스의주요상태값은다음과같습니다. 0x0 0x 0x 0x 0x8 0x0 0x0 0x0 0x80 0x00 0x00 0x00 0x800 Normal Quiesced: SHARE Quiesced: UPDATE Quiesced: EXCLUSIVE Load pending Delete pending Backup pending Rollforward in progress Rollforward pending Restore pending Disable pending Reorg in progress Backup in progress 0x000Storage must be defined 0x000 Restore in progress 0x000 Offline 0x8000 Drop pending 테이블스페이스의현재상태를확인합니다. $ db "SELECT * FROM < 테이블명 >" SQL090N 테이블스페이스액세스가허용되지않습니다. SQLSTATE=5509 $ db list tablespaces grep p i < 테이블스페이스명 > 테이블스페이스 ID = 이름 = < 테이블스페이스명 > 유형 = 데이터베이스관리스페이스내용 = 임의의데이터상태 = 0x000 세부사항설명 : 오프라인 $ dbtbst 0x000 State = Offline and not accessible 테이블스페이스컨테이너의문제점을해결하고, alter tablespace 문을이용하여테이블스페이스의상태를 ON 으로변환하고, 데이터를정상적으로액세스할수있습니다. 컨테이너의문제점이해결되지않으면, SQL09N 오류코드와함께명령은실패합니다. $ db ALTER TABLESPACE < 테이블스페이스명 > SWITCH ONLINE DROP PENDING 상태로전환된테이블스페이스는접속후에 DROP 하고재생성해야합니다. 특정한테이블스페이스컨테이너에문제점이발생하여데이터베이스가활성화될수없다면, restart db 명령어를이용하여해당테이블스페이스만 DROP PENDING 상태로전환하고, 데이터베이스를활성화할수있습니다. $ db "RESTART DATABASE <DB명 > DROP PENDING (<TS명 >)" $ db drop tablespace <TS명 > UNIT 백업과복구 6
7 테이블스페이스복구 RESTORE DB 명령어로테이블스페이스백업이미지파일을이용하여특정테이블스페이스만과거시점으로복구하고, ROLLFORWARD DB 명령어로아카이브로그를적용하여다른테이블스페이스와의일관성을복구합니다. SYSADM,SYSCTRL,SYSMAINT 권한이있는사용자가실행합니다. 원하는시점의 TABLESPACE 백업이미지파일과아카이브로그파일을준비하고, restore db 명령어와 rollforward db 명령어를실행하면, 테이블스페이스를복구할수있습니다. Backup Table Space(s) Units of Work Logging RESTORE Table Space(s) Crash ROLLFORWARD changes in logs of Consistency BACKUP Table Space Image Log- Files n active logs n archived logs time Active/uncommitted transactions are rolled back Can now rollforward to a minimum PIT Figure 7A 테이블스페이스백업이미지를이용한복구 일관성을보장하기위해적용되어야할최소한의로그파일번호는 LIST HISTORY 명령어를이용하여복구기록파일에서확인할수있습니다. RESTORE DB 명령어또는 ROLLFORWARD DB 명령어를실행한세션의데이터베이스에대한접속은해제됩니다. 복구된테이블스페이스에존재하는테이블이다른테이블과 RI 관계에있는부모테이블이라면, 자손테이블은 ' 점검보류 ' 상태에놓이게됩니다. SET INTEGRITY 문을이용하여해결합니다. 원하는 TABLESPACE 백업이미지파일을이용하여 restore db 명령으로데이터베이스의특정테이블스페이스를과거시점으로복구합니다. restore db 명령어가완료되면, 해당테이블스페이스가 ' 롤포워드보류 ' 상태에놓이게됩니다. $ db "restore db <DB 명 > TABLESPACE (<TS 명 >) ONLINE" $ db connect to < 데이터베이스명 > $ db "SELECT * FROM < 테이블명 >" SQL090N 테이블스페이스액세스가허용되지않습니다. SQLSTATE=5509 $ db list tablespaces grep -p i < 테이블스페이스명 > grep " 상태 " 상태 = 0x0080 rollforward db 명령어의 TO 옵션으로해당테이블스페이스와다른테이블스페이스의일관성을보장할수있는시점이상의로그파일을복구합니다. $ db ROLLFORWARD DB <DB명 > TO END OF LOGS AND STOP TABLESPACE (<TS명 >) ONLINE" SQL907W 데이터베이스 "< 데이터베이스명 >" 이 ( 가 ) 복구되었으나, 롤포워드조작을위해포함된테이블스페이스목록에서하나이상의테이블이점검보류상태에있습니다. 복구된테이블스페이스에포함된테이블의데이터를정상적으로액세스할수있습니다. $ db "SELECT * FROM < 테이블명 >" 7
Memo UNIT 백업과복구 8