( 참 ) 본상단부머리말에있는 Data Mart 는본문서작성자의블로그이름입니다 dd 명령어를 이용한백업수행 최소개념이해 본문서의 pdf 문서는다음 URL 참조 http://mindata.tistory.com/55 Version 변경일자 ( 작성일자 ) 변경자 ( 작성자 ) 주요내용 1 2013.4.3 김민기 최초작성 2 3 페이지 1 / 7
Contents Data Mart 1. 개요...3 2. 실습방향...3 3. 테스트위한사전설정...3 4. 본격실습시작...3 4-1) 데이터파일 dd 명령어로 백업수행및유실시키기...3 4-2) 장애복구수행...6 4. 결론...7 페이지 2 / 7
1. 개요본문서는, dd 명령어를이용한백업수행에대한최소지식습득을목적으로합니다. 2. 실습방향 1.dd 명령어를이용한백업 / 복구수행 2. 오픈백업수행 ( 비긴백업, 엔드백업선언이용 ) 3. 테스트위한사전설정 --dd 명령어를통한백업본의위치디렉토리생성 # mkdir -p /u02/backup --test 테이블스페이스생성 create tablespace test datafile '/u02/app/oracle/oradata/prod/test01.dbf' size 11M autoextend on next 10M maxsize unlimited uniform size 1M ; - 추가적인실습시, test 테이블스페이스삭제명령어 drop tablespace test INCLUDING CONTENTS ;) -- 생성한 test 테이블스페이스에테이블생성 create table hr.tb_test1 tablespace test AS select employee_id, first_name, department_id from hr.employees ; -- 생성한테이블의데이터조회 select * from hr.tb_test1 ; 4. 본격실습시작 4-1) 데이터파일 dd 명령어로백업수행및유실시키기 -- 오픈백업을위해비긴백업선언 alter tablespace test begin backup ; -- 비긴백업선언후, 데이터생성 INSERT INTO hr.tb_test1 VALUES (500,'val_test1',99) ; INSERT INTO hr.tb_test1 VALUES (501,'val_test2',99) ; commit ; 페이지 3 / 7
--dd 명령어를이용한백업시도 # dd if=/u02/app/oracle/oradata/prod/test01.dbf ibs=8192k \ dd of=/u02/backup/test01.dbf obs=8192k ; 1+1 records in 22544+0 records out 11542528 bytes (12 MB) copied, 0.076586 seconds, 151 MB/s 22544+0 records in 1+1 records out 11542528 bytes (12 MB) copied, 0.071499 seconds, 161 MB/s ( 개인적인추측, 조사가필요함 ) 1. 데이터베이스블록크기가 8k 로설정되어있어서읽기, 쓰기블록수를 8k 로설정하는듯보임 2.( 단, 콘트롤파일은 2k 블록단위이므로, 읽기, 쓰기블록수를 2k 로설정하는듯보임 ) -- 백업을마쳤으므로, 엔드백업선언 alter tablespace test end backup; -- 백업이후데이터발생시키기 INSERT INTO hr.tb_test1 VALUES (502,'val_test3',99) ; INSERT INTO hr.tb_test1 VALUES (503,'val_test4',99) ; commit ; -- 장애발생시키기 ( 위에서백업한데이터파일삭제 ) $ rm -rf /u02/app/oracle/oradata/prod/test01.dbf $ ls -l /u02/app/oracle/oradata/prod/test01.dbf -rw-r--r-- 1 oracle oinstall 11542528 Apr 3 18:46 /u02/app/oracle/oradata/prod/test01.dbf ; 파일이존재하지않음을확인함 페이지 4 / 7
-- 장애확인 alter system checkpoint ; ; 파일유실됨을발견함. -> 발견됨과동시에, 인스턴스가비정상종료됨 -> 비정상종료된과동시에, 리스타트기능에의해서, 재기동됨 select * from hr.tb_test1 ; ERROR at line 1: ORA-00376: file 5 cannot be read at this time ORA-01110: data file 5: '/u02/app/oracle/oradata/prod/test01.dbf' [ 의문점 ] 결과캐시비우기, 버퍼캐시비우기를해도, 조회가가능함. 어느영역에이결과가남아있는걸까? --( 참고명령어 ) 결과캐시비우기 begin dbms_result_cache.flush; end; --( 참고명령어 ) 데이터버퍼캐시비우기 alter system flush buffer_cache ; --( 참고명령어 ) 공유풀비우기 alter system flush shared_pool ; [ 추가견해 ] 알수없는상황에, 특정데이터파일을유실한것이아닌, 직접적으로실수로유실한경우, 체크포인트가발생하지않는한, 해당데이터파일을교체하기만하면해당정상운영에지장이없음도확인함. 그러나유실한데이터파일에언제쓰기작업할지 ( 즉, 언제체크포인트가발생할지예상을할수있는건아니니 ), 해당데이터파일을오프라인시킨후, 리두적용 ( 복구 ) 하는게보다확실할거같음. 페이지 5 / 7
4-2) 장애복구 -- 인스턴스상태확인 select status from v$instance ; ERROR: ORA-03114: not connected to ORACLE ; 데이터파일의유실로인해, 연결이끊김을확인함 ; 본실습에서는리스타트기능에의해서, 자동재기동되었음. 재기동되면서, 유실된데이터파일은오프라인으로전환됨. 그래서오픈단계까지갈수있음 ( 아래볼드참고 ) col file_name for a35 col tablespace_name for a20 select TABLESPACE_NAME, FILE_NAME, ONLINE_STATUS, STATUS from dba_data_files ; TABLESPACE_NAME FILE_NAME ONLINE_ STATUS -------------------- ----------------------------------- ------- --------- SYSTEM /u02/app/oracle/oradata/prod/system SYSTEM AVAILABLE 01.dbf SYSAUX /u02/app/oracle/oradata/prod/sysaux ONLINE AVAILABLE 01.dbf UNDOTBS1 /u02/app/oracle/oradata/prod/undotb ONLINE AVAILABLE s01.dbf USERS /u02/app/oracle/oradata/prod/users0 ONLINE AVAILABLE 1.dbf TEST /u02/app/oracle/oradata/prod/test01 RECOVER AVAILABLE.dbf -- 접속이끊겼으므로재접속 conn / as sysdba -- 인스턴스상태확인 select status from v$instance ; STATUS ------------ OPEN -- 유실한데이터파일복구위해서, 오프라인으로전환 ( 이미오프라인단계임을위에서확인했으므로, 수행안해도됨 ) alter database datafile '/u02/app/oracle/oradata/prod/test01.dbf' offline ; 페이지 6 / 7
-- 위에서 dd 명령어로백업받은백업본으로복원 # dd if=/u02/backup/test01.dbf ibs=8192k \ dd of=/u02/app/oracle/oradata/prod/test01.dbf obs=8192k ; -- 리두적용 ( 복구 ) recover datafile '/u02/app/oracle/oradata/prod/test01.dbf' ; ( 참 ) 복구하려는데이터파일이사용중인경우에는복구불가능함. 그래서위에서데이터파일을오프라인으로전환한것이다. -- 리두적용후, 해당데이터파일을온라인으로전환 alter database datafile '/u02/app/oracle/oradata/prod/test01.dbf' online ; -- 복구확인 select * from hr.tb_test1 ;... 500 val_test1 99 501 val_test2 99 502 val_test3 99 503 val_test4 99 ; 입력한데이터가온전함을확인함 5. 결론 dd 명령어를이용한백업 / 복구수행이, cp 명령어를이용한백업 / 복구수행과전혀다르지않다는것을알수있을것입니다. 단지차이점은, OS 명령어로서의 dd 명령어와 cp 명령어의차이일뿐, DB 차원에서백업 / 복구과정에는전혀차이가없음을알수있습니다. ( 단주의할점은 dd 명령어사용시, 블록사이즈에신경을써야합니다. 이부분에대해서는좀더지식습득이필요함 ) 페이지 7 / 7