재해 복구 준비

대기 데이터베이스 계획 및 생성
기본 데이터베이스의 물리적 구조


대기 데이터베이스 계획 및 생성

대기 데이터베이스는 기본 데이터베이스의 대기 복사본 또는 복제된 복사본을 유지 관리하며 제해가 발생해도 기본 데이터베이스를 계속 사용할 수 있도록 한다.
대기 데이터베이스는 항상 복구 모드이다. 재해가 발생하면 대기 데이터베이스는 기본 데이터베이스 복구를 해제하여 온라인 사용을 위해 활성화한다.
대기 데이터베이스는 기본 데이터베이스 복구를 위한 것이다.
따라서 재해 복구를 위해 활성화하는 것 외에 다른 목적으로 대기 데이터베이스에 질의하거나 열 수 없다.
대기 데이터베이스를 활성화하면 그것을 다른 데기 데이터베이스로 재생성하지 않은 한 다시 대기 복구 모드로 되돌릴 수 없다.
기본 데이터베이스와 대기 데이터베이스의 데이터 파일, 로그 파일,제어파일은 별도의 물리적 매체에 두어야 하므로 대기 데이터베이스와 기본 데이터베이스는 동일한 제어 파일을 사용할 수 없다.

대기 데이터베이스를 생성하려면
1. 기본 데이터베이스의 온라인 데이터 파일과 오프라인 데이터 파일을 모두 백업한다.

2. 기본 데이터베이스 제어 파일의 수정된 복사본을 생성하는 ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'filename' 명령어를 실행하여 대기 데이터베이스의 제어 파일을 생성.

3. ALTER SYSTEM ARCHIVE LOG CURRENT 명령어를 실행하여 기본 데이터베이스의 현재 온라인 로그를 아카이브한다. ALTER SYSTEM ARCHIVE LOG CURRENT 명령어를 실행하면 1단계의 데이터 파일과 2단계 제어파일, 그리고 로그파일간에 일관성을 보장.

4. 운영체제 명령어나 유틸리티를 사용하여 대기 데이터베이스의 제어 파일과 아카이브된 로그 파일, 그리고 데이터 파일 백업을 원격 사이트로 전송한다. 이진 파일로 전송할 경우 적합한 전송 방법을 사용한다.

경고: 오라클은 기본 데이터베이스와 대기 데이터베이스 모두에서 동일한 데이터 파일 이름을 유지하는 데이터 파일 이름 지정 체계를 사용하도록 한다. 이렇게 할 수 없는 경우 데이터 파일 이름 변환 매개변수를 사용할 수 있다. 위에 제안 된 데이터 파일 이름 지정 체계를 모두 사용하지 않으면 사용자의 대기 데이터베이스가 파손될 우려가 있다.

복구 모드에서 대기 데이터베이스를 유지 관리하려면
1. NO MOUNT 절을 사용하여 대기 데이터베이스에서 Oracle인스턴스를 시작

2.ALTER DATABASE MOUNT STANDBY DATABASE[EXECUSIVE/PARALLEL] 명령어 실행

3. 기본 데이터베이스에서 아카이브된 리두 로그를 원격(대기) 사이트로 전송한다. 이진 데이터로 전송할 경우 적합한 운영 체제 유틸리티를 사용한다.

4. RECOVER[FROM 'location'] STANDBY DATABASE 명령어를 실행하여 복구 모드에서 대기 데이터베이스를 설정한다.

온라인 로그 파일 지우기 대기 데이터베이스를 유지 관리하면서 성능을 최적화 하기 위해 대기 데이터베이스를 온라인 로그 파일을 지울 수 있다. 사용자가 유지 관리하는 중에 이 작업을 수행하지 않으면 온라인 로그 파일은 작업중에 자동으로 지워진다.
ALTER DATABASE CLEAR LOGFILE GROUP integer;로 로그 파일을 지운다.

데이터 파일과 로그 파일 이름 변환
다음 초기화 매개변수를 설정하여 기본 데이터베이스 제어 파일의 모든 파일명을 대기 데이터베이스가 사용할 수 있로록 변환할 수 있다.

DB_FILE_STANDBY_NAME_CONVERT
LOG_FILE_STANDBY_NAME_CONVERT

바람직하지 않지만 기본 데이터베이스와 대기 데이터베이스가 동일한 시스템에 있다면 대기 데이터베이스의 파일명과 기본데이터베이스의 파일명을 구분하기 위해 이러한 매개변수를 설정하는 것이 좋다.

대기 데이터베이스 활성화
재해가 발생할 경우 가능하다면 기본 데이터베이스 로그(ALTER SYSTEM DATABASE ARCHIVE LOG CURRENT)를 아카이브한 후 로그를 대기 사이트로 전송하고 대기 데이터베이스를 활성화 하기 전에 로그를 적용.
로그를 적용하여 대기 데이터베이스를 기본 데이터베이스와 동일한 시점(장애 발생전)으로 만들 수 있다. 현재의 온라인 로그를 아카이브 할 수 없을 경우 기본 데이터베이스의 아카이브되지 않은 로그의 트랜잭션을 복구하지 않은 채 대기 데이터베이스를 활성화한다.
대기 데이터베이스를 활성화한 후 대기 데이터베이스의 온라인 리두 로그를 재설정한다. 로그를 재설정하면 대기 데이터베이스와 기본 데이터베이스의 로그는 호환되지 않는다.
또한 대기 데이터베이스는 활성화될 때 마운트를 해제하므로 활성화 직후에 뷰나 테이블을 볼 수 없다.

대기 데이터베이스를 활성화하려면 ...
1. 대기 데이터베이스가 EXCLUSIVE 모드로 마운트되었는지 확인한다.

2. ALTER DATABASE ACTIVE STANDBY DATABASE 명령어를 실행한다.

3. 대기 데이터베이스 인스턴스를 종료한다.

4. 가능한 빨리 새로운 제품화된 데이터베이스를 백업한다. 이 시점에서 이전의 대기 데이터베이스가 현재 제품화된 데이터베이스이다. 이 작업을 꼭 수행하는 것은 아니지만 백업이 없으면 활성화 후의 변경 사항을 복구할 수 없으므로 안전 조치로 수행하는 것이 좋다.

5. 새로운 제품화된 데이터베이스를 시작한다.

주 : 대기 데이터베이스를 활성화한 후 원래 제품화된 데이터베이스의 아카이브되지 않은 로그의 트랜잭션은 모두 손실된다.

기본데이터베이스의 물리적 구조 변경

데이터 파일 추가
기본 데이터베이스에 데이터 파일을 추가하면 대기 데이터베이스에 적용될 때 자동으로 대기 제어 파일에 데이터 파일 이름을 추가하는 리두 정보를 생성한다.
대기 데이터베이스가 새 파일명을 가진 새 파일을 찾으면 복구 프로세스는 계속된다. 대기 데이터베이스가 새 파일명을 가진 새 파일을 찾지 못하면 복구 프로세스는 중지된다.
복구 프로세스가 중지되면 대기 데이터베이스의 복구 프로세스를 재개하기 전에 다음 절차 중 하나를 수행한다.

- 기본 데이터베이스의 추가된 데이터 파일 백업을 대기 데이터베이스로 복사한다.

- 대기 데이터베이스에서 ALTER DATABASE CREATE DATAFIEL 명령어를 실행
대기 데이터베이스에서 새 데이터 파일을 만들지 않으려면 DROP 옵션을 사용하여 오프라인으로 설정

파일 이름 변경
대기 데이터베이스의 제어 파일을 화면에 다시 표시하기 전까지는 기본 데이터베이스에서 데이터 파일 이름을 변경해도 대기 데이터베이스에 영향을 주지 않는다.
기본 데이터베이스의 데이터 파일의 이름을 변경할 때 기본데이터베이스와 대기 데이터베이스의 데이터 파일을 동기화하고자 할 경우 대기 데이터베이스에서도 유사한 작업을 수행한다.

로그 파일 변경
대기 데이터베이스에 영향을 주지 않고 기본 데이터베이스에 로그 파일 그룹이나 멤버를 추가할 수 있다.
마찬가지로 대기 데이터베이스에 영향을 주지 않고 기본 데이터베이스에서 로그 파일 그룹이나 멤버를 삭제할 수 있다.
또한 기본 데이터베이스의 스레드 사용 가능 여부도 대기 데이터베이스에 영향을 주지 않는다.
대기 데이터베이스와 기본 데이터베이스의 온라인 로그 파일 구성을 동일하게 유지해야 할 때도 있다.
이 경우 기본 데이터베이스에서 로그 파일 스레드가 ALTER DATABASE ENABLE THREAD 로 사용할 수 있게 되면 로그파일 스레드를 활성화하기 전에 데이터베이스에 새 제어파일을 생성해야 한다.
ALTER DATADBASE CLEAR UNARCHVIED LOGFILE 명령어를 실행하여 기본데이터베이스의 로그 파일을 지우거나 RESETLOGS 옵션을 사용하여 기본 데이터베이스를 열면 대기 데이터베이스가 무효화된다.
대기 데이터베이스의 복구 프로세스를 계속 수행하는데 필요한 아카이브된 로그가 없으므로 대기 데이터베이스를 재생성해야 한다.

제어파일 변경
기본 데이터베이스에서 다음을 수행하기 위해 CREATE CONTROLFIEL 명령어를 사용. 하면 대기 데이터베이스의 제어 파일을 무효화할 수도 있다.
- 최대 리두 로그 파일 그룹 또는 멤버 수변경
- 최대 데이터 파일 수 변경
- 동시에 데이터베이스를 마운트하여 열 수 있는 최대 인스턴스 수정
기본 데이터베이스에서 CREATE CONTROLFILE 명령어에 RESETRLOGS 옵션을 실행하면 다음에 기본 데이터베이스를 열 때 온라인 로그를 재설정한여 대기 데이터베이스를 무효화한다.

초기화 매개변수 구성
기본 데이터베이스와 대기 데이터베이스에 있는 대부분의 초기화 매개변수는 동일해야 한다. CONROL_FILES와 DB_FILE_STANDBY_NAME_CONVERT 같은 특정 초기화 매개변수는 변경되어야 한다. 다른 초기화 매개변수에서의 차이는 대기 데이터베이스의 성능을 저하시킬 수 있으며 어떤 경우에는 대기 데이터베이스의 작업을 중지시킨다.
대기 데이터베이스 복구 프로세스에서 중요한 역활
-
COMOATIBLE
대기데이터베이스와 기본 데이터베이스에서 동일해야 한다. 그렇지 않으면 기본데이터베이스의 로그를 대기데이터베이스에 적용하지 못할 수도 있다.
-
DB_FILES
MAXDATAFILES는 기본데이터베이스에서 허용한 수와 동일한 수의 파일을 대기 데이터베이스에서도 허용하로록 두 데이터베이스에서 동일해야 한다.
-
CONTROL_FILES
기본데이터베이스와 대기 데이터베이스에서 달라야 한다. 대기 데이터베이스의 이 매개변수에 나열되는 제어 파일 이름은 대기 데이터베이스에 있어야 한다.
-
DB_FILE_STANDBY_NAME_CONVERT(또는 LOG_FILE_STANDBY_NAME_CONVERT)
대기 데이터베이스의 파일명을 기본 데이터베이스의 파일명과 구분되도록 하려고 매개변수 설정

대기데이터베이스에서 데이터 파일 오프라인으로 설정
대기데이터베이스의 데이터 파일을 오프라인으로 설정하여 기본 데이터베이스 데이터 파일 일부를 지원할 수 있다.
예) 기본 데이터베이스의 임시 테이블 스페이스를 대기 데이터베이스에 복구하는 것이 바람직하지 않다고 결정 했다면 대기 데이터베이스에서 ALTER DATABASE DATAFILE 'fn' OFFLINE DROP 명령어를 사용하여 데이터 파일을 오프라인으로 설정가능하다.

직접 경로 작업 수행
직접 경로 로드나 하위질의를 사용한 테이블 생성 또는 기본 데이터베이스에서 인덱스 생성 등에서 비롯되는 직접 로드를 수행할 때 성능 향상은 기본 데이터베이스에만 적용된다. 대기 데이터베이스에는 대응되는 복구 프로세스의 성능 향상은 없다. 대기 데이터베이스 복구 프로세스는 여전히 복구 할 수 없는 직접 로드에서 생성된 리두 정보를 순서대로 읽고 적용한다.

UNRECOVERABLE 옵션을 사용하는 기본 데이터베이스 프로세스는 아카이브된 리두 로그에 나타나지 않음으로 이 프로세스의 효과는 대기 데이터베이스에 전달되지 않는다.
효과를 대기 데이터베이스에 전달하려면 다음과 같이 한다.
1. 대기 데이터베이스에서 영향을 받은 데이터파일을 오프라인으로 설정하고 활성화한 후에 테이블스페이스를 삭제.
2. 새 데이터베이스 백업으로부터 대기 데이터베이스를 재생성한다.
3. 기본 데이터베이스의 영향을 받은 테이블스페이스를 백업하고 현재 로그를 아카이브하여 해당 데이터 파일을 대기 데이터베이스로 전송한다. 그런 다음 대기 복구를 재개한다. 이것은 UNRECOVERABLE 작업 후에 보통 데이터베이스 복구 가능성을 보장하기 위해 수행하는 절차와 동일.

기본데이터베이스에서 복구 할 수 없는 작업을 수행하고 대기 데이터베이스에서 복구하려는 경우 복구 중에 오류 메시지가 나타나지는 않다. 이러한 오류 메시지는 대기 데이터베이스의 경고 로그에 나타나므로 정기적으로 대기 데이터베이스 경고 로그를 확인해야 한다.

대기 데이터베이스 제어 파일 화면에 다시 표시
1. 대기 데이터베이스에서 CANCEL 명령어를 실행하여 복구 프로세서 중지
2. 대기 인스턴스를 종료.
3. 기본 데이터베이스에서 ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'filename' 명령문을 실행하여 대기 데이터베이스에 대한 제어 파일을 생성.
4. 기본 데이터베이스에서 ALTER SYSTEM ARCHIVE LOG CURRENT 명령문을 실행하여 기본 데이터베이스의 현재 온라인 로그를 아카이브한다.
5. 대기 제어 파일과 아카이브된 로그 파일을 대기 사이트로 전송.
6. ALTER DATABASE MOUNT STANDBY DATABASE[EXCLUSIVE/PARRLLEL] 명령문을 실해하여 대기 데이터베이스를 재시작하고 마운트한다.
7. RECOVER [FROM 'location'] STANDBY DATABASE 명령문을 실행하여 대기 데이터베이스에서 복구 프로세서를 재시작.