:meta-keywords: cubrid server process, cub_server, cubrid broker, cubrid gateway, cubrid cas, cubrid manager server, cubrid HA, cubrid services, cubrid logging, cubrid errors, cubrid server access, cubrid status, cubrid manager, cubrid javasp, cub_javasp :meta-description: How to control and check CUBRID services and processes (server, broker, gateway), logging files, access, errors, and CUBRID Manager and CUBRID Java SP Server. .. _control-cubrid-processes: CUBRID 프로세스 ì œì–´ ==================== cubrid ìœ í‹¸ë¦¬í‹°ë¥¼ 통해서 CUBRID í”„ë¡œì„¸ìŠ¤ë“¤ì„ ì œì–´í• ìˆ˜ 있다. CUBRID 서비스 ì œì–´ ------------------ CUBRID ì„¤ì • 파ì¼ì— 등ë¡ëœ 서비스를 ì œì–´í•˜ê¸° 위한 **cubrid** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid service <command> <command>: {start|stop|restart|status} * start: 서비스 êµ¬ë™ * stop: 서비스 종료 * restart: 서비스 재시작 * status: 서비스 ìƒíƒœ í™•ì¸ ì¶”ê°€ë¡œ ìž…ë ¥í•´ì•¼ í• ì˜µì…˜ì´ë‚˜ ì¸ìˆ˜ëŠ” 없다. ë°ì´í„°ë² ì´ìФ 서버 ì œì–´ ---------------------- ë°ì´í„°ë² ì´ìФ 서버 프로세스를 ì œì–´í•˜ê¸° 위한 **cubrid** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid server <command> [database_name] <command>: {start|stop|restart|status} * start: ë°ì´í„°ë² ì´ìФ 서버 프로세스 êµ¬ë™ * stop: ë°ì´í„°ë² ì´ìФ 서버 프로세스 종료 * restart: ë°ì´í„°ë² ì´ìФ 서버 프로세스 재시작 * status: ë°ì´í„°ë² ì´ìФ 서버 프로세스 ìƒíƒœ í™•ì¸ | ëª¨ë“ ëª…ë ¹ì–´ëŠ” íŠ¹ì • ë°ì´í„°ë² ì´ìФ ì´ë¦„ (**[database_name]**) ì„ ì¸ìˆ˜ë¡œ ì§€ì •í• ìˆ˜ 있다. | ë°ì´í„°ë² ì´ìФ ì´ë¦„ì„ ì§€ì •í•˜ì§€ 않으면 **status** ëª…ë ¹ì–´ëŠ” êµ¬ë™ ì¤‘ì¸ ëª¨ë“ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ í‘œì‹œí•˜ê³ , **status**\를 ì œì™¸í•œ 다른 ëª…ë ¹ì–´ì—서는 cubrid.confì— **[service]** ì„¹ì…˜ì˜ **server** 프로í¼í‹°ì—서 ë°ì´í„°ë² ì´ìФ ì´ë¦„ì„ ì°¸ì¡°í•˜ì—¬ 실행한다. :: # cubrid.conf [service] ... server=demodb,testdb ... :: % cubrid server start @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success @ cubrid server start: testdb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success 브로커 ì œì–´ ----------- CUBRID 브로커 프로세스를 ì œì–´í•˜ê¸° 위한 cubrid ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. <command>로 올 수 있는 ëª…ë ¹ì–´ëŠ” 브로커 프로세스 구ë™ì„ 위한 start , 종료를 위한 stop, ìž¬ì‹œìž‘ì„ ìœ„í•œ restart, ìƒíƒœ 확ì¸ì„ 위한 status, 브로커 ì ‘ì† ì œí•œì„ ìœ„í•œ acl, 명시한 브로커만 사용 가능하게 하거나 불가능하게 하는 on/off, 브로커 ì ‘ì†ì„ 리셋하기 위한 reset, ì„¤ì • ì •ë³´ ì¶œë ¥ì„ ìœ„í•œ info, SHARD key를 ê°€ì§€ê³ SHARD ID(SHARD ë°ì´í„°ë² ì´ìФ ID)를 얻는 getidê°€ 있다. ë˜í•œ, SHARD ê¸°ëŠ¥ì€ ë¸Œë¡œì»¤ê°€ 구ë™ë˜ê³ cubrid_broker.confì˜ SHARDë¼ëŠ” 브로커 파ë¼ë¯¸í„° ê°’ì´ ONì¼ ë•Œë§Œ ì‚¬ìš©í• ìˆ˜ 있다. :: cubrid broker <command> <command>: start |stop |restart |status [options] [broker_name_expr] |acl {status|reload} broker_name |on <broker_name> |off <broker_name> |reset broker_name |info |getid -b <broker_name> [-f] shard_key 게ì´íŠ¸ì›¨ì´ ì œì–´ --------------- CUBRID 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤ë¥¼ ì œì–´í•˜ê¸° 위한 **cubrid** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid gateway <command> <command>: start |stop |restart |status [options] [gateway_name_expr] |acl {status|reload} gateway_name |on <gateway_name> |off <gateway_name> |reset gateway_name |info * start: 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤ êµ¬ë™ * stop: 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤ 종료 * restart: 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤ 재시작 * status: 게ì´íŠ¸ì›¨ì´ ìƒíƒœ í™•ì¸ * acl: 게ì´íŠ¸ì›¨ì´ ì ‘ì† ì œí•œ * on/off: 명시한 게ì´íŠ¸ì›¨ì´ë§Œ 사용 가능하게 하거나 불가능하게 함 * reset: 게ì´íŠ¸ì›¨ì´ ì ‘ì†ì„ 리셋함 * info: 게ì´íŠ¸ì›¨ì´ ì„¤ì • ì •ë³´ ì¶œë ¥ CUBRID ë§¤ë‹ˆì € 서버 ì œì–´ ----------------------- CUBRID ë§¤ë‹ˆì €ë¥¼ 사용하기 위해서는 ë°ì´í„°ë² ì´ìФ 서버가 ì‹¤í–‰ëœ ê³³ì— ë§¤ë‹ˆì € 서버가 실행ë˜ì–´ì•¼ 한다. CUBRID ë§¤ë‹ˆì € 프로세스를 ì œì–´í•˜ê¸° 위한 **cubrid** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid manager <command> <command>: {start|stop|status} * start: ë§¤ë‹ˆì € 서버 프로세스 êµ¬ë™ * stop: ë§¤ë‹ˆì € 서버 프로세스 종료 * status: ë§¤ë‹ˆì € 서버 프로세스 ìƒíƒœ í™•ì¸ CUBRID HA ì œì–´ --------------- CUBRID HA ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ê¸° 위한 **cubrid heartbeat** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid heartbeat <command> <command>: {start|stop|copylogdb|applylogdb|reload|status} * start: HA ê´€ë ¨ 프로세스 êµ¬ë™ * stop: HA ê´€ë ¨ 프로세스 종료 * copylogdb: copylogdb 프로세스를 시작 ë˜ëŠ” ì •ì§€ * applylogdb: applylogdb 프로세스를 시작 ë˜ëŠ” ì •ì§€ * reload: HA êµ¬ì„±ì •ë³´ë¥¼ 다시 ì½ì–´ì„œ 새로운 êµ¬ì„±ì— ë§žê²Œ 실행 * status: HA ìƒíƒœ ì •ë³´ë¥¼ í™•ì¸ ìžì„¸í•œ ë‚´ìš©ì€ :ref:`cubrid-heartbeat`\ 를 ì°¸ê³ í•œë‹¤. CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € (Java SP) 서버 ì œì–´ ---------------------------------------------- CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € (Java SP) 서버 프로세스를 ì œì–´í•˜ê¸° 위한 **cubrid** ìœ í‹¸ë¦¬í‹° êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid javasp <command> [database_name] <command>: {start|stop|restart|status} * start: ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 프로세스 êµ¬ë™ * stop: ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 프로세스 종료 * restart: ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 프로세스 재시작 * status: ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 프로세스 ìƒíƒœ í™•ì¸ | ëª¨ë“ ëª…ë ¹ì–´ëŠ” íŠ¹ì • ë°ì´í„°ë² ì´ìФ ì´ë¦„ (**[database_name]**) ì„ ì¸ìˆ˜ë¡œ ì§€ì •í• ìˆ˜ 있다. | ë°ì´í„°ë² ì´ìФ ì´ë¦„ì„ ì§€ì •í•˜ì§€ 않으면 **status** ëª…ë ¹ì–´ëŠ” êµ¬ë™ ì¤‘ì¸ ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•´ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ ìƒíƒœ ì •ë³´ë¥¼ 표시한다. :: % cubrid javasp start demodb @ cubrid javasp start: demodb ++ cubrid javasp start: success .. _control-cubrid-services: CUBRID 서비스 ============= 서비스 ë“±ë¡ ----------- 사용ìžëŠ” ìž„ì˜ë¡œ ë°ì´í„°ë² ì´ìФ 서버, CUBRID 브로커, CUBRID 게ì´íŠ¸ì›¨ì´, CUBRID ë§¤ë‹ˆì €, CUBRID HA를 ë°ì´í„°ë² ì´ìФ 환경 ì„¤ì • 파ì¼(cubrid.conf)ì— CUBRID 서비스로 등ë¡í• 수 있다. ì´ë¥¼ 위해 cubrid.confì˜ service 파ë¼ë¯¸í„° 값으로 ê°ê° server, broker, gateway, manager, heartbeat를 ìž…ë ¥í•˜ë©´ ë˜ë©°, ì´ë“¤ì„ 쉼표(,)로 구분하여 여러 개를 ê°™ì´ ë“±ë¡í• 수 있다. 사용ìžê°€ 별ë„로 서비스를 등ë¡í•˜ì§€ 않으면, 기본ì 으로 마스터 프로세스(cub_master)ë§Œ 등ë¡ëœë‹¤. CUBRID ì„œë¹„ìŠ¤ì— ë“±ë¡ë˜ì–´ 있으면 **cubrid service** ìœ í‹¸ë¦¬í‹°ë¥¼ 사용해서 한 ë²ˆì— ê´€ë ¨ëœ í”„ë¡œì„¸ìŠ¤ë“¤ì„ ëª¨ë‘ êµ¬ë™, ì •ì§€í•˜ê±°ë‚˜ ìƒíƒœë¥¼ 알아볼 수 있어 편리하다. - CUBRID HA를 ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ :ref:`cubrid-service-util`\ ì„ ì°¸ê³ í•œë‹¤. 다ìŒì€ ë°ì´í„°ë² ì´ìФ 환경 ì„¤ì • 파ì¼ì—서 ë°ì´í„°ë² ì´ìФ 서버와 브로커를 서비스로 등ë¡í•˜ê³ , CUBRID 서비스 구ë™ê³¼ 함께 *demodb*\ 와 *testdb*\ ë¼ëŠ” ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìžë™ìœ¼ë¡œ 시작하ë„ë¡ ì„¤ì •í•œ 예ì´ë‹¤. :: # cubrid.conf ... [service] # The list of processes to be started automatically by 'cubrid service start' command # Any combinations are available with server, broker, gateway, manager and heartbeat. service=server,broker,gateway # The list of database servers in all by 'cubrid service start' command. # This property is effective only when the above 'service' property contains 'server' keyword. server=demodb,testdb 서비스 êµ¬ë™ ----------- Linux 환경ì—서는 CUBRID 설치 후 CUBRID 서비스 구ë™ì„ 위해 아래와 ê°™ì´ ìž…ë ¥í•œë‹¤. ë°ì´í„°ë² ì´ìФ 환경 ì„¤ì • 파ì¼ì—서 서비스를 등ë¡í•˜ì§€ 않으면 기본ì 으로 마스터 프로세스(cub_master)ë§Œ 구ë™ëœë‹¤. Windows 환경ì—서는 시스템 ê¶Œí•œì„ ê°€ì§„ 사용ìžë¡œ 로그ì¸í•œ 경우ì—ë§Œ ì•„ëž˜ì˜ ëª…ë ¹ì´ ì •ìƒ ìˆ˜í–‰ëœë‹¤. ê´€ë¦¬ìž ë˜ëŠ” ì¼ë°˜ 사용ìžëŠ” CUBRID ë§¤ë‹ˆì € 설치 후 작업 í‘œì‹œì¤„ì— ìƒì„±ë˜ëŠ” CUBRID 서비스 íŠ¸ë ˆì´ ì•„ì´ì½˜ì„ í´ë¦í•˜ì—¬ CUBRID Server를 êµ¬ë™ ë˜ëŠ” ì •ì§€í• ìˆ˜ 있다. :: % cubrid service start @ cubrid master start ++ cubrid master start: success ì´ë¯¸ 마스터 프로세스가 êµ¬ë™ ì¤‘ì´ë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ 표시ëœë‹¤. :: % cubrid service start @ cubrid master start ++ cubrid master is running. 마스터 í”„ë¡œì„¸ìŠ¤ì˜ êµ¬ë™ì— 실패한 경우ë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ 표시ëœë‹¤. 다ìŒì€ ë°ì´í„°ë² ì´ìФ 환경 ì„¤ì • 파ì¼(cubrid.conf)ì— ì„¤ì •ëœ **cubrid_port_id** 파ë¼ë¯¸í„° ê°’ì´ ì¶©ëŒí•˜ì—¬ 구ë™ì— 실패한 예ì´ë‹¤. ì´ëŸ° 경우ì—는 해당 í¬íŠ¸ë¥¼ 변경하여 ì¶©ëŒ ë¬¸ì œë¥¼ í•´ê²°í• ìˆ˜ 있다. 해당 í¬íŠ¸ë¥¼ ì ìœ í•˜ê³ ìžˆëŠ” 프로세스가 없는ë°ë„ 구ë™ì— 실패한다면 /tmp/CUBRID1523 파ì¼ì„ ì‚ì œí•œ 후 재시작한다. :: % cubrid service start @ cubrid master start cub_master: '/tmp/CUBRID1523' file for UNIX domain socket exist.... Operation not permitted ++ cubrid master start: fail :ref:`control-cubrid-services` ì— ì„¤ëª…ëœ ëŒ€ë¡œ 서비스를 등ë¡í•œ 후, 서비스를 구ë™í•˜ê¸° 위해 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. 마스터 프로세스, ë°ì´í„°ë² ì´ìФ 서버 프로세스, 브로커, 게ì´íŠ¸ì›¨ì´ ë° ë“±ë¡ëœ *demodb*, *testdb*\ê°€ 한 ë²ˆì— êµ¬ë™ë¨ì„ 확ì¸í• 수 있다. :: % cubrid service start @ cubrid master start ++ cubrid master start: success @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success @ cubrid server start: testdb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success @ cubrid broker start ++ cubrid broker start: success @ cubrid gateway start ++ cubrid gateway start: success 서비스 종료 ----------- CUBRID 서비스를 ì¢…ë£Œí•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. 사용ìžì— ì˜í•´ 등ë¡ëœ 서비스가 없는 경우, 마스터 프로세스만 종료ëœë‹¤. :: % cubrid service stop @ cubrid master stop ++ cubrid master stop: success 등ë¡ëœ CUBRID 서비스를 ì¢…ë£Œí•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. *demodb*, *testdb*\ 는 ë¬¼ë¡ , 서버 프로세스, 브로커 프로세스, 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤, 마스터 프로세스가 ëª¨ë‘ ì¢…ë£Œë¨ì„ 확ì¸í• 수 있다. :: % cubrid service stop @ cubrid server stop: demodb Server demodb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success @ cubrid server stop: testdb Server testdb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success @ cubrid broker stop ++ cubrid broker stop: success @ cubrid gateway stop ++ cubrid gateway stop: success @ cubrid master stop ++ cubrid master stop: success 서비스 ìž¬êµ¬ë™ ------------- CUBRID 서비스를 재구ë™í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. 사용ìžì— ì˜í•´ 등ë¡ëœ 서비스가 없는 경우, 마스터 프로세스만 종료 후 재구ë™ëœë‹¤. :: % cubrid service restart @ cubrid master stop ++ cubrid master stop: success @ cubrid master start ++ cubrid master start: success 등ë¡ëœ CUBRID 서비스를 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. *demodb*, *testdb*\는 ë¬¼ë¡ , 서버 프로세스, 브로커 프로세스, 게ì´íŠ¸ì›¨ì´ í”„ë¡œì„¸ìŠ¤, 마스터 프로세스가 ëª¨ë‘ ì¢…ë£Œëœ í›„ 재구ë™ë˜ëŠ” ê²ƒì„ í™•ì¸í• 수 있다. :: % cubrid service restart @ cubrid server stop: demodb Server demodb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success @ cubrid server stop: testdb Server testdb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success @ cubrid broker stop ++ cubrid broker stop: success @ cubrid gateway stop ++ cubrid gateway stop: success @ cubrid master stop ++ cubrid master stop: success @ cubrid master start ++ cubrid master start: success @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success @ cubrid server start: testdb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success @ cubrid broker start ++ cubrid broker start: success @ cubrid gateway start ++ cubrid gateway start: success 서비스 ìƒíƒœ 관리 ---------------- 등ë¡ëœ 마스터 프로세스, ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ ìƒíƒœë¥¼ 확ì¸í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid service status @ cubrid master status ++ cubrid master is running. @ cubrid server status Server testdb (rel 11.3, pid 31059) Server demodb (rel 11.3, pid 30950) @ cubrid broker status NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT =========================================================================================================================================================================================================== * query_editor 10877 30000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0 * broker1 10889 33000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0 @ cubrid gateway status NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT =========================================================================================================================================================================================================== * oracle_gateway 10903 53000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0 @ cubrid manager server status ++ cubrid manager server is not running. 만약, 마스터 프로세스가 ì¤‘ì§€ëœ ìƒíƒœë¼ë©´, 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid service status @ cubrid master status ++ cubrid master is not running. .. _cubrid-utility-logging: cubrid ìœ í‹¸ë¦¬í‹° 로깅 -------------------- CUBRID는 cubrid ìœ í‹¸ë¦¬í‹°ì˜ ìˆ˜í–‰ ê²°ê³¼ì— ëŒ€í•œ 로깅 ê¸°ëŠ¥ì„ ì œê³µí•œë‹¤. **로깅 ë‚´ìš©** **$CUBRID/log/cubrid_utility.log** 파ì¼ì— 다ìŒì˜ ë‚´ìš©ë“¤ì´ ë¡œê¹…ëœë‹¤. * cubrid ìœ í‹¸ë¦¬í‹°ë¥¼ 통해 ìˆ˜í–‰ëœ ëª¨ë“ ëª…ë ¹: usage, version, parsing ì—러는 ì œì™¸ * cubrid ìœ í‹¸ë¦¬í‹° ëª…ë ¹ë“¤ì˜ ìˆ˜í–‰ ê²°ê³¼: 성공/실패 * 실패 시 오류메시지 **로그 íŒŒì¼ í¬ê¸°** **cubrid_utility.log** 파ì¼ì˜ í¬ê¸°ëŠ” cubrid.confì˜ error_log_size 파ë¼ë¯¸í„°ì— ì„¤ì •í•œ ê°’ë§Œí¼ ì»¤ì§€ê³ , 해당 í¬ê¸°ë§Œí¼ 커지면 **cubrid_utility.log.bak** 파ì¼ë¡œ 백업ëœë‹¤. **로그 í¬ë§·** :: 시간 (cubrid PID) ë‚´ìš© ì¶œë ¥ë˜ëŠ” 로그 파ì¼ì˜ 예는 다ìŒê³¼ 같다. :: 13-11-19 15:27:19.426 (17724) cubrid manager stop 13-11-19 15:27:19.430 (17724) FAILURE: ++ cubrid manager server is not running. 13-11-19 15:27:19.434 (17726) cubrid service start 13-11-19 15:27:19.439 (17726) FAILURE: ++ cubrid master is running. 13-11-19 15:27:22.931 (17726) SUCCESS 13-11-19 15:27:22.936 (17756) cubrid service restart 13-11-19 15:27:31.667 (17756) SUCCESS 13-11-19 15:27:31.671 (17868) cubrid service stop 13-11-19 15:27:34.909 (17868) SUCCESS 단, Windows 환경ì—서는 ì¼ë¶€ **cubrid** ëª…ë ¹ì´ ì„œë¹„ìŠ¤ 프로세스를 통해 다시 실행ë˜ëŠ” 구조ì´ë¯€ë¡œ Linux와 달리 ì¤‘ì²©ëœ ì •ë³´ê°€ ì¶œë ¥ë 수 있다. :: 13-11-13 17:17:47.638 ( 3820) cubrid service stop 13-11-13 17:17:47.704 ( 7848) d:\CUBRID\bin\cubrid.exe service stop --for-windows-service 13-11-13 17:17:56.027 ( 7848) SUCCESS 13-11-13 17:17:57.136 ( 3820) SUCCESS ë˜í•œ Windows 환경ì—서는 서비스 프로세스를 통해 수행ë˜ëŠ” 프로세스는 오류 메시지를 ì¶œë ¥í•˜ì§€ 못하므로, 서비스 구ë™ê³¼ ê´€ë ¨ëœ ì˜¤ë¥˜ë©”ì‹œì§€ëŠ” 반드시 **cubrid_utility.log** 를 통해 확ì¸í•´ì•¼ 한다. .. _control-cubrid-server: ë°ì´í„°ë² ì´ìФ 서버 ================= ë°ì´í„°ë² ì´ìФ 서버 êµ¬ë™ ---------------------- *demodb* 서버를 구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid server start demodb @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success 마스터 프로세스가 ì¤‘ì§€ëœ ìƒíƒœì—서 *demodb* 서버를 시작하면 다ìŒê³¼ ê°™ì´ ìžë™ìœ¼ë¡œ 마스터 프로세스를 구ë™í•œ 후 ì§€ì •ëœ ë°ì´í„°ë² ì´ìФ 서버를 구ë™í•œë‹¤. :: % cubrid server start demodb @ cubrid master start ++ cubrid master start: success @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success ì´ë¯¸ *demodb* 서버가 êµ¬ë™ ì¤‘ì¸ ìƒíƒœë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid server start demodb @ cubrid server start: demodb ++ cubrid server 'demodb' is running. **cubrid server start** ëª…ë ¹ì€ HA ëª¨ë“œì˜ ì„¤ì •ê³¼ëŠ” ìƒê´€ì—†ì´ íŠ¹ì • ë°ì´í„°ë² ì´ìŠ¤ì˜ cub_server 프로세스만 구ë™í•œë‹¤. HA 환경ì—서 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 구ë™í•˜ë ¤ë©´ **cubrid heartbeat start**\를 사용해야 한다. ë°ì´í„°ë² ì´ìФ 서버 종료 ---------------------- *demodb* 서버 구ë™ì„ 종료하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid server stop demodb @ cubrid server stop: demodb Server demodb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success ì´ë¯¸ *demodb* 서버가 ì¢…ë£Œëœ ìƒíƒœë¼ë©´, 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid server stop demodb @ cubrid server stop: demodb ++ cubrid server 'demodb' is not running. **cubrid server stop** ëª…ë ¹ì€ HA ëª¨ë“œì˜ ì„¤ì •ê³¼ëŠ” ìƒê´€ì—†ì´ íŠ¹ì • ë°ì´í„°ë² ì´ìŠ¤ì˜ cub_server 프로세스만 종료하며, ë°ì´í„°ë² ì´ìФ 서버가 재시작ë˜ê±°ë‚˜ failoverê°€ ì¼ì–´ë‚˜ì§€ 않으므로 주ì˜í•´ì•¼ 한다. HA 환경ì—서 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì¤‘ì§€í•˜ë ¤ë©´ **cubrid heartbeat stop** 를 사용해야 한다. ë°ì´í„°ë² ì´ìФ 서버 ìž¬êµ¬ë™ ------------------------ *demodb* 서버를 재구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. ì´ë¯¸ êµ¬ë™ ì¤‘ì¸ *demodb* 서버를 중지시킨 후 재구ë™í•˜ëŠ” ê²ƒì„ ì•Œ 수 있다. :: % cubrid server restart demodb @ cubrid server stop: demodb Server demodb notified of shutdown. This may take several minutes. Please wait. ++ cubrid server stop: success @ cubrid server start: demodb This may take a long time depending on the amount of recovery works to do. CUBRID 11.3 ++ cubrid server start: success .. _control-cubrid-server-status: ë°ì´í„°ë² ì´ìФ ìƒíƒœ í™•ì¸ ---------------------- ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ ìƒíƒœë¥¼ 확ì¸í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. êµ¬ë™ ì¤‘ì¸ ëª¨ë“ ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ ì´ë¦„ì´ í‘œì‹œëœë‹¤. :: % cubrid server status @ cubrid server status Server testdb (rel 11.3, pid 24465) Server demodb (rel 11.3, pid 24342) 마스터 프로세스가 ì¤‘ì§€ëœ ìƒíƒœë¼ë©´, 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid server status @ cubrid server status ++ cubrid master is not running. .. _limiting-server-access: ë°ì´í„°ë² ì´ìФ 서버 ì ‘ì† ì œí•œ --------------------------- ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì ‘ì†í•˜ëŠ” 브로커 ë° CSQL ì¸í„°í”„리터를 ì œí•œí•˜ë ¤ë©´ **cubrid.conf**\ì˜ **access_ip_control** 파ë¼ë¯¸í„° ê°’ì„ yes로 ì„¤ì •í•˜ê³ , **access_ip_control_file** 파ë¼ë¯¸í„° ê°’ì— ì ‘ì†ì„ 허용하는 IP 목ë¡ì„ 작성한 íŒŒì¼ ê²½ë¡œë¥¼ ìž…ë ¥í•œë‹¤. íŒŒì¼ ê²½ë¡œëŠ” ì ˆëŒ€ 경로로 ìž…ë ¥í•˜ë©°, ìƒëŒ€ 경로로 ìž…ë ¥í•˜ë©´ Linuxì—서는 **$CUBRID/conf** ì´í•˜, Windowsì—서는 **%CUBRID%\\conf** ì´í•˜ì˜ 위치ì—서 파ì¼ì„ 찾는다. **cubrid.conf** 파ì¼ì—는 다ìŒê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. :: # cubrid.conf access_ip_control=yes access_ip_control_file="/home1/cubrid1/CUBRID/db.access" **access_ip_control_file** 파ì¼ì˜ 작성 형ì‹ì€ 다ìŒê³¼ 같다. :: [@<db_name>] <ip_addr> ... * <db_name>: ì ‘ê·¼ì„ í—ˆìš©í• ë°ì´í„°ë² ì´ìФ ì´ë¦„. * <ip_addr>: ì ‘ê·¼ì„ í—ˆìš©í• IP 주소. ë’·ìžë¦¬ë¥¼ \*로 ìž…ë ¥í•˜ë©´ ë’·ìžë¦¬ì˜ ëª¨ë“ IP를 허용한다. í•˜ë‚˜ì˜ ë°ì´í„°ë² ì´ìФ ì´ë¦„ ë‹¤ìŒ ì¤„ì— ì—¬ëŸ¬ ì¤„ì˜ <ip_addr>ì„ ì¶”ê°€í• ìˆ˜ 있다. 여러 ê°œì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•´ ì„¤ì •í•˜ê¸° 위해 [@<db_name>]ê³¼ <ip_addr>ì„ ì¶”ê°€ë¡œ ì§€ì •í• ìˆ˜ 있다. **access_ip_control**\ì´ yesì¸ ìƒíƒœì—서 **access_ip_control_file**\ì´ ì„¤ì •ë˜ì§€ 않으면, 서버는 ëª¨ë“ IP를 ì°¨ë‹¨í•˜ê³ localhostë§Œ ì ‘ì†ì„ 허용한다. 서버 êµ¬ë™ ì‹œ ìž˜ëª»ëœ í˜•ì‹ìœ¼ë¡œ ì¸í•´ **access_ip_control_file** ë¶„ì„ì— ì‹¤íŒ¨í•˜ë©´ 서버는 구ë™ë˜ì§€ 않는다. 다ìŒì€ **access_ip_control_file**\ì˜ í•œ 예ì´ë‹¤. :: [@dbname1] 10.10.10.10 10.156.* [@dbname2] * [@dbname3] 192.168.1.15 ìœ„ì˜ ì˜ˆì—서 *dbname1* ë°ì´í„°ë² ì´ìŠ¤ëŠ” 10.10.10.10ì´ê±°ë‚˜ 10.156으로 시작하는 IPì˜ ì ‘ì†ì„ 허용한다. *dbname2* ë°ì´í„°ë² ì´ìŠ¤ëŠ” ëª¨ë“ IPì˜ ì ‘ì†ì„ 허용한다. *dbname3* ë°ì´í„°ë² ì´ìŠ¤ëŠ” 192.168.1.15ì¸ IPì˜ ì ‘ì†ì„ 허용한다. ì´ë¯¸ 구ë™ë˜ì–´ 있는 ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•´ì„œëŠ” ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 통해 ì„¤ì • 파ì¼ì„ 다시 ì 용하거나, 현재 ì ìš©ëœ ìƒíƒœë¥¼ 확ì¸í• 수 있다. **access_ip_control_file**\ì˜ ë‚´ìš©ì„ ë³€ê²½í•˜ê³ ì´ë¥¼ ì„œë²„ì— ì ìš©í•˜ë ¤ë©´ ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 사용한다. :: cubrid server acl reload <database_name> 현재 êµ¬ë™ ì¤‘ì¸ ì„œë²„ì˜ IP ì„¤ì • ë‚´ìš©ì„ ì¶œë ¥í•˜ë ¤ë©´ ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 사용한다. :: cubrid server acl status <database_name> .. _server-logs: ë°ì´í„°ë² ì´ìФ 서버 로그 ---------------------- ì—러 로그 ^^^^^^^^^ 허용ë˜ì§€ 않는 IPì—서 ì ‘ê·¼í•˜ë©´ 서버 ì—러 로그 파ì¼ì— 다ìŒê³¼ ê°™ì€ ì„œë²„ ì—러 로그가 남는다. :: Time: 10/29/10 17:32:42.360 - ERROR *** ERROR CODE = -1022, Tran = 0, CLIENT = (unknown):(unknown)(-1), EID = 2 Address(10.24.18.66) is not authorized. ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ ì—러 로그는 **$CUBRID/log/server** ë””ë ‰í„°ë¦¬ì— ìƒì„±ë˜ë©°, íŒŒì¼ ì´ë¦„ì€ <db_name>_<yyyymmdd>_<hhmi>.err 형ì‹ìœ¼ë¡œ ì €ìž¥ëœë‹¤. 확장ìžëŠ” .errì´ë‹¤. :: demodb_20130618_1655.err .. note:: 브로커ì—ì„œì˜ ì ‘ì† ì œí•œì„ ìœ„í•´ì„œëŠ” :ref:`limiting-broker-access` ì„ ì°¸ê³ í•œë‹¤. .. _server-event-log: ì´ë²¤íЏ 로그 ^^^^^^^^^^^ ì§ˆì˜ ì„±ëŠ¥ì— ì˜í–¥ì„ 주는 ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ë©´ 해당 ì´ë²¤íŠ¸ë¥¼ ì´ë²¤íЏ ë¡œê·¸ì— ê¸°ë¡í•œë‹¤. ì´ë²¤íЏ ë¡œê·¸ì— ì €ìž¥ë˜ëŠ” ì´ë²¤íŠ¸ëŠ” *SLOW_QUERY*, *MANY_IOREADS*, *LOCK_TIMEOUT*, *DEADLOCK*, ê·¸ë¦¬ê³ *TEMP_VOLUME_EXPAND* ê°€ 있다. 해당 로그 파ì¼ì€ **$CUBRID/log/server** ë””ë ‰í„°ë¦¬ì— ìƒì„±ë˜ë©°, íŒŒì¼ ì´ë¦„ì€ <db_name>_<yyyymmdd>_<hhmi>.event 형ì‹ìœ¼ë¡œ ì €ìž¥ëœë‹¤. 확장ìžëŠ” .eventì´ë‹¤. :: demodb_20130618_1655.event **SLOW_QUERY** 슬로우 쿼리(slow query)ê°€ ë°œìƒí–ˆì„ 때 기ë¡í•œë‹¤. cubrid.confì˜ **sql_trace_slow** 파ë¼ë¯¸í„° ê°’ì´ ì„¤ì •ë˜ë©´ ë™ìž‘한다. 다ìŒì€ ì¶œë ¥ 예ì´ë‹¤. :: 06/12/13 16:41:05.558 - SLOW_QUERY client: PUBLIC@testhost|csql(13173) sql: update [y] [y] set [y].[a]= ?:1 where [y].[a]= ?:0 using index [y].[pk_y_a](+) bind: 5 bind: 200 time: 1015 buffer: fetch=48, ioread=2, iowrite=0 wait: cs=1, lock=1010, latch=0 * client: <DB 사용ìž>@<ì‘ìš© í´ë¼ì´ì–¸íЏ 호스트 명>|<프로그램 ì´ë¦„>(<프로세스 ID>) * sql: 슬로우 쿼리 * bind: ë°”ì¸ë”©ë˜ëŠ” ê°’. sql í•ëª©ì— ë‚˜íƒ€ë‚œ ?:<num>ì—서 <num>ì˜ ìˆœì„œëŒ€ë¡œ ì¶œë ¥ëœë‹¤. ?:0ì˜ ê°’ì´ 5ì´ê³ , ?:1ì˜ ê°’ì´ 200ì´ë‹¤. * time: 수행 시간 (ms) * buffer: buffer 수행 통계 * fetch: 페치 페ì´ì§€ 개수 * ioread: I/O ì½ê¸° 페ì´ì§€ 개수 * iowrite: I/O 쓰기 페ì´ì§€ 개수 * wait: 대기 시간 * cs: í¬ë¦¬í‹°ì»¬ 섹션ì—서 대기한 시간(ms) * lock: ìž ê¸ˆì„ íšë“í•˜ë ¤ê³ ëŒ€ê¸°í•œ 시간(ms) * latch: 래치를 íšë“í•˜ë ¤ê³ ëŒ€ê¸°í•œ 시간(ms) ìœ„ì˜ ì˜ˆì—서 ì§ˆì˜ ìˆ˜í–‰ ì‹œê°„ì´ 1015msê°€ 소요ë˜ì—ˆëŠ”ë° lock wait ì‹œê°„ì´ 1010ms 소요ë˜ì–´, ì§ˆì˜ ìˆ˜í–‰ ì‹œê°„ì˜ ëŒ€ë¶€ë¶„ì´ ìž ê¸ˆ 대기 시간ì´ì—ˆìŒì„ 알 수 있다. **MANY_IOREADS** I/O ì½ê¸°ë¥¼ ë§Žì´ ë°œìƒì‹œí‚¨ 질ì˜ë¥¼ 기ë¡í•œë‹¤. cubrid.confì˜ **sql_trace_ioread_pages** 파ë¼ë¯¸í„° ì„¤ì • ê°’ ì´ìƒ I/O ì½ê¸°ê°€ ë°œìƒí•˜ë©´ 로그를 기ë¡í•œë‹¤. 다ìŒì€ ì¶œë ¥ 예ì´ë‹¤. :: 06/12/13 17:07:29.457 - MANY_IOREADS client: PUBLIC@testhost|csql(12852) sql: update [x] [x] set [x].[a]= ?:1 where ([x].[a]> ?:0 ) using index [x].[idx](+) bind: 8 bind: 100 time: 528 ioreads: 15648 * client: <DB 사용ìž>@<ì‘ìš© í´ë¼ì´ì–¸íЏ 호스트 명>|<프로세스 ì´ë¦„>(<프로세스 ID>) * sql: ë§Žì€ I/O ì½ê¸°ë¥¼ ìœ ë°œí•œ SQL * bind: ë°”ì¸ë”©ë˜ëŠ” ê°’. sql í•ëª©ì— ë‚˜íƒ€ë‚œ ?:<num>ì—서 <num>ì˜ ìˆœì„œëŒ€ë¡œ ì¶œë ¥ëœë‹¤. ?:0ì˜ ê°’ì´ 8ì´ê³ , ?:1ì˜ ê°’ì´ 100ì´ë‹¤. * time: 수행 시간 (ms) * ioreads: I/O ì½ê¸° 페ì´ì§€ 개수 **LOCK_TIMEOUT** ìž ê¸ˆ 타임아웃(lock timeout)ì´ ë°œìƒí•˜ë©´ waiter와 blockerì˜ ì§ˆì˜ë¬¸ì„ 기ë¡í•œë‹¤. 다ìŒì€ ì¶œë ¥ 예ì´ë‹¤. :: 02/02/16 20:56:18.650 - LOCK_TIMEOUT waiter: client: public@testhost|csql(21529) lock: X_LOCK (oid=0|650|3, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 2 bind: 1 blocker: client: public@testhost|csql(21541) lock: X_LOCK (oid=0|650|3, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 3 bind: 1 * waiter: ìž ê¸ˆ(lock)ì„ íšë“í•˜ë ¤ê³ ëŒ€ê¸°í•˜ëŠ” í´ë¼ì´ì–¸íЏ * lock: ìž ê¸ˆ 종류, í…Œì´ë¸” ë° ì¸ë±ìФ ì´ë¦„ * sql: ìž ê¸ˆì„ íšë“í•˜ë ¤ê³ ëŒ€ê¸°í•˜ëŠ” SQL * bind: ë°”ì¸ë”©ëœ ê°’ * blocker: ìž ê¸ˆ(lock)ì„ ì†Œìœ í•˜ê³ ìžˆëŠ” í´ë¼ì´ì–¸íЏ * lock: ìž ê¸ˆ 종류, í…Œì´ë¸” ë° ì¸ë±ìФ ì´ë¦„ * sql: ìž ê¸ˆì„ íšë“ ì¤‘ì¸ SQL * bind: ë°”ì¸ë”©ëœ ê°’ 위ì—서 ìž ê¸ˆ íƒ€ìž„ì•„ì›ƒì„ ìœ ë°œí•œ blocker와 ìž ê¸ˆì„ ëŒ€ê¸°í•œ waiter를 알 수 있다. **DEADLOCK** êµì°© ìƒíƒœ(deadlock)ê°€ ë°œìƒí–ˆì„ 때, cycleì— ì†í•´ìžˆëŠ” 트랜ìžì…˜ì˜ ìž ê¸ˆ(lock) ì •ë³´ë“¤ì„ ê¸°ë¡í•œë‹¤. 다ìŒì€ ì¶œë ¥ 예ì´ë‹¤. :: 02/02/16 20:56:17.638 - DEADLOCK client: public@testhost|csql(21541) hold: lock: X_LOCK (oid=0|650|5, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 3 bind: 1 lock: X_LOCK (oid=0|650|3, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 3 bind: 1 wait: lock: X_LOCK (oid=0|650|4, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 5 bind: 2 client: public@testhost|csql(21529) hold: lock: X_LOCK (oid=0|650|6, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 4 bind: 2 lock: X_LOCK (oid=0|650|4, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 4 bind: 2 wait: lock: X_LOCK (oid=0|650|3, table=t) sql: update [t] [t] set [t].[a]= ?:0 where [t].[a]= ?:1 bind: 6 bind: 1 * client: <DB 사용ìž>@<ì‘ìš© í´ë¼ì´ì–¸íЏ 호스트 명>|<프로세스 ì´ë¦„>(<프로세스 ID>) * hold: ìž ê¸ˆì„ ì†Œìœ í•˜ê³ ìžˆëŠ” ê°ì²´ * lock: ìž ê¸ˆ 종류, í…Œì´ë¸” ì´ë¦„ * sql: ìž ê¸ˆì„ ì†Œìœ í•˜ê³ ìžˆëŠ” SQL * bind: ë°”ì¸ë”©ëœ ê°’ * wait: ìž ê¸ˆì„ ëŒ€ê¸°í•˜ê³ ìžˆëŠ” ê°ì²´ * lock: ìž ê¸ˆ 종류, í…Œì´ë¸” ì´ë¦„ * sql: ìž ê¸ˆì„ ëŒ€ê¸°í•˜ê³ ìžˆëŠ” SQL * bind: ë°”ì¸ë”©ëœ ê°’ 위ì—서 êµì°© ìƒíƒœë¥¼ ìœ ë°œí•œ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ë“¤ê³¼ SQLì„ í™•ì¸í• 수 있다. ìž ê¸ˆ(lock)ì— ëŒ€í•œ ìžì„¸í•œ ì„¤ëª…ì€ :ref:`lockdb`\ ê³¼ :ref:`lock-protocol`\ ì„ ì°¸ê³ í•œë‹¤. **TEMP_VOLUME_EXPAND** ì¼ì‹œì 볼륨(temporary volume)ì´ í™•ìž¥ë˜ë©´ 해당 시ê°ì„ 기ë¡í•œë‹¤. ì´ë¥¼ 통해 ì¼ì‹œì 볼륨 í™•ìž¥ì„ ìœ ë°œí•œ 트랜ìžì…˜ì„ 확ì¸í• 수 있다. :: 06/15/13 18:55:43.458 - TEMP_VOLUME_EXPAND client: public@testhost|csql(17540) sql: select [x].[a], [x].[b] from [x] [x] where (([x].[a]< ?:0 )) group by [x].[b] order by 1 bind: 1000 time: 44 pages: 24399 * client: <DB 사용ìž>@<ì‘ìš© í´ë¼ì´ì–¸íЏ 호스트 명>|<프로그램 ì´ë¦„>(<프로세스 ID>) * sql: ì¼ì‹œì ë³¼ë¥¨ì„ ì‚¬ìš©í•˜ëŠ” SQL. INSERT ... SELECT를 ì œì™¸í•œ ëª¨ë“ INSERT 문, DDL 문 ë“±ì€ DB ì„œë²„ì— SQLì´ ì „ë‹¬ë˜ì§€ 않기 ë•Œë¬¸ì— EMPTY로 표시ëœë‹¤. SELECT, UPDATE, DELETE ë¬¸ì€ SQL êµ¬ë¬¸ì´ í‘œì‹œëœë‹¤. * bind: ë°”ì¸ë”©ëœ ê°’ * time: ì¼ì‹œì 볼륨 ìƒì„±ì— ì†Œìš”ëœ ì‹œê°„(ms) * pages: ì¼ì‹œì 볼륨 ìƒì„±ì— 필요한 페ì´ì§€ì˜ 개수 .. _database-server-error: ë°ì´í„°ë² ì´ìФ 서버 ì—러 ---------------------- ë°ì´í„°ë² ì´ìФ 서버 프로세스는 ì—러 ë°œìƒ ì‹œ 서버 ì—러 코드를 사용한다. 서버 ì—러는 서버 프로세스를 사용하는 ëª¨ë“ ìž‘ì—…ì—서 ë°œìƒí• 수 있다. 예를 들어 질ì˜ë¥¼ 처리하는 프로그램 ë˜ëŠ” **cubrid** ìœ í‹¸ë¦¬í‹° 사용 중ì—ë„ ë°œìƒí• 수 있다. **ë°ì´í„°ë² ì´ìФ 서버 ì—러 ì½”ë“œì˜ í™•ì¸** * **$CUBRID/include/error_code.h** 파ì¼ì˜ **#define ER_**\로 시작하는 ì •ì˜ë¬¸ì€ ëª¨ë‘ ì„œë²„ ì—러 코드를 나타낸다. * **CUBRID/msg/en_US** (í•œê¸€ì€ ko_KR.eucKR í˜¹ì€ ko_KR.utf8) **/cubrid.msg** 파ì¼ì˜ "$set 5 MSGCAT_SET_ERROR" ì´í•˜ 메시지 ê·¸ë£¹ì€ ëª¨ë‘ ì„œë²„ ì—러 메시지를 나타낸다. CCI 드ë¼ì´ë²„를 사용하여 C로 í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í• ë•ŒëŠ” ì—러 코드 번호를 ì§ì ‘ 사용하는 것보다는 ì—러 코드 ì´ë¦„ì„ ì‚¬ìš©í• ê²ƒì„ ê¶Œìž¥í•œë‹¤. 예를 들어, ê³ ìœ í‚¤ 위반 시 ì—러 코드 번호는 -670 í˜¹ì€ -886ì´ì§€ë§Œ ì´ ë²ˆí˜¸ë³´ë‹¤ëŠ” **ER_BTREE_UNIQUE_FAILED** í˜¹ì€ **ER_UNIQUE_VIOLATION_WITHKEY**\ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ í”„ë¡œê·¸ëž¨ ê°€ë…ì„±ì„ ë†’ì´ê¸° 때문ì´ë‹¤. 하지만 JDBC 드ë¼ì´ë²„를 사용하여 JAVA로 í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í• ë•ŒëŠ” dbi.h 파ì¼ì„ í¬í•¨í• 수 없으므로 ì—러 코드 번호를 ì§ì ‘ 사용하ë„ë¡ í•œë‹¤. JDBCì˜ ê²½ìš° SQLException í´ëž˜ìŠ¤ì˜ getErrorCode() 메서드를 통해 ì—러 번호를 ì–»ì„ ìˆ˜ 있다. :: $ vi $CUBRID/include/error_code.h #define NO_ERROR 0 #define ER_FAILED -1 #define ER_GENERIC_ERROR -1 #define ER_OUT_OF_VIRTUAL_MEMORY -2 #define ER_INVALID_ENV -3 #define ER_INTERRUPTED -4 ... #define ER_LK_OBJECT_TIMEOUT_SIMPLE_MSG -73 #define ER_LK_OBJECT_TIMEOUT_CLASS_MSG -74 #define ER_LK_OBJECT_TIMEOUT_CLASSOF_MSG -75 #define ER_LK_PAGE_TIMEOUT -76 ... #define ER_PT_SYNTAX -493 ... #define ER_BTREE_UNIQUE_FAILED -670 ... #define ER_UNIQUE_VIOLATION_WITHKEY -886 ... #define ER_LK_OBJECT_DL_TIMEOUT_SIMPLE_MSG -966 #define ER_LK_OBJECT_DL_TIMEOUT_CLASS_MSG -967 #define ER_LK_OBJECT_DL_TIMEOUT_CLASSOF_MSG -968 ... 몇 가지 서버 ì—러 코드 ì´ë¦„ ë° ì—러 코드 번호, ì—러 메시지를 살펴보면 다ìŒê³¼ 같다. +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ì—러 코드 ì´ë¦„ | ì—러 번호 | ì—러 메시지 | +=====================================+=======================+==========================================================================================================================================================+ | ER_LK_OBJECT_TIMEOUT_SIMPLE_MSG | -73 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on object ?\|?\|?. You are waiting for user(s) ? to finish. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_OBJECT_TIMEOUT_CLASS_MSG | -74 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on class ?. You are waiting for user(s) ? to finish. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_OBJECT_TIMEOUT_CLASSOF_MSG | -75 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on instance ?\|?\|? of class ?. You are waiting for user(s) ? to finish. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_PAGE_TIMEOUT | -76 | Your transaction (index ?, ?@?\|?) timed out waiting on ? on page ?|?. You are waiting for user(s) ? to release the page lock. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_PT_SYNTAX | -493 | Syntax: ? | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_BTREE_UNIQUE_FAILED | -670 | Operation would have caused one or more unique constraint violations. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_UNIQUE_VIOLATION_WITHKEY | -886 | "?" caused unique constraint violation. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_OBJECT_DL_TIMEOUT_SIMPLE_MSG | -966 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on object ?\|?\|? because of deadlock. You are waiting for user(s) ? to finish. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_OBJECT_DL_TIMEOUT_CLASS_MSG | -967 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on class ? because of deadlock. You are waiting for user(s) ? to finish. | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ | ER_LK_OBJECT_DL_TIMEOUT_CLASSOF_MSG | -968 | Your transaction (index ?, ?@?\|?) timed out waiting on ? lock on instance ?\|?\|? of class ? because of deadlock. You are waiting for user(s) ? to | +-------------------------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ .. _broker: 브로커 ====== 브로커 êµ¬ë™ ----------- 브로커를 구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. cubrid_broker.conf ì˜ ë¸Œë¡œì»¤ 파ë¼ë¯¸í„°ì¸ SHARDê°€ ON으로 ì„¤ì •ëœ ê²½ìš° SHARD ê¸°ëŠ¥ì´ í™œì„±í™”ëœë‹¤. :: $ cubrid broker start @ cubrid broker start ++ cubrid broker start: success ì´ë¯¸ 브로커가 êµ¬ë™ ì¤‘ì´ë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: cubrid broker start @ cubrid broker start ++ cubrid broker is running. .. warning:: Linux 시스템ì—서 샤드 êµ¬ë™ ì‹œ 필요한 íŒŒì¼ ë””ìŠ¤í¬ë¦½í„°(file descriptor, fd) 개수는 cubrid_broker.confì—서 ì„¤ì •í•˜ëŠ” SHARD_MAX_CLIENTS보다 ì 당히 ë§Žì€ ì •ë„ì´ë¯€ë¡œ, "ulimit -n"으로 fdì˜ ê°œìˆ˜ë¥¼ ì œì•½í• ë•Œ SHARD_MAX_CLIENTS보다 ì 당히 í¬ê²Œ ì„¤ì •í•´ì•¼ 한다. Linux ì‹œìŠ¤í…œì˜ fd 개수 ì œì•½ì´ SHARDì—서 필요한 fd 개수보다 작게 ì„¤ì •ëœ ê²½ìš°, SHARD 구ë™ì— 실패하면서 ì¶œë ¥ë˜ëŠ” 오류 메시지ì—는 SHARDì—서 필요한 fd 개수가 표시ëœë‹¤. 브로커 종료 ----------- 브로커를 종료하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. cubrid_broker.conf ì˜ ë¸Œë¡œì»¤ 파ë¼ë¯¸í„°ì¸ SHARDê°€ ON으로 ì„¤ì •ëœ ê²½ìš° SHARD ê¸°ëŠ¥ì´ ì •ì§€ëœë‹¤. :: $ cubrid broker stop @ cubrid broker stop ++ cubrid broker stop: success ì´ë¯¸ 브로커가 종료ë˜ì—ˆë‹¤ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: $ cubrid broker stop @ cubrid broker stop ++ cubrid broker is not running. 브로커 재시작 ------------- ì „ì²´ 브로커를 재시작하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: $ cubrid broker restart .. _broker-status: 브로커 ìƒíƒœ í™•ì¸ ---------------- **cubrid broker status** 는 여러 ì˜µì…˜ì„ ì œê³µí•˜ì—¬, ê° ë¸Œë¡œì»¤ì˜ ì²˜ë¦¬ ì™„ë£Œëœ ìž‘ì—… 수, 처리 ëŒ€ê¸°ì¤‘ì¸ ìž‘ì—… 수를 í¬í•¨í•œ 브로커 ìƒíƒœ ì •ë³´ë¥¼ 확ì¸í• 수 있ë„ë¡ í•œë‹¤. cubrid_broker.confì˜ SHARD 브로커 파ë¼ë¯¸í„°ê°€ ON으로 ì„¤ì •ëœ ê²½ìš° -c 옵션과 -m ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ SHARDì— ì ‘ì†í•œ í´ë¼ì´ì–¸íЏ ë˜ëŠ” SHARD ìƒíƒœë¥¼ 확ì¸í• 수 있다. ë˜í•œ -S 옵션 ë˜ëŠ” -P ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ shard DB ë˜ëŠ” proxy 별로 구분하여 ì •ë³´ë¥¼ ì¶œë ¥í• ìˆ˜ 있다. :: cubrid broker status [options] [expr] * *expr* : 브로커 ì´ë¦„ì˜ ì¼ë¶€ ë˜ëŠ” "SERVICE=ON|OFF" *expr* ì´ ëª…ì‹œë˜ë©´ ì´ë¦„ì´ *expr* ì„ í¬í•¨í•˜ëŠ” ë¸Œë¡œì»¤ì— ëŒ€í•œ ìƒíƒœ 모니터ë§ì„ ìˆ˜í–‰í•˜ê³ , ìƒëžµë˜ë©´ CUBRID 브로커 환경 ì„¤ì • 파ì¼( **cubrid_broker.conf** )ì— ë“±ë¡ëœ ì „ì²´ ë¸Œë¡œì»¤ì— ëŒ€í•´ ìƒíƒœ 모니터ë§ì„ 수행한다. *expr* ì— "SERVICE=ON"ì´ ëª…ì‹œë˜ë©´ êµ¬ë™ ì¤‘ì¸ ë¸Œë¡œì»¤ì˜ ìƒíƒœë§Œ ì¶œë ¥í•˜ë©°, "SERVICE=OFF"ê°€ 명시ë˜ë©´ 멈춰있는 ë¸Œë¡œì»¤ì˜ ì´ë¦„ë§Œ ì¶œë ¥í•œë‹¤. cubrid broker statusì—서 사용하는 [options]는 다ìŒê³¼ 같다. ì´ë“¤ 중 -b, -q, -c, -m, -S, -P, -f는 ì¶œë ¥í• ì •ë³´ë¥¼ ì •ì˜í•˜ëŠ” ëª¨ë‹ˆí„°ë§ ì˜µì…˜ì´ê³ , -s, -l, -t는 ì¶œë ¥ì„ ì œì–´í•˜ëŠ” 옵션ì´ë‹¤. ì´ ëª¨ë“ ì˜µì…˜ë“¤ì€ ìƒí˜¸ 조합하여 ì‚¬ìš©í• ìˆ˜ 있다. ì´ ëª¨ë“ ì˜µì…˜ë“¤ì€ ì„œë¡œ 조합하여 사용하는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. .. program:: broker_status .. option:: -b 브로커 ì‘ìš© 서버(CAS)ì— ê´€í•œ ì •ë³´ëŠ” í¬í•¨í•˜ì§€ ì•Šê³ , ë¸Œë¡œì»¤ì— ê´€í•œ ìƒíƒœ ì •ë³´ë§Œ ì¶œë ¥í•œë‹¤. .. option:: -q 작업 íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—…ì„ ì¶œë ¥í•œë‹¤. .. option:: -c cubrid_broker.confì˜ **SHARD**\ ê°€ ON으로 ì„¤ì •ëœ ê²½ìš° proxyì— ì ‘ì†í•œ í´ë¼ì´ì–¸íЏ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. .. option:: -m cubrid_broker.confì˜ **SHARD**\ ê°€ ON으로 ì„¤ì •ëœ ê²½ìš° SHARD ìƒíƒœ ë° í†µê³„ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. .. option:: -S shard db 별로 구분하여, -b ì˜µì…˜ì˜ í•목 중 NAME, PID, PORT, JQ, #CONNECT를 ì œì™¸í•œ 나머지를 ì¶œë ¥í•˜ë©°, ID, SHARD-Q, #REQUEST를 추가로 ì¶œë ¥í•œë‹¤. .. option:: -p proxy 별로 구분하여, -b ì˜µì…˜ì˜ í•목 중 NAME, PID, PORT, JQ를 ì œì™¸í•œ 나머지를 ì¶œë ¥í•˜ë©°, ID, SHARD-Q, #RESTART를 추가로 ì¶œë ¥í•œë‹¤. .. option:: -f 브로커가 ì ‘ì†í•œ DB ë° í˜¸ìŠ¤íŠ¸ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. **-b** 옵션과 함께 ì“°ì´ëŠ” 경우, CAS ì •ë³´ë¥¼ 추가로 ì¶œë ¥í•œë‹¤. 하지만 -b 옵션ì—서 나타나는 SELECT, INSERT, UPDATE, DELETE, OTHERS í•ëª©ì€ ì œì™¸ëœë‹¤. **-m** 옵션과 함께 ì“°ì´ëŠ” 경우, 보다 ìƒì„¸í•œ SHARD 통계 ì •ë³´ê°€ ì¶œë ¥ëœë‹¤. **-c** 옵션과 함께 ì“°ì´ëŠ” 경우, ê° shard proxy 별로 CLIENT-ID, CLIENT-IP, CONN-TIME, LAST-REQ-TIME, LAST-RES-TIME, LAST-REQ-CODE í•ëª©ì„ ì¶”ê°€ë¡œ ì¶œë ¥í•œë‹¤. **-P** 옵션과 함께 ì“°ì´ëŠ” 경우, STMT-POOL-RATIO í•ëª©ì„ ì¶”ê°€ë¡œ ì¶œë ¥í•œë‹¤. ì´ í•ëª©ì€ prepare statement 사용 시 poolì—서 statement를 사용하는 ë¹„ìœ¨ì„ ë‚˜íƒ€ë‚¸ë‹¤. .. option:: -l SECOND **-l** ì˜µì…˜ì€ **-f** 옵션과만 함께 ì“°ì´ë©°, í´ë¼ì´ì–¸íЏ Waiting/Busy ìƒíƒœì¸ CASì˜ ê°œìˆ˜ë¥¼ ì¶œë ¥í• ë•Œ 누ì 주기(단위: ì´ˆ)를 ì§€ì •í•˜ê¸° 위해 사용한다. **-l** *SECOND* ì˜µì…˜ì„ ìƒëžµí•˜ë©´ ê¸°ë³¸ê°’ì€ 1ì´ˆì´ë‹¤. .. option:: -t 화면 ì¶œë ¥ì‹œ tty mode 로 ì¶œë ¥í•œë‹¤. ì¶œë ¥ ë‚´ìš©ì„ ë¦¬ë‹¤ì´ë ‰ì…˜í•˜ì—¬ 파ì¼ë¡œ 쓸 수 있다. .. option:: -s SECOND ë¸Œë¡œì»¤ì— ê´€í•œ ìƒíƒœ ì •ë³´ë¥¼ ì§€ì •ëœ ì‹œê°„ë§ˆë‹¤ 주기ì 으로 ì¶œë ¥í•œë‹¤. q를 ìž…ë ¥í•˜ë©´ ëª…ë ¹ 프롬프트로 복귀한다. 옵션 ë° ì¸ìˆ˜ë¥¼ ìž…ë ¥í•˜ì§€ 않으면 ì „ì²´ 브로커 ìƒíƒœ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. :: $ cubrid broker status @ cubrid broker status % query_editor ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28434 0 0 50144 IDLE 2 28435 0 0 50144 IDLE 3 28436 0 0 50144 IDLE 4 28437 0 0 50140 IDLE 5 28438 0 0 50144 IDLE % broker1 OFF * % query_editor: ë¸Œë¡œì»¤ì˜ ì´ë¦„ * ID: 브로커 ë‚´ì—서 순차ì 으로 부여한 CASì˜ ì¼ë ¨ 번호 * PID: 브로커 ë‚´ CAS í”„ë¡œì„¸ìŠ¤ì˜ ID * QPS: 초당 ì²˜ë¦¬ëœ ì§ˆì˜ì˜ 수 * LQS: 초당 처리ë˜ëŠ” 장기 실행 질ì˜ì˜ 수 * PSIZE: CAS 프로세스 í¬ê¸° * STATUS: CASì˜ í˜„ìž¬ ìƒíƒœë¡œì„œ, BUSY/IDLE/CLIENT_WAIT/CLOSE_WAITê°€ 있다. * % broker1 OFF: broker1ì˜ SERVICE 파ë¼ë¯¸í„°ê°€ OFFì´ë‹¤. ë”°ë¼ì„œ, broker1ì€ êµ¬ë™ë˜ì§€ 않는다. .. note:: SHARD ìƒíƒœ í™•ì¸ ì‹œ ì¶œë ¥ë˜ëŠ” ID ì •ë³´ëŠ” "(proxy ì˜ ì¼ë ¨ë²ˆí˜¸) - (shard DBì˜ ì¼ë ¨ë²ˆí˜¸) - (shard DB ì— ì ‘ì†í•˜ëŠ” ì‘ìš© 서버(CAS)ì˜ ì¼ë ¨ë²ˆí˜¸)"로 êµ¬ì„±ëœ ìˆ˜ì˜ ì¡°í•©ì„ ë‚˜íƒ€ë‚¸ë‹¤. :: $ cubrid broker status @ cubrid broker status % shard1 ---------------------------------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------------------------------- 1-1-1 2580 100 3 55968 IDLE 1-2-1 2581 200 4 55968 IDLE 다ìŒì€ **-b** ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ ë¸Œë¡œì»¤ì— ê´€í•´ 5ì´ˆ 간격으로 ìƒì„¸í•œ ìƒíƒœ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. í™”ë©´ì´ 5ì´ˆ 간격마다 새로운 ìƒíƒœ ì •ë³´ë¡œ ê°±ì‹ ë˜ë©°, ìƒíƒœ ì •ë³´ í™”ë©´ì„ ë²—ì–´ë‚˜ë ¤ë©´ <Q>를 누른다. :: $ cubrid broker status -b -s 5 @ cubrid broker status NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT ======================================================================================================================================================================= * query_editor 13200 30000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0 * broker1 13269 33000 5 0 70 60 10 20 10 10 10 0/60.0 0/60.0 30 10 213 1 * NAME: 브로커 ì´ë¦„ * PID: ë¸Œë¡œì»¤ì˜ í”„ë¡œì„¸ìŠ¤ ID * PORT: ë¸Œë¡œì»¤ì˜ í¬íЏ 번호 * AS: CAS 개수 * JQ: 작업 íì—서 대기 ì¤‘ì¸ ìž‘ì—… 개수 * TPS: 초당 ì²˜ë¦¬ëœ íŠ¸ëžœìžì…˜ì˜ 수(ì˜µì…˜ì´ "-b -s <sec>"ì¼ ë•Œë§Œ 해당 구간 계산) * QPS: 초당 ì²˜ë¦¬ëœ ì§ˆì˜ì˜ 수(ì˜µì…˜ì´ "-b -s <sec>"ì¼ ë•Œë§Œ 해당 구간 계산) * SELECT: 브로커 시작 ì´í›„ SELECT 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ SELECT 개수로 매번 ê°±ì‹ ë¨. * INSERT: 브로커 시작 ì´í›„ INSERT 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ INSERT 개수로 매번 ê°±ì‹ ë¨. * UPDATE: 브로커 시작 ì´í›„ UPDATE 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ UPDATE 개수로 매번 ê°±ì‹ ë¨. * DELETE: 브로커 시작 ì´í›„ DELETE 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ DELETE 개수로 매번 ê°±ì‹ ë¨. * OTHERS: 브로커 시작 ì´í›„ SELECT, INSERT, UPDATE, DELETE를 ì œì™¸í•œ CREATE, DROP ë“±ì˜ ì§ˆì˜ ê°œìˆ˜. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì§ˆì˜ ê°œìˆ˜ë¡œ 매번 ê°±ì‹ ë¨. * LONG-T: LONG_TRANSACTION_TIME ì‹œê°„ì„ ì´ˆê³¼í•œ 트랜ìžì…˜ 개수 / LONG_TRANSACTION_TIME 파ë¼ë¯¸í„°ì˜ ê°’. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ 트랜ìžì…˜ 개수로 매번 ê°±ì‹ ë¨. * LONG-Q: LONG_QUERY_TIME ì‹œê°„ì„ ì´ˆê³¼í•œ 질ì˜ì˜ 개수 / LONG_QUERY_TIME 파ë¼ë¯¸í„°ì˜ ê°’. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì§ˆì˜ ê°œìˆ˜ë¡œ 매번 ê°±ì‹ ë¨. * ERR-Q: ì—러가 ë°œìƒí•œ 질ì˜ì˜ 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì—러 개수로 매번 ê°±ì‹ ë¨. SHARD 파ë¼ë¯¸í„°ê°€ ON으로 ì„¤ì •ëœ ê²½ìš°, proxyì—서 ì—러가 ë°œìƒí•˜ëŠ” 경우ì—ë„ ERR-Qì˜ ê°’ì´ ì¦ê°€í•œë‹¤. * UNIQUE-ERR-Q: ê³ ìœ í‚¤ ì—러가 ë°œìƒí•œ 질ì˜ì˜ 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ê³ ìœ í‚¤ ì—러 개수로 매번 ê°±ì‹ ë¨. * #CONNECT: 브로커 시작 후 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•œ 회수 * #REJECT: 브로커 시작 후 ACLì— í¬í•¨ë˜ì§€ ì•Šì€ IP로부터 ì ‘ì†í•˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•˜ëŠ” ê²ƒì„ ê±°ë¶€ë‹¹í•œ 회수. ACL ì„¤ì •ê³¼ ê´€ë ¨í•˜ì—¬ :ref:`limiting-broker-access`\ 를 ì°¸ê³ í•œë‹¤. 다ìŒì€ **-q** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬, broker1ì„ í¬í•¨í•˜ëŠ” ì´ë¦„ì„ ê°€ì§„ ë¸Œë¡œì»¤ì˜ ìƒíƒœ ì •ë³´ë¥¼ 확ì¸í•˜ê³ 해당 ë¸Œë¡œì»¤ì˜ ìž‘ì—… íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—… ìƒíƒœë¥¼ 확ì¸í•œë‹¤. ì¸ìžë¡œ broker1ì„ ìž…ë ¥í•˜ì§€ 않으면 ëª¨ë“ ë¸Œë¡œì»¤ì— ëŒ€í•˜ì—¬ 작업 íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—… 리스트가 ì¶œë ¥ëœë‹¤. :: % cubrid broker status -q broker1 @ cubrid broker status % broker1 ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28444 0 0 50144 IDLE 2 28445 0 0 50140 IDLE 3 28446 0 0 50144 IDLE 4 28447 0 0 50144 IDLE 5 28448 0 0 50144 IDLE 다ìŒì€ **-s** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ broker1ì„ í¬í•¨í•˜ëŠ” ì´ë¦„ì„ ê°€ì§„ ë¸Œë¡œì»¤ì˜ ìƒíƒœë¥¼ 주기ì 으로 모니터ë§í•œë‹¤. ì¸ìžë¡œ broker1ì„ ìž…ë ¥í•˜ì§€ 않으면 ëª¨ë“ ë¸Œë¡œì»¤ì— ëŒ€í•˜ì—¬ ìƒíƒœ 모니터ë§ì´ 주기ì 으로 수행ëœë‹¤. ë˜í•œ, q를 ìž…ë ¥í•˜ë©´ ëª¨ë‹ˆí„°ë§ í™”ë©´ì—서 ëª…ë ¹ 프롬프트로 복귀한다. :: % cubrid broker status -s 5 broker1 % broker1 ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28444 0 0 50144 IDLE 2 28445 0 0 50140 IDLE 3 28446 0 0 50144 IDLE 4 28447 0 0 50144 IDLE 5 28448 0 0 50144 IDLE **-t** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ TPS와 QPS ì •ë³´ë¥¼ 파ì¼ë¡œ ì¶œë ¥í•œë‹¤. 파ì¼ë¡œ ì¶œë ¥í•˜ëŠ” ê²ƒì„ ì¤‘ë‹¨í•˜ë ¤ë©´ <Ctrl+C>를 눌러서 í”„ë¡œê·¸ëž¨ì„ ì •ì§€ì‹œí‚¨ë‹¤. :: % cubrid broker status -b -t -s 1 > log_file 다ìŒì€ **-f** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ 브로커가 연결한 서버/ë°ì´í„°ë² ì´ìФ ì •ë³´ì™€ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìµœê·¼ ì ‘ì† ì‹œê°, CASì— ì ‘ì†í•˜ëŠ” í´ë¼ì´ì–¸íŠ¸ì˜ IP 주소와 드ë¼ì´ë²„ì˜ ë²„ì „ ë“±ì„ ì¶œë ¥í•œë‹¤. :: $ cubrid broker status -f broker1 @ cubrid broker status % broker1 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ID PID QPS LQS PSIZE STATUS LAST ACCESS TIME DB HOST LAST CONNECT TIME CLIENT IP CLIENT VERSION SQL_LOG_MODE TRANSACTION STIME #CONNECT #RESTART ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1 26946 0 0 51168 IDLE 2011/11/16 16:23:42 demodb localhost 2011/11/16 16:23:40 10.0.1.101 9.2.0.0062 NONE 2011/11/16 16:23:42 0 0 2 26947 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 3 26948 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 4 26949 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 5 26950 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 ê° ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * LAST ACCESS TIME: CASê°€ 구ë™í•œ ì‹œê° ë˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ CASì— ìµœê·¼ ì ‘ì†í•œ ì‹œê° * DB: CASì˜ ìµœê·¼ ì ‘ì† ë°ì´í„°ë² ì´ìФ ì´ë¦„ * HOST: CASì˜ ìµœê·¼ ì ‘ì† í˜¸ìŠ¤íŠ¸ ì´ë¦„ * LAST CONNECT TIME: CASì˜ DB 서버 최근 ì ‘ì† ì‹œê° * CLIENT IP: 현재 CASì— ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ IP 주소. 현재 ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ 없으면 0.0.0.0으로 ì¶œë ¥ * CLIENT VERSION: 현재 CASì— ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ë“œë¼ì´ë²„ ë²„ì „ * SQL_LOG_MODE: CASì˜ SQL 로그 ê¸°ë¡ ëª¨ë“œ. ë¸Œë¡œì»¤ì— ì„¤ì •ëœ ëª¨ë“œì™€ ë™ì¼í•œ 경우 "-"으로 ì¶œë ¥, ìžì„¸í•œ ë‚´ìš©ì€ :ref:`SQL_LOG <sql-log>`\ ì„ ì°¸ê³ í•œë‹¤. * TRANSACTION STIME: 트랜ìžì…˜ 시작 시간 * #CONNECT: 브로커 시작 후 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•œ 회수 * #RESTART: 브로커 시작 후 CASì˜ ìž¬êµ¬ë™ íšŒìˆ˜ .. _as-detail: **-b** ì˜µì…˜ì— **-f** ì˜µì…˜ì„ ì¶”ê°€í•˜ì—¬ AS(T W B Ns-W Ns-B), CANCELED ì •ë³´ë¥¼ 추가로 ì¶œë ¥í•œë‹¤. :: // 브로커 ìƒíƒœ ì •ë³´ 실행 시 -f 옵션 추가. -l 옵션으로 Nì´ˆ ë™ì•ˆì˜ Ns-W, Ns-B를 ì¶œë ¥í•˜ë„ë¡ ì´ˆë¥¼ ì„¤ì • % cubrid broker status -b -f -l 2 @ cubrid broker status NAME PID PSIZE PORT AS(T W B 2s-W 2s-B) JQ TPS QPS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q CANCELED ACCESS_MODE SQL_LOG #CONNECT #REJECT ================================================================================================================================================ query_editor 16784 56700 30000 5 0 0 0 0 0 16 29 0/60.0 0/60.0 1 1 0 RW ALL 4 1 ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * AS(T): 실행 ì¤‘ì¸ CASì˜ ì „ì²´ 개수 * AS(W): 현재 í´ë¼ì´ì–¸íЏ 대기(Waiting) ìƒíƒœì¸ CASì˜ ê°œìˆ˜ * AS(B): 현재 í´ë¼ì´ì–¸íЏ 수행(Busy) ìƒíƒœì¸ CASì˜ ê°œìˆ˜ * AS(Ns-W): Nì´ˆ ë™ì•ˆ í´ë¼ì´ì–¸íЏ 대기(Waiting) ìƒíƒœì˜€ë˜ CASì˜ ê°œìˆ˜ * AS(Ns-B): Nì´ˆ ë™ì•ˆ í´ë¼ì´ì–¸íЏ 수행(Busy) ìƒíƒœì˜€ë˜ CASì˜ ê°œìˆ˜ * CANCELED: 브로커가 ì‹œìž‘ëœ ì´í›„ ì‚¬ìš©ìž ì¸í„°ëŸ½íŠ¸ë¡œ ì¸í•´ ì·¨ì†Œëœ ì§ˆì˜ì˜ 개수 (-l N 옵션과 함께 사용하면 Nì´ˆ ë™ì•ˆ 누ì ëœ ê°œìˆ˜). * ACCESS_MODE: 브로커가 DBì— ì ‘ì†í•˜ëŠ” 모드. 브로커모드는 Read Write, Read Only, Standby Only ì´ë ‡ê²Œ 세 가지로 구분ëœë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ :ref:`broker-mode`\ ì„ ì°¸ê³ í•œë‹¤. * SQL_LOG: CASì˜ SQL 로그 ê¸°ë¡ ëª¨ë“œ. SQL LOG는 ALL, OFF, ERROR, NOTICE, TIMEOUT ì´ë ‡ê²Œ 다섯 가지로 구분ëœë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ :ref:`SQL_LOG <sql-log>`\ ì„ ì°¸ê³ í•œë‹¤. -m ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ SHARD ìƒíƒœ ë° í†µê³„ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. cubrid_broker.conf ì˜ íŒŒë¼ë¯¸í„°ì— 대한 ë‚´ìš©ì€ :ref:`broker-configuration` ì°¸ê³ í•œë‹¤. :: $ cubrid broker status -m @ cubrid broker status % shard1 MODULAR : 256, LIBRARY_NAME : NOT DEFINED, FUNCTION_NAME : NOT DEFINED ACTIVE-PROXY : 1, NUM-NO-HINT-ERR-Q : 0 SHARD STATISTICS ID NUM-KEY-Q NUM-ID-Q NUM-NO-HINT-Q SUM ------------------------------------------------------------ 0 1281 0 0 1281 1 1281 0 0 1281 2 1281 0 0 1281 3 1281 0 0 1281 NUM_SHARD_Q PROXY_ID 1 SHARD_ID ------------------ 0 1 1 0 2 0 3 2 ê° ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * shard1: ë¸Œë¡œì»¤ì˜ ì´ë¦„ * MODULAR: **cubrid_broker.conf**\ ì˜ **SHARD_KEY_MODULR** 파ë¼ë¯¸í„° ê°’ * LIBRARY_NAME: **cubrid_broker.conf**\ ì˜ **SHARD_KEY_LIBRARY_NAME** 파ë¼ë¯¸í„° ê°’ * FUNCTION_NAME: **cubrid_broker.conf**\ ì˜ **SHARD_KEY_FUNCTION_NAME** 파ë¼ë¯¸í„° ê°’ * ACTIVE-PROXY: 실행 ì¤‘ì¸ proxy 프로세스 수 * NUM-NO-HINT-ERR-Q: ì¿¼ë¦¬ì— shard hintê°€ 없어서 ì—러가 ë°œìƒí•œ 쿼리 개수 * SHARD STATISTICS: shard ID ì§ˆì˜ ì •ë³´ * ID: shard DB ì¼ë ¨ë²ˆí˜¸(shard ID) * NUM-KEY-Q: shard keyê°€ í¬í•¨ëœ ì§ˆì˜ ìš”ì² ê°œìˆ˜ * NUM-ID-Q: shard IDê°€ í¬í•¨ëœ ì§ˆì˜ ìš”ì² ê°œìˆ˜ * NUM-NO-HINT-Q: SHARD_IGNORE_HINTê°€ ì„¤ì •ëœ ê²½ìš° hint ì—†ì´ load balancingë˜ì–´ ì²˜ë¦¬ëœ ìš”ì² ê°œìˆ˜ * SUM: NUM-KEY-Q + NUM-ID-Q * NUM_SHARD_Q: SHARD-Q ì— ëŒ€ê¸° ì¤‘ì¸ ì§ˆì˜ ì‹¤í–‰ ìš”ì² ê°œìˆ˜ * PROXY_ID: proxy ì˜ ì¼ë ¨ë²ˆí˜¸ * SHARD_ID: shard DB ì˜ ì¼ë ¨ë²ˆí˜¸ .. _shard-q: SHARD-Q는 Shard Waiting Queue를 ì¤„ì¸ ë§ì´ë‹¤. SHARD proxy 프로세스가 ì§ˆì˜ ì‹¤í–‰ì„ ìš”ì²í–ˆìœ¼ë‚˜ ì´ë¥¼ ì²˜ë¦¬í• SHARD CAS 프로세스가 없는 경우 ì§ˆì˜ ì‹¤í–‰ ìš”ì²ì€ SHARD-Qì—서 ìž ì‹œ 대기한다. ì´ ê°’ì´ ì»¤ì§ˆìˆ˜ë¡ ì§ˆì˜ ì‹¤í–‰ì„ ë°”ë¡œ 처리하지 ëª»í•˜ê³ ëŒ€ê¸°ì¤‘ì¸ ê²½ìš°ê°€ 많아진다는 ì˜ë¯¸ì´ë¯€ë¡œ, MAX_NUM_APPL_SERVERì˜ ê°œìˆ˜ë¥¼ ë” í¬ê²Œ ì„¤ì •í• ê²ƒì„ ê³ ë ¤í•œë‹¤. 다ìŒì€ **-m** 옵션과 **-f** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ 좀 ë” ìƒì„¸í•œ SHARD 통계 ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. cubrid_broker.conf ì˜ íŒŒë¼ë¯¸í„°ì— 대한 ë‚´ìš©ì€ :ref:`broker-configuration`\ ì„ ì°¸ê³ í•œë‹¤. :: $ cubrid broker status -m -f @ cubrid broker status % shard1 MODULAR : 256, LIBRARY_NAME : NOT DEFINED, FUNCTION_NAME : NOT DEFINED SHARD : 0 [HostA] [shard1], 1 [HostB] [shard1], 2 [HostC] [shard1], 3 [HostD] [shard1] ACTIVE-PROXY : 1, NUM-NO-HINT-ERR-Q : 0 SHARD STATISTICS ID NUM-KEY-Q NUM-ID-Q NUM-NO-HINT-Q SUM ------------------------------------------------------------ 0 2309 0 0 2309 1 2309 0 0 2309 2 2309 0 0 2309 3 2309 0 0 2309 NUM_SHARD_Q PROXY_ID 1 SHARD_ID ------------------ 0 1 1 0 2 0 3 2 RANGE STATISTICS : user_no MIN ~ MAX : SHARD NUM-Q ------------------------------------ 0 ~ 31 : 0 1157 32 ~ 63 : 1 1157 64 ~ 95 : 2 1157 96 ~ 127 : 3 1157 128 ~ 159 : 0 1152 160 ~ 191 : 1 1152 192 ~ 223 : 2 1152 224 ~ 255 : 3 1152 DB Alias : shard1 [USER : shard, PASSWD : shard123] ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * SHARD: proxy ë‚´ì˜ shard DB ì •ë³´ * 0: shard DB ì¼ë ¨ë²ˆí˜¸(shard ID) * [HostA]: shard ì ‘ì† ì •ë³´ * [shard1]: ì‹¤ì œ DB ì´ë¦„ * RANGE STATISTICS: shard key ì§ˆì˜ ì •ë³´ * user_no: shard key ì´ë¦„ * MIN: shard key 최소 범위 * MAX: shard key 최대 범위 * SHARD: shard DB ì¼ë ¨ë²ˆí˜¸(shard ID) * NUM-Q: shard keyê°€ í¬í•¨ëœ ì§ˆì˜ ìš”ì² ìˆ˜ **-c** ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ proxyì— ì ‘ì†í•œ í´ë¼ì´ì–¸íЏ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. :: $ cubrid broker status -c @ cubrid broker status % shard1(0), MAX-CLIENT : 50, CUR-CLIENT : 0 % shard1(1), MAX-CLIENT : 50, CUR-CLIENT : 0 * MAX-CLIENT: 해당 proxyì— ì ‘ì†í• 수 있는 최대 ì‘ìš© í´ë¼ì´ì–¸íЏ 개수 * CUR-CLIENT: 해당 proxyì— ì ‘ì†ë˜ì–´ 있는 ì‘ìš© í´ë¼ì´ì–¸íЏ 개수 **-c** ì˜µì…˜ì— **-f** ì˜µì…˜ì„ ì¶”ê°€í•˜ë©´ ì¢€ë” ìƒì„¸í•œ í´ë¼ì´ì–¸íЏ ì •ë³´ê°€ ì¶œë ¥ëœë‹¤. :: $ cubrid broker status -c -f @ cubrid broker status % shardqa(0), MAX-CLIENT : 50, CUR-CLIENT : 0 --------------------------------------------------------------------------------------------------------------- CLIENT-ID CLIENT-IP CONN-TIME LAST-REQ-TIME LAST-RES-TIME LAST-REQ-CODE --------------------------------------------------------------------------------------------------------------- 2 127.0.0.1 2014/01/21 18:07:29 2014/01/21 18:07:56 2014/01/21 18:07:56 2 % shardqa(1), MAX-CLIENT : 50, CUR-CLIENT : 0 --------------------------------------------------------------------------------------------------------------- CLIENT-ID CLIENT-IP CONN-TIME LAST-REQ-TIME LAST-RES-TIME LAST-REQ-CODE --------------------------------------------------------------------------------------------------------------- ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * CLIENT-ID: proxy ë‚´ì—서 순차ì 으로 부여한 í´ë¼ì´ì–¸íЏ ì¼ë ¨ 번호 * CLIENT-IP: í´ë¼ì´ì–¸íЏ IP 주소 * CONN-TIME: proxyì— ì ‘ì†í•œ ì‹œê° * LAST-REQ-TIME: proxyì— ë§ˆì§€ë§‰ìœ¼ë¡œ 질ì˜ë¥¼ ìš”ì²í•œ ì‹œê° * LAST-RES-TIME: proxy로부터 마지막으로 ì‘ë‹µì„ ë°›ì€ ì‹œê° * LAST-REQ-CODE: 가장 ë§ˆì§€ë§‰ì— ìˆ˜í–‰ëœ í•¨ìˆ˜ì˜ ì½”ë“œ. 주요 ì½”ë“œì— í•´ë‹¹í•˜ëŠ” 함수는 다ìŒê³¼ 같다. * 0: end_tran(트랜ìžì…˜ 종료) * 1: prepare * 2: execute * 7: fetch 다ìŒì€ **-S** ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ shard DB별 ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. :: $ cubrid broker status -S @ cubrid broker status % shard1 SHARD_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #REQUEST ============================================================================================================================================= 0 2 0 3200 3772 956 960 928 928 0 0/60.0 0/60.0 700 0 6978 1 2 0 3200 3776 960 960 928 928 0 0/60.0 0/60.0 704 0 6983 2 2 0 3200 3762 960 960 928 914 0 0/60.0 0/60.0 690 0 6968 3 2 0 3200 3776 960 960 928 928 0 0/60.0 0/60.0 704 0 6983 ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * SHARD_ID: shardì˜ index. 0부터 시작. * SHARD-Q: 해당 shardì˜ SHARD-Qì— ëŒ€ê¸° ì¤‘ì¸ ì§ˆì˜ ì‹¤í–‰ ìš”ì² ê°œìˆ˜(:ref:`SHARD-Q <shard-q>` ì°¸ê³ ) * #REQUEST: 해당 shardì— ì†í•œ CASê°€ ì‘ìš© í´ë¼ì´ì–¸íЏì—게 ë°›ì€ ì „ì²´ ìš”ì² ê°œìˆ˜(ìš”ì²ì€ ì§ˆì˜ ìˆ˜í–‰ ë¿ ì•„ë‹ˆë¼ ì—°ê²° ìš”ì² ë“± ëª¨ë“ ìš”ì²ì„ í¬í•¨) **-S** ì˜µì…˜ì— **-f** ì˜µì…˜ì„ ì¶”ê°€í•˜ë©´ AS í•ëª©ì´ (T W B 1s-W 1s-B)으로 ë‚˜ë‰˜ì–´ì ¸ ìƒì„¸ížˆ ì¶œë ¥ëœë‹¤. AS í•ëª©ì— ëŒ€í•œ ìƒì„¸ ì„¤ëª…ì€ :ref:`AS <as-detail>`\ 를 ì°¸ê³ í•œë‹¤. 다ìŒì€ **-P** ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ proxy별 ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. :: $ cubrid broker status -P % shard1 PROXY_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT #RESTART ================================================================================================================================================================ 1 4 0 22174 26160 26160 0 0 0 0 0/60.0 0/60.0 5256 0 165 0 0 2 4 0 35257 37903 23599 5152 4576 4576 0 0/60.0 0/60.0 4300 0 264 1 0 **-P** ì˜µì…˜ì„ ì‚¬ìš©í• ë•Œ **-b** ì˜µì…˜ì— ë¹„í•´ 추가로 ì¶œë ¥ë˜ëŠ” 칼럼 ì •ë³´ëŠ” 다ìŒê³¼ 같다. * PROXY_ID: proxyì˜ index. 1부터 시작. * SHARD-Q: proxyì˜ SHARD-Q ì— ëŒ€ê¸° ì¤‘ì¸ ì§ˆì˜ ì‹¤í–‰ ìš”ì² ê°œìˆ˜ (:ref:`SHARD-Q <shard-q>` ì°¸ê³ ) * #CONNECT: ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ proxyì— ì ‘ì†ì„ 시ë„한 회수 * #REJECT: ACLì— í¬í•¨ë˜ì§€ ì•Šì€ IP로부터 ì ‘ì†í•˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ 해당 proxyì— ì ‘ì†í•˜ëŠ” ê²ƒì„ ê±°ë¶€ë‹¹í•œ 회수. ACL ì„¤ì •ê³¼ ê´€ë ¨í•˜ì—¬ :ref:`limiting-broker-access`\ 를 ì°¸ê³ í•œë‹¤. * #RESTART: proxyê°€ 재시작한 횟수 **-S** ì˜µì…˜ì— **-f** ì˜µì…˜ì„ ì¶”ê°€í•˜ë©´ AS í•ëª©ì´ (T W B 1s-W 1s-B)으로 ë‚˜ë‰˜ì–´ì ¸ ìƒì„¸ížˆ ì¶œë ¥ë˜ê³ , STMT-POOL-RATIO í•ëª©ì´ ì¶”ê°€ëœë‹¤. AS í•ëª©ì— ëŒ€í•œ ìƒì„¸ ì„¤ëª…ì€ :ref:`AS <as-detail>`\ 를 ì°¸ê³ í•œë‹¤. :: $ cubrid broker status -P -f % shard1 PROXY_ID AS(T W B 1s-W 1s-B) SHARD-Q TPS QPS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT #RESTART STMT-POOL-RATIO (%) ========================================================================================================================================================== 1 4 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 165 0 0 - 2 4 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 264 1 0 - ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * STMT-POOL-RATIO: prepare statement 사용 시 poolì—서 statement를 사용하는 비율 **-b**, **-S**, **-P** ì˜µì…˜ì„ ë™ì‹œì— 사용하면 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: $ cubrid broker status -b -S -P @ cubrid broker status NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT ==================================================================================================================================================================== * shard1 10204 56001 8 0 57431 64063 49759 5152 4576 4576 0 0/60.0 0/60.0 9556 0 429 0 * shard2 10221 56002 8 0 51913 58979 49844 0 4687 4448 0 0/60.0 0/60.0 9862 0 429 2 % broker1 OFF <SHARD INFO> % shard1 SHARD_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #REQUEST ====================================================================================================================================================== 0 2 0 14464 16165 12613 1312 1120 1120 0 0/60.0 0/60.0 2437 0 30645 1 2 0 14464 15926 12310 1248 1184 1184 0 0/60.0 0/60.0 2198 0 30403 2 2 0 14464 16347 12795 1312 1120 1120 0 0/60.0 0/60.0 2619 0 30824 3 2 0 14039 15625 12041 1280 1152 1152 0 0/60.0 0/60.0 2302 0 29681 % shard2 SHARD_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #REQUEST ====================================================================================================================================================== 0 2 0 13085 14884 12580 0 1184 1120 0 0/60.0 0/60.0 2503 0 27985 1 2 0 13056 14808 12507 0 1181 1120 0 0/60.0 0/60.0 2456 0 27878 2 2 0 13056 14743 12453 0 1170 1120 0 0/60.0 0/60.0 2391 0 27812 3 2 0 12716 14544 12304 0 1152 1088 0 0/60.0 0/60.0 2512 0 27273 % broker1 OFF <PROXY INFO> % shard1 PROXY_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT #RESTART =============================================================================================================================================================== 1 4 0 22174 26160 26160 0 0 0 0 0/60.0 0/60.0 5256 0 165 0 0 2 4 0 35257 37903 23599 5152 4576 4576 0 0/60.0 0/60.0 4300 0 264 1 0 % shard2 PROXY_ID AS SHARD-Q TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT #RESTART =============================================================================================================================================================== 1 4 0 21590 25586 25586 0 0 0 0 0/60.0 0/60.0 5266 0 165 0 0 2 4 0 30323 33393 24258 0 4687 4448 0 0/60.0 0/60.0 4596 0 264 1 0 % broker1 OFF .. _limiting-broker-access: 브로커 서버 ì ‘ì† ì œí•œ --------------------- ë¸Œë¡œì»¤ì— ì ‘ì†í•˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ë¥¼ ì œí•œí•˜ë ¤ë©´ **cubrid_broker.conf**\ì˜ **ACCESS_CONTROL** 파ë¼ë¯¸í„° ê°’ì„ ON으로 ì„¤ì •í•˜ê³ , **ACCESS_CONTROL_FILE** 파ë¼ë¯¸í„° ê°’ì— ì ‘ì†ì„ 허용하는 사용ìžì™€ ë°ì´í„°ë² ì´ìФ ë° IP 목ë¡ì„ 작성한 íŒŒì¼ ì´ë¦„ì„ ìž…ë ¥í•œë‹¤. **ACCESS_CONTROL** 브로커 파ë¼ë¯¸í„°ì˜ ê¸°ë³¸ê°’ì€ **OFF**\ì´ë‹¤. **ACCESS_CONTROL**, **ACCESS_CONTROL_FILE** 파ë¼ë¯¸í„°ëŠ” 공통 ì ìš© 파ë¼ë¯¸í„°ê°€ 위치하는 [broker] ì•„ëž˜ì— ìž‘ì„±í•´ì•¼ 한다. **ACCESS_CONTROL_FILE**\ ì˜ í˜•ì‹ì€ 다ìŒê³¼ 같다. :: [%<broker_name>] <db_name>:<db_user>:<ip_list_file> ... * <broker_name>: 브로커 ì´ë¦„. **cubrid_broker.conf**\ì—서 ì§€ì •í•œ 브로커 ì´ë¦„ 중 하나ì´ë‹¤. * <db_name>: ë°ì´í„°ë² ì´ìФ ì´ë¦„. \*로 ì§€ì •í•˜ë©´ ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 허용한다. * <db_user>: ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ID. \*로 ì§€ì •í•˜ë©´ ëª¨ë“ ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ID를 허용한다. * <ip_list_file>: ì ‘ì† ê°€ëŠ¥í•œ IP 목ë¡ì„ ì €ìž¥í•œ 파ì¼ì˜ ì´ë¦„. ip_list_file1, ip_list_file2, ...와 ê°™ì´ íŒŒì¼ ì—¬ëŸ¬ 개를 쉼표(,)로 구분하여 ì§€ì •í• ìˆ˜ 있다. 브로커별로 [%<*broker_name*>]ê³¼ <*db_name*>:*<db_user*>:<*ip_list_file*>ì„ ì¶”ê°€ ì§€ì •í• ìˆ˜ 있으며, ê°™ì€ <*db_name*>, ê°™ì€ <*db_user*>ì— ëŒ€í•´ 별ë„ì˜ ë¼ì¸ìœ¼ë¡œ 추가 ì§€ì •í• ìˆ˜ 있다. IP 목ë¡ì€ í•˜ë‚˜ì˜ ë¸Œë¡œì»¤ ë‚´ì—서 <*db_name*>:<*db_user*> 별로 최대 256 ë¼ì¸ê¹Œì§€ 작성ë 수 있다. ip_list_fileì˜ ìž‘ì„± 형ì‹ì€ 다ìŒê³¼ 같다. :: <ip_addr> ... * <ip_addr>: ì ‘ê·¼ì„ í—ˆìš©í• IP 명. ë’·ìžë¦¬ë¥¼ \*로 ìž…ë ¥í•˜ë©´ ë’·ìžë¦¬ì˜ ëª¨ë“ IP를 허용한다. **ACCESS_CONTROL** ê°’ì´ ONì¸ ìƒíƒœì—서 **ACCESS_CONTROL_FILE**\ì´ ì§€ì •ë˜ì§€ 않으면 브로커는 localhostì—ì„œì˜ ì ‘ì† ìš”ì²ë§Œì„ 허용한다. 브로커 êµ¬ë™ ì‹œ **ACCESS_CONTROL_FILE** ë° ip_list_file ë¶„ì„ì— ì‹¤íŒ¨í•˜ëŠ” 경우 브로커는 구ë™ë˜ì§€ 않는다. :: # cubrid_broker.conf [broker] MASTER_SHM_ID =30001 ADMIN_LOG_FILE =log/broker/cubrid_broker.log ACCESS_CONTROL =ON ACCESS_CONTROL_FILE =/home1/cubrid/access_file.txt [%QUERY_EDITOR] SERVICE =ON BROKER_PORT =30000 ...... 다ìŒì€ **ACCESS_CONTROL_FILE**\ì˜ í•œ 예ì´ë‹¤. íŒŒì¼ ë‚´ì—서 사용하는 \*ì€ ëª¨ë“ ê²ƒì„ ë‚˜íƒ€ë‚´ë©°, ë°ì´í„°ë² ì´ìФ ì´ë¦„, ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ID, ì ‘ì†ì„ 허용하는 IP 리스트 íŒŒì¼ ë‚´ì˜ IPì— ëŒ€í•´ ì§€ì •í• ë•Œ ì‚¬ìš©í• ìˆ˜ 있다. :: [%QUERY_EDITOR] dbname1:dbuser1:READIP.txt dbname1:dbuser2:WRITEIP1.txt,WRITEIP2.txt *:dba:READIP.txt *:dba:WRITEIP1.txt *:dba:WRITEIP2.txt [%BROKER2] dbname:dbuser:iplist2.txt [%BROKER3] dbname:dbuser:iplist2.txt [%BROKER4] dbname:dbuser:iplist2.txt ìœ„ì˜ ì˜ˆì—서 ì§€ì •í•œ 브로커는 QUERY_EDITOR, BROKER2, BROKER3, BROKER4ì´ë‹¤. QUERY_EDITOR 브로커는 다ìŒê³¼ ê°™ì€ ì‘ìš©ì˜ ì ‘ì† ìš”ì²ë§Œì„ 허용한다. * *dbname1*\ì— *dbuser1*\으로 로그ì¸í•˜ëŠ” 사용ìžê°€ READIP.txtì— ë“±ë¡ëœ IPì—서 ì ‘ì† * *dbname1*\ì— *dbuser2*\로 로그ì¸í•˜ëŠ” 사용ìžê°€ WRITEIP1.txt나 WRITEIP2.txtì— ë“±ë¡ëœ IPì—서 ì ‘ì† * ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ì— **DBA**\로 로그ì¸í•˜ëŠ” 사용ìžê°€ READIP.txt나 WRITEIP1.txt ë˜ëŠ” WRITEIP2.txtì— ë“±ë¡ëœ IPì—서 ì ‘ì† ë‹¤ìŒì€ ip_list_fileì—서 허용하는 IP를 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. :: 192.168.1.25 192.168.* 10.* * ìœ„ì˜ ì˜ˆì—서 ì§€ì •í•œ IP를 ë³´ë©´ 다ìŒê³¼ 같다. * 첫 번째 ì¤„ì˜ ì„¤ì •ì€ 192.168.1.25ì„ í—ˆìš©í•œë‹¤. * ë‘ ë²ˆì§¸ ì¤„ì˜ ì„¤ì •ì€ 192.168 로 시작하는 ëª¨ë“ IP를 허용한다. * 세 번째 ì¤„ì˜ ì„¤ì •ì€ 10으로 시작하는 ëª¨ë“ IP를 허용한다. * 네 번째 ì¤„ì˜ ì„¤ì •ì€ ëª¨ë“ IP를 허용한다. ì´ë¯¸ 구ë™ë˜ì–´ 있는 ë¸Œë¡œì»¤ì— ëŒ€í•´ì„œëŠ” ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 통해 ì„¤ì • 파ì¼ì„ 다시 ì 용하거나 현재 ì ìš© ìƒíƒœë¥¼ 확ì¸í• 수 있다. 브로커ì—서 허용하는 ë°ì´í„°ë² ì´ìФ, ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ID, IP를 ì„¤ì •í•œ 후 ë³€ê²½ëœ ë‚´ìš©ì„ ì„œë²„ì— ì ìš©í•˜ë ¤ë©´ ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 사용한다. :: cubrid broker acl reload [<BR_NAME>] * <BR_NAME>: 브로커 ì´ë¦„. ì´ ê°’ì„ ì§€ì •í•˜ë©´ íŠ¹ì • 브로커만 변경 ë‚´ìš©ì„ ì ìš©í• ìˆ˜ 있으며, ìƒëžµí•˜ë©´ ì „ì²´ ë¸Œë¡œì»¤ì— ë³€ê²½ ë‚´ìš©ì„ ì 용한다. 현재 êµ¬ë™ ì¤‘ì¸ ë¸Œë¡œì»¤ì—서 허용하는 ë°ì´í„°ë² ì´ìФ, ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ID, IP 목ë¡, 최종 ì ‘ì† ì‹œê°„ì„ í™”ë©´ì— ì¶œë ¥í•˜ë ¤ë©´ ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 사용한다. :: cubrid broker acl status [<BR_NAME>] * <BR_NAME>: 브로커 ì´ë¦„. ì´ ê°’ì„ ì§€ì •í•˜ë©´ íŠ¹ì • ë¸Œë¡œì»¤ì˜ ì„¤ì •ì„ ì¶œë ¥í• ìˆ˜ 있으며, ìƒëžµí•˜ë©´ ì „ì²´ ë¸Œë¡œì»¤ì˜ ì„¤ì •ì„ ì¶œë ¥í•œë‹¤. 다ìŒì€ ì¶œë ¥ í™”ë©´ì˜ ì˜ˆì´ë‹¤. :: $ cubrid broker acl status ACCESS_CONTROL=ON ACCESS_CONTROL_FILE=access_file.txt [%broker1] demodb:dba:iplist1.txt CLIENT IP LAST ACCESS TIME ========================================== 10.20.129.11 10.113.153.144 2013-11-07 15:19:14 10.113.153.145 10.113.153.146 10.64.* 2013-11-07 15:20:50 testdb:dba:iplist2.txt CLIENT IP LAST ACCESS TIME ========================================== * 2013-11-08 10:10:12 **브로커 로그** 허용ë˜ì§€ 않는 IPì—서 ì ‘ê·¼í•˜ë©´ 다ìŒê³¼ ê°™ì€ ë¡œê·¸ê°€ 남는다. * ACCESS_LOG :: 1 192.10.10.10 - - 1288340944.198 1288340944.198 2010/10/29 17:29:04 ~ 2010/10/29 17:29:04 14942 - -1 db1 dba : rejected * SQL LOG :: 10/29 10:28:57.591 (0) CLIENT IP 192.10.10.10 10/29 10:28:57.592 (0) connect db db1 user dba url jdbc:cubrid:192.10.10.10:30000:db1::: - rejected .. note:: ë°ì´í„°ë² ì´ìФ 서버ì—ì„œì˜ ì ‘ì† ì œí•œì„ ìœ„í•´ì„œëŠ” :ref:`limiting-server-access` ì„ ì°¸ê³ í•œë‹¤. .. _encrypted_connections: 패킷 암호화 ----------- 개방형 네트워í¬ì—서 ë°ì´í„°ë² ì´ìФ 서버와 í´ë¼ì´ì–¸íЏ ê°„ì˜ í†µì‹ ì€ ì œ 3ìžì—게 ìœ ì¶œë 수 있으며, ë¶€ì • 사용ë 수있다. ì•ˆì „í•˜ì§€ ì•Šì€ í†µì‹ í™˜ê²½ì„ ì´ìš©í•œ ì •ë³´ ì ‘ê·¼ ê³¼ì •ì—서 ì •ë³´ ìœ ì¶œì„ ë°©ì§€í•˜ê¸° 위해서는 ì†¡ìˆ˜ì‹ ë˜ëŠ” ëª¨ë“ ì •ë³´ê°€ **암호화** ë˜ì–´ì•¼ 한다. í브리드 브로커는 보안 모드로 ì„¤ì •ì´ ê°€ëŠ¥í•˜ë©°, ì´ ê²½ìš° ë°ì´í„°ë² ì´ìФ 서버와 í´ë¼ì´ì–¸íЏ ê°„ì˜ ëª¨ë“ ë°ì´í„°ëŠ” 암호회ë˜ì–´ ì†¡ìˆ˜ì‹ ëœë‹¤. í브리드는 **TLS** (Transport Layer Security) í”„ë¡œí† ì½œì„ ì´ìš©í•œ 암호화 ê¸°ëŠ¥ì„ ì œê³µí•œë‹¤. TLS는 암호화 기능 ë¿ë§Œ ì•„ë‹ˆë¼ ë°ì´í„°ì˜ 변조와 ì†ì‹¤ì„ ê°ì§€í•˜ëŠ” ê¸°ëŠ¥ì„ í¬í•¨í•˜ê³ 있어서 í´ë¼ì´ì–¸íŠ¸ì™€ 서버ì—게 ë³´ì•ˆì´ ê°•í™”ëœ ì‹ ë¢°í• ìˆ˜ 있는 í†µì‹ ìˆ˜ë‹¨ì„ ì œê³µí•œë‹¤. í브리드는 ì´ëŸ¬í•œ ê¸°ëŠ¥ì„ ì œê³µí•˜ê¸° 위해서 **OpenSSL** ì„ ì±„íƒí•˜ì˜€ë‹¤. í브리드 브로커는 보안 모드 (**SSL = ON**) ë˜ëŠ” 비보안 모드 (**SSL = OFF**)로 êµ¬ì„±í• ìˆ˜ 있으며, ì´ëŸ¬í•œ 모드는 **cubrid_broker.conf** ì˜ **SSL** 파ë¼ë¯¸í„°ì˜ ê°’ì— ë”°ë¼ì„œ ê²°ì •ëœë‹¤. ë¸Œë¡œì»¤ì˜ SSL 파ë¼ë¯¸í„°ì˜ ê°’ì´ ë³€ê²½ëœ ê²½ìš°, 브로커를 재시작하여야 한다. 브로커가 보안 ëª¨ë“œì¸ ê²½ìš°, **jdbc** ì‘ìš© 프로그램과 ê°™ì€ í´ë¼ì´ì–¸íŠ¸ë“¤ë„ ë³´ì•ˆ 모드로 ì„¤ì •ë˜ì–´ ì ‘ì†ë˜ì–´ì•¼ 한다, ê·¸ë ‡ì§€ 않으면 ì—°ê²° ìš”ì²ì€ ë¸Œë¡œì»¤ì— ì˜í•´ì„œ ê±°ë¶€ëœë‹¤. ë°˜ëŒ€ì˜ ê²½ìš°ë„ ë§ˆì°¬ê°€ì§€ì´ë‹¤. 비보안 ëª¨ë“œì˜ ë¸Œë¡œì»¤ì— ë³´ì•ˆ ëª¨ë“œì˜ í´ë¼ì´ì–¸íЏ ì ‘ì† ìš”ì²ë„ ê±°ë¶€ëœë‹¤. **cubrid_broker.conf** ì— SSL 파ë¼ë¯¸í„°ê°€ ì •ì˜ë˜ì§€ ì•Šì€ ê²½ìš°, 브로커는 비보안 모드로 ë™ìž‘한다 (**SSL = OFF** ê°€ 기본 모드). ì•„ëž˜ì˜ ì˜ˆëŠ” 브로커 **'query_editor'** 를 보안 모드로 ì„¤ì •í•œ 예ì´ë‹¤. :: # cubrid_broker.conf [query_editor] SERVICE =ON SSL =ON BROKER_PORT =30000 .... **ì¸ì¦ì„œ (Certificate) 와 ê°œì¸í‚¤ (Private Key)** **SSL** ì€ ëŒ€ì¹í˜• (**symmetric**) 키를 ì´ìš©í•˜ì—¬ ì†¡ìˆ˜ì‹ ë°ì´í„°ë¥¼ 암호화 한다 (í´ë¼ì´ì–¸íŠ¸ì™€ 서버가 ê°™ì€ **세션키** 를 ê³µìœ í•˜ì—¬ 암호/복호함). 매 í†µì‹ ì„¸ì…˜ì—서 ìƒˆë¡œì´ ìƒì„±ë˜ëŠ” 세션키를 í´ë¼ì´ì–¸íŠ¸ì™€ 서버가 암호화한 형태로 êµí™˜í•˜ê¸° 위해서 비 ëŒ€ì¹ **(asymmetric)** 암호화 ì•Œê³ ë¦¬ì¦˜ ì„ ì‚¬ìš©í•˜ë©°, ì´ë¥¼ 위해서 ì„œë²„ì˜ ê³µê°œí‚¤ì™€ ê°œì¸í‚¤ê°€ 필요하다. 공개키는 ì¸ì¦ì„œì— í¬í•¨ë˜ì–´ 있으며, ì¸ì¦ì„œì™€ ê°œì¸í‚¤ëŠ” $CUBRID/conf ë””ë ‰í„°ë¦¬ì— ìžˆìœ¼ë©° ê°ê°ì˜ 파ì¼ëª…ì€ **'cas_ssl_cert.crt'** 와 **'cas_ssl_cert.crt'** ì´ë‹¤. ì´ ì¸ì¦ì„œëŠ” OpenSSLì˜ ëª…ë ¹ì–´ ë„구를 ì´ìš©í•˜ì—¬ ìƒì„±ëœ 것ì´ë©° 'self-signed' í˜•íƒœì˜ ì¸ì¦ì„œì´ë‹¤. 사용ìžê°€ ì›í•˜ëŠ” 경우 **IdenTrust** 나 **DigiCert** 와 ê°™ì€ ê³µì¸ ì¸ì¦ê¸°ê´€ì—서 ë°œê¸‰ë°›ì€ ì¸ì¦ì„œë¡œ ëŒ€ì²´ë„ ê°€ëŠ¥í•˜ë‹¤. ë˜ëŠ” OpenSSL ëª…ë ¹ì–´ ë„구를 ì´ìš©í•˜ì—¬ ê°œì¸í‚¤/ì¸ì¦ì„œë¥¼ 새로 ìƒì„±í•˜ì—¬ 대체하는 ê²ƒë„ ê°€ëŠ¥í•˜ë‹¤. ì•„ëž˜ì˜ ì˜ˆëŠ” OpenSSL ëª…ë ¹ì–´ ë„구를 ì´ìš©í•˜ì—¬ ê°œì¸í‚¤, ì¸ì¦ì„œë¥¼ ìƒì„±í•˜ëŠ” 것ì´ë‹¤. :: $ openssl genrsa -out my_cert.key 2048 # 2048 bit í¬ê¸°ì˜ RSA ê°œì¸í‚¤ ìƒì„± $ openssl req -new -key my_cert.key -out my_cert.csr # ì¸ì¦ìš”ì²ì„œ CSR (Certificate Signing Request) $ openssl x509 -req -days 365 -in my_cert.csr -signkey my_cert.key -out my_cert.crt # 1ë…„ ìœ íš¨í•œ ì¸ì¦ì„œ ìƒì„± 위ì—서 ìƒì„±ëœ **my_cert.key** 와 **my_cert.crt** 를 ê°ê° $CUBRID/conf/cas_ssl_cert.key와 $CUBRID/conf/cas_ssl_cert.crt로 대체하면 ëœë‹¤. .. _managing_specific_broker: íŠ¹ì • 브로커 관리 ---------------- *broker1*\ë§Œ 구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. 단, *broker1*\ì€ ì´ë¯¸ ê³µìœ ë©”ëª¨ë¦¬ì— ì„¤ì •ëœ ë¸Œë¡œì»¤ì´ë‹¤. :: % cubrid broker on broker1 만약, *broker1*\ì´ ê³µìœ ë©”ëª¨ë¦¬ì— ì„¤ì •ë˜ì§€ ì•Šì€ ìƒíƒœë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid broker on broker1 Cannot open shared memory *broker1*\ë§Œ 종료하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. ì´ ë•Œ, *broker1*\ì˜ ì„œë¹„ìŠ¤ í’€ì„ í•¨ê»˜ ì œê±°í• ìˆ˜ 있다. :: % cubrid broker off broker1 브로커 리셋 ê¸°ëŠ¥ì€ HAì—서 failover 등으로 브로커 ì‘ìš© 서버(CAS)ê°€ ì›í•˜ì§€ 않는 ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì—°ê²°ë˜ì—ˆì„ 때, 기존 ì—°ê²°ì„ ëŠê³ 새로 ì—°ê²°í• ìˆ˜ 있ë„ë¡ í•œë‹¤. 예를 들어 Read Only 브로커가 액티브 서버와 ì—°ê²°ëœ í›„ì—는 ìŠ¤íƒ ë°”ì´ ì„œë²„ê°€ ì—°ê²°ì´ ê°€ëŠ¥í•œ ìƒíƒœê°€ ë˜ë”ë¼ë„ ìžë™ìœ¼ë¡œ ìŠ¤íƒ ë°”ì´ ì„œë²„ì™€ 재연결하지 않으며, **cubrid broker reset** ëª…ë ¹ì„ í†µí•´ì„œë§Œ 기존 ì—°ê²°ì„ ëŠê³ 새로 ìŠ¤íƒ ë°”ì´ ì„œë²„ì™€ ì—°ê²°í• ìˆ˜ 있다. *broker1*\ì„ ë¦¬ì…‹í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid broker reset broker1 .. _changing-broker-parameter: 브로커 파ë¼ë¯¸í„°ì˜ ë™ì 변경 --------------------------- 브로커 구ë™ê³¼ ê´€ë ¨ëœ íŒŒë¼ë¯¸í„°ëŠ” 브로커 환경 ì„¤ì • 파ì¼( **cubrid_broker.conf** )ì—서 ì„¤ì •í• ìˆ˜ 있다. ê·¸ ë°–ì—, **broker_changer** ìœ í‹¸ë¦¬í‹°ë¥¼ ì´ìš©í•˜ì—¬ êµ¬ë™ ì¤‘ì—ë§Œ 한시ì 으로 ì¼ë¶€ 브로커 파ë¼ë¯¸í„°ë¥¼ ë™ì 으로 ë³€ê²½í• ìˆ˜ 있다. 브로커 파ë¼ë¯¸í„° ì„¤ì • ë° ë™ì 으로 변경 가능한 브로커 파ë¼ë¯¸í„° 등 기타 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`broker-configuration`\ ì„ ì°¸ì¡°í•œë‹¤. 브로커 êµ¬ë™ ì¤‘ì— ë¸Œë¡œì»¤ 파ë¼ë¯¸í„°ë¥¼ 변경하기 위한 **broker_changer** ìœ í‹¸ë¦¬í‹°ì˜ êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. *broker_name*\ ì—는 êµ¬ë™ ì¤‘ì¸ ë¸Œë¡œì»¤ ì´ë¦„ì„ ìž…ë ¥í•˜ë©´ ë˜ê³ *parameter*\ 는 ë™ì 으로 ë³€ê²½í• ìˆ˜ 있는 브로커 파ë¼ë¯¸í„°ì— í•œì •ëœë‹¤. ë³€ê²½í•˜ê³ ìž í•˜ëŠ” 파ë¼ë¯¸í„°ì— ë”°ë¼ *value*\ ê°€ ì§€ì •ë˜ì–´ì•¼ 한다. 브로커 ì‘ìš© 서버 ì‹ë³„ìž( *cas_id* )를 ì§€ì •í•˜ì—¬ íŠ¹ì • 브로커 ì‘ìš© 서버(CAS)ì—ë§Œ ë³€ê²½ì„ ì ìš©í• ìˆ˜ë„ ìžˆë‹¤. *cas_id*\ 는 **cubrid broker status** ëª…ë ¹ì—서 ì¶œë ¥ë˜ëŠ” IDì´ë‹¤. :: broker_changer <broker_name> [<cas_id>] <conf_name> <conf_value> êµ¬ë™ ì¤‘ì¸ ë¸Œë¡œì»¤ì—서 SQL 로그가 기ë¡ë˜ë„ë¡ **SQL_LOG** 파ë¼ë¯¸í„°ë¥¼ ON으로 ì„¤ì •í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. ì´ì™€ ê°™ì€ íŒŒë¼ë¯¸í„°ì˜ ë™ì ë³€ê²½ì€ ë¸Œë¡œì»¤ êµ¬ë™ ì¤‘ì¼ ë•Œë§Œ 한시ì 으로 íš¨ë ¥ì´ ìžˆë‹¤. :: % broker_changer query_editor sql_log on OK HA 환경ì—서 ë¸Œë¡œì»¤ì˜ **ACCESS_MODE**\를 Read Only로 ë³€ê²½í•˜ê³ í•´ë‹¹ 브로커를 ìžë™ìœ¼ë¡œ reset하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % broker_changer broker_m access_mode ro OK .. note:: Windows Vista ì´ìƒ ë²„ì „ì—서 cubrid ìœ í‹¸ë¦¬í‹°ë¥¼ 사용하여 서비스를 ì œì–´í•˜ë ¤ë©´ ëª…ë ¹ 프롬프트 ì°½ì„ ê´€ë¦¬ìž ê¶Œí•œìœ¼ë¡œ 구ë™í•œ 후 사용하는 ê²ƒì„ ê¶Œìž¥í•œë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ :ref:`CUBRID ìœ í‹¸ë¦¬í‹° <utility-on-windows>` 를 ì°¸ê³ í•œë‹¤. .. _broker-configuration-info: 브로커 ì„¤ì • ì •ë³´ í™•ì¸ --------------------- **cubrid broker info**\는 현재 "실행 중"ì¸ ë¸Œë¡œì»¤ 파ë¼ë¯¸í„°ì˜ ì„¤ì • ì •ë³´(cubrid_broker.conf)를 ì¶œë ¥í•œë‹¤. **broker_changer** ëª…ë ¹ì— ì˜í•´ 브로커 파ë¼ë¯¸í„°ì˜ ì„¤ì • ì •ë³´ê°€ ë™ì 으로 변경ë 수 있는ë°, **cubrid broker info** ëª…ë ¹ìœ¼ë¡œ ë™ìž‘ ì¤‘ì¸ ë¸Œë¡œì»¤ì˜ ì„¤ì • ì •ë³´ë¥¼ 확ì¸í• 수 있다. :: % cubrid broker info ì°¸ê³ ë¡œ 현재 "실행 중"ì¸ ì‹œìŠ¤í…œ 파ë¼ë¯¸í„°ì˜ ì„¤ì • ì •ë³´(cubrid.conf)를 확ì¸í•˜ë ¤ë©´ **cubrid paramdump** *database_name* ëª…ë ¹ì„ ì‚¬ìš©í•œë‹¤. **SET SYSTEM PARAMETERS** êµ¬ë¬¸ì— ì˜í•´ 시스템 파ë¼ë¯¸í„°ì˜ ì„¤ì • ì •ë³´ê°€ ë™ì 으로 변경ë 수 있는ë°, **cubrid broker info** ëª…ë ¹ìœ¼ë¡œ ë™ìž‘ ì¤‘ì¸ ì‹œìŠ¤í…œì˜ ì„¤ì • ì •ë³´ë¥¼ 확ì¸í• 수 있다. CUBRID SHARD ID í™•ì¸ -------------------- **cubrid broker getid**\는 íŠ¹ì • 키가 ì–´ëŠ ìƒ¤ë“œ DBì— ì†í•˜ëŠ”ì§€ ì•Œê³ ì‹¶ì„ ë•Œ 사용하는 ëª…ë ¹ìœ¼ë¡œ, shard keyì— ëŒ€í•œ SHARD ID를 ì¶œë ¥í•œë‹¤. :: cubrid broker getid -b <broker-name> [-f] shard-key * -b <*broker-name*>: 브로커 ì´ë¦„ * -f: ìƒì„¸ ì •ë³´ ì¶œë ¥ * *shard-key*: shard key 다ìŒì€ shard1 브로커ì—서 키 1ì— ëŒ€í•œ SHARD ID를 ì¶œë ¥í•˜ëŠ” 예ì´ë‹¤. :: $ cubrid broker getid -b shard1 1 @ cubrid broker getid % shard1 SHARD_ID : 0, SHARD_KEY: 1 다ìŒì€ -f ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ ìƒì„¸ ì •ë³´ë¥¼ ì¶œë ¥í•˜ëŠ” 예ì´ë‹¤. :: $ cubrid broker getid -b shard1 -f 1 @ cubrid broker getid % shard1 SHARD_ID : 0, SHARD_KEY : 1, KEY_COLUMN : student_no MODULAR : 256, LIBRARY_NAME : NOT DEFINED, FUNCTION_NAME : NOT DEFINED RANGE STATISTICS : student_no MIN ~ MAX : SHARD --------------------------- 0 ~ 31 : 0 SHARD CONNECTION : SHARD_ID DB NAME CONNECTION_INFO --------------------------------------------------- 0 shard1 192.168.10.1 .. _broker-test: 브로커와 DB ê°„ ì—°ê²° 테스트 -------------------------- **cubrid broker test**\ 는 ì§€ì •í•œ 브로커와 ì ‘ì†í•˜ëŠ” DBì— ì‚¬ìš©ìžê°€ ì •ì˜í•œ 질ì˜ë¬¸ì„ 수행해 보는 ëª…ë ¹ì´ë‹¤. 샤드 ê¸°ëŠ¥ì´ í™œì„±í™”ë˜ë©´ ëª¨ë“ SHARD DBì— ì§ˆì˜ë¥¼ 수행해 본다. ì§ˆì˜ ìˆ˜í–‰ 후 트랜ìžì…˜ì€ 롤백ëœë‹¤. ì´ ëª…ë ¹ì–´ë¥¼ 통해 ì§€ì •í•œ ë¸Œë¡œì»¤ì— ì ‘ì†í•˜ëŠ” ëª¨ë“ SHARD DBì— ì§ˆì˜ë¥¼ 수행하면 ê° SHARD DBì— ëŒ€í•œ ì§ˆì˜ ì„±ê³µ 여부를 확ì¸í• 수 ìžˆê³ , SHARD HASH ê¸°ëŠ¥ì„ ì„¤ì •í•œ 경우 ìž…ë ¥í•œ 질ì˜ê°€ ì–´ë–¤ SHARD DBì—서 수행ë˜ì—ˆëŠ”ì§€ 확ì¸í• 수 있다. :: cubrid broker test <broker_name> [-D <db_name>] [-u <db_user>] [-p <db_password>] {-c <query> | -i <input_file>} [-o <output_file>] [-s] [-v] * db_name: DB ì´ë¦„ * db_user: DB ì‚¬ìš©ìž ê³„ì • * db_password: DB ì‚¬ìš©ìž ì•”í˜¸ * query: 질ì˜ë¬¸ * input_file: ìž…ë ¥í• ì§ˆì˜ë¬¸ì„ ì €ìž¥í•œ íŒŒì¼ * output_file: 결과를 ì €ìž¥í• íŒŒì¼ **cubrid broker test**\ ì—서 사용하는 ì˜µì…˜ì€ ë‹¤ìŒê³¼ 같다. .. program:: broker_test .. option:: -D DB_NAME 테스트 ëŒ€ìƒ DB ì´ë¦„ì„ ì§€ì •í•œë‹¤. ì´ ì˜µì…˜ì´ ìƒëžµë 때 cubrid_broker.confì˜ SHARD 파ë¼ë¯¸í„° ê°’ì´ ONì´ë©´ SHARD_DB_NAME 파ë¼ë¯¸í„°ì˜ ê°’ì´ ì‚¬ìš©ëœë‹¤. SHARD 파ë¼ë¯¸í„°ì˜ ê°’ì´ OFFì´ë©´ ì—러가 ë°œìƒí•œë‹¤. .. option:: -u DB_USER 테스트 ëŒ€ìƒ DB ì‚¬ìš©ìž ê³„ì •ì„ ì§€ì •í•œë‹¤. ì´ ì˜µì…˜ì´ ìƒëžµë 때 cubrid_broker.confì˜ SHARD 파ë¼ë¯¸í„° ê°’ì´ ONì´ë©´ SHARD_DB_USER 파ë¼ë¯¸í„°ì˜ ê°’ì´ ì‚¬ìš©ëœë‹¤. SHARD 파ë¼ë¯¸í„°ì˜ ê°’ì´ OFFì´ë©´ "public"ì´ ìž…ë ¥ëœë‹¤. .. option:: -p DB_PASSWORD 테스트 ëŒ€ìƒ DB ì‚¬ìš©ìž ê³„ì •ì˜ ì•”í˜¸ë¥¼ ì§€ì •í•œë‹¤. cubrid_broker.confì˜ SHARD 파ë¼ë¯¸í„° ê°’ì´ ONì¼ ë•Œ ì´ ì˜µì…˜ì´ ìƒëžµë˜ë©´ SHARD_DB_PASSWORD 파ë¼ë¯¸í„°ì˜ ê°’ì´ ì‚¬ìš©ëœë‹¤. SHARD 파ë¼ë¯¸í„°ì˜ ê°’ì´ OFFì´ë©´ 빈 문ìžì—´("")ì´ ìž…ë ¥ëœë‹¤. .. option:: -c QUERY ì§ˆì˜ ë¬¸ìžì—´ì„ ì§€ì •í•œë‹¤. 질ì˜ë¥¼ ì§€ì •í•˜ê¸° 위해 **-c** ë˜ëŠ” **-i** ì˜µì…˜ì´ ì‚¬ìš©ë 수 있다. **-c** 옵션과 **-i** ì˜µì…˜ì´ ìƒëžµë˜ë©´ 브로커와 DB ê°„ ì—°ê²° 여부만 ì¶œë ¥í•œë‹¤. .. option:: -i FILE_NAME ìž…ë ¥í• ì§ˆì˜ë“¤ì„ ì €ìž¥í•œ 파ì¼ì„ ì§€ì •í•œë‹¤. 질ì˜ë¥¼ ì§€ì •í•˜ê¸° 위해 **-c** ë˜ëŠ” **-i** ì˜µì…˜ì´ ì‚¬ìš©ë 수 있다. **-c** 옵션과 **-i** ì˜µì…˜ì´ ìƒëžµë˜ë©´ 브로커와 DB ê°„ ì—°ê²° 여부만 ì¶œë ¥í•œë‹¤. .. option:: -o FILE_NAME í™”ë©´ì— ì¶œë ¥ë˜ëŠ” 수행 결과를 ì €ìž¥í• íŒŒì¼ ì´ë¦„ì„ ì§€ì •í•œë‹¤. ì´ ì˜µì…˜ì´ ìƒëžµë˜ë©´ 수행 결과를 화면ì—ë§Œ ì¶œë ¥í•œë‹¤. .. option:: -s SHARD 힌트가 í¬í•¨ëœ 질ì˜ëŠ” 해당 SHARD DBì—서만 수행ëœë‹¤. ì´ ì˜µì…˜ì´ ìƒëžµë˜ë©´ ëª¨ë“ SHARD DBì— ëŒ€í•´ 질ì˜ë¥¼ 수행한다. SHARD 파ë¼ë¯¸í„° ê°’ì´ OFFì´ë©´ ì´ íŒŒë¼ë¯¸í„°ì˜ ì˜í–¥ì„ 받지 않는다. .. option:: -v ì•„ëž˜ì˜ ì •ë³´ì™€ 함께 ì—러 메시지와 SELECTì˜ ê²°ê³¼ì…‹ì„ ê°™ì´ ì¶œë ¥í•œë‹¤. * RESULT: ì§ˆì˜ ìˆ˜í–‰ 후 ì—러가 반환ë˜ì—ˆëŠ”ì§€ 여부. [OK | FAIL] ì¶œë ¥ * SHARD_ID: 질ì˜ê°€ ìˆ˜í–‰ëœ SHARD DBì˜ ID(SHARD 파ë¼ë¯¸í„° ê°’ì´ OFFì´ë©´ 해당 í•ëª©ì€ ì¶œë ¥ë˜ì§€ 않ìŒ) * ROW COUNT: DMLì— ì˜í•´ ì˜í–¥ì„ 받는 í–‰(affected rows)ì˜ ê°œìˆ˜, ë˜ëŠ” SELECT 질ì˜ì¸ 경우 í–‰ì˜ ê°œìˆ˜. ì§ˆì˜ ìˆ˜í–‰ ì—러 시 -1ì„ ì¶œë ¥ * EXECUTION TIME: 질ì˜ê°€ ìˆ˜í–‰ëœ ì‹œê°„ * QUERY: 사용ìžê°€ ìž…ë ¥í•œ ì§ˆì˜ ì´ ì˜µì…˜ì´ ìƒëžµë˜ë©´ "RESULT, SHARD_ID, ROW COUNT, EXECUTION TIME, QUERY"ë§Œ ì¶œë ¥í•œë‹¤. 다ìŒì€ ìœ„ì˜ ì˜µì…˜ë“¤ì„ ì‚¬ìš©í•œ 예ì´ë‹¤. * DBì— ì§ˆì˜ **cubrid_broker.confì˜ SHARD 파ë¼ë¯¸í„° ê°’ì´ OFFì¼ ë•Œ** DB ì ‘ì†ì´ 잘 ë˜ëŠ”ì§€ 확ì¸í•œë‹¤. :: $ cubrid broker test shard1 -D shard -u shard -p shard123 -c "select 1 from db_root where charset = 3" @ cubrid broker test @ [OK] CONNECT broker1 DB [demodb] USER [shard] @ SHARD OFF RESULT ROW COUNT EXECUTION TIME QUERY ======================================================== OK 1 0.011341 sec select 1,'a' from db_root where charset = 3 @ [OK] QUERY TEST **cubrid_broker.confì˜ SHARD 파ë¼ë¯¸í„° ê°’ì´ ONì¼ ë•Œ** ëª¨ë“ SHARD DBì— ëŒ€í•´ ì ‘ì†ì´ 잘 ë˜ëŠ”ì§€ 확ì¸í•œë‹¤. :: $ cubrid broker test shard1 -D shard -u shard -p shard123 -c "select 1 from db_root where charset = 3" @ cubrid broker test @ [OK] CONNECT shard1 DB [shard] USER [shard] @ SHARD ON RESULT SHARD_ID ROW COUNT EXECUTION TIME QUERY ================================================================== OK 0 1 0.003436 sec select 1 from db_root where charset = 3 OK 1 1 0.003010 sec select 1 from db_root where charset = 3 OK 2 1 0.003039 sec select 1 from db_root where charset = 3 OK 3 1 0.002916 sec select 1 from db_root where charset = 3 @ [OK] QUERY TEST * ì‚¬ìš©ìž ê¶Œí•œ í™•ì¸ **SHARD DB 중 í•˜ë‚˜ì— INSERT ê¶Œí•œì´ ì—†ëŠ” 경우** INSERT ê¶Œí•œì´ ì—†ìœ¼ë©´ RESULTê°€ FAIL로 표시ëœë‹¤. :: $ cubrid broker test shard1 -c "insert into foo values (1,"a") " -v @ cubrid broker test @ [OK] CONNECT shard1 DB [shard] USER [shard] @ SHARD ON RESULT SHARD_ID ROW COUNT EXECUTION TIME QUERY ================================================================== OK 0 1 0.001322 sec insert into foo values(1,'a') FAIL(-494) -1 -1 0.001608 sec insert into foo values(1,'a') <Error> ERROR CODE : -494 Semantic: INSERT is not authorized on foo. insert into foo foo (foo.a, foo.b) values (1, cast('a' as v...[CAS INFO - 127.0.0.1:52002, 1, 18145]. OK 2 1 0.001334 sec insert into foo values(1,'a') OK 3 1 0.001325 sec insert into foo values(1,'a') @ [FAIL] QUERY TEST **ë¸Œë¡œì»¤ì— ì ‘ì†í•˜ëŠ” DB 중 í•˜ë‚˜ì— UPDATE ê¶Œí•œì´ ì—†ëŠ” 경우** UPDATE ê¶Œí•œì´ ì—†ìœ¼ë©´ RESULTê°€ FAIL로 표시ëœë‹¤. :: $ vi dml.txt #query select a from foo insert into foo(b) values(3) update foo set c = 2 where b = 3 delete foo where b = 3 :: $ cubrid broker test broker1 -D demodb -u shard -p shard123 -i dml.txt -v @ cubrid broker test @ [OK] CONNECT broker1 DB [demodb] USER [shard] @ SHARD OFF RESULT ROW COUNT EXECUTION TIME QUERY ======================================================== OK 1 0.001612 sec select a from foo <Result of SELECT Command> a ------------ 1 OK 1 0.001215 sec insert into foo(b) values(3) FAIL(-494) -1 0.001291 sec update foo set c = 2 where b = 3 <Error> ERROR CODE : -494 Semantic: UPDATE is not authorized on foo. update foo foo set foo.c=2 where foo.b=3[CAS INFO - 127.0.0.1:52001, 1, 18139]. OK 0 0.001534 sec delete foo where b = 3 @ [FAIL] QUERY TEST * SHARD HASH ì •ìƒ ë™ìž‘ í™•ì¸ íŠ¹ì • í‚¤ì— ëŒ€í•´ í•´ì‹±ì´ ìž˜ ë˜ëŠ”ì§€ 확ì¸í•œë‹¤. :: $ vi test_query.txt #query select number from demo_db where key = /*+ shard_key */ 14 select number from demo_db where key = /*+ shard_key */ 50 select number from demo_db where key = /*+ shard_key */ 80 select number from demo_db where key = /*+ shard_key */ 120 .. :: $ cubrid broker test shard1 -D shard -u shard -p shard123 -i shard_key.txt -v -s @ cubrid broker test @ [OK] CONNECT shard1 DB [shard] USER [shard] @ SHARD ON RESULT SHARD_ID ROW COUNT EXECUTION TIME QUERY ================================================================== OK 0 1 0.002225 sec select * from foo where a = /*+ shard_key */ 10 <Result of SELECT Command> a b ---------------------------------- 10 'aaaa' OK 1 1 0.001870 sec select * from foo where a = /*+ shard_key */ 40 <Result of SELECT Command> a b ---------------------------------- 40 'bbb' OK 2 1 0.002004 sec select * from foo where a = /*+ shard_key */ 70 <Result of SELECT Command> a b ---------------------------------- 70 'cccc' OK 3 1 0.002025 sec select * from foo where a = /*+ shard_key */ 100 <Result of SELECT Command> a b ---------------------------------- 100 'dddd' @ [OK] QUERY TEST * -v 옵션 사용 여부 **-v ì˜µì…˜ì„ ì‚¬ìš©í• ë•Œ** SELECT 질ì˜ê°€ 성공하면 ê²°ê³¼ì…‹ì„ ì¶œë ¥í•˜ë©°, 실패 시 ì—러 메시지를 ì¶œë ¥í•œë‹¤. :: $ cubrid broker test broker1 -D demodb -u shard -p shard123 -i dml.txt -v @ cubrid broker test @ [OK] CONNECT broker1 DB [demodb] USER [shard] @ SHARD OFF RESULT ROW COUNT EXECUTION TIME QUERY OK 1 0.001311 sec select a from foo <Result of SELECT Command> a ------------ 1 OK 1 0.001083 sec insert into foo(b) values(3) FAIL(-494) -1 0.001166 sec update foo set c = 2 where b = 3 <Error> ERROR CODE : -494 Semantic: UPDATE is not authorized on foo. update foo foo set foo.c=2 where foo.b=3[CAS INFO - 127.0.0.1:52001, 1, 18139]. OK 0 0.001399 sec delete foo where b = 3 @ [FAIL] QUERY TEST **-v ì˜µì…˜ì„ ì‚¬ìš©í•˜ì§€ ì•Šì„ ë•Œ** ì§ˆì˜ ì„±ê³µ, 실패 여부만 ì¶œë ¥í•œë‹¤. :: $ cubrid broker test broker1 -D demodb -u shard -p shard123 -i dml.txt @ cubrid broker test @ [OK] CONNECT broker1 DB [demodb] USER [shard] @ SHARD OFF RESULT ROW COUNT EXECUTION TIME QUERY OK 1 0.001485 sec select a from foo OK 1 0.001123 sec insert into foo(b) values(3) FAIL(-494) -1 0.001180 sec update foo set c = 2 where b = 3 OK 0 0.001393 sec delete foo where b = 3 @ [FAIL] QUERY TEST * SHARD 키 ê°’ í™•ì¸ -s 옵션과 함께 SHARD 키 힌트가 주어지면 해당 SHARD DBì— ì§ˆì˜ë¥¼ 수행하며, ê·¸ 결과를 ì¶œë ¥í•œë‹¤. SHARD_ID로 ì–´ëŠ SHARD DBì—서 질ì˜ê°€ 수행ë˜ì—ˆëŠ”ì§€ 확ì¸í• 수 있다. :: $ cubrid broker test shard1 -i shard_key.txt -s -v @ cubrid broker test @ [OK] CONNECT shard1 DB [shard1] USER [shard] @ SHARD ON RESULT SHARD_ID ROW COUNT EXECUTION TIME QUERY OK 0 1 0.144730 sec select * from foo where a = /*+ shard_key */ 10 <Result of SELECT Command> a b ---------------------------------- 10 'aaaa' OK 1 1 0.001870 sec select * from foo where a = /*+ shard_key */ 40 <Result of SELECT Command> a b ---------------------------------- 40 'bbb' OK 2 1 0.002004 sec select * from foo where a = /*+ shard_key */ 70 <Result of SELECT Command> a b ---------------------------------- 70 'cccc' OK 3 1 0.002025 sec select * from foo where a = /*+ shard_key */ 100 <Result of SELECT Command> a b ---------------------------------- 100 'dddd' @ [OK] QUERY TEST .. _broker-logs: 브로커 로그 ----------- 브로커 구ë™ê³¼ ê´€ë ¨ëœ ë¡œê·¸ì—는 ì ‘ì† ë¡œê·¸, ì—러 로그, SQL 로그가 있다. ê°ê°ì˜ 로그는 설치 ë””ë ‰í„°ë¦¬ì˜ log ë””ë ‰í„°ë¦¬ì—서 확ì¸í• 수 있으며, ì €ìž¥ ë””ë ‰í„°ë¦¬ì˜ ë³€ê²½ì€ ë¸Œë¡œì»¤ 환경 ì„¤ì • 파ì¼( **cubrid_broker.conf** )ì˜ **LOG_DIR** 파ë¼ë¯¸í„°ì™€ **ERROR_LOG_DIR** 파ë¼ë¯¸í„°ë¥¼ 통해 ì„¤ì •í• ìˆ˜ 있다. SHARD = ON ì¸ ê²½ìš°, CUBRID proxyì˜ ë¡œê·¸ ë””ë ‰í„°ë¦¬ëŠ” **SHARD_PROXY_LOG_DIR** 파ë¼ë¯¸í„°ë¥¼ 통해 ì„¤ì •í• ìˆ˜ 있다. ì ‘ì† ë¡œê·¸ í™•ì¸ ^^^^^^^^^^^^^^ ì ‘ì† ë¡œê·¸ 파ì¼ì€ ì‘ìš© í´ë¼ì´ì–¸íЏ ì ‘ì†ì— 관한 ì •ë³´ë¥¼ 기ë¡í•˜ë©°, **$CUBRID/log/broker/**\ `<broker_name>`\ **.access**\ì— ì €ìž¥ëœë‹¤. ë˜í•œ, 브로커 환경 ì„¤ì • 파ì¼ì—서 **ACCESS_LOG** 파ë¼ë¯¸í„°ê°€ ON으로 ì„¤ì •ëœ ê²½ìš°, ë¸Œë¡œì»¤ì˜ êµ¬ë™ì´ ì •ìƒì 으로 종료ë˜ë©´ ì ‘ì† ë¡œê·¸ 파ì¼ì´ ì €ìž¥ëœë‹¤. ACCESS_LOG_MAX_SIZE 파ë¼ë¯¸í„°ë¥¼ 통해 ACCESS_LOG 파ì¼ì˜ 최대 í¬ê¸° ì§€ì •ì´ ê°€ëŠ¥í•˜ë‹¤. ACCESS_LOG 파ì¼ì´ ì§€ì •í•œ í¬ê¸°ë³´ë‹¤ 커지면 broker_name.access.YYYYMMDDHHMISS 형ì‹ì˜ ì´ë¦„으로 ë°±ì—…ëœ í›„ 새 파ì¼(broker_name.access)ì— ë¡œê·¸ê°€ 기ë¡ëœë‹¤. ì ‘ì† ê±°ë¶€ëœ ê¸°ë¡ì€ broker_name.access.denied ì— ê¸°ë¡ëœë‹¤. ACCESS_LOG 파ì¼ê³¼ ë™ì¼í•œ 규칙으로 백업ëœë‹¤. 다ìŒì€ log ë””ë ‰í„°ë¦¬ì— ìƒì„±ëœ ì ‘ì† ë¡œê·¸ 파ì¼ì˜ ì˜ˆì œì™€ 설명ì´ë‹¤. :: 1 192.168.56.4 2020/11/10 14:41:55 testdb dba NEW 6 * 1: ë¸Œë¡œì»¤ì˜ ì‘ìš©ì„œë²„ì— ë¶€ì—¬ëœ ID * 192.168.56.4: ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ IP 주소 * 2020/11/10 14:41:55: í´ë¼ì´ì–¸íЏ ìš”ì²ì„ 처리 시작한 ì‹œê° * testdb : í´ë¼ì´ì–¸íŠ¸ê°€ ì ‘ì† ìš”ì²í•œ ë°ì´í„°ë² ì´ìФ ì´ë¦„ * dba : í´ë¼ì´ì–¸íŠ¸ê°€ ì ‘ì† ìš”ì²í•œ ë°ì´í„°ë² ì´ìФ ê³„ì •ì´ë¦„ * NEW : connection_type * NEW : 새로운 ì ‘ì† * OLD : change client ë˜ëŠ” CAS 재시작으로 ì¸í•œ 기존 ì—°ê²°ì˜ ìž¬ì ‘ì† * REJ : ì ‘ì† ê±°ë¶€(access.denied 파ì¼ì—ë§Œ 기ë¡ë¨) * 6 : session-id(서버ì—서 í• ë‹¹í•œ 세션 번호) ì—러 로그 í™•ì¸ ^^^^^^^^^^^^^^ ì—러 로그 파ì¼ì€ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì²ì„ 처리하는 ë„ì¤‘ì— ë°œìƒí•œ ì—ëŸ¬ì— ê´€í•œ ì •ë³´ë¥¼ 기ë¡í•˜ë©°, **$CUBRID/log/broker/error_log**\ `<broker_name>_<app_server_num>`\ **.err**\ ì— ì €ìž¥ëœë‹¤. ì—러 코드 ë° ì—러 메시지는 :ref:`cas-error`\ 를 ì°¸ê³ í•œë‹¤. 다ìŒì€ ì—러 ë¡œê·¸ì˜ ì˜ˆì œì™€ 설명ì´ë‹¤. :: Time: 02/04/09 13:45:17.687 - SYNTAX ERROR *** ERROR CODE = -493, Tran = 1, EID = 38 Syntax: Unknown class "unknown_tbl". select * from unknown_tbl * Time: 02/04/09 13:45:17.687: ì—러 ë°œìƒ ì‹œê° * - SYNTAX ERROR: ì—ëŸ¬ì˜ ì¢…ë¥˜(SYNTAX ERROR, ERROR 등) * \*\*\* ERROR CODE = -493: ì—러 코드 * Tran = 1: 트랜ìžì…˜ ID. -1ì€ íŠ¸ëžœìžì…˜ ID를 í• ë‹¹ 받지 못한 경우임. * EID = 38: ì—러 ID. SQL 문 처리 중 ì—러가 ë°œìƒí•œ 경우, 서버나 í´ë¼ì´ì–¸íЏ ì—러 로그와 ê´€ë ¨ì´ ìžˆëŠ” SQL 로그를 ì°¾ì„ ë•Œ 사용함. * Syntax ...: ì—러 메시지 .. _sql-log-manage: SQL 로그 관리 ^^^^^^^^^^^^^ SQL 로그 파ì¼ì€ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ìš”ì²í•˜ëŠ” SQLì„ ê¸°ë¡í•˜ë©°, *<broker_name>_<app_server_num>*.sql.logë¼ëŠ” ì´ë¦„으로 ì €ìž¥ëœë‹¤. SQL 로그는 **SQL_LOG** 파ë¼ë¯¸í„° ê°’ì´ ONì¸ ê²½ìš°ì— ì„¤ì¹˜ ë””ë ‰í„°ë¦¬ì˜ log/broker/sql_log ë””ë ‰í„°ë¦¬ì— ìƒì„±ëœë‹¤. ì´ ë•Œ, ìƒì„±ë˜ëŠ” SQL 로그 파ì¼ì˜ í¬ê¸°ëŠ” **SQL_LOG_MAX_SIZE** 파ë¼ë¯¸í„°ì˜ ì„¤ì •ê°’ì„ ì´ˆê³¼í• ìˆ˜ 없으므로 주ì˜í•œë‹¤. CUBRID는 SQL 로그를 관리하기 위한 ìœ í‹¸ë¦¬í‹°ë¡œì„œ **broker_log_top**, **cubrid_replay**\ 를 ì œê³µí•˜ë©°, ì´ ìœ í‹¸ë¦¬í‹°ëŠ” SQL 로그가 존재하는 ë””ë ‰í„°ë¦¬ì—서 실행해야 한다. 다ìŒì€ SQL 로그 파ì¼ì˜ ì˜ˆì œì™€ 설명ì´ë‹¤. :: 13-06-11 15:07:39.282 (0) STATE idle 13-06-11 15:07:44.832 (0) CLIENT IP 192.168.10.100 13-06-11 15:07:44.835 (0) CLIENT VERSION 11.3.0.1089 13-06-11 15:07:44.835 (0) session id for connection 0 13-06-11 15:07:44.836 (0) connect db demodb user dba url jdbc:cubrid:192.168.10.200:30000:demodb:dba:********: session id 12 13-06-11 15:07:44.836 (0) DEFAULT isolation_level 4, lock_timeout -1 13-06-11 15:07:44.840 (0) end_tran COMMIT 13-06-11 15:07:44.841 (0) end_tran 0 time 0.000 13-06-11 15:07:44.841 (0) *** elapsed time 0.004 13-06-11 15:07:44.844 (0) check_cas 0 13-06-11 15:07:44.848 (0) set_db_parameter lock_timeout 1000 13-06-11 15:09:36.299 (0) check_cas 0 13-06-11 15:09:36.303 (0) get_db_parameter isolation_level 4 13-06-11 15:09:36.375 (1) prepare 0 CREATE TABLE unique_tbl (a INT PRIMARY key); 13-06-11 15:09:36.376 (1) prepare srv_h_id 1 13-06-11 15:09:36.419 (1) set query timeout to 0 (no limit) 13-06-11 15:09:36.419 (1) execute srv_h_id 1 CREATE TABLE unique_tbl (a INT PRIMARY key); 13-06-11 15:09:38.247 (1) execute 0 tuple 0 time 1.827 13-06-11 15:09:38.247 (0) auto_commit 13-06-11 15:09:38.344 (0) auto_commit 0 13-06-11 15:09:38.344 (0) *** elapsed time 1.968 13-06-11 15:09:54.481 (0) get_db_parameter isolation_level 4 13-06-11 15:09:54.484 (0) close_req_handle srv_h_id 1 13-06-11 15:09:54.484 (2) prepare 0 INSERT INTO unique_tbl VALUES (1); 13-06-11 15:09:54.485 (2) prepare srv_h_id 1 13-06-11 15:09:54.488 (2) set query timeout to 0 (no limit) 13-06-11 15:09:54.488 (2) execute srv_h_id 1 INSERT INTO unique_tbl VALUES (1); 13-06-11 15:09:54.488 (2) execute 0 tuple 1 time 0.001 13-06-11 15:09:54.488 (0) auto_commit 13-06-11 15:09:54.505 (0) auto_commit 0 13-06-11 15:09:54.505 (0) *** elapsed time 0.021 ... 13-06-11 15:19:04.593 (0) get_db_parameter isolation_level 4 13-06-11 15:19:04.597 (0) close_req_handle srv_h_id 2 13-06-11 15:19:04.597 (7) prepare 0 SELECT * FROM unique_tbl WHERE ROWNUM BETWEEN 1 AND 5000; 13-06-11 15:19:04.598 (7) prepare srv_h_id 2 (PC) 13-06-11 15:19:04.602 (7) set query timeout to 0 (no limit) 13-06-11 15:19:04.602 (7) execute srv_h_id 2 SELECT * FROM unique_tbl WHERE ROWNUM BETWEEN 1 AND 5000; 13-06-11 15:19:04.602 (7) execute 0 tuple 1 time 0.001 13-06-11 15:19:04.607 (0) end_tran COMMIT 13-06-11 15:19:04.607 (0) end_tran 0 time 0.000 13-06-11 15:19:04.607 (0) *** elapsed time 0.009 * 13-06-11 15:07:39.282: ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì² ì‹œê° * (1): SQL 문 ê·¸ë£¹ì˜ ì‹œí€€ìŠ¤ 번호ì´ë©°, prepared statement poolingì„ ì‚¬ìš©í•˜ëŠ” 경우, íŒŒì¼ ë‚´ì—서 SQL 문마다 ê³ ìœ (unique)하게 부여ëœë‹¤. * CLIENT IP: ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ IP * CLIENT VERSION: ì‘ìš© í´ë¼ì´ì–¸íЏ 드ë¼ì´ë²„ì˜ ë²„ì „ * prepare 0: prepared statementì¸ì§€ 여부 * prepare srv_h_id 1: 해당 SQL ë¬¸ì„ srv_h_id 1로 prepare한다. * (PC): 플랜 ìºì‹œì— ì €ìž¥ë˜ì–´ 있는 ë‚´ìš©ì„ ì‚¬ìš©í•˜ëŠ” ê²½ìš°ì— ì¶œë ¥ëœë‹¤. * Execute 0 tuple 1 time 0.001: 1ê°œì˜ rowê°€ 실행ë˜ê³ , 소요 ì‹œê°„ì€ 0.001ì´ˆ * auto_commit/auto_rollback: ìžë™ìœ¼ë¡œ 커밋ë˜ê±°ë‚˜, 롤백ë˜ëŠ” ê²ƒì„ ì˜ë¯¸í•œë‹¤. ë‘ ë²ˆì§¸ auto_commit/auto_rollbackì€ ì—러 코드ì´ë©°, 0ì€ ì—러가 ì—†ì´ íŠ¸ëžœìžì…˜ì´ 완료ë˜ì—ˆìŒì„ 뜻한다. .. _broker_log_top: broker_log_top """""""""""""" **broker_log_top** ìœ í‹¸ë¦¬í‹°ëŠ” íŠ¹ì • 기간 ë™ì•ˆ ìƒì„±ëœ SQL 로그를 ë¶„ì„하여 실행 ì‹œê°„ì´ ê¸´ 순서대로 ê° SQL 문과 실행 ì‹œê°„ì— ê´€í•œ ì •ë³´ë¥¼ 파ì¼ì— ì¶œë ¥í•˜ë©°, ë¶„ì„ëœ ê²°ê³¼ëŠ” ê°ê° log.top.q ë° log.top.resì— ì €ìž¥ëœë‹¤. **broker_log_top** ìœ í‹¸ë¦¬í‹°ëŠ” 실행 ì‹œê°„ì´ ê¸´ 질ì˜ë¥¼ ë¶„ì„í• ë•Œ ìœ ìš©í•˜ë©°, êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: broker_log_top [options] sql_log_file_list * *sql_log_file_list*: ë¶„ì„í• ë¡œê·¸ íŒŒì¼ ì´ë¦„ **broker_log_top** ì—서 사용하는 [options]는 다ìŒê³¼ 같다. .. program:: broker_log_top .. option:: -t 트랜ìžì…˜ 단위로 결과를 ì¶œë ¥í•œë‹¤. .. option:: -F DATETIME ë¶„ì„ ëŒ€ìƒ SQLì˜ ì‹œìž‘ ë‚ ì§œ ë° ì‹œê°„ì„ ì§€ì •í•œë‹¤. ìž…ë ¥ 형ì‹ì€ YY-MM-DD[ hh[:mm[:ss[.msec]]]]ì´ë©° []로 ê°ì‹¼ ë¶€ë¶„ì€ ìƒëžµí• 수 있다. ìƒëžµí•˜ë©´ hh, mm, ss, msecì€ 0ì„ ìž…ë ¥í•œ 것과 같다. .. option:: -T DATETIME ë¶„ì„ ëŒ€ìƒ SQLì˜ ë ë‚ ì§œ ë° ì‹œê°„ì„ ì§€ì •í•œë‹¤. ìž…ë ¥ 형ì‹ì€ **-F** ì˜µì…˜ì˜ *DATETIME*\ê³¼ 같다. ì˜µì…˜ì„ ëª¨ë‘ ìƒëžµí•˜ë©´, 명시한 ë¡œê·¸ì˜ ëª¨ë“ SQLì— ëŒ€í•´ SQL 문 단위로 결과를 ì¶œë ¥í•œë‹¤. 다ìŒì€ 밀리초까지 검색 범위를 ì„¤ì •í•˜ëŠ” ì˜ˆì œì´ë‹¤. :: broker_log_top -F "13-01-19 15:00:25.000" -T "13-01-19 15:15:25.180" log1.log ë‹¤ìŒ ì˜ˆì—서 시간 형ì‹ì´ ìƒëžµëœ ë¶€ë¶„ì€ ê¸°ë³¸ê°’ 0으로 ì •í•´ì§„ë‹¤. 즉, -F "13-01-19 00:00:00.000" -T "13-01-20 00:00:00.000"ì„ ìž…ë ¥í•œ 것과 같다. :: broker_log_top -F "13-01-19" -T "13-01-20" log1.log ë‹¤ìŒ ì˜ˆëŠ” 2013ë…„ 11ì›” 11ì¼ë¶€í„° 11ì›” 12ì¼ê¹Œì§€ ìƒì„±ëœ SQL ë¡œê·¸ì— ëŒ€í•´ 실행 ì‹œê°„ì´ ê¸´ SQLë¬¸ì„ í™•ì¸í•˜ê¸° 위하여 **broker_log_top** ìœ í‹¸ë¦¬í‹°ë¥¼ 실행한 화면ì´ë‹¤. ê¸°ê°„ì„ ì§€ì •í• ë•Œ, ì—°, ì›”, ì¼ì€ 하ì´í”ˆ(-)으로 구분한다. Windowsì—서는 "\*.sql.log" 를 ì¸ì‹í•˜ì§€ 않으므로 SQL 로그 파ì¼ë“¤ì„ 공백(space)으로 구분해서 나열해야 한다. :: --Linuxì—서 broker_log_top 실행 % broker_log_top -F "13-11-11" -T "13-11-12" -t *.sql.log query_editor_1.sql.log query_editor_2.sql.log query_editor_3.sql.log query_editor_4.sql.log query_editor_5.sql.log --Windowsì—서 broker_log_top 실행 % broker_log_top -F "13-11-11" -T "13-11-12" -t query_editor_1.sql.log query_editor_2.sql.log query_editor_3.sql.log query_editor_4.sql.log query_editor_5.sql.log 위 ì˜ˆì œë¥¼ 실행하면 SQL 로그 ë¶„ì„ ê²°ê³¼ê°€ ì €ìž¥ë˜ëŠ” **log.top.q** ë° **log.top.res** 파ì¼ì´ ë™ì¼í•œ ë””ë ‰í„°ë¦¬ì— ìƒì„±ëœë‹¤. **log.top.q** ì—서 ê° SQL 문 ë° SQL 로그 ìƒì˜ ë¼ì¸ 번호를 확ì¸í• 수 ìžˆê³ , **log.top.res** ì—서 ê° SQL ë¬¸ì— ëŒ€í•œ 최소 실행 시간, 최대 실행 시간, í‰ê· 실행 시간, 쿼리 실행 수를 확ì¸í• 수 있다. :: --log.top.q 파ì¼ì˜ ë‚´ìš© [Q1]------------------------------------------- broker1_6.sql.log:137734 13-11-11 18:17:59.396 (27754) execute_all srv_h_id 34 select a.int_col, b.var_col from dml_v_view_6 a, dml_v_view_6 b, dml_v_view_6 c , dml_v_view_6 d, dml_v_view_6 e where a.int_col=b.int_col and b.int_col=c.int_col and c.int_col=d.int_col and d.int_col=e.int_col order by 1,2; 11/11 18:18:58.378 (27754) execute_all 0 tuple 497664 time 58.982 . . [Q4]------------------------------------------- broker1_100.sql.log:142068 13-11-11 18:12:38.387 (27268) execute_all srv_h_id 798 drop table list_test; 13-11-11 18:13:08.856 (27268) execute_all 0 tuple 0 time 30.469 --log.top.res 파ì¼ì˜ ë‚´ìš© max min avg cnt(err) ----------------------------------------------------- [Q1] 58.982 30.371 44.676 2 (0) [Q2] 49.556 24.023 32.688 6 (0) [Q3] 35.548 25.650 30.599 2 (0) [Q4] 30.469 0.001 0.103 1050 (0) .. _cubrid_replay: cubrid_replay """"""""""""" **cubrid_replay** ìœ í‹¸ë¦¬í‹°ëŠ” ë¸Œë¡œì»¤ì˜ SQL 로그를 재ìƒí•˜ì—¬, ê¸°ì¡´ì˜ ìˆ˜í–‰ 시간과 재ìƒí• ë•Œì˜ ìˆ˜í–‰ 시간 ì°¨ì´ë¥¼ 비êµí•˜ì—¬ ì°¨ì´ê°€ í° ê²ƒë¶€í„°(기존보다 ëŠë¦° 것부터) 순서대로 ì •ë ¬í•œ 결과를 ì¶œë ¥í•œë‹¤. ì´ ìœ í‹¸ë¦¬í‹°ëŠ” SQL ë¡œê·¸ì— ê¸°ë¡ëœ 질ì˜ë“¤ì„ 재ìƒí•˜ë˜, ë°ì´í„°ì˜ ë³€ê²½ì´ ë°œìƒí•˜ëŠ” 질ì˜ëŠ” 실행하지 않는다. 별ë„ì˜ ì˜µì…˜ì„ ì£¼ì§€ 않으면 SELECT 문만 수행ë˜ë©°, -r ì˜µì…˜ì„ ë¶€ì—¬í•˜ë©´ UPDATE, DELETE ë¬¸ì„ SELECT 문으로 변환하여 수행한다. ì´ ìœ í‹¸ë¦¬í‹°ëŠ” 서로 다른 ë‘ ìž¥ë¹„ ê°„ ì„±ëŠ¥ì„ ë¹„êµí• 때 ì‚¬ìš©í• ìˆ˜ 있는ë°, 예를 들어 하드웨어 ìŠ¤íŽ™ì´ ë™ì¼í•œ 마스터와 ìŠ¬ë ˆì´ë¸Œ 사ì´ì—ì„œë„ ê°™ì€ ì§ˆì˜ì— 대해 성능 ì°¨ì´ê°€ ì¡´ìž¬í• ìˆ˜ 있다. :: cubrid_replay -I <broker_host> -P <broker_port> -d <db_name> [options] <sql_log_file> <output_file> * *broker_host*: CUBRID ë¸Œë¡œì»¤ì˜ IP 주소 ë˜ëŠ” 호스트 ì´ë¦„ * *broker_port*: CUBRID ë¸Œë¡œì»¤ì˜ í¬íЏ 번호 * *db_name*: 질ì˜ë¥¼ ì‹¤í–‰í• ë°ì´í„°ë² ì´ìФ * *sql_log_file*: CUBRID ë¸Œë¡œì»¤ì˜ SQL 로그 파ì¼($CUBRID/log/broker/sql_log/\*.log, \*.log.bak) * *output_file*: 수행 결과를 ì €ìž¥í• íŒŒì¼ ì´ë¦„ **cubrid_replay** ì—서 사용하는 [options]는 다ìŒê³¼ 같다. .. program:: cubrid_replay .. option:: -u DB_USER ë°ì´í„°ë² ì´ìФ ì‚¬ìš©ìž ì´ë¦„ ì§€ì •(기본값: public) .. option:: -p DB_PASSWORD ë°ì´í„°ë² ì´ìФ 암호 ì§€ì • .. option:: -r UPDATE, DELETE 질ì˜ë¥¼ SELECT 질ì˜ë¡œ 변환 .. option:: -h SECOND ì§ˆì˜ ì‹¤í–‰ ê°„ê²©ì„ ì§€ì •(기본값: 0.01ì´ˆ) .. option:: -D SECOND (재ìƒëœ ì§ˆì˜ ìˆ˜í–‰ 시간 - ê¸°ì¡´ì— ì‹¤í–‰ëœ ì§ˆì˜ ìˆ˜í–‰ 시간)ì´ ì´ ì„¤ì • 값보다 í° ê²½ìš°ë§Œ 해당 질ì˜ê°€ *output_file*\ì— ì¶œë ¥ë¨(기본값: 0.01ì´ˆ) .. option:: -F DATETIME ìž¬ìƒ ëŒ€ìƒ SQLì˜ ì‹œìž‘ ë‚ ì§œ ë° ì‹œê°„ì„ ì§€ì •í•œë‹¤. ìž…ë ¥ 형ì‹ì€ YY[-MM[-DD[ hh[:mm[:ss[.msec]]]]]]ì´ë©° []로 ê°ì‹¼ ë¶€ë¶„ì€ ìƒëžµí• 수 있다. ìƒëžµí•˜ë©´ MM, DD는 01ì„ ìž…ë ¥í•œ 것과 ê°™ê³ , hh, mm, ss, msecì€ 0ì„ ìž…ë ¥í•œ 것과 같다. .. option:: -T DATETIME ìž¬ìƒ ëŒ€ìƒ SQLì˜ ë ë‚ ì§œ ë° ì‹œê°„ì„ ì§€ì •í•œë‹¤. ìž…ë ¥ 형ì‹ì€ **-F** ì˜µì…˜ì˜ *DATE* 와 같다. :: $ cubrid_replay -I testhost -P 33000 -d testdb -u dba -r testdb_1_11_1.sql.log.bak output.txt ìœ„ì˜ ëª…ë ¹ì„ ì‹¤í–‰í•˜ë©´ 실행 ê²°ê³¼ì˜ ìš”ì•½ ì •ë³´ê°€ í™”ë©´ì— ì¶œë ¥ëœë‹¤. :: ------------------- Result Summary -------------------------- * Total queries : 153103 * Skipped queries (see skip.sql) : 5127 * Error queries (see replay.err) : 30 * Slow queries (time diff > 0.000 secs) : 89987 * Max execution time diff : 0.016 * Avg execution time diff : -0.001 cubrid_replay run time : 245.308417 sec * Total queries: ë‚ ì§œ ë° ì‹œê°„ì´ ì§€ì •ëœ ë²”ìœ„ ì•ˆì˜ ì „ì²´ ì§ˆì˜ ê°œìˆ˜. DDL, DMLì„ í¬í•¨ * Skipped queries: **-r** ì˜µì…˜ì´ ì‚¬ìš©ë˜ì—ˆì„ 때 UPDATE/DELETE ë¬¸ì„ SELECT 문으로 ë³€í™˜í• ìˆ˜ 없는 ì§ˆì˜ ê°œìˆ˜. ì´ ì§ˆì˜ëŠ” skip.sql 파ì¼ì— 기ë¡ë¨ * Slow queries: **-D** ì˜µì…˜ì˜ ì„¤ì • 값보다 수행 ì‹œê°„ì˜ ì°¨ì´ê°€ ë” í°(재ìƒëœ 실행 ì‹œê°„ì´ ê¸°ì¡´ 실행 ì‹œê°„ì— ì„¤ì •í•œ ê°’ì„ ë”한 것보다 ëŠë¦°) ì§ˆì˜ ê°œìˆ˜. **-D** ì˜µì…˜ì„ ìƒëžµí•˜ë©´ 0.01초를 기본으로 ì„¤ì •í•¨. * Max execution time diff: 수행 ì‹œê°„ì˜ ì°¨ì´ ì¤‘ 가장 í° ê°’(단위: ì´ˆ) * Avg execution time diff: 수행 ì‹œê°„ì˜ ì°¨ì´ì˜ í‰ê· ê°’(단위: ì´ˆ) * cubrid_replay run time: ìœ í‹¸ë¦¬í‹°ì˜ ìˆ˜í–‰ 시간 "Skipped queries"는 ë‚´ë¶€ ìš”ì¸ì— ì˜í•´ UPDATE/DELETE 문ì—서 SELECT 문으로 ì§ˆì˜ ë³€í™˜ì´ ë¶ˆê°€ëŠ¥í•œ 경우로, skip.sql 파ì¼ì— 기ë¡ëœ 질ì˜ë¬¸ì˜ ì„±ëŠ¥ì— ëŒ€í•´ì„œëŠ” 별ë„로 확ì¸í•´ë³¼ 필요가 있다. ë˜í•œ, ë³€í™˜ëœ ì§ˆì˜ë¬¸ì˜ 수행 ì‹œê°„ì€ ë°ì´í„° 변경 ì‹œê°„ì´ ë¹ ì§„ ê²ƒìž„ì„ ê°ì•ˆí•´ì•¼ 한다. *output.txt* 파ì¼ì—는 SQL ë¡œê·¸ì˜ ìˆ˜í–‰ 시간보다 재ìƒëœ SQL 수행 ì‹œê°„ì´ ë” ëŠë¦° SQL부터 ì •ë ¬ë˜ì–´ 기ë¡ëœë‹¤. 즉, {(재ìƒëœ SQL 수행 시간) - {(SQL ë¡œê·¸ì˜ ìˆ˜í–‰ 시간) + (**-D** 옵션 ì„¤ì • 시간)}}ì´ ë‚´ë¦¼ì°¨ìˆœìœ¼ë¡œ ì •ë ¬ë˜ì–´ 기ë¡ëœë‹¤. "-r" ì˜µì…˜ì´ ì‚¬ìš©ë˜ì—ˆìœ¼ë¯€ë¡œ UPDATE/DELETE ë¬¸ì€ SELECT 문으로 재작성ë˜ì–´ 실행ëœë‹¤. :: EXEC TIME (REPLAY / SQL_LOG / DIFF): 0.003 / 0.001 / 0.002 SQL: UPDATE NDV_QUOTA_INFO SET last_mod_date = now() , used_quota = ( SELECT IFNULL(sum(file_size),0) FROM NDV_RECYCLED_FILE_INFO WHERE user_id = ? ) + ( SELECT IFNULL(sum(file_size),0) FROM NDV_FILE_INFO WHERE user_id = ? ) WHERE user_id = ? /+shard_val(6900403)/ /* SQL : NDVMUpdResetUsedQuota */ REWRITE SQL: select NDV_QUOTA_INFO, class NDV_QUOTA_INFO, cast( SYS_DATETIME as datetime), cast((select ifnull(sum(NDV_RECYCLED_FILE_INFO.file_size), 0) from NDV_RECYCLED_FILE_INFO NDV_RECYCLED_FILE_INFO where (NDV_RECYCLED_FILE_INFO.user_id= ?:0 ))+(select ifnull(sum(NDV_FILE_INFO.file_size), 0) from NDV_FILE_INFO NDV_FILE_INFO where (NDV_FILE_INFO.user_id= ?:1 )) as bigint) from NDV_QUOTA_INFO NDV_QUOTA_INFO where (NDV_QUOTA_INFO.user_id= ?:2 ) BIND 1: 'babaemo' BIND 2: 'babaemo' BIND 3: 'babaemo' * EXEC TIME: (ìž¬ìƒ ì‹œê°„ / SQL 로그ì—ì„œì˜ ìˆ˜í–‰ 시간 / ë‘ ìˆ˜í–‰ ì‹œê°„ì˜ ì°¨ì´) * SQL: ë¸Œë¡œì»¤ì˜ SQL ë¡œê·¸ì— ì¡´ìž¬í•˜ëŠ” ì›ë³¸ SQL * REWRITE SQL: **-r** ì˜µì…˜ì´ ì§€ì •ë˜ì–´ UPDATE ë˜ëŠ” DELETE 문ì—서 ë³€í™˜ëœ SELECT 문 .. note:: broker_log_runner는 9.3 ë²„ì „ë¶€í„° ì œê±°ë ì˜ˆì •(deprecated)ì´ë¯€ë¡œ, cubrid_replay를 ëŒ€ì‹ ì‚¬ìš©í•˜ë„ë¡ í•œë‹¤. .. _cas-error: CAS ì—러 -------- CAS ì—러는 브로커 ì‘ìš© 서버(CAS) 프로세스ì—서 ë°œìƒí•˜ëŠ” ì—러로, 드ë¼ì´ë²„를 ì´ìš©í•˜ì—¬ CASì— ì ‘ì†í•˜ëŠ” ëª¨ë“ ì‘ìš© 프로그램ì—서 ë°œìƒí• 수 있다. 다ìŒì€ CASì—서 ë°œìƒí•˜ëŠ” ì—러 코드를 ì •ë¦¬í•œ 표ì´ë‹¤. ê°™ì€ ì—러 ë²ˆí˜¸ì— ëŒ€í•´ CCI와 JDBCì˜ ì—러 메시지가 서로 다르게 ë‚˜íƒ€ë‚ ìˆ˜ 있다. ì—러 메시지가 하나만 있으면 ê°™ì€ ê²ƒì´ë©°, ë‘ ê°œê°€ 있는 경우 ì•žì— ìžˆëŠ” ê²ƒì´ CCI ì—러 메시지, ë’¤ì— ìžˆëŠ” ê²ƒì´ JDBC ì—러 메시지ì´ë‹¤. +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | ì—러 코드명(ì—러 번호) | ì—러 메시지 (CCI / JDBC) | ë¹„ê³ | +==================================================+=====================================================================+======================================================================================================================+ | CAS_ER_INTERNAL(-10001) | | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NO_MORE_MEMORY(-10002) | Memory allocation error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_COMMUNICATION(-10003) | Cannot receive data from client / Communication error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_ARGS(-10004) | Invalid argument | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_TRAN_TYPE(-10005) | Invalid transaction type argument / Unknown transaction type | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_SRV_HANDLE(-10006) | Server handle not found / Internal server error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NUM_BIND(-10007) | Invalid parameter binding value argument / Parameter binding error | ë°”ì¸ë”©í• ë°ì´í„° 수가 ì „ì†¡í• ë°ì´í„° 수와 ì¼ì¹˜í•˜ì§€ 않ìŒ. | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_UNKNOWN_U_TYPE(-10008) | Invalid T_CCI_U_TYPE value / Parameter binding error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_DB_VALUE(-10009) | Cannot make DB_VALUE | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_TYPE_CONVERSION(-10010) | Type conversion error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_PARAM_NAME(-10011) | Invalid T_CCI_DB_PARAM value / Invalid database parameter name | 시스템 파ë¼ë¯¸í„° ì´ë¦„ì´ ìœ íš¨í•˜ì§€ ì•ŠìŒ | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NO_MORE_DATA(-10012) | Invalid cursor position / No more data | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_OBJECT(-10013) | Invalid oid / Object is not valid | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_OPEN_FILE(-10014) | Cannot open file / File open error | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_SCHEMA_TYPE(-10015) | Invalid T_CCI_SCH_TYPE value / Invalid schema type | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_VERSION(-10016) | Version mismatch | DB 서버 ë²„ì „ê³¼ í´ë¼ì´ì–¸íЏ(CAS) ë²„ì „ì´ í˜¸í™˜ë˜ì§€ 않ìŒ. | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_FREE_SERVER(-10017) | Cannot process the request. Try again later | ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ì—°ê²°ìš”ì²ì„ ì²˜ë¦¬í• CAS를 í• ë‹¹í• ìˆ˜ ì—†ìŒ. | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NOT_AUTHORIZED_CLIENT(-10018) | Authorization error | ì ‘ê·¼ì„ ë¶ˆí—ˆí•¨. | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_QUERY_CANCEL(-10019) | Cannot cancel the query | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NOT_COLLECTION(-10020) | The attribute domain must be the set type | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_COLLECTION_DOMAIN(-10021) | Heterogeneous set is not supported / | | | | The domain of a set must be the same data type | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NO_MORE_RESULT_SET(-10022) | No More Result | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_INVALID_CALL_STMT(-10023) | Illegal CALL statement | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_STMT_POOLING(-10024) | Invalid plan | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_DBSERVER_DISCONNECTED(-10025) | Cannot communicate with DB Server | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_MAX_PREPARED_STMT_COUNT_EXCEEDED(-10026) | Cannot prepare more than MAX_PREPARED_STMT_COUNT statements | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_HOLDABLE_NOT_ALLOWED(-10027) | Holdable results may not be updatable or sensitive | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_HOLDABLE_NOT_ALLOWED_KEEP_CON_OFF(-10028) | Holdable results are not allowed while KEEP_CONNECTION is off | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_NOT_IMPLEMENTED(-10100) | None / Attempt to use a not supported service | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_SSL_TYPE_NOT_ALLOWED(-10103 | None / The requested SSL mode is not permitted | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ | CAS_ER_IS(-10200) | None / Authentication failure | | +--------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+ .. _gateway: 게ì´íŠ¸ì›¨ì´ ========== 게ì´íŠ¸ì›¨ì´ êµ¬ë™ ---------------- 게ì´íŠ¸ì›¨ì´ë¥¼ 구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: $ cubrid gateway start @ cubrid gateway start ++ cubrid gateway start: success ì´ë¯¸ 게ì´íŠ¸ì›¨ì´ê°€ êµ¬ë™ ì¤‘ì´ë¼ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: cubrid gateway start @ cubrid gateway start ++ cubrid gateway is running. 게ì´íŠ¸ì›¨ì´ ì¢…ë£Œ --------------- 게ì´íŠ¸ì›¨ì´ë¥¼ 종료하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: $ cubrid gateway stop @ cubrid gateway stop ++ cubrid gateway stop: success ì´ë¯¸ 게ì´íŠ¸ì›¨ì´ê°€ 종료ë˜ì—ˆë‹¤ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: $ cubrid gateway stop @ cubrid gateway stop ++ cubrid gateway is not running. 게ì´íŠ¸ì›¨ì´ ìž¬ì‹œìž‘ ----------------- ì „ì²´ 게ì´íŠ¸ì›¨ì´ë¥¼ 재시작하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: $ cubrid gateway restart .. _gateway-status: 게ì´íŠ¸ì›¨ì´ ìƒíƒœ í™•ì¸ -------------------- **cubrid gateway status** 는 여러 ì˜µì…˜ì„ ì œê³µí•˜ì—¬, ê° ê²Œì´íŠ¸ì›¨ì´ì˜ 처리 ì™„ë£Œëœ ìž‘ì—… 수, 처리 ëŒ€ê¸°ì¤‘ì¸ ìž‘ì—… 수를 í¬í•¨í•œ 게ì´íŠ¸ì›¨ì´ ìƒíƒœ ì •ë³´ë¥¼ 확ì¸í• 수 있ë„ë¡ í•œë‹¤. :: cubrid gateway status [options] [expr] * *expr* : 게ì´íŠ¸ì›¨ì´ ì´ë¦„ì˜ ì¼ë¶€ ë˜ëŠ” "SERVICE=ON|OFF" *expr* ì´ ëª…ì‹œë˜ë©´ ì´ë¦„ì´ *expr* ì„ í¬í•¨í•˜ëŠ” 게ì´íŠ¸ì›¨ì´ì— 대한 ìƒíƒœ 모니터ë§ì„ ìˆ˜í–‰í•˜ê³ , ìƒëžµë˜ë©´ CUBRID 게ì´íŠ¸ì›¨ì´ í™˜ê²½ ì„¤ì • 파ì¼( **cubrid_gateway.conf** )ì— ë“±ë¡ëœ ì „ì²´ 게ì´íŠ¸ì›¨ì´ì— 대해 ìƒíƒœ 모니터ë§ì„ 수행한다. *expr* ì— "SERVICE=ON"ì´ ëª…ì‹œë˜ë©´ êµ¬ë™ ì¤‘ì¸ ê²Œì´íŠ¸ì›¨ì´ì˜ ìƒíƒœë§Œ ì¶œë ¥í•˜ë©°, "SERVICE=OFF"ê°€ 명시ë˜ë©´ 멈춰있는 게ì´íŠ¸ì›¨ì´ì˜ ì´ë¦„ë§Œ ì¶œë ¥í•œë‹¤. cubrid gateway statusì—서 사용하는 [options]는 다ìŒê³¼ 같다. ì´ë“¤ 중 -b, -q, -c, -m, -S, -P, -f는 ì¶œë ¥í• ì •ë³´ë¥¼ ì •ì˜í•˜ëŠ” ëª¨ë‹ˆí„°ë§ ì˜µì…˜ì´ê³ , -s, -l, -t는 ì¶œë ¥ì„ ì œì–´í•˜ëŠ” 옵션ì´ë‹¤. ì´ ëª¨ë“ ì˜µì…˜ë“¤ì€ ìƒí˜¸ 조합하여 ì‚¬ìš©í• ìˆ˜ 있다. .. program:: gateway_status .. option:: -b 게ì´íŠ¸ì›¨ì´ ì‘ìš© 서버(CAS)ì— ê´€í•œ ì •ë³´ëŠ” í¬í•¨í•˜ì§€ ì•Šê³ , 게ì´íŠ¸ì›¨ì´ì— 관한 ìƒíƒœ ì •ë³´ë§Œ ì¶œë ¥í•œë‹¤. .. option:: -q 작업 íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—…ì„ ì¶œë ¥í•œë‹¤. .. option:: -f 게ì´íŠ¸ì›¨ì´ê°€ ì ‘ì†í•œ DB ë° í˜¸ìŠ¤íŠ¸ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. **-b** 옵션과 함께 ì“°ì´ëŠ” 경우, CAS ì •ë³´ë¥¼ 추가로 ì¶œë ¥í•œë‹¤. 하지만 -b 옵션ì—서 나타나는 SELECT, INSERT, UPDATE, DELETE, OTHERS í•ëª©ì€ ì œì™¸ëœë‹¤. **-P** 옵션과 함께 ì“°ì´ëŠ” 경우, STMT-POOL-RATIO í•ëª©ì„ ì¶”ê°€ë¡œ ì¶œë ¥í•œë‹¤. ì´ í•ëª©ì€ prepare statement 사용 시 poolì—서 statement를 사용하는 ë¹„ìœ¨ì„ ë‚˜íƒ€ë‚¸ë‹¤. .. option:: -l SECOND **-l** ì˜µì…˜ì€ **-f** 옵션과만 함께 ì“°ì´ë©°, í´ë¼ì´ì–¸íЏ Waiting/Busy ìƒíƒœì¸ CASì˜ ê°œìˆ˜ë¥¼ ì¶œë ¥í• ë•Œ 누ì 주기(단위: ì´ˆ)를 ì§€ì •í•˜ê¸° 위해 사용한다. **-l** *SECOND* ì˜µì…˜ì„ ìƒëžµí•˜ë©´ ê¸°ë³¸ê°’ì€ 1ì´ˆì´ë‹¤. .. option:: -t 화면 ì¶œë ¥ì‹œ tty mode 로 ì¶œë ¥í•œë‹¤. ì¶œë ¥ ë‚´ìš©ì„ ë¦¬ë‹¤ì´ë ‰ì…˜í•˜ì—¬ 파ì¼ë¡œ 쓸 수 있다. .. option:: -s SECOND 게ì´íŠ¸ì›¨ì´ì— 관한 ìƒíƒœ ì •ë³´ë¥¼ ì§€ì •ëœ ì‹œê°„ë§ˆë‹¤ 주기ì 으로 ì¶œë ¥í•œë‹¤. q를 ìž…ë ¥í•˜ë©´ ëª…ë ¹ 프롬프트로 복귀한다. 옵션 ë° ì¸ìˆ˜ë¥¼ ìž…ë ¥í•˜ì§€ 않으면 ì „ì²´ 게ì´íŠ¸ì›¨ì´ ìƒíƒœ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. :: $ cubrid gateway status @ cubrid gateway status % oracle_gateway ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28434 0 0 50144 IDLE 2 28435 0 0 50144 IDLE 3 28436 0 0 50144 IDLE 4 28437 0 0 50140 IDLE 5 28438 0 0 50144 IDLE * % oracle_gateway: ë¸Œë¡œì»¤ì˜ ì´ë¦„ * ID: 게ì´íŠ¸ì›¨ì´ ë‚´ì—서 순차ì 으로 부여한 CASì˜ ì¼ë ¨ 번호 * PID: 게ì´íŠ¸ì›¨ì´ ë‚´ CAS í”„ë¡œì„¸ìŠ¤ì˜ ID * QPS: 초당 ì²˜ë¦¬ëœ ì§ˆì˜ì˜ 수 * LQS: 초당 처리ë˜ëŠ” 장기 실행 질ì˜ì˜ 수 * PSIZE: CAS 프로세스 í¬ê¸° * STATUS: CASì˜ í˜„ìž¬ ìƒíƒœë¡œì„œ, BUSY/IDLE/CLIENT_WAIT/CLOSE_WAITê°€ 있다. 다ìŒì€ **-b** ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬ ë¸Œë¡œì»¤ì— ê´€í•´ 5ì´ˆ 간격으로 ìƒì„¸í•œ ìƒíƒœ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. í™”ë©´ì´ 5ì´ˆ 간격마다 새로운 ìƒíƒœ ì •ë³´ë¡œ ê°±ì‹ ë˜ë©°, ìƒíƒœ ì •ë³´ í™”ë©´ì„ ë²—ì–´ë‚˜ë ¤ë©´ <Q>를 누른다. :: $ cubrid gateway status -b -s 5 @ cubrid gateway status NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT ======================================================================================================================================================================= * oracle_gateway 13200 30000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0 * NAME: 게ì´íŠ¸ì›¨ì´ ì´ë¦„ * PID: 게ì´íŠ¸ì›¨ì´ì˜ 프로세스 ID * PORT: 게ì´íŠ¸ì›¨ì´ì˜ í¬íЏ 번호 * AS: CAS 개수 * JQ: 작업 íì—서 대기 ì¤‘ì¸ ìž‘ì—… 개수 * TPS: 초당 ì²˜ë¦¬ëœ íŠ¸ëžœìžì…˜ì˜ 수(ì˜µì…˜ì´ "-b -s <sec>"ì¼ ë•Œë§Œ 해당 구간 계산) * QPS: 초당 ì²˜ë¦¬ëœ ì§ˆì˜ì˜ 수(ì˜µì…˜ì´ "-b -s <sec>"ì¼ ë•Œë§Œ 해당 구간 계산) * SELECT: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ ì´í›„ SELECT 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ SELECT 개수로 매번 ê°±ì‹ ë¨. * INSERT: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ ì´í›„ INSERT 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ INSERT 개수로 매번 ê°±ì‹ ë¨. * UPDATE: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ ì´í›„ UPDATE 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ UPDATE 개수로 매번 ê°±ì‹ ë¨. * DELETE: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ ì´í›„ DELETE 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ DELETE 개수로 매번 ê°±ì‹ ë¨. * OTHERS: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ ì´í›„ SELECT, INSERT, UPDATE, DELETE를 ì œì™¸í•œ CREATE, DROP ë“±ì˜ ì§ˆì˜ ê°œìˆ˜. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì§ˆì˜ ê°œìˆ˜ë¡œ 매번 ê°±ì‹ ë¨. * LONG-T: LONG_TRANSACTION_TIME ì‹œê°„ì„ ì´ˆê³¼í•œ 트랜ìžì…˜ 개수 / LONG_TRANSACTION_TIME 파ë¼ë¯¸í„°ì˜ ê°’. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ 트랜ìžì…˜ 개수로 매번 ê°±ì‹ ë¨. * LONG-Q: LONG_QUERY_TIME ì‹œê°„ì„ ì´ˆê³¼í•œ 질ì˜ì˜ 개수 / LONG_QUERY_TIME 파ë¼ë¯¸í„°ì˜ ê°’. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì§ˆì˜ ê°œìˆ˜ë¡œ 매번 ê°±ì‹ ë¨. * ERR-Q: ì—러가 ë°œìƒí•œ 질ì˜ì˜ 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ì—러 개수로 매번 ê°±ì‹ ë¨. * UNIQUE-ERR-Q: ê³ ìœ í‚¤ ì—러가 ë°œìƒí•œ 질ì˜ì˜ 개수. ì˜µì…˜ì´ "-b -s <sec>"ì¸ ê²½ìš° -s 옵션으로 ì§€ì •í•œ ì´ˆ ë™ì•ˆì˜ ê³ ìœ í‚¤ ì—러 개수로 매번 ê°±ì‹ ë¨. * #CONNECT: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ 후 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•œ 회수 * #REJECT: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ 후 ACLì— í¬í•¨ë˜ì§€ ì•Šì€ IP로부터 ì ‘ì†í•˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•˜ëŠ” ê²ƒì„ ê±°ë¶€ë‹¹í•œ 회수. ACL ì„¤ì •ê³¼ ê´€ë ¨í•˜ì—¬ :ref:`limiting-broker-access`\ 를 ì°¸ê³ í•œë‹¤. 다ìŒì€ **-q** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬, oracle_gatewayì„ í¬í•¨í•˜ëŠ” ì´ë¦„ì„ ê°€ì§„ 게ì´íŠ¸ì›¨ì´ì˜ ìƒíƒœ ì •ë³´ë¥¼ 확ì¸í•˜ê³ 해당 게ì´íŠ¸ì›¨ì´ì˜ 작업 íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—… ìƒíƒœë¥¼ 확ì¸í•œë‹¤. ì¸ìžë¡œ oracle_gatewayì„ ìž…ë ¥í•˜ì§€ 않으면 ëª¨ë“ ê²Œì´íŠ¸ì›¨ì´ì— 대하여 작업 íì— ëŒ€ê¸° ì¤‘ì¸ ìž‘ì—… 리스트가 ì¶œë ¥ëœë‹¤. :: % cubrid gateway status -q oracle_gateway @ cubrid gateway status % oracle_gateway ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28444 0 0 50144 IDLE 2 28445 0 0 50140 IDLE 3 28446 0 0 50144 IDLE 4 28447 0 0 50144 IDLE 5 28448 0 0 50144 IDLE 다ìŒì€ **-s** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ oracle_gatewayì„ í¬í•¨í•˜ëŠ” ì´ë¦„ì„ ê°€ì§„ 게ì´íŠ¸ì›¨ì´ì˜ ìƒíƒœë¥¼ 주기ì 으로 모니터ë§í•œë‹¤. ì¸ìžë¡œ oracle_gatewayì„ ìž…ë ¥í•˜ì§€ 않으면 ëª¨ë“ ê²Œì´íŠ¸ì›¨ì´ì— 대하여 ìƒíƒœ 모니터ë§ì´ 주기ì 으로 수행ëœë‹¤. ë˜í•œ, q를 ìž…ë ¥í•˜ë©´ ëª¨ë‹ˆí„°ë§ í™”ë©´ì—서 ëª…ë ¹ 프롬프트로 복귀한다. :: % cubrid gateway status -s 5 oracle_gateway % oracle_gateway ---------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------- 1 28444 0 0 50144 IDLE 2 28445 0 0 50140 IDLE 3 28446 0 0 50144 IDLE 4 28447 0 0 50144 IDLE 5 28448 0 0 50144 IDLE **-t** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ TPS와 QPS ì •ë³´ë¥¼ 파ì¼ë¡œ ì¶œë ¥í•œë‹¤. 파ì¼ë¡œ ì¶œë ¥í•˜ëŠ” ê²ƒì„ ì¤‘ë‹¨í•˜ë ¤ë©´ <Ctrl+C>를 눌러서 í”„ë¡œê·¸ëž¨ì„ ì •ì§€ì‹œí‚¨ë‹¤. :: % cubrid gateway status -b -t -s 1 > log_file 다ìŒì€ **-f** ì˜µì…˜ì„ ì´ìš©í•˜ì—¬ 게ì´íŠ¸ì›¨ì´ê°€ 연결한 서버/ë°ì´í„°ë² ì´ìФ ì •ë³´ì™€ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìµœê·¼ ì ‘ì† ì‹œê°, CASì— ì ‘ì†í•˜ëŠ” í´ë¼ì´ì–¸íŠ¸ì˜ IP 주소와 드ë¼ì´ë²„ì˜ ë²„ì „ ë“±ì„ ì¶œë ¥í•œë‹¤. :: $ cubrid gateway status -f oracle_gateway @ cubrid gateway status % oracle_gateway ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ID PID QPS LQS PSIZE STATUS LAST ACCESS TIME DB HOST LAST CONNECT TIME CLIENT IP CLIENT VERSION SQL_LOG_MODE TRANSACTION STIME #CONNECT #RESTART ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1 26946 0 0 51168 IDLE 2011/11/16 16:23:42 demodb localhost 2011/11/16 16:23:40 10.0.1.101 9.2.0.0062 NONE 2011/11/16 16:23:42 0 0 2 26947 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 3 26948 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 4 26949 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 5 26950 0 0 51172 IDLE 2011/11/16 16:23:34 - - - 0.0.0.0 - - 0 0 ê° ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * LAST ACCESS TIME: CASê°€ 구ë™í•œ ì‹œê° ë˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ CASì— ìµœê·¼ ì ‘ì†í•œ ì‹œê° * DB: CASì˜ ìµœê·¼ ì ‘ì† ë°ì´í„°ë² ì´ìФ ì´ë¦„ * HOST: CASì˜ ìµœê·¼ ì ‘ì† í˜¸ìŠ¤íŠ¸ ì´ë¦„ * LAST CONNECT TIME: CASì˜ DB 서버 최근 ì ‘ì† ì‹œê° * CLIENT IP: 현재 CASì— ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ IP 주소. 현재 ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ 없으면 0.0.0.0으로 ì¶œë ¥ * CLIENT VERSION: 현재 CASì— ì ‘ì† ì¤‘ì¸ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ë“œë¼ì´ë²„ ë²„ì „ * SQL_LOG_MODE: CASì˜ SQL 로그 ê¸°ë¡ ëª¨ë“œ. 게ì´íŠ¸ì›¨ì´ì— ì„¤ì •ëœ ëª¨ë“œì™€ ë™ì¼í•œ 경우 "-"으로 ì¶œë ¥ * TRANSACTION STIME: 트랜ìžì…˜ 시작 시간 * #CONNECT: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ 후 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CASì— ì ‘ì†í•œ 회수 * #RESTART: 게ì´íŠ¸ì›¨ì´ ì‹œìž‘ 후 CASì˜ ìž¬êµ¬ë™ íšŒìˆ˜ .. _gaweway-detail: **-b** ì˜µì…˜ì— **-f** ì˜µì…˜ì„ ì¶”ê°€í•˜ì—¬ AS(T W B Ns-W Ns-B), CANCELED ì •ë³´ë¥¼ 추가로 ì¶œë ¥í•œë‹¤. :: // 게ì´íŠ¸ì›¨ì´ ìƒíƒœ ì •ë³´ 실행 시 -f 옵션 추가. -l 옵션으로 Nì´ˆ ë™ì•ˆì˜ Ns-W, Ns-B를 ì¶œë ¥í•˜ë„ë¡ ì´ˆë¥¼ ì„¤ì • % cubrid gateway status -b -f -l 2 @ cubrid gateway status NAME PID PSIZE PORT AS(T W B 2s-W 2s-B) JQ TPS QPS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q CANCELED ACCESS_MODE SQL_LOG #CONNECT #REJECT ================================================================================================================================================ oracle_gateway 16784 56700 30000 5 0 0 0 0 0 16 29 0/60.0 0/60.0 1 1 0 RW ALL 4 1 ì¶”ê°€ëœ ì¹¼ëŸ¼ì— ëŒ€í•œ ì„¤ëª…ì€ ë‹¤ìŒê³¼ 같다. * AS(T): 실행 ì¤‘ì¸ CASì˜ ì „ì²´ 개수 * AS(W): 현재 í´ë¼ì´ì–¸íЏ 대기(Waiting) ìƒíƒœì¸ CASì˜ ê°œìˆ˜ * AS(B): 현재 í´ë¼ì´ì–¸íЏ 수행(Busy) ìƒíƒœì¸ CASì˜ ê°œìˆ˜ * AS(Ns-W): Nì´ˆ ë™ì•ˆ í´ë¼ì´ì–¸íЏ 대기(Waiting) ìƒíƒœì˜€ë˜ CASì˜ ê°œìˆ˜ * AS(Ns-B): Nì´ˆ ë™ì•ˆ í´ë¼ì´ì–¸íЏ 수행(Busy) ìƒíƒœì˜€ë˜ CASì˜ ê°œìˆ˜ * CANCELED: 게ì´íŠ¸ì›¨ì´ê°€ ì‹œìž‘ëœ ì´í›„ ì‚¬ìš©ìž ì¸í„°ëŸ½íŠ¸ë¡œ ì¸í•´ ì·¨ì†Œëœ ì§ˆì˜ì˜ 개수 (-l N 옵션과 함께 사용하면 Nì´ˆ ë™ì•ˆ 누ì ëœ ê°œìˆ˜). .. note:: 게ì´íŠ¸ì›¨ì´ëŠ” 브로커와 ê±°ì˜ ìœ ì‚¬ 하므로, 게ì´íŠ¸ì›¨ì´ì˜ ë” ë§Žì€ ì •ë³´ëŠ” ì•„ëž˜ì˜ ë‚´ìš©ì„ ì°¸ì¡°í•œë‹¤. * :ref:`limiting-server-access` * :ref:`encrypted_connections` * :ref:`managing_specific_broker` * :ref:`broker-configuration-info` * :ref:`broker-logs` .. _cubrid-manager-server: CUBRID ë§¤ë‹ˆì € 서버 ================== CUBRID ë§¤ë‹ˆì € 서버 êµ¬ë™ ----------------------- CUBRID ë§¤ë‹ˆì € 서버를 구ë™í•˜ê¸° 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid manager start ì´ë¯¸ CUBRID ë§¤ë‹ˆì € 서버가 êµ¬ë™ ì¤‘ì— ìžˆë‹¤ë©´ 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid manager start @ cubrid manager server start ++ cubrid manager server is running. CUBRID ë§¤ë‹ˆì € 서버 종료 ----------------------- CUBRID ë§¤ë‹ˆì € 서버를 종료하기 위하여 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•œë‹¤. :: % cubrid manager stop @ cubrid manager server stop ++ cubrid manager server stop: success CUBRID ë§¤ë‹ˆì € 서버 로그 ----------------------- CUBRID ë§¤ë‹ˆì € 서버와 ê´€ë ¨ëœ ë¡œê·¸ëŠ” 설치 ë””ë ‰í„°ë¦¬ì˜ log/manager ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë˜ë©°, ë§¤ë‹ˆì € 서버 í”„ë¡œì„¸ìŠ¤ì— ë”°ë¼ ë‹¤ìŒê³¼ ê°™ì´ ë„¤ ì¢…ë¥˜ì˜ ë¡œê·¸ 파ì¼ë¡œ ì €ìž¥ëœë‹¤. * auto_backupdb.log: ë§¤ë‹ˆì € í´ë¼ì´ì–¸íЏì—서 ì˜ˆì•½ëœ ë°±ì—… ìžë™í™” ìž‘ì—…ì— ê´€í•œ 로그 * auto_execquery.log: ë§¤ë‹ˆì € í´ë¼ì´ì–¸íЏì—서 ì˜ˆì•½ëœ ì¿¼ë¦¬ ìžë™í™” ìž‘ì—…ì— ê´€í•œ 로그 * cub_js.access.log: ë§¤ë‹ˆì € ì„œë²„ì— ì„±ê³µí•œ 로그ì¸ê³¼ ìž‘ì—…ì— ëŒ€í•œ 로그 * cub_js.error.log: ë§¤ë‹ˆì € ì„œë²„ì— ì‹¤íŒ¨í•œ 로그ì¸ê³¼ ìž‘ì—…ì— ê´€í•œ 로그 CUBRID ë§¤ë‹ˆì € 서버 환경 ì„¤ì • ---------------------------- CUBRID ë§¤ë‹ˆì € ì„œë²„ì˜ í™˜ê²½ ì„¤ì • 파ì¼ì€ **$CUBRID/conf**\ì— ìœ„ì¹˜í•˜ë©°, íŒŒì¼ ì´ë¦„ì€ **cm.conf**\ì´ë‹¤. CUBRID ë§¤ë‹ˆì € ì„œë²„ì˜ í™˜ê²½ ì„¤ì • 파ì¼ì—서 주ì„ì€ "#"으로 처리ë˜ë©°, 매개 변수 ì´ë¦„ê³¼ ê°’ì´ ì €ìž¥ëœë‹¤. 매개 변수 ì´ë¦„ê³¼ ê°’ 사ì´ì—는 공백 ë˜ëŠ” 등호 부호(=)로 구분한다. **cm.conf**\ì—서 ì„¤ì •í• ìˆ˜ 있는 매개 변수는 다ìŒê³¼ 같다. **cm_port** CUBRID ë§¤ë‹ˆì € 서버와 í´ë¼ì´ì–¸íЏ 사ì´ì˜ í†µì‹ í¬íŠ¸ë¥¼ ì„¤ì •í•˜ëŠ” 매개 변수로, ê¸°ë³¸ê°’ì€ **8001**\로 ì„¤ì •ëœë‹¤. **monitor_interval** **cub_auto**\ì˜ ëª¨ë‹ˆí„°ë§ ì£¼ê¸°ë¥¼ ì´ˆ 단위로 ì„¤ì •í•˜ëŠ” 매개 변수로, ê¸°ë³¸ê°’ì€ **5**\ì´ë‹¤. **allow_user_multi_connection** CUBRID ë§¤ë‹ˆì € ì„œë²„ì— í´ë¼ì´ì–¸íŠ¸ê°€ 중복 ì ‘ì†í•˜ëŠ” ê²ƒì„ í—ˆìš©í•˜ê¸° 위한 매개 변수로, ê¸°ë³¸ê°’ì€ **YES**\ì´ë‹¤. ë”°ë¼ì„œ CUBRID ë§¤ë‹ˆì € 서버ì—는 ë‘ ê°œ ì´ìƒì˜ CUBRID ë§¤ë‹ˆì € í´ë¼ì´ì–¸íŠ¸ê°€ ì ‘ì†í• 수 있으며, ê°™ì€ ì‚¬ìš©ìž ì´ë¦„으로 ì ‘ì†í• ìˆ˜ë„ ìžˆë‹¤. **server_long_query_time** ì„œë²„ì˜ ì§„ë‹¨ í•목 중 **slow_query** í•ëª©ì„ ì„¤ì •í• ê²½ìš° 몇 ì´ˆ ì´ìƒì„ ëŠ¦ì€ ì§ˆì˜ë¡œ íŒë³„í• ì§€ ê²°ì •í•˜ëŠ” 매개 변수로, 기본 ê°’ì€ **10**\ì´ë‹¤. 서버ì—서 ìˆ˜í–‰ëœ ì§ˆì˜ ìˆ˜í–‰ ì‹œê°„ì´ ë§¤ê°œ 변수 ì„¤ì • 값보다 í° ê²½ìš°, **slow_query**\ì˜ ê°œìˆ˜ê°€ ì¦ê°€í•œë‹¤. **auto_job_timeout** **auto_job_timeout** 는 작업 ìžë™í™”(cub_auto)ì˜ ìž‘ì—…ì´ ìœ ì§€ë˜ê¸° 위한 최대 시간ì´ë‹¤. ê¸°ë³¸ê°’ì€ 43,200 (12 시간)ì´ë‹¤. **mon_cub_auto** **mon_cub_auto**\는 cub_autoê°€ 종료ë˜ë©´ ìžë™ìœ¼ë¡œ ìž¬ì‹œìž‘í• ê²ƒì¸ì§€ ì„¤ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ NO ì´ë‹¤. **token_active_time** **token_active_time**\는 로그ì¸ëœ ì„¸ì…˜ì˜ ìµœëŒ€ ìœ ì§€ ì‹œê°„ì„ ì„¤ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ 7200 (2 시간)ì´ë‹¤. **support_mon_statistic** **support_mon_statistic**\는 누ì 모니터ë§ì„ ì‚¬ìš©í• ê²ƒì¸ì§€ ì„¤ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ NO ì´ë‹¤. **cm_process_monitor_interval** **cm_process_monitor_interval**\는 ëª¨ë‹ˆí„°ë§ ì •ë³´ 수집 주기ì´ë‹¤. 기본값과 ìµœì†Œê°’ì€ 5 (5 ë¶„)ì´ë‹¤. CUBRID ë§¤ë‹ˆì € ì‚¬ìš©ìž ê´€ë¦¬ 콘솔 ------------------------------ CUBRID ë§¤ë‹ˆì € 사용ìžì˜ ê³„ì •ê³¼ 비밀번호는 CUBRID ë§¤ë‹ˆì € í´ë¼ì´ì–¸íЏ 구ë™ì„ ì‹œìž‘í• ë•Œ CUBRID ë§¤ë‹ˆì € ì„œë²„ì— ì ‘ì†í•˜ê¸° 위해 사용하는 것ì´ë©°, ë°ì´í„°ë² ì´ìФ 사용ìžì™€ëŠ” 다른 ê°œë…ì´ë‹¤. CUBRID ë§¤ë‹ˆì € 관리ìž(cm_admin)는 ì‚¬ìš©ìž ì •ë³´ë¥¼ 관리하는 CLI ë„구로, 콘솔 ì°½ì—서 ëª…ë ¹ì–´ë¥¼ 실행하여 사용ìžë¥¼ 관리한다. ì´ ìœ í‹¸ë¦¬í‹°ëŠ” Linux OSë§Œ ì§€ì›í•œë‹¤. 다ìŒì€ CUBRID ë§¤ë‹ˆì €(ì´í•˜ CM) ê´€ë¦¬ìž ìœ í‹¸ë¦¬í‹° 구문 사용법ì´ë‹¤. 아래 ê¸°ëŠ¥ì€ CUBRID ë§¤ë‹ˆì € í´ë¼ì´ì–¸íЏì—서 GUI를 통해 ì‚¬ìš©í• ìˆ˜ë„ ìžˆë‹¤. :: cm_admin <utility_name> <utility_name>: adduser [<option>] <cmuser-name> <cmuser-password> --- CM ì‚¬ìš©ìž ì¶”ê°€ deluser <cmuser-name> --- CM ì‚¬ìš©ìž ì‚ì œ viewuser [<cmuser-name>] --- CM ì‚¬ìš©ìž ì •ë³´ ì¶œë ¥ changeuserauth [<option>] <cmuser-name> --- CM ì‚¬ìš©ìž ê¶Œí•œ 변경 changeuserpwd [<option>] <cmuser-name> --- CM ì‚¬ìš©ìž ë¹„ë°€ë²ˆí˜¸ 변경 adddbinfo [<option>] <cmuser-name> <database-name> --- CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ 추가 deldbinfo <cmuser-name> <database-name> --- CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ ì‚ì œ changedbinfo [<option>] <database-name> number-of-pages --- CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ 변경 **CM 사용ìž** CM ì‚¬ìš©ìž ì •ë³´ëŠ” 다ìŒê³¼ ê°™ì€ ì •ë³´ë¡œ 구성ëœë‹¤. * CM ì‚¬ìš©ìž ê¶Œí•œ: 다ìŒê³¼ ê°™ì€ ê¶Œí•œ ì •ë³´ë¥¼ í¬í•¨í•œë‹¤. * 브로커 권한 * ë°ì´í„°ë² ì´ìФ ìƒì„± 권한. 현재는 **admin** 사용ìžë§Œ ì´ ê¶Œí•œì„ ê°€ì§ˆ 수 있다. * ìƒíƒœ ëª¨ë‹ˆí„°ë§ ê¶Œí•œ * ë°ì´í„°ë² ì´ìФ ì •ë³´: CM 사용ìžê°€ ì‚¬ìš©í• ìˆ˜ 있는 ë°ì´í„°ë² ì´ìФ * CM ì‚¬ìš©ìž ë¹„ë°€ë²ˆí˜¸ CUBRID ë§¤ë‹ˆì €ì˜ ê¸°ë³¸ 사용ìžëŠ” ëª¨ë“ ê´€ë¦¬ ê¶Œí•œì„ ê°€ì§„ **admin** 사용ìžì´ë©° 기본 비밀번호는 adminì´ë‹¤. **CM ì‚¬ìš©ìž ì¶”ê°€** **cm_admin adduser** ìœ í‹¸ë¦¬í‹°ëŠ” íŠ¹ì • 권한과 ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ 갖는 CM 사용ìžë¥¼ ìƒì„±í•œë‹¤. 브로커 권한, ë°ì´í„°ë² ì´ìФ ìƒì„± 권한 ë° ìƒíƒœ ëª¨ë‹ˆí„°ë§ ê¶Œí•œ ë“±ì„ CM 사용ìžì—게 ë¶€ì—¬í• ìˆ˜ 있다. :: cm_admin adduser [options] cmuser-name cmuser-password * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **adduser**: 새 CM 사용ìžë¥¼ ìƒì„±í•˜ëŠ” ëª…ë ¹ì–´ * *cmuser-name*: ìƒì„±í• CM 사용ìžì˜ ê³ ìœ í•œ ì´ë¦„ì„ ì§€ì •í•œë‹¤. 사용 가능한 문ìžëŠ” 0~9, A~Z, a~z, _ì´ë©° 최소 4ìž, 최대 32ìžì´ë‹¤. ì§€ì •í•œ *cmuser-name*\ ì´ ê¸°ì¡´ *cmuser-name*\ ê³¼ 같으면 **cm_admin**\ ì€ CM ì‚¬ìš©ìž ìƒì„±ì„ 중지한다. * *cmuser-password*: ìƒì„±í• CM 사용ìžì˜ 비밀번호ì´ë‹¤. 사용 가능한 문ìžëŠ” 0~9, A~Z, a~z, _ì´ë©° 최소 4ìž, 최대 32ìžì´ë‹¤. 다ìŒì€ **cm_admin adduser**\ì— ëŒ€í•œ [options]ì´ë‹¤. .. program:: cm_admin_adduser .. option:: -b, --broker AUTHORITY ìƒì„±í• CM 사용ìžì˜ 브로커 ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **admin**, **none**, **monitor**\ì´ë©°, ê¸°ë³¸ê°’ì€ **none**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì´ê³ 비밀번호가 *testcmpwd*\ì¸ CM 사용ìžë¥¼ ìƒì„±í•˜ê³ 브로커 ê¶Œí•œì„ monitor로 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. :: cm_admin adduser -b monitor testcm testcmpwd .. option:: -c, --dbcreate AUTHORITY ìƒì„±í• CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ìƒì„± ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **none**, **admin**\ì´ë©°, ê¸°ë³¸ê°’ì€ **none**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì´ê³ 비밀번호가 *testcmpwd*\ì¸ CM 사용ìžë¥¼ ìƒì„±í•˜ê³ ë°ì´í„°ë² ì´ìФ ìƒì„± ê¶Œí•œì„ admin으로 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. :: cm_admin adduser -c admin testcm testcmpwd .. option:: -m, --monitor AUTHORITY ìƒì„±í• CM 사용ìžì˜ ëª¨ë‹ˆí„°ë§ ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **admin**, **none**, **monitor**\ì´ë©°, ê¸°ë³¸ê°’ì€ **none**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì´ê³ 비밀번호가 *testcmpwd*\ì¸ CM 사용ìžë¥¼ ìƒì„±í•˜ê³ ìƒíƒœ ëª¨ë‹ˆí„°ë§ ê¶Œí•œì„ admin으로 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. :: cm_admin adduser -m admin testcm testcmpwd .. option:: -d, --dbinfo INFO_STRING ìƒì„±í• CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ ì§€ì •í•œë‹¤. *INFO_STRING*\ì€ "<dbname>;<uid>;<broker_ip>,<broker_port>"ì˜ í˜•ì‹ìœ¼ë¡œ ì§€ì •í•´ì•¼ 한다. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì—게 "testdb;dba;localhost,30000"ì´ë¼ëŠ” ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ 추가하는 예ì´ë‹¤. :: cm_admin adduser -d "testdb;dba;localhost,30000" testcm testcmpwd **CM ì‚¬ìš©ìž ì‚ì œ** **cm_admin deluser** ìœ í‹¸ë¦¬í‹°ëŠ” ì§€ì •í•œ CM ì‚¬ìš©ìž ì´ë¦„ì„ ê¸°ì¤€ìœ¼ë¡œ CM 사용ìžë¥¼ ì‚ì œí•œë‹¤. :: cm_admin deluser cmuser-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **deluser**: 기존 CM 사용ìžë¥¼ ì‚ì œí•˜ëŠ” ëª…ë ¹ì–´ * *cmuser-name*: ì‚ì œí• CM ì‚¬ìš©ìž ì´ë¦„ 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžë¥¼ ì‚ì œí•˜ëŠ” 예ì´ë‹¤. :: cm_admin deluser testcm **CM ì‚¬ìš©ìž ì •ë³´ ì¶œë ¥** **cm_admin viewuser** ìœ í‹¸ë¦¬í‹°ëŠ” ì§€ì •í•œ CM ì‚¬ìš©ìž ì´ë¦„ì„ ê¸°ì¤€ìœ¼ë¡œ CM 사용ìžë¥¼ ì‚ì œí•œë‹¤. :: cm_admin viewuser cmuser-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **viewuser**: CM 사용ìžì˜ 권한 ë° ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ ì¶œë ¥í•˜ëŠ” ëª…ë ¹ì–´ * *cmuser-name*: CM ì‚¬ìš©ìž ì´ë¦„. ì´ ê°’ì„ ìž…ë ¥í•˜ë©´ 해당 사용ìžì˜ ì •ë³´ë§Œ ì¶œë ¥í•˜ê³ , ìƒëžµí•˜ë©´ ëª¨ë“ ê¸°ì¡´ CM ì‚¬ìš©ìž ì •ë³´ë¥¼ 표시한다. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ ì •ë³´ë¥¼ ì¶œë ¥í•˜ëŠ” 예ì´ë‹¤. :: cm_admin viewuser testcm 다ìŒê³¼ ê°™ì´ ì •ë³´ê°€ ì¶œë ¥ëœë‹¤. :: CM USER: testcm Auth info: broker: none dbcreate: none statusmonitorauth: none DB info: ========================================================================================== DBNAME UID BROKER INFO ========================================================================================== testdb dba localhost,30000 **CM ì‚¬ìš©ìž ê¶Œí•œ 변경** **cm_admin changeuserauth** ìœ í‹¸ë¦¬í‹°ëŠ” CM 사용ìžì˜ ê¶Œí•œì„ ë³€ê²½í•œë‹¤. :: cm_admin changeuserauth [options] cmuser-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **changeuserauth**: CM 사용ìžì˜ 권한 ì •ë³´ë¥¼ 변경하는 ëª…ë ¹ì–´ * *cmuser-name*: ê¶Œí•œì„ ë³€ê²½í• CM 사용ìžì˜ ì´ë¦„ **cm_admin changeuserauth**\ì—서 사용하는 [options]는 다ìŒê³¼ 같다. .. program:: cm_admin_changeuserauth .. option:: -b, --broker CM 사용ìžì˜ 브로커 ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **admin**, **none**, **monitor**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ 브로커 ê¶Œí•œì„ **monitor**\로 변경하는 예ì´ë‹¤. :: cm_admin changeuserauth -b monitor testcm .. option:: -c, --dbcreate CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ìƒì„± ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **none**, **admin**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ìƒì„± ê¶Œí•œì„ **admin**\으로 변경하는 예ì´ë‹¤. :: cm_admin changeuserauth -c admin testcm .. option:: -m, --monitor CM 사용ìžì˜ ëª¨ë‹ˆí„°ë§ ê¶Œí•œì„ ì§€ì •í•œë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ **admin**, **none**, **monitor**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ ìƒíƒœ ëª¨ë‹ˆí„°ë§ ê¶Œí•œì„ **admin**\으로 변경하는 예ì´ë‹¤. :: cm_admin changeuserauth -m admin testcm **CM ì‚¬ìš©ìž ë¹„ë°€ë²ˆí˜¸ 변경** **cm_admin changeuserpwd** ìœ í‹¸ë¦¬í‹°ëŠ” CM 사용ìžì˜ 비밀번호를 변경한다. :: cm_admin changeuserpwd [options] cmuser-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **changeuserpwd**: CM 사용ìžì˜ 비밀번호를 변경하는 ëª…ë ¹ì–´ * *cmuser-name*: 비밀번호를 ë³€ê²½í• CM 사용ìžì˜ ì´ë¦„ **cm_admin changeuserpwd**\ì—서 사용하는 [options]는 다ìŒê³¼ 같다. .. option:: -o, --oldpass PASSWORD CM 사용ìžì˜ ì˜ˆì „ 비밀번호를 ì§€ì •í•œë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ 비밀번호를 변경하는 예ì´ë‹¤. :: cm_admin changeuserpwd -o old_password -n new_password testcm .. option:: --adminpass PASSWORD 사용ìžì˜ ì˜ˆì „ 비밀번호를 모를 때 **admin**\ì˜ ë¹„ë°€ë²ˆí˜¸ë¥¼ ëŒ€ì‹ ì§€ì •í• ìˆ˜ 있다. 다ìŒì€ **admin** 비밀번호를 사용하여 ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ 비밀번호를 변경하는 예ì´ë‹¤. :: cm_admin changeuserauth --adminpass admin_password -n new_password testcm .. option:: -n, --newpass PASSWORD CM 사용ìžì˜ 새 비밀번호를 ì§€ì •í•œë‹¤. **CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ 추가** **cm_admin adddbinfo** ìœ í‹¸ë¦¬í‹°ëŠ” ë°ì´í„°ë² ì´ìФ ì •ë³´(ë°ì´í„°ë² ì´ìФ ì´ë¦„, UID, 브로커 IP ë° ë¸Œë¡œì»¤ í¬íЏ)를 CM 사용ìžì—게 추가한다. :: cm_admin adddbinfo [options] cmuser-name database-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **adddbinfo**: CM 사용ìžì—게 ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ 추가하는 ëª…ë ¹ì–´ * cmuser-name: CM ì‚¬ìš©ìž ì´ë¦„ * databse-name: ì¶”ê°€í• ë°ì´í„°ë² ì´ìФ ì´ë¦„ 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì—게 ì´ë¦„ì´ *testdb*\ì´ê³ ê¸°ë³¸ê°’ì„ ì‚¬ìš©í•˜ëŠ” ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 추가하는 예ì´ë‹¤. :: cm_admin adddbinfo testcm testdb 다ìŒì€ **cm_admin adddbinfo**\ì—서 사용하는 [options]ì´ë‹¤. .. program:: cm_admin_adddbinfo .. option:: -u, --uid ID ì¶”ê°€í• ë°ì´í„°ë² ì´ìŠ¤ì˜ ì‚¬ìš©ìž ID를 ì§€ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ **dba**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì—게 ì´ë¦„ì´ *testdb*\ì´ê³ ì‚¬ìš©ìž IDê°€ *cubriduser*\ì¸ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 추가하는 예ì´ë‹¤. :: cm_admin adddbinfo -u cubriduser testcm testdb .. option:: -h, --host IP í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í• 때 사용하는 ë¸Œë¡œì»¤ì˜ í˜¸ìŠ¤íŠ¸ IP를 ì§€ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ **localhost**\ì´ë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì—게 ì´ë¦„ì´ *testdb*\ì´ê³ 호스트 IPê°€ *127.0.0.1*\ì¸ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 추가하는 예ì´ë‹¤. :: cm_admin adddbinfo -h 127.0.0.1 testcm testdb .. option:: -p, --port NUMBER í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í• 때 사용하는 ë¸Œë¡œì»¤ì˜ í¬íЏ 번호를 ì§€ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ **30000**\ì´ë‹¤. **CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ ì‚ì œ** **cm_admin deldbinfo** ìœ í‹¸ë¦¬í‹°ëŠ” ì§€ì •í•œ CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ ì‚ì œí•œë‹¤. :: cm_admin deldbinfo cmuser-name database-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **deldbinfo**: CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ ì‚ì œí•˜ëŠ” ëª…ë ¹ì–´ * cmuser-name: CM ì‚¬ìš©ìž ì´ë¦„ * databse-name: ì‚ì œí• ë°ì´í„°ë² ì´ìФ ì´ë¦„ 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì—게서 ì´ë¦„ì´ *testdb*\ì¸ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ ì‚ì œí•˜ëŠ” 예ì´ë‹¤. :: cm_admin deldbinfo testcm testdb **CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ 변경** **cm_admin changedbinfo** ìœ í‹¸ë¦¬í‹°ëŠ” ì§€ì •í•œ CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ 변경한다. :: cm_admin changedbinfo [options] cmuser-name database-name * **cm_admin**: CUBRID ë§¤ë‹ˆì €ë¥¼ 관리하는 통합 ìœ í‹¸ë¦¬í‹° * **changedbinfo**: CM 사용ìžì˜ ë°ì´í„°ë² ì´ìФ ì •ë³´ë¥¼ 변경하는 ëª…ë ¹ì–´ * <cmuser-name>: CM ì‚¬ìš©ìž ì´ë¦„ * <databse-name>: ë³€ê²½í• ë°ì´í„°ë² ì´ìФ ì´ë¦„ 다ìŒì€ **cm_admin changedbinfo**\ì—서 사용하는 [options]ì´ë‹¤. .. program:: cm_admin_changedbinfo .. option:: -u, --uid ID ë°ì´í„°ë² ì´ìŠ¤ì˜ ì‚¬ìš©ìž ID를 ì§€ì •í•œë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ *testdb* ë°ì´í„°ë² ì´ìФì—서 ì‚¬ìš©ìž ID ì •ë³´ë¥¼ *uid*\로 ì—…ë°ì´íŠ¸í•˜ëŠ” 예ì´ë‹¤. :: cm_admin changedbinfo -u uid testcm testdb .. option:: -h, --host IP í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í• 때 사용하는 ë¸Œë¡œì»¤ì˜ í˜¸ìŠ¤íŠ¸ë¥¼ ì§€ì •í•œë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ *testdb* ë°ì´í„°ë² ì´ìФì—서 호스트 IP ì •ë³´ë¥¼ *10.34.63.132*\로 ì—…ë°ì´íŠ¸í•˜ëŠ” 예ì´ë‹¤. :: cm_admin changedbinfo -h 10.34.63.132 testcm testdb .. option:: -p, --port NUMBER í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í• 때 사용하는 ë¸Œë¡œì»¤ì˜ í¬íЏ 번호를 ì§€ì •í•œë‹¤. 다ìŒì€ ì´ë¦„ì´ *testcm*\ì¸ CM 사용ìžì˜ *testdb* ë°ì´í„°ë² ì´ìФì—서 브로커 í¬íЏ ì •ë³´ë¥¼ *33000*\로 ì—…ë°ì´íŠ¸í•˜ëŠ” 예ì´ë‹¤. :: cm_admin changedbinfo -p 33000 testcm testdb .. _cubrid-javasp-server: CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 ==================================== CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 êµ¬ë™ --------------------------------------- 다ìŒì€ *demodb* ìš© CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 구ë™í•˜ëŠ” 방법ì´ë‹¤. CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 ì‹œìž‘í•˜ë ¤ë©´ CUBRID ì„¤ì • íŒŒì¼ (**cubrid.conf**)ì˜ **java_stored_procedure** 파ë¼ë¯¸í„°ë¥¼ yes로 ì„¤ì •í•´ì•¼í•œë‹¤. :: % cubrid javasp start demodb @ cubrid javasp start: demodb ++ cubrid javasp start: success CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 ì´ë¯¸ ì‹¤í–‰ì¤‘ì¸ ê²½ìš° 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid javasp start demodb @ cubrid javasp start: demodb ++ cubrid javasp 'demodb' is running. 서버 시작 시 ë°œìƒí• 수 있는 다른 ìœ í˜•ì˜ ì˜¤ë¥˜ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ :ref:`cubrid-javasp-server-errors` 를 ì°¸ê³ í•œë‹¤. CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 종료 ----------------------------------- 다ìŒì€ *demodb* ìš© CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 종료하는 방법ì´ë‹¤. :: % cubrid javasp stop demodb @ cubrid javasp stop: demodb ++ cubrid javasp stop: success CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 ì´ë¯¸ 중지 ëœ ê²½ìš° 다ìŒê³¼ ê°™ì€ ë©”ì‹œì§€ê°€ ì¶œë ¥ëœë‹¤. :: % cubrid javasp stop demodb @ cubrid javasp stop: demodb ++ cubrid javasp 'demodb' is not running. ++ cubrid javasp stop: fail CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 재시작 ------------------------------------- 다ìŒì€ *demodb* ìš© CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 재시작하는 방법ì´ë‹¤. :: % cubrid javasp restart demodb @ cubrid javasp stop: demodb ++ cubrid javasp stop: success @ cubrid javasp start: demodb ++ cubrid javasp start: success CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 ìƒíƒœ í™•ì¸ ---------------------------------------- 다ìŒì€ *demodb* ìš© CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ ìƒíƒœë¥¼ 확ì¸í•˜ëŠ” 예시ì´ë‹¤. ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 현재 실행 ì¤‘ì¸ ëŒ€ìƒ ë°ì´í„°ë² ì´ìŠ¤ì˜ ì´ë¦„, *demodb* ê°€ ì¶œë ¥ëœë‹¤. ë˜í•œ ì„œë²„ì˜ PID, í¬íЏ 번호와 ì ìš©ëœ JVM ì˜µì…˜ì´ í•¨ê»˜ 표시ëœë‹¤. :: % cubrid javasp status demodb @ cubrid javasp status: demodb Java Stored Procedure Server (demodb, pid 9220, port 38408) Java VM arguments : ------------------------------------------------- -Djava.util.logging.config.file=/path/to/CUBRID/java/logging.properties -Xrs ------------------------------------------------- .. _cubrid-javasp-with-server: ë°ì´í„°ë² ì´ìФ 서버 êµ¬ë™ ì‹œ CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 함께 êµ¬ë™ ----------------------------------------------------------------- | **cubrid.conf** 파ì¼ì—서 해당하는 ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•´ **java_stored_procedure** ì„¤ì •ê°’ì´ yesì¸ ê²½ìš° | ë°ì´í„°ë² ì´ìФ 서버 시작 시 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 ì‹œìž‘í•˜ê³ , ë°ì´í„°ë² ì´ìФ 서버 종료 시 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 종료한다. | 다ìŒì€ ë°ì´í„°ë² ì´ìФ 서버 êµ¬ë™ ì‹œ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 함께 시작하는 예시ì´ë‹¤. :: # cubrid.conf ... [@demodb] java_stored_procedure=yes [@testdb] java_stored_procedure=no ... :: -- demodbì— ëŒ€í•´ java_stored_procedure 파ë¼ë¯¸í„°ê°€ yes로 ì„¤ì • % cubrid server start demodb @ cubrid server start: demodb This may take a long time depending on the amount of restore works to do. CUBRID 11.3 Calling java stored procedure is allowed :: -- testdbì— ëŒ€í•´ java_stored_procedure 파ë¼ë¯¸í„°ê°€ no로 ì„¤ì • % cubrid server start testdb @ cubrid server start: testdb This may take a long time depending on the amount of restore works to do. CUBRID 11.3 java_stored_procedure system parameter is not enabled Calling java stored procedure is not allowed .. _cubrid-javasp-server-config: Java ì €ìž¥ 함수/í”„ë¡œì‹œì € 서버 ì„¤ì • ------------------------------------- .. _cubrid-javasp-environment-configuration: Java ì €ìž¥ 함수/í”„ë¡œì‹œì € 환경 ì„¤ì • ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CUBRIDì—서 Java ì €ìž¥ 함수/í”„ë¡œì‹œì €ë¥¼ 사용하기 위해서는 CUBRID 서버가 설치ë˜ëŠ” í™˜ê²½ì— Java Development Kit (JDK) 1.8 64bit ë²„ì „ì´ ì„¤ì¹˜ë˜ì–´ì•¼ 한다. JDK는 다ìŒì˜ 경로ì—서 ë‹¤ìš´ë¡œë“œí• ìˆ˜ 있다. * `OpenJDK 8 <https://openjdk.java.net/projects/jdk8/>`_ * `Oracle JDK 8 <https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html>`_ JDKê°€ ì´ë¯¸ 설치ë˜ì–´ 있다면, 아래와 ê°™ì€ ëª…ë ¹ìœ¼ë¡œ JRE ë²„ì „ì„ í™•ì¸í•œë‹¤. :: % java -version openjdk version "1.8.0_302" OpenJDK Runtime Environment (build 1.8.0_302-b08) OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode) **Windows 환경** CUBRID는 Windows 환경ì—서 **jvm.dll** 파ì¼ì„ 로딩하여 Java ê°€ìƒ ë¨¸ì‹ ì„ ì‹¤í–‰ì‹œí‚¨ë‹¤. CUBRID는 ë¨¼ì € ì‹œìŠ¤í…œì˜ **Path** 환경 변수ì—서 **jvm.dll** ì„ ì°¾ì•„ 로딩한다. 만약 찾지 못하면 시스템 ë ˆì§€ìŠ¤íŠ¸ë¦¬ì— ë“±ë¡ëœ Java 런타임 ì •ë³´ë¥¼ ì´ìš©í•œë‹¤. 아래와 ê°™ì´ ëª…ë ¹ì–´ë¥¼ 실행하여 **JAVA_HOME** 환경 변수를 ì„¤ì •í•˜ê³ Java 실행 파ì¼ì´ 있는 ë””ë ‰í„°ë¦¬ë¥¼ **Path** 환경 ë³€ìˆ˜ì— ì¶”ê°€í• ìˆ˜ 있다. GUI를 ì´ìš©í•´ì„œ 환경 변수를 ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ JDBC 설치 ë° ì„¤ì •ì„ ì°¸ê³ í•œë‹¤. * JDK 1.8 환경 변수를 ì„¤ì •í•œ 예 :: % set JAVA_HOME=C:\jdk1.8.0 % set PATH=%PATH%;%JAVA_HOME%\jre\bin\server SUNì˜ Java ê°€ìƒ ë¨¸ì‹ ì„ ì‚¬ìš©í•˜ì§€ ì•Šê³ ë‹¤ë¥¸ 벤ë”ì˜ êµ¬í˜„ì„ ì‚¬ìš©í•˜ëŠ” 경우를 í¬í•¨í•˜ì—¬ 명시ì 으로 Java ê°€ìƒ ë¨¸ì‹ (JVM)ì˜ ê²½ë¡œë¥¼ ì§€ì •í•˜ë ¤ë©´ **jvm.dll** 파ì¼ì˜ 경로를 **JVM_PATH** 환경 ë³€ìˆ˜ì— ì¶”ê°€í•œë‹¤. CUBRID는 ë¨¼ì € **JVM_PATH** 변수ì—서 **jvm.dll** 파ì¼ì˜ 경로를 찾는다. **JVM_PATH** ê°€ ì„¤ì •ë˜ì§€ 않았거나 파ì¼ì„ ë¡œë“œí• ìˆ˜ 없는 경우 위ì—서 설명한 **JAVA_HOME** 변수ì—서 **jvm.dll** ì„ ì°¾ëŠ”ë‹¤. * **JVM_PATH** 환경 변수를 ì„¤ì •í•œ 예 :: % set JVM_PATH=C:\jdk1.8.0\jre\bin\server\libjvm.dll **Linux/Unix 환경** CUBRID는 Linux/Unix 환경ì—서 **libjvm.so** 파ì¼ì„ 로딩하여 Java ê°€ìƒ ë¨¸ì‹ ì„ ì‹¤í–‰ì‹œí‚¨ë‹¤. CUBRID는 ë¨¼ì € **LD_LIBRARY_PATH** 환경 변수ì—서 **libjvm.so** 파ì¼ì„ 찾아 로딩한다. 만약 찾지 못하면 **JAVA_HOME** 환경 변수를 ì´ìš©í•˜ì—¬ 찾는다. ë¦¬ëˆ…ìŠ¤ì˜ ê²½ìš° glibc 2.3.4 ì´ìƒë§Œ ì§€ì›ë˜ë©°, 아래는 리눅스 환경 ì„¤ì • 파ì¼(예: **.profile**, **.cshrc**, **.bashrc**, **.bash_profile** 등)ì— í™˜ê²½ 변수를 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. * bash ì…¸ì—서 JDK 1.8 환경 변수를 ì„¤ì •í•œ 예 :: % JAVA_HOME=/usr/java/jdk1.8.0 % LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$LD_LIBRARY_PATH % export JAVA_HOME % export LD_LIBRARY_PATH * csh ì…¸ì—서 JDK 1.8 환경 변수를 ì„¤ì •í•œ 예 :: % setenv JAVA_HOME /usr/java/jdk1.8.0 % setenv LD_LIBRARY_PATH $JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$LD_LIBRARY_PATH % set path=($path $JAVA_HOME/bin .) SUNì˜ Java ê°€ìƒ ë¨¸ì‹ ì„ ì‚¬ìš©í•˜ì§€ ì•Šê³ ë‹¤ë¥¸ 벤ë”ì˜ êµ¬í˜„ì„ ì‚¬ìš©í•˜ëŠ” 경우를 í¬í•¨í•˜ì—¬ 명시ì 으로 Java ê°€ìƒ ë¨¸ì‹ (JVM)ì˜ ê²½ë¡œë¥¼ ì§€ì •í•˜ë ¤ë©´ Java VM( **libjvm.so** ) 파ì¼ì˜ 경로를 **JVM_PATH** 환경 ë³€ìˆ˜ì— ì¶”ê°€í•œë‹¤. **libjvm.so** 파ì¼ì˜ 경로는 OS 플랫í¼, ì§€ì› ë¹„íŠ¸ë§ˆë‹¤ 다를 수 있다. 예를 들어 SUN Sparc ë¨¸ì‹ ì—서 **libjvm.so** 파ì¼ì˜ 경로는 **$JAVA_HOME/jre/lib/sparc** ì´ë‹¤. CUBRID는 ë¨¼ì € **JVM_PATH** 변수ì—서 **libjvm.so** 파ì¼ì˜ 경로를 찾는다. **JVM_PATH** ê°€ ì„¤ì •ë˜ì§€ 않았거나 파ì¼ì„ ë¡œë“œí• ìˆ˜ 없는 경우 위ì—서 설명한 **JAVA_HOME** 변수ì—서 **libjvm.so** ì„ ì°¾ëŠ”ë‹¤. * **JVM_PATH** 환경 변수를 ì„¤ì •í•œ 예 :: % JVM_PATH=/usr/java/jdk1.8.0/jre/lib/amd64/server/libjvm.so % export JVM_PATH .. _cubrid-javasp-system-parameter: ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 시스템 파ë¼ë¯¸í„° ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ë‹¤ìŒ í‘œëŠ” ì„¤ì • íŒŒì¼ (**cubrid.conf**)ì—서 ì„¤ì •í• ìˆ˜ 있는 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 ê´€ë ¨ 서버 파ë¼ë¯¸í„°ì´ë‹¤. +-------------------------------------+--------+----------------+--------+--------+ | 파ë¼ë¯¸í„° ì´ë¦„ | 타입 | 기본값 | 최소값 | 최대값 | +-------------------------------------+--------+----------------+--------+--------+ | java_stored_procedure | bool | no | | | +-------------------------------------+--------+----------------+--------+--------+ | java_stored_procedure_port | int | 0 | 0 | 65535 | +-------------------------------------+--------+----------------+--------+--------+ | java_stored_procedure_jvm_options | string | | | | +-------------------------------------+--------+----------------+--------+--------+ ì´ íŒŒë¼ë¯¸í„°ì— 대한 ìžì„¸í•œ 사í•ì€ :ref:`cubrid-conf` 를 ì°¸ê³ í•œë‹¤. .. _cubrid-javasp-server-log: CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 로그 ------------------------------------ CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ ë¡œê·¸ëŠ” 설치 ë””ë ‰í„°ë¦¬ì˜ **log/** ì— ì €ìž¥ëœë‹¤. ê° ë°ì´í„°ë² ì´ìФ 별로 다ìŒê³¼ ê°™ì€ ë¡œê·¸ 파ì¼ì´ ìƒì„±ëœë‹¤. * ì—러 로그 ($CUBRID/log/[db_name]_java.err) * ìžë°” 로그 ($CUBRID/log/[db_name]_java.log) ì—러 로그 ^^^^^^^^^ ê° ë°ì´í„°ë² ì´ìФ 별 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ ì—러 로그는 **$CUBRID/log** ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë˜ë©°, íŒŒì¼ ì´ë¦„ì€ **<db_name>_java.err** 형ì‹ìœ¼ë¡œ ì €ìž¥ëœë‹¤. 확장ìžëŠ” **.err** ì´ë‹¤. :: demodb_java.err ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 시작하는 ë™ì•ˆ ì—러가 ë°œìƒí•˜ë©´ ì—러 메시지가 ì—러 로그 파ì¼ì— ì €ìž¥ëœë‹¤. :: Time: 11/11/20 18:17:15.438 - ERROR *** file ../../src/jsp/jsp_sr.c, line 501 ERROR CODE = -900, Tran = -1, EID = 1 Java ê°€ìƒ ë¨¸ì‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì°¾ì„ ìˆ˜ 없습니다: Failed to get 'JVM_PATH' environment variable. Failed to load libjvm from 'JAVA_HOME' environment variable: /jre/lib/amd64/server/libjvm.so: cannot open shared object file: No such file or directory /lib/server/libjvm.so: cannot open shared object file: No such file or directory. .. note:: For more details on what errors can be occured, see :ref:`cubrid-javasp-server-errors`. ìžë°” 로그 ^^^^^^^^^ ê° ë°ì´í„°ë² ì´ìФ 별 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ ìžë°” 로그는 **$CUBRID/log** ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë˜ë©°, íŒŒì¼ ì´ë¦„ì€ **<db_name>_java.log** 형ì‹ìœ¼ë¡œ ì €ìž¥ëœë‹¤. 확장ìžëŠ” **.log** ì´ë‹¤. :: demodb_java.log JVMì—서 Java ì €ìž¥ 프로 ì‹œì €/함수를 수행하는 ë™ì•ˆ 예외가 ë°œìƒí•˜ë©´ 예외 문ìžì—´ì´ Java ë¡œê·¸ì— ì €ìž¥ëœë‹¤. :: SEVERE: java.lang.NullPointerException at Test.testFunction(Test.java:50) ... at com.cubrid.jsp.StoredProcedure.invoke(StoredProcedure.java:263) at com.cubrid.jsp.ExecuteThread.run(ExecuteThread.java:197) .. _cubrid-javasp-server-errors: CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì—러 ------------------------------- 다ìŒì€ CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버 시작 시 ë°œìƒí• 수 있는 ì—ëŸ¬ì— ëŒ€í•œ ì—러 메시지ì´ë‹¤. ì—러 메시지는 **$CUBRID/log**/\ *<db_name>_java*\ **.err** ì— ì €ìž¥ëœë‹¤. +-------+--------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ | ì—러 | ì—러 메시지 | 설명 | ì¡°ì¹˜ì‚¬í• | | 코드 | | | | +=======+==================================================+=====================================================+===================================================================================+ | -900 | Java ê°€ìƒ ë¨¸ì‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì°¾ì„ ìˆ˜ 없습니다: ? | CUBRID ê°€ JAVA_HOME ë˜ëŠ” JVM_PATH 환경 변수ì—서 | JAVA_HOME ë˜ëŠ” JVM_PATH 변수가 올바르게 ì„¤ì • ë˜ì—ˆëŠ”ì§€ 확ì¸í•œë‹¤. | | | | JVM ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì°¾ì„ ìˆ˜ ì—†ìŒ | :ref:`cubrid-javasp-environment-configuration` 를 ì°¸ê³ í•œë‹¤. | +-------+--------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ | -901 | Java ê°€ìƒ ë¨¸ì‹ ì„ ì‹œìž‘í• ìˆ˜ 없습니다: ? | JVM ë¼ì´ë¸ŒëŸ¬ë¦¬ ë‚´ì—서 예ìƒì¹˜ 못한 ì—러가 ë°œìƒ | JRE 재설치를 시ë„í•´ë³´ê³ ë§Œì•½ ë™ì¼í•œ ì—러가 ë°œìƒí•˜ë©´ | | | | JVM ë¼ì´ë¸ŒëŸ¬ë¦¬ ë˜ëŠ” $CUBRID/java/jspserver.jar ì—서 | 다른 ë²„ì „ì˜ JRE를 설치를 시ë„한다. | | | | ë¬¸ì œê°€ ë°œìƒí• 가능성 ìžˆìŒ | ê·¸ë¦¬ê³ $CUBRID/java/jspserver.jar 파ì¼ì„ ë™ì¼í•œ CUBRID ë²„ì „ì˜ ê²ƒìœ¼ë¡œ êµì²´í•œë‹¤. | +-------+--------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ 다ìŒì€ CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 시작ë˜ì§€ ì•Šì€ ê²½ìš°ë¥¼ í¬í•¨í•˜ì—¬ ì—°ê²°ì— ë¬¸ì œê°€ ìžˆì„ ë•Œ ë°œìƒí• 수 있는 ì—ëŸ¬ì— ëŒ€í•œ ì—러 메시지ì´ë‹¤. ì—러 메시지는 **$CUBRID/log/broker/error_log**/\ *<broker_name>_<app_server_num>*\ **.err** ì— ì €ìž¥ëœë‹¤. +-------+---------------------------------------------------+----------------------------------------------------------+------------------------------------------------------------------------------------------------------+ | ì—러 | ì—러 메시지 | 설명 | ì¡°ì¹˜ì‚¬í• | | 코드 | | | | +=======+===================================================+==========================================================+======================================================================================================+ | -902 | Java ê°€ìƒ ë¨¸ì‹ ì´ ì‹¤í–‰ë˜ì§€ 않았습니다. | ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 시작ë˜ì§€ ì•ŠìŒ | **cubrid javasp start <db_name>** ëª…ë ¹ì–´ë¡œ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 시작한다. | | | | | ìžì„¸í•œ ì„¤ëª…ì€ :ref:`cubrid-javasp-server` 를 ì°¸ê³ í•œë‹¤. | +-------+---------------------------------------------------+----------------------------------------------------------+------------------------------------------------------------------------------------------------------+ | -903 | Java ê°€ìƒ ë¨¸ì‹ ì— ì ‘ì†í• 수 없습니다: ? | ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 CAS로부터 ì—°ê²°í• ìˆ˜ ì—†ìŒ | ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 재시작한다. 만약 ìž¬ì‹œìž‘ì„ ì‹¤íŒ¨í•˜ë©´ | | | | ì´ ì—러는 여러가지 ì´ìœ 로 ë°œìƒí• 수 있다. | **cub_javasp <db_name>** 프로세스를 리눅스 **kill** ëª…ë ¹ì–´ë¡œ ê°•ì œë¡œ 종료 한다. | | | | 예를 들어 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버가 ë¶ˆì•ˆì •í•˜ê±°ë‚˜ | ê·¸ë¦¬ê³ ë‹¤ì‹œ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 재시작한다. | | | | CASì—서 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì— ì—°ê²°í• ìˆ˜ 없는 경우, | | | | | ë˜ëŠ” ìžë°” ì €ìž¥ í”„ë¡œì‹œì €ê°€ 예기치 않게 종료(kill) ëœ ê²½ìš° | **cubrid javasp status <db_name>** ëª…ë ¹ì–´ë¥¼ 통해 ìžë°” ì €ìž¥ í”„ë¡œì‹œì € ì„œë²„ì˜ í¬íŠ¸ë¡œ | | | | ì´ëŸ¬í•œ ì—러 메시지를 ì¶œë ¥í•œë‹¤. | CAS ì—서 ì ‘ê·¼ 가능한지 확ì¸í•œë‹¤. | | | | | ë°©í™”ë²½ì— ì˜í•´ 해당 í¬íŠ¸ê°€ ë§‰í˜€ìžˆì„ ìˆ˜ 있으므로 방화벽ì—서 í¬íŠ¸ë¥¼ 열어준다. | | | | | 필요한 경우 **java_stored_procedure_port** 파ë¼ë¯¸í„°ë¥¼ ì„¤ì •í•˜ê³ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버를 재시작한다. | | | | | ìžì„¸í•œ 사í•ì€ :ref:`connect-to-cubrid-server` 를 ì°¸ê³ í•œë‹¤. | +-------+---------------------------------------------------+----------------------------------------------------------+------------------------------------------------------------------------------------------------------+ | -905 | Java ê°€ìƒ ë¨¸ì‹ ê³¼ í†µì‹ ì¤‘ 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤: ? | CAS ê°€ ìžë°” ì €ìž¥ í”„ë¡œì‹œì € 서버로부터 ìž˜ëª»ëœ íŒ¨í‚·ì„ ë°›ìŒ | | +-------+---------------------------------------------------+----------------------------------------------------------+------------------------------------------------------------------------------------------------------+