강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

SNMP for Oracle

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

SNMP for Oracle

t.gif
t.gif
SNMP for Oracle

Red Hat Linux release 8.0 (Psyche)
Kernel 2.4.20 on an i686
Oracle8i Enterprise Edition Release 8.1.7.0.1 - Production
NET-SNMP version:  5.0.8
강명규(kang@dbakorea.pe.kr)

오라클DBMS는 SNMP를 지원한다.
우리는 SNMP를 통해 오라클의 DB명, 테이블스페이스 정보등을 알 수 있다.
이론적인 부분은 자세히 설명하지 않고, 수행방법에 중점을 두고 설명하려 한다.

오라클은 자신을 master agent로 등록하고 system agent(snmpd)는 sub-agent로 정의한다.
디폴트 포트는 스크립트파일 $ORACLE_HOME/network/snmp/peer/start_peer에 다음과 같이 등록되어 있다.

ORG_SNMPD_PORT=161
ORG_TRAPD_PORT=162
NEW_SNMPD_PORT=1161
NEW_TRAPD_PORT=1162


여기에서는 $ORACLE_HOME/network/snmp/peer/ 디렉토리에서 주로 작업할 것이다.
SNMP agent는 필히 다음 순서로 실행해야 한다.

master_peer -> encap_peer -> native snmpd(net-smnp)


[실행파일]
$ORACLE_HOME/network/snmp/peer/start_peer : 아래 3가지 실행파일을 실행시키는 스크립트
$ORACLE_HOME/network/snmp/peer/master_peer
$ORACLE_HOME/network/snmp/peer/encap_peer
/usr/local/net-snmp/bin/snmpd



[사용하는 설정파일]
master_peer : $ORACLE_HOME/network/snmp/peer/CONFIG.master
encap_peer  : $ORACLE_HOME/network/snmp/peer/CONFIG.encap
native snmpd: $ORACLE_HOME/network/snmp/peer/snmpd.conf



[설정사항 변경]

1. PEER master agent (CONFIG.master)
설정파일인 CONFIG.master을 열어, MANAGER를 찾아 자신의 IP주소로 변경한다.

COMMUNITY       public
                ALLOW ALL OPERATIONS
                USE NO ENCRYPTION
MANAGER         localhost
                SEND ALL TRAPS

2. PEER Encapsulator (CONFIG.encap)
설정파일인 CONFIG.encap을 열어, 포트를 변경할 수도 있다.

AGENT AT PORT 1161 WITH COMMUNITY public
SUBTREES        1.3.6.1.2.1.1,
                1.3.6.1.2.1.2,
                1.3.6.1.2.1.3,
                1.3.6.1.2.1.4,
                1.3.6.1.2.1.5,
                1.3.6.1.2.1.6,
                1.3.6.1.2.1.7,
                1.3.6.1.2.1.8,
                1.3.6.1.4.1.11.2
FORWARD ALL TRAPS;


3. SNMPD (snmpd.conf)
Native snmpd를 사용하는데, 여기서는 NET-SNMP라는 놈을 사용할 것이다.
이에 관해선 Linux메뉴의 snmp기사를 참조해도 좋다.

com2sec  local     localhost       private
com2sec  mynet     192.168.0.0/24   public
com2sec  public    default         public

group mygroup v1         mynet
group mygroup v2c        mynet
group mygroup usm        mynet
group local   v1         local
group local   v2c        local
group local   usm        local
group public  v1         public
group public  v2c        public
group public  usm        public

view all    included  .1                               80
view system included  system                           fe
view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc

access mygroup ""      any       noauth    exact  mib2   none  none
access public  ""      any       noauth    exact  system none  none
access local   ""      any       noauth    exact  all    all   all

syslocation "Hang-Shin dong, Goyang City, Kyung-Gi do, Republic of Korea"
syscontact "kang myung gyu "

#trap-dest: 192.168.0.2
#agentaddress 1161





[오라클 MIB등록하기]
NET-SNMP의 MIB등록디렉토리(/usr/local/share/snmp/mibs)에 오라클의 MIB를 등록하자.
말이 거창하여 등록이지만, 그냥 복사해주는 것으로 끝난다.

[root@linux peer]# cp $ORACLE_HOME/network/doc/*.v1 /usr/local/share/snmp/mibs/


주의)
오라클 MIB파일에 문제가 있어 다음과 같은 에러가 날 것이다.
[root@linux peer]# snmpwalk -m all -v1 -c public localhost rdbmsMIB
Unlinked OID in ORANAMES-MIB: oracle ::= { enterprises 111 }
Undefined identifier: enterprises near line 23 of /usr/local/share/snmp/mibs/onrs.v1
Segmentation fault

해결책)
onrs.v1파일의 13라인을 다음과 같이 수정한다.

        Counter
                FROM RFC1155-SMI


        Counter, enterprises
                FROM RFC1155-SMI



[start_peer 스크립트수정]
파일에서 SNMPD와 관련된 부분을 수정한다.
이는 SNMP AGENT프로그램은 Third Party제품이기 때문에 시스템마다 차이가 존재할 수 있기 때문이다.
나는 NET-SNMP 5.0.8버전을 사용했으므로, 다음 부분을 수정했다.


SNMPD=/usr/local/sbin/snmpd
SNMPD_CONFIG=/u01/app/oracle/product/8.1.7/network/snmp/peer/snmpd.conf

        echo "$SNMPD -L -c $SNMPD_CONFIG $NEW_SNMPD_PORT >snmpd.out 2>&1 &"
        $SNMPD -L -c $SNMPD_CONFIG $NEW_SNMPD_PORT >snmpd.out 2>&1 &




[실행하기]
start_peer스크립트는 master_peer, encap_peer, snmpd를 시동하기 위해 사용된다.
실행시 인자에 따라, 각각 따로따로 실행시킬 수도 있고, 모두 실행하게 할 수도 있다.

-a: 순서대로 모두실행
-m: master_peer만 실행
-e: encap_peer만 실행
-n: snmpd만 실행

반드시 master_peer, encap_peer,snmpd순으로 실행해야 함을 잊지 말도록 하자.
이전에 실행중인 프로그램이 없는지 확인하고, root유저로 실행하도록 한다.

[root@linux root]# cd $ORACLE_HOME/network/snmp/peer
[root@linux peer]# ./start_peer -a
Starting master_peer ...
./master_peer CONFIG.master NOV >master_peer.out 2>&1 &
Done!

Starting encap_peer ...
./encap_peer -t 1162 -s 1160 -c CONFIG.encap >encap_peer.out 2>&1 &
Done!

Starting /usr/local/sbin/snmpd ...
/usr/local/sbin/snmpd -L -c snmpd.conf -x 1161 >snmpd.out 2>&1 &
Done!

cf) './start_peer -h'를 입력하면 도움말이 나온다.




[확인]
Check the master peer agent is running:

$ netstat -a -n | grep 161
$ netstat -a -n | grep 162

Check the encapsulator is running:

$ netstat -a -n | grep 199

Check the system SNMP daemon is running:

$ netstat -a -n | grep 1161
$ netstat -a -n | grep 1162





아래의 것들은 oracle계정에서 해주면 되겠다.

[Intelligent Agent실행]
[oracle@linux oracle]$ lsnrctl dbsnmp_start

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 02-JUN-2003 21:01:05

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

cf) Oracle 9i부터는 IA시작 명령이 다음과 같다.
% agentctl start agent
참고로 OMS(Oracle Management server)는 다음과 같다.
% oemctl start oms

[리스너 실행]
SNMP에 ON이 되는지 확인할 것.
[oracle@linux oracle]$ lsnrctl start

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 02-JUN-2003 21:01:38

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

Starting /u01/app/oracle/product/8.1.7/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 8.1.7.0.0 - Production
System parameter file is /u01/app/oracle/product/8.1.7/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/8.1.7/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.2)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 8.1.7.0.0 - Production
Start Date                02-JUN-2003 21:01:38
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  OFF
SNMP                      ON
Listener Parameter File   /u01/app/oracle/product/8.1.7/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/8.1.7/network/log/listener.log
Services Summary...
  db            has 1 service handler(s)
The command completed successfully


[DB실행]
[oracle@linux oracle]$ sqlplus /nolog

SQL*Plus: Release 8.1.7.0.0 - Production on Mon Jun 2 21:02:57 2003

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

SQL> connect / as sysoper
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.
SQL> quit
Disconnected


이제까지의 수행된 프로세스는 다음과 같다.
[oracle@linux oracle]$ ps ax
.
.
25323 pts/1    S      0:00 ./master_peer CONFIG.master NOV
25330 pts/1    S      0:00 ./encap_peer -t 1162 -s 1160 -c CONFIG.encap
25340 ?        S      0:57 /usr/local/sbin/snmpd -L -c /u01/app/oracle/product/8.1.7/network/snmp/peer/snmpd.conf 1161
25345 ?        S      0:00 dbsnmp
25346 ?        S      0:00 dbsnmp
25376 ?        S      0:00 /u01/app/oracle/product/8.1.7/bin/tnslsnr LISTENER -inherit
25382 ?        S      0:00 ora_pmon_db
25384 ?        S      0:00 ora_dbw0_db
25386 ?        S      0:00 ora_lgwr_db
25388 ?        S      0:00 ora_ckpt_db
25390 ?        S      0:00 ora_smon_db
25392 ?        S      0:00 ora_reco_db
25394 ?        S      0:00 ora_arc0_db
25396 ?        S      0:00 oracledb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
25398 ?        S      0:00 oracledb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
.
.



[테스트]
오라클에 관련된 MIB는 직접 $ORACLE_HOME/network/doc/*.v1파일들을 보면 된다.
이에 대한 설명은 아래의 오라클 매뉴얼을 보면 되겠다. 여기서는 간단히 몇개만 예로 보이겠다.

Oracle SNMP Support Reference Guide
http://download-west.oracle.com/docs/cd/A87861_01/NT817EE/em.817/a85249/toc.htm


SGA정보를 본다.
[root@linux peer]# snmpwalk -m all -v1 -c public localhost oraDbSGATable
ORADB-MIB::oraDbSGAFixedSize.2 = INTEGER: 72
ORADB-MIB::oraDbSGAVariableSize.2 = INTEGER: 12736
ORADB-MIB::oraDbSGADatabaseBuffers.2 = INTEGER: 16777216
ORADB-MIB::oraDbSGARedoBuffers.2 = INTEGER: 172032

DB에 생성된 테이블스페이스 목록을 얻는다.
[root@linux peer]# snmpwalk -m all -v1 -c public localhost oraDbTablespaceName
ORADB-MIB::oraDbTablespaceName.2.1 = STRING: "RBS"
ORADB-MIB::oraDbTablespaceName.2.2 = STRING: "SYSTEM"
ORADB-MIB::oraDbTablespaceName.2.3 = STRING: "TEMP"
ORADB-MIB::oraDbTablespaceName.2.4 = STRING: "TOOLS"
ORADB-MIB::oraDbTablespaceName.2.5 = STRING: "TS_KANG"
ORADB-MIB::oraDbTablespaceName.2.6 = STRING: "TS_KANG_IDX"
ORADB-MIB::oraDbTablespaceName.2.7 = STRING: "TS_TOADUSER"

결과는 생략하겠다. 너무 길어서..
[root@linux peer]# snmpwalk -m all -v1 -c public localhost rdbmsMIB


나머지 것들은 다음을 참조하여 직접 해보록 하자.

오라클DB에 관련된 MIB
oraDbSysTable
oraDbTablespaceTable
oraDbDataFileTable
oraDbLibraryCacheTable
oraDbLibraryCacheSumTable
oraDbSGATable
oraDbConfigTable
oraRepTable
oraRepSchemaTable
oraRepMasterSchema Table
oraRepSnapshotSchemaTable
oraRepLinkTable

리스너에 관련된 MIB
oraListenerTable
oraSIDTable
oraDedicatedSrvTable
oraDispatcherTable
oraPrespawnedSrvTable
oraListenAddressTable
oraListenerTraps

오라클 Names서버에 관련된 MIB
oraNamesTNSTable
oraNamesConfigTable
oraNamesServerTable

Public RDBMS MIB (RDBMS 표준 MIB)
rdbmsDbTable
rdbmsDbInfoTable
rdbmsSrvTable
rdbmsSrvInfoTable
rdbmsSrvParamTable
rdbmsRelTable
rdbmsTraps

Network Services MIB
applTable

Enterprise Manager MIB
oraAgentEventTable
oraAgentTraps



[종료]
[oracle@linux oracle]$ sqlplus /nolog

SQL*Plus: Release 8.1.7.0.0 - Production on Tue Jun 3 03:47:22 2003

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

SQL> connect internal
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.1 - Production
With the Partitioning option
JServer Release 8.1.7.0.1 - Production
[oracle@linux oracle]$ lsnrctl stop

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 03-JUN-2003 03:49:05

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)))
The command completed successfully
[oracle@linux oracle]$ lsnrctl dbsnmp_stop

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 03-JUN-2003 03:55:29

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

[root@linux root]# killall snmpd master_peer


여기서는 리눅스에서 했는데 다음에는 윈도에서 설정하는 법을 다루겠다.
Trap은 다루지 않았는데, 시간이 되면 거기까지도...
더 시간이 되면 MRTG와의 응용단계로.. 흠냐.. 요즘 시간이 없어서 ...

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  96 명