부리부리

ORACLE 백업복원종류 본문

ORACLE

ORACLE 백업복원종류

구리불주먹 2019. 1. 28. 17:37
반응형
SMALL

백업 

1.close 백업    - 무조건 SHUTDOWN 시켜야함

2.open 백업


복구


1. noarchive mode--닫힌복구

   다른위치에 복구(imsy)


1. archive mode-완전복구(4가지)    - 자주씀

1) 닫힌 데이터베이스 복구(System tablespace 문제시-shutdown)

2) 열린 데이터베이스 복구(일반 tablespace 문제시-offline)

3) 다른위치에 datafile복구(imsy)

4) 백업하지 않은 datafile복구


불완전복구(3가지)

1) 시간기반 복구

2) 취소기반 복구(아카이브 로그의 손실발생)

3) 백업control파일을 이용한 복구(아카이브로그가 아닌 ctl파일에서복구)


log파일 복구(4가지)

1)대기 상태 그룹의 멤버문제

2)대기 상태 그룹의 문제(2가지: Open, Close복구)

3)Current 로그 장애(2가지: Open, Close복구)

4)전체삭제(2가지 : 모든 Redolog파일 삭제, 모든 Control파일 삭제)

SYS@TestDB> ARCHIVE LOG LIST

데이터베이스 로그 모드              아카이브 모드가 아님

자동 아카이브             사용 안함으로 설정됨

아카이브 대상            USE_DB_RECOVERY_FILE_DEST

가장 오래된 온라인 로그 순서        33

현재 로그 순서                           35


SYS@TestDB> @LOG


    GROUP# MEMBER                                     BYTES  SEQUENCE# STATUS

---------- -----------------------------                 ---------- ---------- -----------

         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         34 INACTIVE

           REDO01.LOG


         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         35 CURRENT

           REDO02.LOG


         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         33 INACTIVE

           REDO03.LOG


--복구해보기

C:\app\itwill\product\11.2.0\dbhome_1\database\INITtestDB.ORACLE

log_archive_dest_1='location=c:\aDisk\arc1'

log_archive_dest_2='location=c:\aDisk\arc2'       --저장위치 설정

log_archive_format=%s_%t_%r.arc                     --만들어졌을때 어떻게 만들어지는지 설정해줌


SYS@TestDB> STARTUP MOUNT

ORACLE 인스턴스가 시작되었습니다.


Total System Global Area 3390558208 bytes

Fixed Size                  2180464 bytes

Variable Size            1862273680 bytes

Database Buffers         1509949440 bytes

Redo Buffers               16154624 bytes

데이터베이스가 마운트되었습니다.

SYS@TestDB> ALTER DATABASE ARCHIVELOG;


데이타베이스가 변경되었습니다.


SYS@TestDB> ALTER DATABASE OPEN ;


SYS@TestDB> ARCHIVE LOG LIST

데이터베이스 로그 모드              아카이브 모드

자동 아카이브             사용으로 설정됨

아카이브 대상            c:\adisk\arc2

가장 오래된 온라인 로그 순서     33

아카이브할 다음 로그   35

현재 로그 순서           35


SYS@TestDB> @SWITCH


시스템이 변경되었습니다.



시스템이 변경되었습니다.


아카이브 로그 생성됨

%S= CURRENT / %T = FILE갯수 


SYS@TestDB> SHUTDOWN IMMEDIATE


기본 DATABASE에 있는 파일들을 복사해서 


(ARCHIVE LOG 를 활성화한상태를 BACKUP한거임)


SYS@TestDB> STARTUP


1.닫힌 DB복구 (System tablespace 문제시-shutdown)


SYS@TestDB> @DDF


TABLESPACE_   NAME       BYTES FILE_NAME

---------------- ----------   -----------------------------

SYSTEM       723517440  C:\APP\ITWILL\ORADATA\TESTDB\

                                   SYSTEM01.DBF        -해당파일이 문제있을때


    기존에 TEST TABLE이 있어서 삭제 작업해줌


SYS@TestDB> SELECT TABLESPACE_NAME FROM DBA_TABLES WHERE TABLE_NAME='TEST';


TABLESPACE_NAME

----------------

SYSTEM


->SHUTDOWN 하고 SYSTEM01.DBF 지움 (문제발생 /HDD망가진상태)


SYS@TestDB> STARTUP

ORACLE 인스턴스가 시작되었습니다.


Total System Global Area 3390558208 bytes

Fixed Size                  2180464 bytes

Variable Size            1862273680 bytes

Database Buffers         1509949440 bytes

Redo Buffers               16154624 bytes

데이터베이스가 마운트되었습니다.

ORA-01157: 데이터 1 파일을 식별 또는 잠금 할 수 없습니다- DBWR 추적 파일을

보십시오

ORA-01110: 1 데이터 파일: 'C:\APP\ITWILL\ORADATA\TESTDB\SYSTEM01.DBF'


    현재 MOUNT상태


->백업해둔 SYSTEM01.DBF를 복사해서 붙여넣기 (근데 같은 FAM이 아님)


 

AUTO  -> 알아서 아카이브 로그 복구를진행함



SYS@TestDB> SELECT * FROM TEST;


        NO

----------

        10

        20

        30

        40

        50

        60


6 개의 행이 선택되었습니다.


-->복구완료



2.열린 데이터베이스 복구(일반 tablespace 문제시-offline)


-DB가 살아있는 상태에서 USERS01.DBF 지우기


-ARCHIVE BACKUP 파일에서 USERS01.DBF복사해서 TESTDB로 넣기 


SYS@TestDB> RECOVER TABLESPACE USERS;

ORA-00279: 변환 1708678가 (01/29/2019 10:19:13에서 생성된) 스레드 1에

필요합니다

ORA-00289: 제안 : C:\ADISK\ARC2\37_1_996676780.ARC

ORA-00280: 변환 1708678(스레드 1를 위한)가 시퀀스번호 37에 있습니다



로그 지정: {<RET>=suggested | filename | AUTO | CANCEL}

AUTO

ORA-00279: 변환 1709039가 (01/29/2019 11:17:24에서 생성된) 스레드 1에

필요합니다

ORA-00289: 제안 : C:\ADISK\ARC2\38_1_996676780.ARC

ORA-00280: 변환 1709039(스레드 1를 위한)가 시퀀스번호 38에 있습니다


SYS@TestDB> ALTER TABLESPACE USERS ONLINE;

테이블스페이스가 변경되었습니다.

SYS@TestDB> SELECT * FROM ST.TEST;

        NO
----------
        10
        20
        30
        40
        50
        60

6 개의 행이 선택되었습니다.

-복구완료

3. 다른위치에 datafile복구(imsy) - 해당 HDD에 복구 못할경우

USER ST 생성하고 @TEST
USERS01.DBF 삭제

C:\ADISK\DISK1\USERS01.DBF 로 복사 
 

SYS@TestDB> @DDF

TABLESPACE_NAME       BYTES FILE_NAME
---------------- ---------- -----------------------------
USERS                       C:\APP\ITWILL\ORADATA\TESTDB\
                            USERS01.DBF


SYS@TestDB> ALTER TABLESPACE USERS RENAME
  2  DATAFILE 'C:\app\itwill\oradata\TestDB\USERS01.DBF'
  3  TO 'C:\ADISK\DISK1\USERS01.DBF';

테이블스페이스가 변경되었습니다.

SYS@TestDB> RECOVER TABLESPACE USERS;


SYS@TestDB>SELECT * FROM ST.TEST;

-복구완료

4. 백업하지 않은 datafile복구


SYS@TestDB> SELECT TABLE_NAME,TABLESPACE_NAME FROM DBA_TABLES
  2  WHERE OWNER='ST';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ----------------
TEST                           TEST

SYS@TestDB> ALTER TABLESPACE TEST OFFLINE;

테이블스페이스가 변경되었습니다.
->TEST01.DBF 삭제

SYS@TestDB> SELECT * FROM V$RECOVER_FILE;

     FILE# ONLINE  ONLINE_ ERROR         CHANGE# TIME
---------- ------- ------- ---------- ---------- --------
         6 OFFLINE OFFLINE OFFLINE             0
                           NORMAL
->현재 문제가 있는 TABLESPACE를 보여줌 
왜 6번째면 우리가만든 6번째 파일에서 문제가 생겼다고 알려준다

=>현재 ARCHIVE LOG BACKUP 폴더엔 TEST파일이 없음 
결국 현재는 미완성 그릇이기때문에 똑같은 빈그릇을 하나 만들어준다

SYS@TestDB> ALTER DATABASE CREATE
  2  DATAFILE 'C:\APP\ITWILL\ORADATA\TESTDB\TEST01.DBF'
  3  AS 'C:\APP\ITWILL\ORADATA\TESTDB\TEST01.DBF';

데이타베이스가 변경되었습니다.

->빈그릇생성/ 내용은 아카이브 로그에 있으니 가져오면됨 

SYS@TestDB> RECOVER TABLESPACE TEST;

SYS@TestDB> ALTER TABLESPACE TEST ONLINE;

테이블스페이스가 변경되었습니다.

SYS@TestDB> SELECT * FROM V$RECOVER_FILE;

선택된 레코드가 없습니다.

▶불완전복구(3가지)

불완전 복구는 업무상 중요한 데이타베이스를 위한 최적의 복구 솔루션이 아니다. 이 작업에서는 데이타베이스가 오류 전의 시점으로 복원 및 복구되기 때문에 데이타 손실이 발생한다. DBA는 불완전 복구를 가져올 수 있는 다양한 상황을 이해해야 한다. 아카이브 로그 파일 누락, 모든 제어 파일 손실, 아카이브되지 않은 모든 로그 파일 및 데이타 파일 손실, 테이블 삭제 같은 사용자 오류 등을 생각할 수 있다. 이러한 상황을 이해하면 DBA는 데이타베이스를 구성하거나 불완전 복구 작업을 방지하는 백업 작업을 수행할 수 있다


1. 시간기반 복구 /데이터 삭제시 실수로 테이블삭제 

사용자가 실수로 TABLE을 DROP할 경우에 DDL의 특성상 AUTO COMMIT이 되어버리기 때문에 완전 복구를 시도할 경우 DROP된 상태로 복구가 되어버린다. 이런경우 사용하는 복구 

EX) 현재 10시면 9시에 DB상태로 복구


    5초 뒤 COMMIT



실수로 DROP해버림

KIM@TestDB> DROP TABLE INSA1;


관리자

SYS@TestDB> SHUTDOWN IMMEDIATE

데이터베이스가 닫혔습니다.

데이터베이스가 마운트 해제되었습니다.

ORACLE 인스턴스가 종료되었습니다.

SYS@TestDB> STARTUP MOUNT;

ORACLE 인스턴스가 시작되었습니다.


Total System Global Area 3390558208 bytes

Fixed Size                  2180464 bytes

Variable Size            1862273680 bytes

Database Buffers         1509949440 bytes

Redo Buffers               16154624 bytes

데이터베이스가 마운트되었습니다.


->BACKUP 폴더에서 DBF만 복사후 ORADATA로 덮어씌움

->복구

SYS@TestDB> SET AUTORECOVERY ON


INSERT한 시간 3초전으로 복구 

SYS@TestDB> RECOVER DATABASE UNTIL TIME '2019-01-29:15:11:10'

매체 복구가 완료되었습니다.

->불안전하게 복구 

SYS@TestDB> ALTER DATABASE OPEN RESETLOGS;

데이타베이스가 변경되었습니다.

->LOG 를 초기화시켜버림 



SYS@TestDB> @SWITCH

시스템이 변경되었습니다.


->ARCHIVE LOG는 1번 부터 다시 생성됨

(회사에서는 1번 빼고 나머지 삭제)


2. 취소기반 복구(아카이브 로그의 손실발생)/데이터 삭제시 실수로 테이블삭제 

아카이브 파일이 중간에 삭제 된경우 1,2,3,5,6,7~

복구를 진행할때 4번 복구할때 사용자가CANCEL해버림

SET AUTORECOVERY ON일경우 끝까지 복구를 진행해버리기때문에 OFF로 변경



INSERT 30,40 -> COMMIT -> @SWITCH 

INSERT 50 -> COMMIT -> @SWITCH

INSERT 60,70 -> COMMIT -> @SWITCH / ARCHIVE LOG 43 ->@SWITCH * 3


KIM@TestDB> DROP TABLE INSA1;


SYS@TestDB> SELECT SEQUENCE#,

  2  TO_CHAR(FIRST_TIME,'YYYY-MM-DDHH24:MI:SS')

  3  FROM V$LOG_HISTORY;




->ARCHIVE LOG 44삭제 


ARCHIVE BACKUP 폴더에 DBF파일만 복사후 TESTDB에 덮어씌운다



44번이 오면 CANCEL


매체 복구가 취소되었습니다.

SYS@TestDB> ALTER DATABASE OPEN RESETLOGS;


데이타베이스가 변경되었습니다.

->45번 부터는 미래이기때문에 아카이브 로그 초기화 시켜버림

그러므로 @SWITCH -> 아카이브는 1번부터 생성됨

KIM@TestDB> SELECT * FROM INSA1;


        ID          NAME       HDATE

----------    ----------    --------

        10         ONE        19/01/29

        20         TWO        19/01/29

        30         THREE      19/01/29

        40         FOUR       19/01/29

        50         FIVE         19/01/29


->45번이후에 INSERT한 60,70 데이터는 복구안됨


3. 백업control파일을 이용한 복구(아카이브로그가 아닌 ctl파일에서복구)

-테이블삭제시 실수로 테이블 스페이스 삭제 



현재 컨트롤파일이 존재하더라도 현재와 다른구조를 가진 형태로 DB를 복구하고자 할 때 이용
대표적인 예가 테이블스페이스를 삭제한경우인데 현재 컨트롤 파일에는지워진 테이블 스페이스에 관한 정보가 없으므로 지워진 테이블스페이스에 대한 정보가 남아있는 백업된 컨트롤 파일을 이용하여 복구한다.



C:\ADISK\IMSI 폴더 생성 -> ORADATA, DISK1에 있는 파일을 모두 복붙

 TEST.DBF 삭제됨



-C:\app\itwill\diag\rdbms\testdb\testdb\trace\alert_testdb.log / 변경된 로그 확인가능

Wed Jan 30 10:04:28 2019

->C:\ADISK\IMSI 파일에 CTL,DBF만 복사해서 C:\app\itwill\oradata\TestDB 안으로 덮어씌움


->TEST.DBF는 잘라내서 
C:\ADISK\DISK1으로 덮어씌우기

->ERROR는 상관안해도 된다(왜냐면 불안전 복구이기 때문에 )



->복구완료!



▶log파일 복구(4가지)

1.대기 상태 그룹의 멤버문제 (INACTIVE상태)


 -각 그룹에 멤버 추가


※ GROUP2 MEMEBER가 문제 생김!    -> SHUTDOWN 후 REDO02B 삭제 



-> 간단함


2. 대기 상태 그룹의 문제(2가지: Open, Close복구)


->REDO03,REDO03B 삭제




->기억지워주기



->명령어로 인해 껍데기 파일이 생성됨 ->REDO03 파일 지워준다


->@SWITCH * 3


->INACTIVE상태로 변경됨


3. Current 로그 장애(2가지: Open, Close복구)

현재 CURRENT된 LOG FILE삭제 

마지막 ARCHIVE LOG 43 



SYS@TestDB> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;


->BACKUP 폴더에 DBF만 복사후 C:\app\itwill\oradata\TestDB 안에덮어씌우기 



->초기화 시키고 @SWITCH 후 UNUSED 에서 INACTIVE로 변경됨



4. 전체삭제(2가지 : 모든 Redolog파일 삭제, 모든 Control파일 삭제)


->수동으로 TRACE파일 생성

->SHUTDOWN 후 LOG파일 모두 삭제 




->CREATE.SQL 생성후 NOMOUNT~ 
CHARACTER SET KO16MSWIN949 까지 복붙

->SHUTDOWN IMMEDIATE -> @CREATE ->제어파일이 생성



->복구완료!



-OPEN BACKUP FILE


alter tablespace system begin backup;

!cp /home/oracle/oradata/testdb/system01.dbf /data/backup/open/

alter tablespace system end backup;


alter tablespace undo begin backup;

!cp /home/oracle/oradata/testdb/undo01.dbf /data/backup/open/

alter tablespace undo end backup;

--아카이브활성화되어있어야함


alter tablespace users begin backup;

!cp /home/oracle/oradata/testdb/users01.dbf /data/backup/open/

alter tablespace users end backup;



alter tablespace sysaux begin backup;

!cp /home/oracle/oradata/testdb/sysaux01.dbf /data/backup/open/

alter tablespace sysaux end backup;


alter tablespace example begin backup;

!cp /home/oracle/oradata/testdb/example01.dbf /data/backup/open/

alter tablespace example end backup;


alter database backup controlfile to '/data/backup/open/control.ctl';


반응형
LIST

'ORACLE' 카테고리의 다른 글

D:\query\LEE  (0) 2019.01.29
D:\query\KIM  (0) 2019.01.28
CHAINNING  (0) 2019.01.28
INDEX 단편화  (0) 2019.01.28
ORACLE 6장 CONTROL FILE  (0) 2019.01.24