SAP 에서는 장애 상황, 품질 시스템 재구성 등의 이유로 DB 를 복구 할때가 있다.
이 글에서는 품질 시스템 재생성(System Copy) 시 사용하는 Oracle DB Timebased Recovery 방법에 대해서 기록한다.
이하 운영 시스템은 PRD, 품질 시스템은 QAS 로 명명한다.
PRD 백업본으로 QAS 를 복구하기 전, PRD DB 파일 Restore 를 위해 QAS DB 의 sapdataXX, Archive log 디렉토리를 비워준다.
이 후, 백업 시스템을 통해서 PRD DB 파일들을 QAS DB 에 Restore 한다. (또는 PRD DB 파일 직접 카피)
Restore 시, Archive log 는 PRD 백업 파일의 백업 시작 시점부터 백업 완료 시점 +1 시간까지 있어야 한다. (성공적인 Recovery 를 위한 여유 마진)
복구 목표 지점이 있다면 동일하게 백업 시작 시점부터 백업 목표 지점 +1 시간까지 Archive log 파일을 준비해야 한다.
이때 Archive log 파일의 크기가 클 수 있으니, 사전에 Arhcive log 파일을 받을 여유 공간을 마련해 두는 것이 좋다.
만약 PRD 백업본의 백업 시작시점이 10:00,
백업 완료시점이 12:00,
복구 목표시점이 17:00 라면,
Archive log 파일을 여유있게 09:00 ~ 18:00 로 준비를 하면 된다.
이때 Archive log 파일들의 경로와 이름포맷을 미리 확인해서 QAS DB 환경에 맞게 변경해야 한다.
ORACLE_HOME/dbs/init<SID>.ora 파일을 확인하면 알 수 있다.
1. Archive log 파일 경로
*.log_archive_dest_1
2. Archive log 파일 이름 포맷
*.log_archive_format
Restore 이 후, sapdataXX 디렉토리 및 하위 Data 파일들의 권한도 확인해야 한다.
Owner => ora<SID>:sapsys
chown -R ora<SID>:sapsys /oracle/<SID>/sapdata*
PRD Oracle DB 의 Control 파일을 덤프로 떨어뜨려서 Control 파일을 QAS에 맞게 수정해야 한다.
Control 파일을 지정한 위치에 생성한다.
alter database backup controlfile to trace as '/oracle/<SID>/control_re.sql';
Control(control_re.sql) 파일 내부에는 Set #1. NORESETLOGS 와 Set #2. RESETLOGS 가 있다.
QAS 재생성 시에는 #2. RESETLOGS 를 사용하여 복구하기 때문에, NORESETLOG 부분은 삭제한다.
- Set #1. NORESETLOGS :
REDO log 를 RESET 하지 않고 복구, 원래 자기 자신의 DB를 복구할 때, Archive log 파일과 자신의 REDO log 까지 사용하여 완전 복구- Set #2. RESETLOGS :
REDO log 를 RESET 하고, Archive log 파일만으로 복구, Archive log 파일이 있는 시점까지만 복구가 가능하여 불완전 복구
기존 RESETLOGS 헤더 항목을 QAS 재생성에 맞게 변경한다.
CREATE CONTROLFILE REUSE DATABASE “PRD” RESETLOGS ARCHIVELOG
=> CREATE CONTROLFILE SET DATABASE “QAS” RESETLOGS ARCHIVELOG
control_re.sql 파일 제일 하단에 RECOVER 명령어와 TEMPFILE 에 대한 구문도 삭제한다.
RECOVER DATABASE USING BACKUP CONTROLFILE
구문 삭제 (Recover)
ALTER DATABASE OPEN RESETLOGS;
구문 삭제 (DB Open)
ALTER TABLESPACE PSAPTEMP ADD TEMPFILE
구문 전체 삭제 (Tempfile)
아래 경로에서 listner.ora, tnsname.ora 파일의 HOST, SID, GLOBAL_NAME 등등을 QAS 에 맞게 변경
<ORACLE_HOME>/network/admin
아래 경로에서 tnsname.ora 파일 변경
/sapmnt/<SID>/profile/oracle
복구 대상이 될 QAS DB 를 nomount 상태로 시작한다.
startup nomount;
Control 파일 경로 확인
show parameter control_file;
Default 설정 경로는 다음과 같다.
- /oracle/<SID>/origlogA/cntrl/
- /oracle/<SID>/origlogB/cntrl/
- /oracle/<SID>/sapdata1/cntrl/
해당 경로 내에 QAS DB 기존 Control 파일들을 다른이름으로 백업 또는 삭제
만약 cntrl 디렉토리가 없다면, 새로 생성해준다.
1번에서 생성하고 변경한 control_re.sql 파일을 실행하여 QAS DB 의 새로운 Control 파일을 생성한다.
/oracle/<SID>/control_re.sql
이때 성공적으로 수행된다면, QAS DB 가 mount 상태까지 올라온다.
준비한 Archive log 에 따라 목표 복구 시점을 정하여 DB 복구 시작
alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';
recover database using backup controlfile until time '2000-01-01:01:00:00';
=> Specify log 모드는 AUTO 로 실행
복구 완료 후, RESETLOGS 로 DB Open
alter database open resetlogs;
DB Open 이 성공적으로 된다면 복구는 성공이다.
기존 QAS DB Tempfile 이 있던 위치,
또는 새로운 여유공간이 있는 곳에 Tempfile 을 만든다.
Tempfile 을 생성할 sapdataXX 에 미리 temp_X 디렉토리를 생성한다.
mkdir /oracle/<SID>/sapdata1/temp_1
mkdir /oracle/<SID>/sapdata10/temp_2
PSAPTEMP 에 Tempfile 추가
alter tablespace PSAPTEMP add tempfile '/oracle/<SID>/sapdata1/temp_1/temp.data1' size 20000M reuse AUTOEXTEND off;
alter tablespace PSAPTEMP add tempfile '/oracle/<SID>/sapdata10/temp_2/temp.data2' size 20000M reuse AUTOEXTEND off;
보통 QAS 시스템은 TimeBased Recovry 를 할 일이 없기 때문에, No Archive Log Mode 로 운영을 한다.
shundown immediate
startup mount
alter database noarchivelog;
alter database open;
SAP AP 서버에서 다음 명령어로 DB 와의 연결을 확인 할 수 있다.
R3trans -x
R3trans -d
만약 Return code 0012로 실패한다면, SAP 와 DB 사이의 연결에 문제가 있는 것이다.
이 경우, 보통 첫번째로 SAP - DB 연결 계정인 OPS$ 계정과 SAP 스키마 계정인 SAPSR3 에 대해서 확인해봐야 한다.
- SAPSR3 계정 패스워드 확인
- OPS$ 계정 존재 유무 확인
2-1. 만약 OPS$ 계정이 없다면 아래를 참고하여 생성
2-2. 만약 OP$ 계정이 있는데 연결 오류가 발생한다면, 아래를 참고하여 OPS$ 계정 삭제 후 재생성
SAP Notes 400241 - Problems with ops$ or sapr3 connect to Oracle
SAP Notes 50088 - Creating OPS$ users on Windows NT/Oracle
SAP Notes 361641 - Creating OPS$ users on UNIX
sqlplus /NOLOG @ORADBUSR.SQL SAPSR3 UNIX <SID> x
create table "OPS$<SID>ADM".SAPUSER ( USERID VARCHAR2(256), PASSWD VARCHAR2(256));
grant connect, resource to OPS$<SID>ADM;
insert into "OPS$<SID>ADM".SAPUSER values ('SAPSR3', '<SAPSR3 패스워드>');
@/sapmnt/<SID>/exe/sapdba_role <SID>
컨트롤 파일 이외에 데이터 내부에서도 PRD > QAS로 변경해야할 정보가 있을까요?