본문 바로가기

Oracle/admin

hot backup 실습

현재 DB는 archive mode로 운영중인 상태이다.
SQL> select tablespace_name from user_tables where table_name='TEST';

TABLESPACE_NAME
------------------------------
USERS

SQL> connect internal
Connected.

USERS라는 테이블스페이스는 아래와 같이 C:\ORACLE\ORADATA\DB\USERS01.DBF 데이터파일 1개만 가지고 있음을 알 수 있다.
SQL> select b.name from v$tablespace a, v$datafile b
  2  where a.ts# = b.ts# and a.name='USERS';

NAME
--------------------------------------------------------------------------------
C:\ORACLE\ORADATA\DB\USERS01.DBF

SQL> alter tablespace users begin backup;

Tablespace altered.

SQL> host copy C:\ORACLE\ORADATA\DB\USERS01.DBF C:\ORACLE\BACKUP\DB\USERS01.DBF
        1개 파일이 복사되었습니다.

SQL> alter tablespace users end backup;

Tablespace altered.

완전복구(complete recovery)가 제대로 되는지 확인하기 위해, kang.test에 1개의 데이터를 추가적으로 insert하자.

SQL> connect kang/kang
Connected.
SQL> insert into test values('backuptest', '백업테스트');

1 row created.

SQL> commit;

Commit complete.

SQL> connect internal
Connected.
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.

테스트를 위해, users테이블스페이스에 속한 데이터파일을 삭제하고, 이를 복구하는 과정을 보겠다.

SQL> host del C:\ORACLE\ORADATA\DB\USERS01.DBF

당연히 파일을 삭제했으므로 에러가 나면서, mount까지만 진행되었다.
SQL> startup
ORACLE instance started.

Total System Global Area  189102108 bytes
Fixed Size                    75804 bytes
Variable Size              89006080 bytes
Database Buffers           99942400 bytes
Redo Buffers                  77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\DB\USERS01.DBF'

v$recover_file을 보면, 복구가 필요한 파일을 정확히 파악할 수 있다.
SQL> select * from v$recover_file;

     FILE# ONLINE
---------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
         3 ONLINE
FILE NOT FOUND                                                             0


이제 데이터파일을 offline후, DB를 OPEN하고, 이를 복구하겠다.
users테이블스페이스에 대한 질의를 제외한 모든 질의는 가능한 상태가 된다. 확인해볼까나..

SQL> alter database datafile 'C:\ORACLE\ORADATA\DB\USERS01.DBF' offline;

Database altered.

SQL> alter database open;

Database altered.

당연히 질의 못하지.
SQL> select * from kang.test;
select * from kang.test
                   *
ERROR at line 1:
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\DB\USERS01.DBF'

users테이블스페이스를 제외하고는 되지.
아래의 예가 좀 적당치 못한 것 같지만...
SQL> select * from all_users;

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SYS                                     0 25-APR-03
SYSTEM                                  5 25-APR-03
OUTLN                                  11 25-APR-03
DBSNMP                                 16 25-APR-03
AURORA$JIS$UTILITY$                    25 25-APR-03
OSE$HTTP$ADMIN                         26 25-APR-03
AURORA$ORB$UNAUTHENTICATED             27 25-APR-03
ORDSYS                                 28 25-APR-03
ORDPLUGINS                             29 25-APR-03
MDSYS                                  30 25-APR-03
CTXSYS                                 33 25-APR-03
KANG                                   35 25-APR-03

12 rows selected.


백업해둔 데이터파일을 restore한뒤, recover한다.
백업한 뒤에 insert한 '백업테스트'라는 데이터도 복구되었음을 알 수 있다.

SQL> host copy C:\ORACLE\BACKUP\DB\USERS01.DBF C:\ORACLE\ORADATA\DB\USERS01.DBF
        1개 파일이 복사되었습니다.

SQL> recover datafile 'C:\ORACLE\ORADATA\DB\USERS01.DBF';
Media recovery complete.
SQL> alter database datafile 'C:\ORACLE\ORADATA\DB\USERS01.DBF' online;

Database altered.

SQL> conn kang/kang
Connected.
SQL> select * from kang.test;

ID         NAME
---------- ----------
maddog     강명규
dbakorea   강명규
xman       엑스맨
backuptest 백업테스트

'Oracle > admin' 카테고리의 다른 글

로그마이너 패키지 설치&실습  (0) 2015.09.14
Reorg 시나리오  (0) 2015.09.14
Flashback Database  (0) 2015.09.14
DB link  (0) 2015.09.14
UNDO, REDO, LOGMINER  (0) 2015.09.14