SAP Oracle DB 복구__SAP Oracle DB Recovery

감귤은탱귤·2024년 1월 15일
1

SAP BC - 기초

목록 보기
9/37
post-thumbnail

SAP 에서는 장애 상황, 품질 시스템 재구성 등의 이유로 DB 를 복구 할때가 있다.

이 글에서는 품질 시스템 재생성(System Copy) 시 사용하는 Oracle DB Timebased Recovery 방법에 대해서 기록한다.

이하 운영 시스템은 PRD, 품질 시스템은 QAS 로 명명한다.



0. DB 백업파일 Restore

PRD 백업본으로 QAS 를 복구하기 전, PRD DB 파일 Restore 를 위해 QAS DB 의 sapdataXX, Archive log 디렉토리를 비워준다.

이 후, 백업 시스템을 통해서 PRD DB 파일들을 QAS DB 에 Restore 한다. (또는 PRD DB 파일 직접 카피)

Restore 시, Archive log 는 PRD 백업 파일의 백업 시작 시점부터 백업 완료 시점 +1 시간까지 있어야 한다. (복구 완료를 위한 최소 요구치)
복구 목표 지점이 있다면 동일하게 백업 시작 시점부터 백업 목표 지점 +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*



1. Control 파일 재생성 및 수정

PRD Oracle DB 의 Control 파일을 덤프로 떨어뜨려서 Control 파일을 QAS에 맞게 수정해야 한다.

Control 파일을 지정한 위치에 생성한다.

alter database backup controlfile to trace as '/oracle/<SID>/control_re.sql';

1-1. RESETLOGS 사용

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 파일이 있는 시점까지만 복구가 가능하여 불완전 복구

1-2. RESETLOGS 헤더 변경

기존 RESETLOGS 헤더 항목을 QAS 재생성에 맞게 변경한다.
CREATE CONTROLFILE REUSE DATABASE “PRD” RESETLOGS ARCHIVELOG
=> CREATE CONTROLFILE SET DATABASE “QAS” RESETLOGS ARCHIVELOG

1-3. 하단 불필요 구문 삭제

control_re.sql 파일 제일 하단에 RECOVER 명령어와 TEMPFILE 에 대한 구문도 삭제한다.
RECOVER DATABASE USING BACKUP CONTROLFILE 구문 삭제 (Recover)
ALTER DATABASE OPEN RESETLOGS; 구문 삭제 (DB Open)
ALTER TABLESPACE PSAPTEMP ADD TEMPFILE 구문 전체 삭제 (Tempfile)

1-4. listener.ora / tnsname.ora 변경

아래 경로에서 listner.ora, tnsname.ora 파일의 HOST, SID, GLOBAL_NAME 등등을 QAS 에 맞게 변경
<ORACLE_HOME>/network/admin

아래 경로에서 tnsname.ora 파일 변경
/sapmnt/<SID>/profile/oracle



2. QAS DB 복구

2-1. QAS DB nomount 시작

복구 대상이 될 QAS DB 를 nomount 상태로 시작한다.

startup nomount;

2-2. QAS DB 기존 Control 파일 삭제 및 백업

Control 파일 경로 확인

show parameter control_file;

Default 설정 경로는 다음과 같다.

  • /oracle/<SID>/origlogA/cntrl/
  • /oracle/<SID>/origlogB/cntrl/
  • /oracle/<SID>/sapdata1/cntrl/

해당 경로 내에 QAS DB 기존 Control 파일들을 다른이름으로 백업 또는 삭제

만약 cntrl 디렉토리가 없다면, 새로 생성해준다.

2-3. control_re.sql 실행

1번에서 생성하고 변경한 control_re.sql 파일을 실행하여 QAS DB 의 새로운 Control 파일을 생성한다.

/oracle/<SID>/control_re.sql

이때 성공적으로 수행된다면, QAS DB 가 mount 상태까지 올라온다.

2-4. DB 복구

준비한 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 로 실행

2-5. DB Open

복구 완료 후, RESETLOGS 로 DB Open

alter database open resetlogs;

DB Open 이 성공적으로 된다면 복구는 성공이다.



3. DB 복구 사후 작업

3-1. Temp Tablespace 생성 (PSAPTEMP)

기존 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;

3-2. QAS DB No Archive Log mode 설정

보통 QAS 시스템은 TimeBased Recovry 를 할 일이 없기 때문에, No Archive Log Mode 로 운영을 한다.

  • DB 종료
shundown immediate
  • DB mount 로 실행
startup mount
  • No Archive Log Mode 설정 후, DB Open
alter database noarchivelog;
alter database open;

3-3. SAP - DB 연결 확인

SAP AP 서버에서 다음 명령어로 DB 와의 연결을 확인 할 수 있다.
R3trans -x
R3trans -d

만약 Return code 0012로 실패한다면, SAP 와 DB 사이의 연결에 문제가 있는 것이다.

이 경우, 보통 첫번째로 SAP - DB 연결 계정인 OPS$ 계정과 SAP 스키마 계정인 SAPSR3 에 대해서 확인해봐야 한다.

  1. SAPSR3 계정 패스워드 확인
  2. OPS$ 계정 존재 유무 확인
    2-1. 만약 OPS$ 계정이 없다면 아래를 참고하여 생성
    2-2. 만약 OP$ 계정이 있는데 연결 오류가 발생한다면, 아래를 참고하여 OPS$ 계정 삭제 후 재생성


4. 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

  • oradbusr.sql 스크립트는 SAP Notes 50088 Attachment 참조

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>
profile
SAP BC (2019 ~ )

2개의 댓글

comment-user-thumbnail
2024년 1월 31일

컨트롤 파일 이외에 데이터 내부에서도 PRD > QAS로 변경해야할 정보가 있을까요?

1개의 답글