프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

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-00942table 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-00942table 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-00942table 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-00942table 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

http://www.dba-oracle.com/concepts/backup_recovery.htm

https://positivemh.tistory.com/691