ORACLE 11g RMAN LOGGING AND SCRIPTING v1.0
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