매체 복구 준비

매체 복구 명령어
모든 매체 복구 작업에 공통적으로 해당되는 옵션
NOARCHIVELOG 모드에서의 전체 백업 복원
병렬 복구 지정


매체 복구 명령어

세가지 명령어는 동일한 조건을 사용하여 파일을 복구할 수 있는 지 결정.
복구할 파일의 잠금 권한을 얻을 수 없다면 매체복구는 오류를 나타낸다.- 이것은 두 개의 복구 세션이 동일한 파일을 복구하는 것을 방지하며 사용중인 파일의 매체 복구도 방지함

RECOVER DATABASE 명령어
리두가 적용되어야 하는 모든 데이터 파일에서 매체 복구를 수행
모든 인스턴스가 완전히 종료되고 복원된 백업이 없을 경우 복구가 필요하지 않다는 오류를 나타냄
데이터베이스를 연 인스턴스가 있을 경우 해당 인스턴스가 데이터 파일 잠금 권한을 가지므로 실패한다.
전체 데이터베이스(모든 테이블스페이스)에 대해 매체 복구를 수행하려면 해당 데이터베이스는 EXCLUSIVE로 마운트되고 닫혀야 한다.

RECOVER TABLESPACE 명령어
나열된 테이블스페이스의 모든 데이터파일에 대한 매체 복구를 수행
데이블스페이스 이름을 데이터 파일 이름으로 번역하려면 데이터베이스가 마운트되고 열려야 한다.
복구를 수행하려면 테이블스페이스는 오프라인이어야 한다. 복구할 파일이 없으면 오류가 나타남

RECOVER DATAFILE 명령어
복구될 데이터 파일을 나열
매체 복구 잠금 권한을 얻을 수 있다면 데이터베이스를 열거나 닫을 수 있다.
데이터베이스가 인스턴스에서 열렸다면 데이터 파일 복구는 오프라인 파일만을 복구할 수 있다. 

모든 매체 복구 작업에 공통적으로 해당하는 문제점

복구할 파일 결정
V$RECOVER_FILE 테이블을 사용하여 복구할 파일을 결정(복구해야 하는 파일을 모두 나열하며 파일을 복구해야 하는 이유 설명)
주: 현재 사용중인 제어파일이 매체 장애 발생 이후에 복원된 백업이거나 새로 생성된 파일인 경우 이 테이블은 유용하지 않다. 복원되거나 재생성된 제어 파일은 오라클이 V$RECOVER_FILE을 정확하게 채우는데 필요한 정보를 가지고 있지 않음

SELECT file#, online, error FROM v$recover_file;
FILE#               ONLINE               ERROR
--------------------------------------------------------------
0014                 ONLINE                
0018                 ONLINE               FILE NOT FOUND
0032                 OFFLINE              OFFLINE NORMAL
...

파일 번호로 파일 이름을 찾으려면 파일의 NAME과 FILE#을 포함하는 데이터 딕셔너리 뷰 V$DATEFILE을 사용한다.

손상된 데이터 파일복원
-손상된 파일 위치 재지정-데이터 파일 이름 변경 및 위치 재지정
-백업 없는 데이터 파일 복구
※데이터 파일이 손상되어 파일의 백업을 사용할 수 없는 경우에 복구가능한 경우
① 원래 데이터 파일이 생성된 후에 쓰여진 모든 로그 파일이 사용 가능한 경우
② 제어 파일이 손상된 파일 이름을 가지고 있는 경우(즉 제어 파일이 현재 제어파일이거나 손상된 데이터파일이 데이터베이스에 추가된 후에 만들어진 백업이 있을 경우)
 예)데이터 파일 "disk1:users1"이 손상되었고 사용 가능한 백업이 없을 경우 동일한 크기의 원본 데이터 파일을 disk2에 재생하는 방법
ALTER DATABASE CREATE DATEFIEL 'disk1:users1' AS 'disk2:users1' 

필요한 아카이브된 리두로그 파일 복원
아래의 두 테이블을 사용하여 필요한 아카이브된 리두로그 파일을 결정 할 수 있다.
V$LOG_HISTORY - 가능한 이름을 포함한 모든 아카이브된 로그를 나열한다.
V$RECOVERY_LOG -복구해야할 아카이브된 리두 로그만을 나열한다.
*가능한 이름은 LOG_ARCHIVE_FORMAT 매개변수에 의해 설정된 현재 아카이브된 로그 파일 명명법을 제공한다.

매체 복구 시작
ARCHIVELOG mode-불완전 매체 복구, 완전 매체 복구
Server Manager의 세가지 옵션중에 하나로
-[Apply Recovery Archives]대화상자
-Server Manager RECOVER 명령어
-SQL 명령어 ALTER DATABASE
※관리자 권한, 모든 복구 세션은 호환되어야 한다.사용자가 다중 스레드 서버 프로세스를 통해 데이터베이스를 접속한 경우 사용자는 매체 복구 시작할 수 없음

복구 
(1) 닫힌 데이터베이스 복구
마운트상태일 때 Server Manger의 [Apply Recovery Archives] 대화상자 사용
RECOVER명령어 - 완전복구,불완전복구
예)제어파일 백업을 사용하여 데이터베이스를 지정된 시간께지 복구

RECOVER DATABASE UNTIL TIME '1992-12-31:12:47:30' USING BACKUP CONTROLFILE;

(2) 열린 데이터베이스에서 오프라인 테이블스페이스 복구
-중요한 테이블 스페이스를 오프라인 설정 -> RECOVER 명령어 TABLESPACE 매개변수를 사용하여 열린 데이터베이스의 오프라인 테이블스페이스 복구 시작할 수 있음 
- 하나이상의 오프라인 테이블스페이스를 복구할 수 있음
예) 두 개의 오프라인 테이블스페이스 복구

RECOVER TABLESPACE ts1,ts2;

-손상된 파일을 포함하는 테이블스페이스를 오프라인으로 설정한 후 V$DATAFILE의 파일 상태를 검사하여 연관된 데이터 파일 역시 오프라인 상태라면 RECOVER 명령어 DATAFILE 매개변수를 사용하여 선택된 데이터파일을 복구 할 수 있다.

RECOVER DATAFILE 'filename1','filename2';

Server Manager 매체 복구 옵션과 동일한 SQL명령어는 RECOVER절을 사용한 SQL 명령어 ALTER DATABASE이다. 일반적으로 데이터베이스 복구는 사용자 입력을 받아 시스템 메시지를 돌려주는 Sever Manager를 사용하여 수행되어야 한다. 그러나 SQL 명령어를 사용하여 사용자 고유의 복구 응용 프로그램을 설계하려면 ALTER DATABASE 명령어를 사용한다.

(3)인스턴스 시작 중 복구 시작 Server Manger에서 STARTUP 명령어에 RECOVER 옵션을 사용하여 완전 매체 복구를 시작 할 수 있다. 인스턴스가 시작되고 데이터베이스가 마운트된 후 완전 매체 복구는 "완전 매체 복구 수행"에 설명된 대로 진행

리두로그 피일 적용
완전 매체 복구 또는 불완전 매체 복구 시 온라인 리두 로그나 아카이브된 리두로그는 매체 복구 롤 포워드 단계 중에 데이터 파일에 적용된다. 롤백 데이터가 리두 로그에 기록되므로 롤 포워드는 해당 롤백 세그먼트를 재생성 한다.
롤포워드는 데이터베이스를 정해진 시점으로 앞당기기 위해 필요한 만큼의 리두 로그 파일을 사용한다. 로그 파일이 필요해지면 Oracle은 해당 파일 이름을 제안한다.
예) Server Manager를 사용하는 경우
ora-00279 : change #### generated at DD/MM/YY HH:MM:SS needed for thtead # 
ora-00289 : Suggestion : logfile
ora-00280 : Change #### for thread # is in sequence #
Specify log: [<RET> for suggested | AUTO | FROM logsource | CANCEL ]

로그 파일 적용
(1) 제안된 로그 파일명 
요청된 아카이브된 로그파일이 LOG_ARCHIVE_DEST에 모두 마운트되어 있고 LOG_ARCHIVE_FORMAT 의 값이 변경되지 않았을 경우 Oracle은 자동으로 로그 파일을 제안하고 적용하여 매체복구를 수행.
LOG_ARCHIVE_DEST 에 의해 지정된 위치가 매체 장애 등의 이유로 사용할 수 없는 경우 매체 복구를 시작하기 전에 이 매개변수의 값을 변경하고 로그파일을 새 위치로 이동시킨 후 새 인스턴스를 시작할 수 있다.
어떤 경우에는 LOG_ARCHIVE_DEST의 현재 설정값을 로그 파일의 원본으로 무효화해야 할 경우가 있다.
예) 데이터베이스가 열린 상태이고 오프라인 테이블스페이스를 복구해야 하지만 LOG_ARCHIVE_DEST에 의해 지정된 위치에 필요한 로그파일을 마운트할 영역이 충분하지 않을 경우 로그 파일을 대체될 위치에 마운트시킨 후 Oracle에 복구 작업을 위한 대체 위치를 지정한다. 필요한 로그파일이 있는 위치를 지정하려면 Server Manager에서 SET 명령어에 LOGSOURCE 매개변수를 사용합니다. SQL을 사용할 때는 ALTER DATABASE 명령어에 RECOVER...FROM 매개변수를 사용한다.
한위치에 필요한 로그 파일을 모두 마운트시킬 충분한 영역이 없을 경우 LOG_ARCHIVE_DEST의 현재 설정값 무효화를 고려할 수 있다.

(2) Server Manager를 사용하는 경우 로그 파일 적용
제안된 아카이브된 리두로그가 정확한 경우 제안된 아카이브된 리두로그를 적용한다. 제안된 파일이 정확하지 않은 경우를 제외하고는 파일명을 지정할 필요가 없다. 파일명이 제공된 후 Oracle은 복원된 데이터베이스를 롤 포워드 하기 위해 로그 파일을 적용한다. 
-매체복구를 시작하기 전에 다음 Server Manager 명령문을 사용하여 자동복구를 시작한다.
SET AUTORECOVERY ON;
복구되기 시작하면 제안된 리두로그의 자동 적용이 시작된다.
-매체복구가 시작되면 리두로그 파일 입력 프롬프트에 "auto"를 입력한다. 제안된 리두로그의 자동 적용이 시 시점 부터 시작된다.
제안된 리두로그 파일은 제안된 리두 로그가 정확하지 않거나 복구가 완료될 때까지 자동으로 적용된다. 취소에 준한 복구 또는 제어 파일 백업을 사용할 경우에는 온라인 리두로그 파일을 수동으로 지정해야 한다.

(3) SQL명령어를 사용하는 경우 로그 파일 적용
리두로그 파일 적용은 리두로그 파일 적용고 유사하다. 그러나 매체 복구가 시작된 후에는 로그파일의 입력 프롬프트가 표시되지 않는 대신 ALTER DATABASE RECOVER LOGFILE 명령문을 사용하여 정확한 로그파일을 제공해야 한다.
예) 메시지에 LOG1.ARC를 제안한 경우 다음 명령문을 사용하여 해당제안을 적용할 수 있다.

ALTER DATABASE RECOVER LOGFILE 'log1.arc';

결과적으로 다음 예에 나타나는 것처럼 테이블스페이스를 복구하려면 여러 명령문을 사용해야 한다.
>ALTER DATABASE RECOVER TABLESPACE user1;
>ALTER DATABASE RECOVER LOGFILE 'logfile1';
>ALTER DATABASE RECOVER LOGFILE 'logfile2';
>ALTER TABLESPACE user ONLINE;

이 예에는 백업 파일이 이미 복원되었고 사용자에게 관리자는 권한이 있는 것으로 가정한다.

Server Manager에서 사용한 방법처럼 복구 시작 전이나 복구 중에 각각 다음 명령문을 사용하여 리두로그의 자동 적용을 시작할 수 있다.
① ALTER DATABASE RECOVER AUTOMATIC TABLESPACE users;
     ALTER TABLESPACE user ONLINE;
② ALTER DATABASE RECOVER TABLESPACE users;
     ALTER DATABASE REVOVER AUTOMATIC LOGFILE 'logfile1';
     ALTER TABLESPACE user ONLINE;

(4) 리두 로그의 성공적인 적용
SQL 명령문이 아닌 Server Manager의 복구 옵션을 사용하는 경우 Oracle이 리두로그 파일을 적용할 때마다 Log applied 메시지를 돌려주는 지 확인해야 한다. 제안된 파일이 잘못되었거나 잘못된 파일명을 제공했을 경우 오류메시지를 돌려줌, 오류메시지를 돌려주었다면 복구에 필요한 리두 로그 파일은 작용되지 않았다.
리두로그 파일명을 입력한후 오류메시지를 돌려주었다면 발생할 수 있는 오류
① 파일을 찾을 수 없다 - 잘못된 파일명을 입력했을 때 정확한 파일명을 재입력.
② 리두로그 파일을 찾았어나 열 수 없는 경우 - 리두로그 파일의 잠금을 해제한 후 파일명 재입력 한다.
③ 리두로그 피일을 찾았어나 읽을 수 없는 경우 - 리두 로그 파일이 부분적으로만 쓰여졌거나 훼손되었을 때 일어난다. 훼손되지 않은 완전한 로그의 복사본을 찾을 수 있다면 다시 복구할 필요없이 단순히 해당 복사본을 적용한다. 로그의 다른 복사본이 없고 최근의 유효한 리두 입력 항목을 알고 있을 경우 시간에 준한 복구 또는 변경 사항에 준한 복구 수행할 수 있다.

매체 복구 중단
매체 복구 작업을 시작한 후 중단시켜야 할 경우 다음 작업중 하나를 실행하여 언제든 복구 중단 가능
- 리두 로그 파일 프롬프트에 "calcel"을 입력
- 개별 데이터 파일을 복구할 때 또는 자동 복구가 진행될 때 중단시키려면 운영 체제의 인터럽트 신호를 사용한다.
복구가 취소된 후에는 정상 작업을 수행할 수 있도록 데이터베이스를 열기 전에 복구를 완료해야 한다. 복구를 재개하려면 재시작한다. 복구는 취소될 때 중단된 지점부터 재개

NOARCHIVELOG 모드에서 전체 백업복원

매체장애로 데이터파일 일부 또는 전체가 손상된 경우 일반적으로 데이터베이스를 복구하는 유일한 방법은 최근의 전체 백업을 복원하는 것이다. 정규 백업을 보조하기 위해 엑스포트를 사용하는 경우 데이터베이스의 엑스포트된 백업을 임포트하여 데이터베이스를 복원할 수 있다.

최근의 전체 백업을 복원하려면 다음과 같이 하면된다.
1. 데이터베이스가 열려있다면 Server Manager의 [Shutdown Database] 대화 상자에서 [Shutdown Abort] 모드를 사용하거나 SHUTDOWN 명령어에 ABORT 옵션을 사용하여 데이터베이스를 종료한다.

2. 백업 데이터베이스 파일을 원래 위치로 복원할 수 있도록 매체 장애를 일으킨 하드웨어 문제를 해결하는 경우
3단계로 진행하기 전에 ①단계만을 수행한다. 하드웨어 문제를 해결하지 못했고 데이터베이스 파일 일부 또는 전체를 다른 위치에 복원해야 할 경우에는 ①단계에서 ④단계께지 수행한다.

    ① 최근의 전체 백업으로 복원한다. 손상된 파일 뿐만 아니라 전체 백업의 모든 데이터 파일과 제어파일이 복원되어야 한다. 그러면 전체 데이터베이스가 단일 시점으로 동기화 된다.
    ② 필요하다면 복원된 매개변수 파일이 제어파일의 새 위치를 나타내도록 편집한다.
    ③ 복원 후 편집된 매개변수 파일을 사용하여 인스턴스를 시작한 다음 데이터베이스를 열지 않은 체 마운트한다.
    ④ 복원된 데이터 파일의 위치 재지정을 기록하는데 필요한 단계 수행 - 데이터 파일 이름 변경 및 위치 재지정
    온라인 리두 로그 멤버의 이름 변경 및 위치 재지정


3. 데이터베이스를 열고 현재의 로그 시퀀스를 1로 설정하려면 ALTER DATABASE OPEN RESETLOGS 명령어를 실행 한다. 이는 온라인 리두 로그 파일의 모든 리두 입력 항목을 무효화한다. 전체 백업으로 복원한 후에 로그를 재설정하면 백업이 만들어진 시점에서 매체 장애개 발생한 시점까지의 데이터베이스에 대한 모든 변경 사항이 손실.

 병렬 복구 지정
초기화 매개변수 RECOVER_PARALLELISM은 모든 복구 작업에 사용되는 동시 복구 프로세스 수를 지정한다. 충돌 복구는 인스턴스 시작 시에 발생하므로 이 매개변수는 충돌 복구에 사용되는 프로세스 수를 지정하는데 유용하다. 이 매개변수 값은 RECOVER 명령어에 PARALLEL절이 지정되지 않은 경우 매체 복구에 사용되는 기본 프로세스 수이다. 이 매개변수 값은 1보다 커야 하며 PARALLEL_MAX_SERVERS 매개변수 값을 초과할 수 없다.

일반적으로 병렬복구는 여러 다른 디스크에 있는 여러 데이터 파일이 동시에 복구되는 경우에 복구 시간을 줄이는데 가장 효과적이다. 병렬복구는 인스턴스 실패 후의 복구인 충돌복구와 다른 디스크 드라이브의 많은 데이터파일을 매체 복구하는데 적합하다. 병렬복구가 직렬복구 이상으로 성능이 향상되려면 최소 8개의 복구 프로세스가 필요.