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

Intelligent Agent

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

Intelligent Agent

t.gif
t.gif
Intelligent Agent

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


관리되는 노드에 설치되어, 해당 노드의 오라클 서비스들(DB,리스너)을 관리/모니터링한다.
IA는 (Management Server가) 자신에게 요청한 순서로 작업을 수행하여, 그 결과를 Management Server에게 알린다.
IA는 자신이 관리하는 서비스들과는 무관하게 실행할 수 있으므로, 서비스들의 시동/종료를 위해 사용될 수도 있다.
IA는 리스너를 이용하여 DB를 모니터하는데, 따라서 리스너가 죽으면 DB도 죽었다고 판단하게 된다.
IA는 노드에 1개만 실행하면 된다. 물리적으로 1개의 서버컴퓨터에 여러개의 오라클 DB를 실행할 수도 있는데
이때도 단지 1개의 IA만 실행하면 된다.

Intelligent Agent(이하 IA)는 별도의 설정파일을 만들어 줄 필요가 없이 자신이 알아서 만든다.
IA는 oratab과 listener.ora파일에서 적절한 정보를 얻어와서, 다음 3개의 설정파일을 자동 생성한다.


$ORACLE_HOME/network/agent/services.ora
$ORACLE_HOME/network/admin/snmp_ro.ora
$ORACLE_HOME/network/admin/snmp_rw.ora


$ORACLE_HOME/network/agent/services.ora
discover시에 발견된 서비스를 저장.

$ORACLE_HOME/network/admin/snmp_ro.ora
내부적으로 snmp_rw.ora와 sqlnet.ora를 포함시키는 부분이 있다. 읽기권한을 가진 SNMP요청에 대한 정보.

$ORACLE_HOME/network/admin/snmp_rw.ora
쓰기 권한을 가진 SNMP요청에 대한 정보.


[각 파일의 내용 샘플]

[oracle@linux agent]$ cat services.ora
linux = (ORACLE_NODE, linux, linux, (PLATFORM=(osName=Linux)(osVersion=2.4.20)))
listener_linux = (ORACLE_LISTENER, linux, (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))))
db.world = (ORACLE_DATABASE, linux, (DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)))(CONNECT_DATA=(SID=db)(ORACLE_HOME=/u01/app/oracle/product/8.1.7)(SERVER=DEDICATED))), listener_linux)

[oracle@linux admin]$ cat snmp_ro.ora
snmp.visibleservices = (listener, db.world)
snmp.shortname.listener = LISTENER
snmp.longname.listener = listener_linux
snmp.configfile.listener = /u01/app/oracle/product/8.1.7/network/admin/listener.ora
snmp.oraclehome.listener = /u01/app/oracle/product/8.1.7
snmp.SID.db.world = db
snmp.oraclehome.db.world = /u01/app/oracle/product/8.1.7
snmp.address.db.world = (ADDRESS=(PROTOCOL=BEQ)(PROGRAM=/u01/app/oracle/product/8.1.7/bin/oracle)(ARGV0=oracledb)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')(ENVS='ORACLE_HOME=/u01/app/oracle/product/8.1.7,ORACLE_SID=db,TNS_ADMIN=/u01/app/oracle/product/8.1.7/network/admin'))
snmp.remoteaddress.db.world = (DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)))(CONNECT_DATA=(SID=db)(ORACLE_HOME=/u01/app/oracle/product/8.1.7)(SERVER=DEDICATED)))
ifile = /u01/app/oracle/product/8.1.7/network/admin/snmp_rw.ora
ifile = /u01/app/oracle/product/8.1.7/network/admin/sqlnet.ora

[oracle@linux admin]$ cat snmp_rw.ora
snmp.contact.listener = ""
snmp.index.listener = 1
snmp.contact.db.world = ""
snmp.index.db.world = 2
[oracle@linux admin]$


위 3개의 파일은 IA가 새로운 서비스를 discover하는 과정에서 생성되는 파일들이다.
IA을 실행하면(lsnrctl dbsnmp_start), IA는 로컬의 /etc/oratab파일에서 오라클홈과 SID를 알아낸다.
알아낸 오라클홈에 대한 listener.ora파일을 찾고, 리스너에 의해 서비스되는 DB를 파악한다.
서비스되는 DB이름은 listener.ora의 GLOBAL_DBNAME패러미터값으로 지정할 수 있는데,
이 패러미터를 지정하지 않으면, IA는 tnsnames.ora파일에서 찾고, tnsnames.ora파일에도 없으면,
db alias(SID_hostnames)를 DB서비스명으로 하게 된다.
IA는 이 이름으로 서비스를 식별할 것이고, OEM 콘솔에도 이 이름으로 표시될 것이다.

실제 예를 보자.

[oracle@linux admin]$ cat /etc/oratab 이 파일은 굳이 표시할 필요가 없지만...
..주석생략..
db:/u01/app/oracle/product/8.1.7:N

여기서는 GLOBAL_DBNAME을 명시적으로 db.world로 지정했다.
[oracle@linux admin]$ cat listener.ora
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db.world)
      (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
      (SID_NAME = db)
    )
  )


IA를 실행한다.
[oracle@linux admin]$ lsnrctl dbsnmp_start

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 03-JUN-2003 20:44:08

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

services.ora파일을 보면 3개의 서비스가 discover되었음을 알 수 있다.
오라클 노드와 이 노드의 리스너, 사용하는 DB를 discover했고,
이를 각각 linux, listener_linux, db.world 이라는 서비스명을 부여했다.
[oracle@linux admin]$ cat $ORACLE_HOME/network/agent/services.ora
linux = (ORACLE_NODE, linux, linux, (PLATFORM=(osName=Linux)(osVersion=2.4.20)))
listener_linux = (ORACLE_LISTENER, linux, (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))))
db.world = (ORACLE_DATABASE, linux, (DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)))(CONNECT_DATA=(SID=db)(ORACLE_HOME=/u01/app/oracle/product/8.1.7)(SERVER=DEDICATED))), listener_linux)


그럼, 명시적으로 GLOBAL_DBNAME을 지정하지 않았을 경우를 보자.

[oracle@linux admin]$ lsnrctl dbsnmp_stop

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 03-JUN-2003 20:54:08

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

[oracle@linux admin]$ cat listener.ora
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
#      (GLOBAL_DBNAME = db.world)
      (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
      (SID_NAME = db)
    )
  )

listener.ora에서 못찾으면 tnsnames.ora을 검색한다.
[oracle@linux admin]$ cat tnsnames.ora
localdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = db)
    )
  )
  
[oracle@linux admin]$ lsnrctl dbsnmp_start                      

LSNRCTL for Linux: Version 8.1.7.0.0 - Production on 03-JUN-2003 20:54:40

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

[oracle@linux admin]$ cat $ORACLE_HOME/network/agent/services.ora                            
linux = (ORACLE_NODE, linux, linux, (PLATFORM=(osName=Linux)(osVersion=2.4.20)))
listener_linux = (ORACLE_LISTENER, linux, (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))))
localdb = (ORACLE_DATABASE, linux, (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)))(CONNECT_DATA =(SID = db))), listener_linux)



OEM의 autodiscovery에 대해 잠깐 언급하면, OEM은 다음과 같이 3-tier구성을 갖는다.
각 티어들은 꼭 1대의 서버가 아니라, 다수개로 구성될 수도 있다.

OEM Console(사용자) - Management Server(미들티어) - Intelligent Agent(DB노드)

wrk1_04.gif


OEM의 autodiscovery과정
클라이언트에서 OEM을 실행하여 관리자계정으로 로그인하면, 자동적으로 Management Server에 연결하여
자신의 Repository에서 정보(설정사항, 접근권한을 소유한 모든 객체, 갱신된 객체정보)를 가져온다.

클라이언트가 OEM콘솔에서 Discovery wizard를 실행하면,
Management Server는 각 노드에 설치된 오라클서비스를 discover하기 위해 원격노드의 Intelligent Agent에 접속하여
서비스를 파악한다. 새로운 변경사항이 있으면 repository에 이를 반영하고, OEM콘솔의 navigator창을 갱신한다.


Management Server(이하 MS)
서비스 발견(discover)하고, 작업과 이벤트를 관리하기 위해 해당 노드의 IA와 통신한다.
노드에서 이벤트가 발생하면 IA는 MS에게 이를 알리고, MS는 자신의 repository를 갱신한후, 해당되는 OEM콘솔을 갱신한다.
MS는 모든 작업을 IA를 통해 수행하므로 IA와 통신이 불가능해지면, 해당 노드의 모든 서비스가
맛이 간 것으로 판단하게 된다. 따라서 OEM콘솔상에 해당 노드는 다운된 것으로 표시될 것이다.

MS와 IA는 서로간의 통신불량을 고려하여 메시지를 큐잉한다. 500개까지 저장할 수 있다.


로그관련
System parameter file is /u01/app/oracle/product/8.1.7/network/admin/snmp_ro.ora
Log messages written to /u01/app/oracle/product/8.1.7/network/log/dbsnmpc.log
Trace information written to /u01/app/oracle/product/8.1.7/network/trace/dbsnmpc.trc

System parameter file is /u01/app/oracle/product/8.1.7/network/admin/snmp_ro.ora
Log messages written to /u01/app/oracle/product/8.1.7/network/log/dbsnmpw.log
Trace information written to /u01/app/oracle/product/8.1.7/network/trace/dbsnmpw.trc

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

관련자료

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

공지사항


뉴스광장


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