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)
|