내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
OS환경 : Oracle Linux 6.8 (64bit)
DB 환경 : Oracle Database 11.2.0.4
방법 : 오라클 11g R2 begin backup 후 end backup 을 하지 않고 복구(파일 복사 후 샘플데이터 생성)
조금 다른 테스트 두가지
오라클 11g R2 begin backup 후 end backup 을 하지 않고 복구(샘플데이터 생성 후 파일 복사) https://positivemh.tistory.com/688
오라클 11g R2 begin backup 후 end backup 을 하지 않고 복구(파일 복사 후 샘플데이터 생성) https://positivemh.tistory.com/689
begin (hot) backup 후 테스트 controlfile, datafile, redo 등 파일 복사 후
데이터 소량, 대량 각각 생성 후 end backup을 하지 않은 상태에서 db 강제종료
이후 해당 파일과 아카이브 로그를 이용해 복구 할 시 정상적으로 db가 올라오는지를 테스트함
테스트1. begin backup 후 파일복사 후 소량 데이터 삽입
테스트1_1. recover 후 db open
테스트1_2. end backup 후 db open
테스트2. begin backup 후 파일복사 후 대량 데이터 삽입
테스트2_1. recover 후 db open
테스트2_2. end backup 후 db open
테스트1. begin backup 후 파일복사 후 소량 데이터 삽입
기존 테이블스페이스 및 백업 상태 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23739431 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23739437 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23739443 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23739449 |
아카이브모드 확인
1 2 3 4 5 6 7 | SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /oracle/app/oracle/arch Oldest online log sequence 33 Next log sequence to archive 35 Current log sequence 35 |
begin backup 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> alter tablespace system begin backup; Tablespace altered. SQL> alter tablespace sysaux begin backup; Tablespace altered. SQL> alter tablespace undotbs1 begin backup; Tablespace altered. SQL> alter tablespace users begin backup; Tablespace altered. |
백업 상태 확인 v$backup 의 status 컬럼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf ACTIVE 23739498 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf ACTIVE 23739504 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf ACTIVE 23739510 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf ACTIVE 23739516 |
status 가 active로 변경됨(begin backup 시작됨)
데이터 파일 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ cd /oracle/app/oracle/oradata/ORCL11 $ ls -al total 6681680 drwxr-xr-x 2 oracle dba 4096 Jan 6 05:48 . drwxr-x---. 4 oracle dba 4096 Jan 6 02:05 .. -rw-r----- 1 oracle dba 10076160 Jan 6 06:27 control01.ctl -rw-r----- 1 oracle dba 10076160 Jan 6 06:27 control02.ctl -rw-r----- 1 oracle dba 209715712 Jan 6 05:52 redo01.log -rw-r----- 1 oracle dba 209715712 Jan 6 06:27 redo02.log -rw-r----- 1 oracle dba 209715712 Jan 6 05:52 redo03.log -rw-r----- 1 oracle dba 2673876992 Jan 6 06:26 sysaux01.dbf -rw-r----- 1 oracle dba 765468672 Jan 6 06:26 system01.dbf -rw-r----- 1 oracle dba 104865792 Jan 5 22:00 temp01.dbf -rw-r----- 1 oracle dba 597696512 Jan 6 06:26 undotbs01.dbf -rw-r----- 1 oracle dba 2147491840 Jan 6 06:26 users01.dbf |
파일 백업
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ cd /oracle/app/oracle/oradata/ORCL11/ $ mkdir -p ../hot2 $ cp -av ./* ../hot2/ `./control01.ctl' -> `../hot2/control01.ctl' `./control02.ctl' -> `../hot2/control02.ctl' `./redo01.log' -> `../hot2/redo01.log' `./redo02.log' -> `../hot2/redo02.log' `./redo03.log' -> `../hot2/redo03.log' `./sysaux01.dbf' -> `../hot2/sysaux01.dbf' `./system01.dbf' -> `../hot2/system01.dbf' `./temp01.dbf' -> `../hot2/temp01.dbf' `./undotbs01.dbf' -> `../hot2/undotbs01.dbf' `./users01.dbf' -> `../hot2/users01.dbf' |
샘플 데이터용 테이블 생성(소량)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | SQL> create table newimsi3 (col number) tablespace users; Table created. SQL> insert into newimsi3 values (100); 1 row created. SQL> / 1 row created. SQL> / 1 row created. SQL> commit ; Commit complete. SQL> select * from newimsi3; COL ---------- 100 100 100 |
100 이 세건 insert 됨
테스트1_1. recover 후 db open
end backup 없이 db 강제 종료
1 2 | SQL> shutdown abort ORACLE instance shut down. |
데이터 파일 등 삭제
1 2 3 | $ cd /oracle/app/oracle/oradata/ORCL11 $ rm -rf ./* $ ls |
모두 지워짐
파일 복원
1 2 3 4 5 6 7 8 9 10 11 | $ cp -av ../hot2/* . `../hot2/control01.ctl' -> `./control01.ctl' `../hot2/control02.ctl' -> `./control02.ctl' `../hot2/redo01.log' -> `./redo01.log' `../hot2/redo02.log' -> `./redo02.log' `../hot2/redo03.log' -> `./redo03.log' `../hot2/sysaux01.dbf' -> `./sysaux01.dbf' `../hot2/system01.dbf' -> `./system01.dbf' `../hot2/temp01.dbf' -> `./temp01.dbf' `../hot2/undotbs01.dbf' -> `./undotbs01.dbf' `../hot2/users01.dbf' -> `./users01.dbf' |
db mount 상태로 기동
1 2 3 4 5 6 7 8 9 | SQL> startup mount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2254952 bytes Variable Size 1375733656 bytes Database Buffers 754974720 bytes Redo Buffers 4923392 bytes Database mounted. |
상태확인
1 2 3 4 5 6 7 8 9 10 11 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; * ERROR at line 2: ORA-01219: database not open: queries allowed on fixed tables/views only |
현재 open 상태가 아니기 때문에 dba_data_files 뷰를 볼수 없음
v$backup 뷰만 이용해 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 ACTIVE 23739498 06-JAN-21 2 ACTIVE 23739504 06-JAN-21 3 ACTIVE 23739510 06-JAN-21 4 ACTIVE 23739516 06-JAN-21 |
현재 데이터파일 백업 status 가 여전히 active 임(begin backup 상태)
db open 시도
1 2 3 4 5 6 | SQL> alter database open; alter database open * ERROR at line 1: ORA-10873: file 1 needs to be either taken out of backup mode or media recovered ORA-01110: data file 1: '/oracle/app/oracle/oradata/ORCL11/system01.dbf' |
바로 open 되지 않음
recover database 시도
1 2 | SQL> recover database; Media recovery complete. |
정상적으로 복구됨
v$backup 뷰 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 23739498 06-JAN-21 2 NOT ACTIVE 23739504 06-JAN-21 3 NOT ACTIVE 23739510 06-JAN-21 4 NOT ACTIVE 23739516 06-JAN-21 |
recover 명령후 not active 상태로 변함(end backup 을 입력한 상태와 같음)
db open 후 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SQL> alter database open; Database altered. SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23739498 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23739504 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23739510 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23739516 |
정상적으로 open 되고 status 도 계속 not active 상태임
데이터 확인
1 2 3 4 5 | SQL> select count(*) from newimsi3; select count(*) from newimsi3 * ERROR at line 1: ORA-00942: table or view does not exist |
테이블 자체가 없어짐
테스트1_2. end backup 후 db open
1_2 테스트를위해 다시 db 강제 종료
1 2 | SQL> shutdown abort ORACLE instance shut down. |
데이터 파일 등 삭제
1 2 3 | $ cd /oracle/app/oracle/oradata/ORCL11 $ rm -rf ./* $ ls |
모두 지워짐
처음에 백업한 파일로 복원
1 2 3 4 5 6 7 8 9 10 11 | $ cp -av ../hot2/* . `../hot2/control01.ctl' -> `./control01.ctl' `../hot2/control02.ctl' -> `./control02.ctl' `../hot2/redo01.log' -> `./redo01.log' `../hot2/redo02.log' -> `./redo02.log' `../hot2/redo03.log' -> `./redo03.log' `../hot2/sysaux01.dbf' -> `./sysaux01.dbf' `../hot2/system01.dbf' -> `./system01.dbf' `../hot2/temp01.dbf' -> `./temp01.dbf' `../hot2/undotbs01.dbf' -> `./undotbs01.dbf' `../hot2/users01.dbf' -> `./users01.dbf' |
db mount 상태로 기동
1 2 3 4 5 6 7 8 9 | SQL> startup mount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2254952 bytes Variable Size 1375733656 bytes Database Buffers 754974720 bytes Redo Buffers 4923392 bytes Database mounted. |
v$backup 뷰만 이용해 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 ACTIVE 23739498 06-JAN-21 2 ACTIVE 23739504 06-JAN-21 3 ACTIVE 23739510 06-JAN-21 4 ACTIVE 23739516 06-JAN-21 |
현재 데이터파일 백업 status 가 여전히 active 임(begin backup 상태)
db open 시도
1 2 3 4 5 6 | SQL> alter database open; alter database open * ERROR at line 1: ORA-10873: file 1 needs to be either taken out of backup mode or media recovered ORA-01110: data file 1: '/oracle/app/oracle/oradata/ORCL11/system01.dbf' |
바로 open 되지 않음
end backup 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> alter tablespace system end backup; Tablespace altered. SQL> alter tablespace sysaux end backup; Tablespace altered. SQL> alter tablespace undotbs1 end backup; Tablespace altered. SQL> alter tablespace users end backup; Tablespace altered. |
정상적으로 end backup 명령이 실행됨
v$backup 뷰 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 23739498 06-JAN-21 2 NOT ACTIVE 23739504 06-JAN-21 3 NOT ACTIVE 23739510 06-JAN-21 4 NOT ACTIVE 23739516 06-JAN-21 |
end backup 명령후 not active 상태로 변함
db open 후 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SQL> alter database open; Database altered. SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23739498 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23739504 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23739510 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23739516 |
정상적으로 open 되고 status 도 계속 not active 상태임
데이터 확인
1 2 3 4 5 | SQL> select count(*) from newimsi3; select count(*) from newimsi3 * ERROR at line 1: ORA-00942: table or view does not exist |
테이블 자체가 없어짐
테스트1 결론 : end backup을 찍지 않고 hot 백업본으로 복구하려할 때 recover 명령 또는 end backup 이 필요함
recover 시 바로 complete가 나오고 바로 open이 가능함
end backup 시 바로 open이 가능함
하지만 두가지 모두
begin backup 이후 파일 복사 후 만들어진 테이블은 복구되지 못함
테스트2. begin backup 후 파일복사 후 대량 데이터 삽입
기존 테이블스페이스 및 백업 상태 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23739498 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23739504 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23739510 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23739516 |
아카이브모드 확인
1 2 3 4 5 6 7 | SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /oracle/app/oracle/arch Oldest online log sequence 34 Next log sequence to archive 36 Current log sequence 36 |
begin backup 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> alter tablespace system begin backup; Tablespace altered. SQL> alter tablespace sysaux begin backup; Tablespace altered. SQL> alter tablespace undotbs1 begin backup; Tablespace altered. SQL> alter tablespace users begin backup; Tablespace altered. |
백업 상태 확인 v$backup 의 status 컬럼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf ACTIVE 23759729 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf ACTIVE 23759735 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf ACTIVE 23759741 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf ACTIVE 23759747 |
status 가 active로 변경됨(begin backup 시작됨)
테스트1 hot 백업 파일 삭제
1 2 3 | $ cd /oracle/app/oracle/oradata/hot2 $ rm -rf ./* $ ls |
데이터 파일 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ cd /oracle/app/oracle/oradata/ORCL11 $ ls -al total 6681680 drwxr-xr-x 2 oracle dba 4096 Jan 6 06:39 . drwxr-x---. 4 oracle dba 4096 Jan 6 02:05 .. -rw-r----- 1 oracle dba 10076160 Jan 6 06:45 control01.ctl -rw-r----- 1 oracle dba 10076160 Jan 6 06:45 control02.ctl -rw-r----- 1 oracle dba 209715712 Jan 6 06:40 redo01.log -rw-r----- 1 oracle dba 209715712 Jan 6 06:40 redo02.log -rw-r----- 1 oracle dba 209715712 Jan 6 06:42 redo03.log -rw-r----- 1 oracle dba 2673876992 Jan 6 06:42 sysaux01.dbf -rw-r----- 1 oracle dba 765468672 Jan 6 06:42 system01.dbf -rw-r----- 1 oracle dba 104865792 Jan 5 22:00 temp01.dbf -rw-r----- 1 oracle dba 597696512 Jan 6 06:42 undotbs01.dbf -rw-r----- 1 oracle dba 2147491840 Jan 6 06:42 users01.dbf |
파일 백업
1 2 3 4 5 6 7 8 9 10 11 12 | $ cd /oracle/app/oracle/oradata/ORCL11/ $ cp -av ./* ../hot2/ `./control01.ctl' -> `../hot2/control01.ctl' `./control02.ctl' -> `../hot2/control02.ctl' `./redo01.log' -> `../hot2/redo01.log' `./redo02.log' -> `../hot2/redo02.log' `./redo03.log' -> `../hot2/redo03.log' `./sysaux01.dbf' -> `../hot2/sysaux01.dbf' `./system01.dbf' -> `../hot2/system01.dbf' `./temp01.dbf' -> `../hot2/temp01.dbf' `./undotbs01.dbf' -> `../hot2/undotbs01.dbf' `./users01.dbf' -> `../hot2/users01.dbf' |
샘플 데이터용 테이블 생성(대량)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | SQL> create table newimsi4(cola varchar2(20), colb number, colc number, cold varchar2(30), cole varchar2(30), colf varchar2(30), colg number, colh varchar2(30), coli varchar2(30), colj varchar2(30)) tablespace users; Table created. SQL> set serveroutput on; DECLARE TYPE tbl_ins IS TABLE OF newimsi4%ROWTYPE INDEX BY BINARY_INTEGER; w_ins tbl_ins; BEGIN FOR i IN 1..5000000 LOOP w_ins(i).COLA :=i; w_ins(i).COLB :=300000; w_ins(i).COLC :=999; w_ins(i).COLD :='DDDDDDDDDDDDDDDD'; w_ins(i).COLE :='EEEEEEEEEEEEEEEE'; w_ins(i).COLF :='FFFFFFFFFFFFFFFF'; w_ins(i).COLG :=9999999; w_ins(i).COLH :='HHHHHHHHHHHHHHHHHHHHHHHHHH'; w_ins(i).COLI :='IIIIIIIIIIIIIIIllllIIIIIIIIIII'; w_ins(i).COLJ :='AAAAAAAAAAAAAAAAAAAAAAAAAA'; END LOOP; FORALL i in 1..5000000 INSERT INTO newimsi4 VALUES w_ins(i); COMMIT; END; / PL/SQL procedure successfully completed. SQL> / PL/SQL procedure successfully completed. |
벌크 insert 구문 2번 실행
데이터 건수 확인
1 2 3 4 5 | SQL> select count(*) from newimsi4; COUNT(*) ---------- 10000000 |
1억개 row가 생성됨
테이블 용량 확인
1 2 3 4 5 6 7 8 | SQL> select segment_name, bytes/1024/1024 mb from dba_segments where segment_name = 'NEWIMSI4'; SEGMENT_NAME MB ------------- ----- NEWIMSI4 1792 |
1.7gb 생성됨
scn 확인(v$backup 의 chance# 컬럼)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf ACTIVE 23759729 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf ACTIVE 23759735 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf ACTIVE 23759741 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf ACTIVE 23759747 |
change#이 변경되지 않음(begin backup 상태라서)
자세한 내용은 [오라클 Hot backup시 변경이 발생한다면? https://positivemh.tistory.com/337] 확인
테스트2_1. recover 후 db open
end backup 없이 db 강제 종료
1 2 | SQL> shutdown abort ORACLE instance shut down. |
데이터 파일 등 삭제
1 2 3 | $ cd /oracle/app/oracle/oradata/ORCL11 $ rm -rf ./* $ ls |
모두 지워짐
파일 복원
1 2 3 4 5 6 7 8 9 10 11 | $ cp -av ../hot2/* . `../hot2/control01.ctl' -> `./control01.ctl' `../hot2/control02.ctl' -> `./control02.ctl' `../hot2/redo01.log' -> `./redo01.log' `../hot2/redo02.log' -> `./redo02.log' `../hot2/redo03.log' -> `./redo03.log' `../hot2/sysaux01.dbf' -> `./sysaux01.dbf' `../hot2/system01.dbf' -> `./system01.dbf' `../hot2/temp01.dbf' -> `./temp01.dbf' `../hot2/undotbs01.dbf' -> `./undotbs01.dbf' `../hot2/users01.dbf' -> `./users01.dbf' |
db mount 상태로 기동
1 2 3 4 5 6 7 8 9 | SQL> startup mount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2254952 bytes Variable Size 1375733656 bytes Database Buffers 754974720 bytes Redo Buffers 4923392 bytes Database mounted. |
v$backup 뷰만 이용해 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 ACTIVE 23759729 06-JAN-21 2 ACTIVE 23759735 06-JAN-21 3 ACTIVE 23759741 06-JAN-21 4 ACTIVE 23759747 06-JAN-21 |
현재 데이터파일 백업 status 가 여전히 active 임(begin backup 상태)
db open 시도
1 2 3 4 5 6 | SQL> alter database open; alter database open * ERROR at line 1: ORA-10873: file 1 needs to be either taken out of backup mode or media recovered ORA-01110: data file 1: '/oracle/app/oracle/oradata/ORCL11/system01.dbf' |
바로 open 되지 않음
recover database 시도
1 2 | SQL> recover database; Media recovery complete. |
정상적으로 복구됨
v$backup 뷰 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 23759729 06-JAN-21 2 NOT ACTIVE 23759735 06-JAN-21 3 NOT ACTIVE 23759741 06-JAN-21 4 NOT ACTIVE 23759747 06-JAN-21 |
recover 명령후 not active 상태로 변함(end backup 을 입력한 상태와 같음)
db open 후 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SQL> alter database open; Database altered. SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23759729 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23759735 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23759741 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23759747 |
정상적으로 open 되고 status 도 계속 not active 상태임
데이터 확인
1 2 3 4 5 | SQL> select count(*) from newimsi4; select count(*) from newimsi4 * ERROR at line 1: ORA-00942: table or view does not exist |
테이블 자체가 없어짐
테스트2_2. end backup 후 db open
1_2 테스트를위해 다시 db 강제 종료
1 2 | SQL> shutdown abort ORACLE instance shut down. |
데이터 파일 등 삭제
1 2 3 | $ cd /oracle/app/oracle/oradata/ORCL11 $ rm -rf ./* $ ls |
모두 지워짐
처음에 백업한 파일로 복원
1 2 3 4 5 6 7 8 9 10 11 | $ cp -av ../hot2/* . `../hot2/control01.ctl' -> `./control01.ctl' `../hot2/control02.ctl' -> `./control02.ctl' `../hot2/redo01.log' -> `./redo01.log' `../hot2/redo02.log' -> `./redo02.log' `../hot2/redo03.log' -> `./redo03.log' `../hot2/sysaux01.dbf' -> `./sysaux01.dbf' `../hot2/system01.dbf' -> `./system01.dbf' `../hot2/temp01.dbf' -> `./temp01.dbf' `../hot2/undotbs01.dbf' -> `./undotbs01.dbf' `../hot2/users01.dbf' -> `./users01.dbf' |
db mount 상태로 기동
1 2 3 4 5 6 7 8 9 | SQL> startup mount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2254952 bytes Variable Size 1375733656 bytes Database Buffers 754974720 bytes Redo Buffers 4923392 bytes Database mounted. |
v$backup 뷰만 이용해 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 ACTIVE 23759729 06-JAN-21 2 ACTIVE 23759735 06-JAN-21 3 ACTIVE 23759741 06-JAN-21 4 ACTIVE 23759747 06-JAN-21 |
현재 데이터파일 백업 status 가 여전히 active 임(begin backup 상태)
db open 시도
1 2 3 4 5 6 | SQL> alter database open; alter database open * ERROR at line 1: ORA-10873: file 1 needs to be either taken out of backup mode or media recovered ORA-01110: data file 1: '/oracle/app/oracle/oradata/ORCL11/system01.dbf' |
바로 open 되지 않음
end backup 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> alter tablespace system end backup; Tablespace altered. SQL> alter tablespace sysaux end backup; Tablespace altered. SQL> alter tablespace undotbs1 end backup; Tablespace altered. SQL> alter tablespace users end backup; Tablespace altered. |
정상적으로 end backup 명령이 실행됨
v$backup 뷰 확인
1 2 3 4 5 6 7 8 | SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 23759729 06-JAN-21 2 NOT ACTIVE 23759735 06-JAN-21 3 NOT ACTIVE 23759741 06-JAN-21 4 NOT ACTIVE 23759747 06-JAN-21 |
end backup 명령후 not active 상태로 변함
db open 후 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SQL> alter database open; Database altered. SQL> set lines 200 pages 1000 col file_name for a70 col tablespace_name for a10 select d.tablespace_name, file_id, d.file_name, b.status, b.change# from dba_data_files d, v$backup b where d.file_id = b.file# order by 2; TABLESPACE FILE_ID FILE_NAME STATUS CHANGE# ---------- ---------- ---------------------------------------------------------------------- ------------------ ---------- SYSTEM 1 /oracle/app/oracle/oradata/ORCL11/system01.dbf NOT ACTIVE 23759729 SYSAUX 2 /oracle/app/oracle/oradata/ORCL11/sysaux01.dbf NOT ACTIVE 23759735 UNDOTBS1 3 /oracle/app/oracle/oradata/ORCL11/undotbs01.dbf NOT ACTIVE 23759741 USERS 4 /oracle/app/oracle/oradata/ORCL11/users01.dbf NOT ACTIVE 23759747 |
정상적으로 open 되고 status 도 계속 not active 상태임
데이터 확인
1 2 3 4 5 | SQL> select count(*) from newimsi4; select count(*) from newimsi4 * ERROR at line 1: ORA-00942: table or view does not exist |
테이블 자체가 없어짐
테스트2 결론 : end backup을 찍지 않고 hot 백업본으로 복구하려할 때 recover 명령 또는 end backup 이 필요함
recover 시 바로 complete가 나오고 바로 open이 가능함
end backup 시 바로 open이 가능함
하지만 두가지 모두
begin backup 이후 파일 복사 후 만들어진 테이블은 복구되지 못함
테이블, 데이터의 크기와는 상관없이 테스트1,2 모두 테이블은 복구되지못함
이어지는 글
end backup 을 찍은 후 테스트
오라클 11g R2 hot 백업, 복구(파일 복사 후 샘플데이터 생성) https://positivemh.tistory.com/691
참조 :
https://positivemh.tistory.com/688
https://positivemh.tistory.com/337
469950.1
'ORACLE > Backup&Recover' 카테고리의 다른 글
오라클 19c rman catalog 설명 및 catalog db 생성 (0) | 2021.01.13 |
---|---|
오라클 11g R2 hot 백업, 복구(파일 복사 후 샘플데이터 생성) (0) | 2021.01.11 |
오라클 11g R2 begin backup 후 end backup 을 하지 않고 복구(샘플데이터 생성 후 파일 복사) (0) | 2021.01.04 |
오라클 datafile offline 후 online 테스트2 (0) | 2020.12.23 |
오라클 datafile offline 후 online 테스트 (0) | 2020.12.21 |