본문 바로가기

카테고리 없음

ORACLE 11g RMAN LOGGING AND SCRIPTING v1.0

ORACLE 11g RMAN LOGGING AND SCRIPTING v1.0

 

Date

Ver

Etc.

12.10.16

1.0

 

 

 

 

 

 

 

 

 

1.    RMAN LOGGING AND SCRIPTING

LOGGING

 

RMAN 에서 일어난 결과, 출력물을 파일에 저장하겠다는 의미이다. 이는 사용자가 보겠다는 의미로 쓸 수도 있고 사후에 보기위해 기록할 수도 있다. 보통은 자동화 해 놓고 문제가 생겼을 때 보는 경우가 많다.

 

SCRIPTING

 

RMAN 을 자동화하여 사용하기 위해 명령어를 스크립트화 한다. 이는 SHELL SCRIPT 로 사용할 수도 있고, RMAN 전용 SCRIPT 로 사용할 수도 있다.

 

2.    BEFORE ENTERING CONTENTS

LOGGING 을 하든 SCRIPTING 을 하든 RMAN 에 로그온 하는 과정은 공통적으로 필요하다. 로그온을 할 때 주의할 점에 대해 먼저 이야기 해 보려한다.

 

로그온 시 왜 주의해야 하나 단적으로 이야기 하면 패스워드가 노출 될 위험이 있기 때문이다.

 

다음의 경우에 대해 ps –ef 의 결과가 어떻게 나오는지 보려고 한다.

 

l  OS 인증의 경우

l  ID, PASSWORD 를 전부 쓰는 경우

l  PASSWORD 를 생략하는 경우

l  connect 구문을 사용하는 경우

 

OS 인증의 경우

OS 인증은 OS ORACLE 유저로 로그온 한 시점에 ORACLE 의 접근에 대해 별도 확인을 하지 않는다는 뜻이다.

 

rman target /

 

위와 같이 사용하면 결과는 아래와 같이 나온다.

 

oracle   26966 26962 75 15:01 pts/1    00:00:00 rman target /

 

위에서 노출되어 문제 될 정보는 없다.

 

ID, PASSWORD 를 전부 쓰는 경우

'rman target system/oracle' 와 같이 명령어를 사용하여 들어가는 경우 프로세스 결과는 다음과 같다.

 

oracle   27093 27092 41 15:04 pts/1    00:00:00 rman target system/oracle

 

ID PASSWORD 가 여과없이 드러난다.

 

PASSWORD 를 생략하는 경우

 

PASSWORD 를 생략하여 ‘rman target system/’ 이렇게 입력하는 경우 별도로 PASSWORD 를 요구한다.

문제는 스크립트로 만드는 경우 패스워드를 넣을 방법을 찾지 못하였다.

 

connect 구문을 사용하는 경우

 

rman << EOF

connect target system/oracle

list backupset;

EOF

 

스크립트를 위와 같이 사용하는 경우 프로세스 리스트 결과는 다음과 같다.

 

oracle   31551 31550 81 16:59 pts/1    00:00:00 rman

 

위 경우 ID, PASSWORD 전부 노출되지 않는다.

OS 인증을 사용하는 경우와는 RMAN 을 사용할 유저로 로그온할 수 있다는게 다르다고 할 수 있다.

Script 파일 안에 ID / PASSWORD 정보가 들어 있기에 파일의 읽기 권한에 주의해야 한다.
(
이를 테면 700 으로 변경)

 

3.    LOGGING

RMAN 에서 일어난 일들을 저장하고 싶은 경우가 있다.

 

l  RMAN 에서 SPOOL 사용

l  RMAN 에서 LOG 옵션을 사용

l  출력자 재지정 (redirect)

l  파이프로 tee 를 사용

 

RMAN 에서 SPOOL 사용

 

spool log to '/home/oracle/test.txt';

 

spool log off;

 

RMAN 프롬프트에서 위와 같은 방법을 사용하여 로깅할 수 있다. 내용이 append 되길 원하는 경우에는 첫 번재 줄을 다음과 같이 수정한다.

 

spool log to '/home/oracle/test.txt' append;

 

RMAN 에서 LOG 옵션을 사용

 

rman log '/home/oracle/test.txt' << EOF

connect target system/oracle

list backupset;

EOF

 

rman log 옵션을 사용하여 화면 출력을 로깅할 수 있다. 내용이 append 되길 원하는 경우에는 첫 번째 줄을 다음과 같이 수정한다.

 

rman log '/home/oracle/test.txt' append << EOF

 

출력자 재지정 (redirect)

 

rman @tmp.sql > /home/oracle/test.txt

 

위와 같이 rman script 를 호출하고 출력자 재지정을 통해 로깅할 수 있다.

 

파이프로 tee 를 사용

 

rman | tee /home/oracle/test1.txt

 

단 위 경우에는 스크립트로 자동화 하진 못 했다. 자동화가 아니라 수동으로 RMAN 접속하여 사용하는 것과 동일하다고 보면 된다. 다만 화면상에서 작업하는 내용이 tee 의 경로에 지정한 파일에 전부 저장된다.

 

명령문을 하나 하나 날리면서 (이를 테면 엑셀에서 복사 붙여넣기 하면서…) 절차식으로 작업을 한다면 괜찮은 방법이라 할 수 있다. 다만 spool 사용하는 경우와 다를게 없다.

 

4.    SCRIPTING

스크립트를 이용하는 방법은 다음과 같은 방법이 있다.

 

l  RMAN 스크립트를 RMAN 프롬프트에서 호출하는 방법

l  RMAN 스크립트를 랩핑하여 OS Script 로 호출하는 방법

 

위 방법은 치명적으로 다른 점이 있다.

 

OS Script 로 호출하는 경우 파일안의 모든 RMAN commands 를 파싱하고 순차적으로 수행을 하는데 중도에 에러를 발견하는 경우 즉시 종료된다.

이를 테면 다음의 스크립트의 결과는 show retention policy 결과가 두 번 출력된다.

 

rman << EOF

connect target system/oracle

show retention policy;

s;

show retention policy;

EOF

 

하지만 아래의 내용을 RMAN 에서 스크립트로 호출하게 되면 중간의 에러 때문에 온전한 명령문도 수행되지 않는다. 다시 말하자면 전체를 수행하거나 수행하지 않는 케이스가 있다.

 

connect target system/oracle

show retention policy;

s;

show retention policy;

 

스크립트의 호출은 한 번 중첩될 수 있다.

 

l  tmp.sql

connect target system/oracle

list backupset;

@@tmp1.sql

 

l  tmp1.sql

rman cmdfile tmp.sql

report obsolete;

 

tmp.sql 을 호출하면 내부에서 tmp1.sql 도 수행한다. 단 이 때는 @@{script name} 형태로 사용해야 한다.

 

RMAN Script 를 호출하는 방법은 아래와 같다.

 

l  rman target / @{script name}

l  rman target / cmdfile {script name}

l  RMAN>@{script name}

 

쉘 스크립트에서 rman 을 호출하는 방법은 앞서도 몇 번 나왔다.

 

l  RMAN 의 내용이 다 나오길 원한다면

rman << EOF

connect target system/oracle

list backupset;

EOF

 

l  RMAN 의 내용이 나올 필요가 없다면

rman @{script name}

 

위와 같은 방법이 있다.

보통 RMAN 쿼리를 조립하여 사용하는 경우라면 Shell Script 내부에서 전부 수행 하는게 간단할 것이다.

 

5.    REFERENCES

A.     APRESS | RMAN Recipes for ORACLE DATABASE 11g