ORACLE/백업및복구

Archive log mode에서의 백업 및 복구

argoLee 2018. 12. 5. 17:50

 OS 카피를 이용한 아카이브 로그 모드 백업도 기본적으로 노 아카이브 모드에서의 뱍업과 같이 OS의 cp명령어를 이용한다는 점은 같다.
 하지만 아카이브 모드를 사용할 때는 서비스 중지를 하지 않고 On-line에서의 백업이 가능하다.


 아카이브 모드에서의 OPEN 백업 및 복구에 대해 알아보도록 한다.

1. 백업 디렉토리 생성

 먼저 아래와 같이 백업을 할 디렉토리를 생성한다.

 mkdir -p /u02/bkg/open/



2. 백업 진행을 위한 스크립트 생성

 아래의 SQL을 이용해 백업을 진행 할 스크립트를 생성한다.

 SQL> set pagesize 900

select     'conn / as sysdba'  AS "command" from dual
 union all
select     'set echo on'                    from dual 
 union all
select 'ALTER TABLESPACE '||tablespace_name||' BEGIN BACKUP ;' 
        AS "command"
from   dba_tablespaces
where  contents in ('PERMANENT' , 'UNDO')
 union all
select 'host cp '||file_name||' /u02/bkg/open/.'
from   dba_data_files 
 union all
select 'ALTER TABLESPACE '||tablespace_name||' END BACKUP ;'
from   dba_tablespaces
where  contents in ('PERMANENT' , 'UNDO') 
 union all
select     'ALTER SYSTEM CHECKPOINT ;'      from dual
 union all
select     'exit'                           from dual ;


command
--------------------------------------------------------------------------------
conn / as sysdba
set echo on
ALTER TABLESPACE SYSTEM BEGIN BACKUP ;
ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP ;
ALTER TABLESPACE SYSAUX BEGIN BACKUP ;
ALTER TABLESPACE USERS BEGIN BACKUP ;
ALTER TABLESPACE EXAMPLE BEGIN BACKUP ;
host cp /u01/app/oracle/oradata/orcl/users01.dbf /u02/bkg/open/.
host cp /u01/app/oracle/oradata/orcl/sysaux01.dbf /u02/bkg/open/.
host cp /u01/app/oracle/oradata/orcl/undotbs01.dbf /u02/bkg/open/.
host cp /u01/app/oracle/oradata/orcl/system01.dbf /u02/bkg/open/.
host cp /u01/app/oracle/oradata/orcl/example01.dbf /u02/bkg/open/.
ALTER TABLESPACE SYSTEM END BACKUP ;
ALTER TABLESPACE UNDOTBS1 END BACKUP ;
ALTER TABLESPACE SYSAUX END BACKUP ;
ALTER TABLESPACE USERS END BACKUP ;
ALTER TABLESPACE EXAMPLE END BACKUP ;
ALTER SYSTEM CHECKPOINT ;
exit

SQL > exit

 SQL문에서 나온 결과 값을 이용해 아래와 같이 스크립트 파일을 생성한다.

 주의 깊게 살펴 보았다면 눈치 챘겠지만, 이번에는 저번 노 아카이브 모드와 다르게 데이터파일들에 대한 백업 스크립트를 생성하였다.
 사실 데이터파일에 비해 SPFILE은 그렇게 빈번히 발생되지 않고, 컨트롤 파일의 경우 사용자들의 명령어 및 현재 데이터베이스 상태에 대해 기록되는 것 이기 때문에   데이터파일 만큼의 빈번한 백업 보다는 시스템 변경 사항과 같은 일이 있을 시에 필요에 의해 백업 받는 것을 권장한다.

 스크립트를 설명하자면 

 먼저 오프라인에서 백업을 진행하기 위해서는 ALTER 명령어를 위해 해당 데이터파일의 백업을 진행한다는 것을 명시하여야 하고, 

 종료 시 종료 되었다고 명시해 주어야 한다.
 작업이 종료 된 후에는 SCN값이 변경되기 때문에 강제로 CHECKPOINT를 진행하여 SCN 싱크 정보를 맞춰 주어야 한다.



3. 백업 진행

 이제 생성된 스크립트를 이용해 실제 백업을 진행해 보도록 한다.

sqlplus /nolog @/u02/bkg/backup_orcl2.sql

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 8 01:28:26 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected.
SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE SYSAUX BEGIN BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE USERS BEGIN BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE EXAMPLE BEGIN BACKUP ;

Tablespace altered.

SQL> host cp /u01/app/oracle/oradata/orcl/users01.dbf /u02/bkg/open/.

SQL> host cp /u01/app/oracle/oradata/orcl/sysaux01.dbf /u02/bkg/open/.

SQL> host cp /u01/app/oracle/oradata/orcl/undotbs01.dbf /u02/bkg/open/.

SQL> host cp /u01/app/oracle/oradata/orcl/system01.dbf /u02/bkg/open/.

SQL> host cp /u01/app/oracle/oradata/orcl/example01.dbf /u02/bkg/open/.

SQL> ALTER TABLESPACE SYSTEM END BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE UNDOTBS1 END BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE SYSAUX END BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE USERS END BACKUP ;

Tablespace altered.

SQL> ALTER TABLESPACE EXAMPLE END BACKUP ;

Tablespace altered.

SQL> ALTER SYSTEM CHECKPOINT ;

System altered.

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

복사가 되었으면 아래와 같이 복사 된 내용을 확인한다.

 ls -l /u02/bkg/open
합계 891816
-rw-r-----  1 oracle oinstall 104865792  2월  8 01:31 example01.dbf
-rw-r-----  1 oracle oinstall 262152192  2월  8 01:29 sysaux01.dbf
-rw-r-----  1 oracle oinstall 503324672  2월  8 01:31 system01.dbf
-rw-r-----  1 oracle oinstall  36708352  2월  8 01:29 undotbs01.dbf
-rw-r-----  1 oracle oinstall   5251072  2월  8 01:28 users01.dbf

 정상적으로 데이터 파일이 복사 되었다.
 
 여기까지 아카이브 로그 모드에서의 온라인 백업이 완료 되었다.
 이제 이 백업 데이터를 이용해 장애 복구 하는 과정을 알아보도록한다.



4. 테스트 테이블 및 데이터 입력

 아래와 같이 HR계정에 테스트 테이블 및 데이터를 입력해 보도록 한다.

conn hr/hr

CREATE TABLE RECO_TEST01(A VARCHAR2(1));
INSERT INTO HR.RECO_TEST01 VALUES ('a');
INSERT INTO HR.RECO_TEST01 VALUES ('b');

COMMIT;

스키마 생성 후 sys계정으로 강제로 로그 스위치와 체크포인트를 변경한다.

alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;
alter system switch logfile ;
alter system checkpoint ;



5. 장애 발생

아래와 같이 OS에서 데이터 파일을 삭제한다.

rm -f /u01/app/oracle/oradata/orcl/example01.dbf
ls -l /u01/app/oracle/oradata/orcl/example01.dbf
ls: /u01/app/oracle/oradata/orcl/example01.dbf: --그런 파일이나 디렉토리가 없음

sqlplus로 접속해 유실된 테이블스페이스의 스키마인 HR계정의 데이터의 조회를 시도한다.

sqlplus / as sysdba

SQL> SELECT * FROM HR.RECO_TEST01;
SELECT * FROM HR.RECO_TEST01
                 *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

 데이터 파일이 깨졌기 때문에 데이터 조회가 불가능하다.



6. 복구

 먼저 유실 된 데이터파일이 속한 테이블스페이스를 조회하고 오프라인 상태로 변경한다.

col TABLESPACE_NAME format a50
set linesize 200

SQL> SELECT TABLESPACE_NAME FROM DBA_DATA_FILES
WHERE FILE_NAME LIKE '%example01.dbf%';
 
TABLESPACE_NAME
--------------------------------------------------
EXAMPLE

ALTER TABLESPACE EXAMPLE OFFLINE IMMEDIATE;

 별도의 터미널을 열고 백업된 데이터를 데이터 파일의 경로로 이동 시킨다.

 cp /u02/bkg/open/example01.dbf /u01/app/oracle/oradata/orcl/example01.dbf

 다시 sqlplus에서 아래와 같이 데이터 파일 복구를 시도한다.

SQL> RECOVER TABLESPACE EXAMPLE;
ORA-00279: change 590107 generated at 02/08/2012 01:28:27 needed for thread 1
ORA-00289: suggestion : /u02/arch/1_10_774589334.arc
ORA-00280: change 590107 for thread 1 is in sequence #10


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
-- 여기서 명령 프롬프트가 깜빡 거림. 이 때 아래와 같이 AUTO를 입력
AUTO
Log applied.
Media recovery complete.

SQL> ALTER TABLESPACE EXAMPLE ONLINE;

 복구가 완료 되었으면 hr계정으로 접속해 데이터를 조회해 본다.

SQL> conn hr/hr
Connected.
SQL> SELECT * FROM RECO_TEST01;

A
---
a
b

 데이터가 정상적으로 조회된다.


 
 복구 과정을 살펴보면, 백업본 이후로 새로운 데이터가 입력되었고, 

 수차례 로그 스위치를 하면서 데이터 변경 이후의 온라인 리두 로그가 없음에도 불구하고 데이터가 정상적으로 복구 되었음을 알 수 있다.

 또, 가장 중요한 점은 아카이브 모드에서의 백업 및 복구는 모두 데이터베이스 오픈 상태에서 이루어 졌다.

 노 아카이브 모드에서 백업 및 복구 모두 데이터베이스 셧다운 이후 이루어졌다는 점에서 이는 아주 큰 차이가 아닐 수 없다.

 데이터가 특정 사용자에 의해 입력되거나 배치성 데이터 입력이 아닌 이상 이런 온라인 백업/복구는 아주 유용한 기능이라 할 수 있다.






출처: http://larcyuki83.tistory.com/entry/BR-4-Archive-log-mode에서의-OS-카피-백업-및-복구?category=417422 [나름 공부하는 블로그]