카테고리 없음

ORACLE 11g RMAN LOGGING AND SCRIPTING v1.0

Walking again 2012. 10. 16. 14:19

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