'DB'에 해당되는 글 48건

  1. 2013.08.19 오라클 MERGE INTO - 한번에 INSERT, UPDATE 하기 5
  2. 2013.08.14 ORA-01403
  3. 2013.07.25 ORA-00911: 문자가 부적합합니다.
  4. 2013.01.08 mssql 천단위 콤마 처리
  5. 2012.12.11 MSSQL 문자열 구분자 분리 (테이블 반환 함수)
  6. 2012.12.11 MSSQL PROC ARRAY
  7. 2012.12.11 MSSQL 날짜관련 함수
  8. 2012.11.13 iBATIS 강좌 <1> Complex Type Property 사용하기
  9. 2011.09.09 TP-Monitor
  10. 2011.04.22 MySQL 프로세스 리스트 보기

오라클 MERGE INTO - 한번에 INSERT, UPDATE 하기

DB/ORACLE 2013. 8. 19. 18:28
DB 테이블을 다룰 때, 특정 조건의 데이터가 존재하는 경우에는 해당 row를 원하는 값으로 update하고, 없는 경우에는 새로운 데이터를 insert를 해야하는 경우가 왕왕 있습니다. 이럴 때 보통은 select 쿼리를 먼저해보고 데이터가 있는지 없는지 판단을 해서 update를 할 지 insert를 할 지 분기해서 처리했었는데요. oracle에서 MERGE INTO라는 구문을 쓰면 하나의 쿼리로 두가지 경우에 모두 대처할 수 있습니다. 

아래와 같이 쓰면 됩니다. table을 지정했기 때문에 MATCHED, NOT MATCHED 이하에 update문과 insert문에 table_name은 생략됩니다.

MERGE INTO table_name alias
            USING (table | view | subqueryalias                -- 하나의 테이블만 이용한다면 DUAL 활용
                 ON (join condition)                                     -- WHERE절에 조건 쓰듯이
            WHEN MATCHED THEN                                   -- ON 이하의 조건에 해당하는 데이터가 있는 경우 
                     UPDATE SET col1 = val1[, ...]                -- UPDATE 실행
            WHEN NOT MATCHED THEN                           -- ON 이하의 조건에 해당하는 데이터가 없는 경우
                     INSERT (column lists) VALUES (values);  -- INSERT 실행

예 1) 
MERGE INTO copy_emp c
            USING employees e
            ON (c.employee_id = 200911)
            WHEN MATCHED THEN
                      UPDATE SET
                            c.first_name = e.first_name,
                            c.last_name = e.last_name,
                            c.email = e.email,
                            ......
            WHEN NOT MATCHED THEN
                      INSERT (c.employee_id, c.first_name, c.last_name, ...... ) 
                                 VALUES (e.employee_id, e.first_name, e.last_name, ...... );

예 2) 테이블을 하나만 쓸 경우
MERGE INTO emp
            USING DUAL
            ON (employee_id = 200911)
            WHEN MATCHED THEN
                      UPDATE SET
                            first_name = 'John',
                            last_name = 'Petrucci',
                            email = 'dream@johnpetrucci.com',
                            ......
            WHEN NOT MATCHED THEN
                      INSERT (first_name, last_name, email, ...... ) 
                                 VALUES ('John', 'Petrucci', 'dream@johnpetrucci.com', ...... );

Oracle 10g 이후에는 WHEN MATCHED, WHEN NOT MATCHED 이하의 update, insert 구문에도 where절을 쓸 수 있습니다. 


:

ORA-01403

DB/ORACLE 2013. 8. 14. 14:18

프로시져 작성시 SELECT INTO 에서 조회된 쿼리의 ROW가 존재하지 않을때 ORA-01403 에러발생 대치


1. 에러를 잡는 방법 : 서브블럭을 이용한 Exception 처리 
BEGIN 

BEGIN 
SELECT id INTO vMemid FROM a.t_members WHERE perid = :new.perid; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
Null; 
END; 

END; 


2, 에러를 피하는 방법 : 그룹함수를 이용한 무조건 1행 반환) 
BEGIN 
SELECT MAX(id) INTO vMemid FROM a.t_members WHERE perid = :new.perid; 
END;

:

ORA-00911: 문자가 부적합합니다.

DB/ORACLE 2013. 7. 25. 15:29

"ORA-00911: 문자가 부적합합니다."

sqlmap.xml에 들어가는 쿼리 마지막에 

" ; " 세미콜론을 빼야한다.

" ; " 세미콜론을 빼야하는데 고걸 지우지않고 그대로 옮겨넣어서 비롯된 실수.

[출처] ORA-00911: 문자가 부적합합니다.|작성자 wenaon


:

mssql 천단위 콤마 처리

DB 2013. 1. 8. 16:58

--금액에 천원단위로 콤마를 넣어줄때 

REPLACE(CONVERT(VARCHAR, CAST(A.REPAIR_CT AS MONEY),1),'.00','')

'DB' 카테고리의 다른 글

다차원 모델링(1/2)  (0) 2016.11.05
DW, DM, OLAP의 이해  (2) 2016.11.05
MSSQL 날짜관련 함수  (0) 2012.12.11
iBATIS 강좌 <1> Complex Type Property 사용하기  (0) 2012.11.13
TP-Monitor  (0) 2011.09.09
:

MSSQL 문자열 구분자 분리 (테이블 반환 함수)

DB/MySQL 2012. 12. 11. 18:02


ALTER FUNCTION [dbo].[fn_Split]
(
    @pSource    VARCHAR(MAX),
    @pSeparator VARCHAR(1)
)
RETURNS @TAB_RETURN TABLE
(
    ItemIndex   INT,
    ItemValue   VARCHAR(1000)
)
AS
BEGIN
    DECLARE @buffer VARCHAR(MAX);
    DECLARE @item   VARCHAR(MAX);
     
    DECLARE @tmp   INT;
    DECLARE @index INT;
    SET @index = 1;
   
    WHILE LEN(@pSource) > 0
    BEGIN
        SET @tmp = CHARINDEX(@pSeparator, @pSource);
         
        IF @tmp > 0
        BEGIN
            SET @item    = SUBSTRING(@pSource, 1, @tmp - 1);
            SET @pSource = RIGHT(@pSource, LEN(@pSource) - @tmp);
            INSERT INTO @TAB_RETURN VALUES(@index, @item);
             
            SET @index = @index + 1;
        END ELSE
        BEGIN
            INSERT INTO @TAB_RETURN VALUES(@index, @pSource);
             
            BREAK;
        END;
    END;
      
    RETURN
END

출처 - http://marsland.tistory.com/236

'DB > MySQL' 카테고리의 다른 글

스케일 아웃 측면에서 살펴본 MySQL의 특성  (0) 2016.08.04
MySQL root 패스워드 분실  (0) 2015.05.21
MSSQL PROC ARRAY  (0) 2012.12.11
MySQL 프로세스 리스트 보기  (0) 2011.04.22
mysql_insert_id  (0) 2010.10.27
:

MSSQL PROC ARRAY

DB/MySQL 2012. 12. 11. 18:01

MSSQL 에서는 배열을 처리할 수 없습니다.
따라서 다음과 같은 방식으로 우회하여 처리하는 방법이 있습니다.
client 에서 comma 로 구분된 자료를 Stored Procedure 로 보내면
이 SP 에서는 콤마로 구분된 자료들을 하나씩 분리하여 원하는
기능에 넣어 사용하게 되는 방법입니다.  참조되시길...


CREATE PROCEDURE pro_array @DATA VARCHAR(1000)
AS
BEGIN

  /*

   - 최대 1000 자리수의 값을 받습니다. 이 길이는 조정 가능
   - 콤마로 구분된 PK항목값 들을 UPDATE 구분에서 활용하는 예제입니다.
  */

WHILE CHARINDEX(',',@DATA)<>0
  BEGIN
        
    UPDATE 테이블명 SET 항목명 = '선택' WHERE PK항목명 = SUBSTRING(@DATA,1,CHARINDEX(',',@DATA)-1)

        SET @DATA=SUBSTRING(@DATA,CHARINDEX(',',@DATA)+1,LEN(@DATA))                

        IF CHARINDEX(',',@DATA)=0
           BEGIN
                   UPDATE 테이블명 SET 항목명 = '선택' WHERE PK항목명 = SUBSTRING(@DATA,1,LEN(@DATA))
           END
  
  END
  
END


--> 사용법 :  EXEC pro_array  '1001,1004,1102,1999,9999'


출처 - http://blog.naver.com/PostView.nhn?blogId=idtong&logNo=130071540216&redirect=Dlog&widgetTypeCall=true

:

MSSQL 날짜관련 함수

DB 2012. 12. 11. 14:39

날짜 관련 함수입니다.
  
          
  2.1.1 GETDATE() 함수 

          시스템의 날짜를 리턴합니다. 
          
        SELECT GETDATE()
        2002-05-24 오전 10:51:05

        SELECT GETDATE()+100
        2002-09-01 오전 10:51:05



  2.1.2 CONVERT() 함수 
  
          결과값의 데이타 타입을 변환시킵니다.
          
        SELECT CONVERT(varchar(30), GETDATE(),100)
        May 24 2002 10:51AM

        SELECT CONVERT(varchar(30), GETDATE(),101)
        05/24/2002

        SELECT CONVERT(varchar(30), GETDATE(),102)
        2002.05.24

        SELECT CONVERT(varchar(30), GETDATE(),103)
        24/05/2002

        SELECT CONVERT(varchar(30), GETDATE(),104)
        24.05.2002

        SELECT CONVERT(varchar(30), GETDATE(),105)
        24-05-2002

        SELECT CONVERT(varchar(30), GETDATE(),106)
        24 May 2002

        SELECT CONVERT(varchar(30), GETDATE(),107)
        May 24, 2002

        SELECT CONVERT(varchar(30), GETDATE(),108)
        10:51:05

        SELECT CONVERT(varchar(30), GETDATE(),109)
        May 24 2002 10:51:05:140AM

        SELECT CONVERT(varchar(30), GETDATE(),110)
        05-24-2002

        SELECT CONVERT(varchar(30), GETDATE(),111)
        2002/05/24

        SELECT CONVERT(varchar(30), GETDATE(),112)
        20020524

        SELECT CONVERT(varchar(30), GETDATE(),113)
        24 May 2002 10:51:05:160

        SELECT CONVERT(varchar(30), GETDATE(),114)
        10:51:05:160



  2.1.3 DATEPART() 함수 

        날짜에서 지정한 날자형식부분만 추출해줍니다        
        형식: DATEPART(날짜형식, 날짜)
        
        SELECT DATEPART(yy, GETDATE())
        2002

        SELECT DATEPART(mm, GETDATE())
        5

        SELECT DATEPART(dd, GETDATE())
        24

        SELECT DATEPART(hour, GETDATE())
        10

        SELECT DATEPART(mi, GETDATE())
        51

        SELECT DATEPART(ss, GETDATE())
        5

        SELECT DATEPART(dw, GETDATE())
        6


        년/월/일/시/분/초/요일을 숫자로  보여준 예제입니다. 

  2.1.4 YEAR() , MONTH() , DAY() 함수         
          
          해당 년,월,일을 각각 뽑아줍니다. 
          형식: YEAR(날짜) , MONTH(날짜) , DAY(날짜)

        SELECT YEAR(GETDATE())
        2002

        SELECT MONTH(GETDATE())
        5

        SELECT DAY(GETDATE())
        24



  2.1.5 DATEADD() 함수         
  
          
          DATEADD함수는 날짜에 지정한 만큼을 더합니다.
        형식: DATEADD(날짜형식, 더할 값, 날짜)


        SELECT DATEADD(mm,20,GETDATE())
        2004-01-24 오전 10:51:05


        현재날짜에 월에 20을 더한 날짜를 출력하라.
         
        SELECT DATEADD(dd,100,GETDATE())
        2002-09-01 오전 10:51:05


        오늘부터 100일 후의 날짜를 출력하라.
        
  2.1.6 DATEDIFF() 함수         
  
        DATEDIFF함수는 두 날짜사이의 날짜형식에 지정된 부분을 돌려줍니다.
        형식: DATEDIFF(날짜형식, 시작 날자, 끝 날짜)


        SELECT DATEDIFF(dd,GETDATE(),'3000.1.1')
        364369


        현재날짜와 3000.1.1일 사이의 일수는 얼마일까.??
        
        SELECT DATEDIFF(MM,GETDATE(),'2003.1.1')
        8


        현재날짜와 2003.1.1일 사이의 월수는 얼마일까.??

  2.1.7 DATENAME() 함수         
  
        DATENAME함수는 지정한 날짜의 날자형식의 이름을 돌려줍니다.
        형식: DATENAME(날짜형식, 날짜)    

        SELECT DATENAME(mm,GETDATE())
        May

        SELECT DATENAME(dd,GETDATE())
        24

        SELECT DATENAME(dw,GETDATE())
        Friday


출처 - http://blog.naver.com/mf99/20025909059

[출처] MSSQL 날짜 처리 기법|작성자 


'DB' 카테고리의 다른 글

DW, DM, OLAP의 이해  (2) 2016.11.05
mssql 천단위 콤마 처리  (0) 2013.01.08
iBATIS 강좌 <1> Complex Type Property 사용하기  (0) 2012.11.13
TP-Monitor  (0) 2011.09.09
mysql 한글 메뉴얼 (최적화)  (0) 2010.12.05
:

iBATIS 강좌 <1> Complex Type Property 사용하기

DB 2012. 11. 13. 16:42

 

본 글은 Java 개발과 iBatis에 대한 기본적인 이해를 갖추고 있는 개발자를 위한 연재글입니다.
iBatis는 객체지향 개발을 쉽게 할 수 있도록 도와주고 다양한 유용한 기능을 갖추고 있 때문에, 알아두면 업무에 유용하게 쓰일 수 있을 것입니다. 
일반적으로 많이 사용 되고 있는 iBATIS의 기능을 예제를 통해 설명한 본 글을 통해 많은 개발자분들이 도움을 받으실 수 있었으면 합니다.



<1회> Complex Type Property 사용하기

<2회> Discriminator  이용하여 상속 구현하기


 

‘iBATIS’는 국내 java 개발에서 가장 많이 사용되고 있는 database 연동 framework이다. 

iBATIS는 훌륭한 SQL mapper로서 query를 코드와 분리하여 쉽게 사용하고 관리할 수 있도록 해준다. 하지만 전반적인 Java의 database 연동 기술이 ORM(Object-Relational Mapping) 기술을 기반으로, 표준 스펙인 JPA(Java Persistence API)를 중심으로 발전하고 있고, 해외에서는 이를 더 많이 사용하고 있는 것과 비교할 때, 국내 상황은 좀 차이가 있다. 

이는 마치 국내 웹에서 ‘ActiveX’가 특별히 많이 사용되고 있는 것과 비슷하다 할 수 있는데, 국내에서 특별히 iBATIS가 많이 사용되는 데에는 아래와 같은 이유가 있을 수 있다.


- 국내에서 SI개발은 객체지향 설계보다는 여전히 database table 설계 및 query가 중심이 되고 있고, 
  iBATIS는 이러한 설계/개발에 적합하다.
- 객체지향 설계보다는 query에 더 익숙한 개발자들에게 iBATIS는 ORM기술에 비해
   learning curve 가 짧고 쉽게 사용할 수 있다.
- Query를 직접 작성하지 않는 ORM 기술에 비해 성능에 대한 ‘염려’를 줄여준다. 
  (ORM기술이 꼭 성능이 떨어진다는 얘기가 아니다.)

 

 

 
사실 위의 내용들을 ‘단점’이라고 할 수 없고, iBATIS가 나쁘다고 할 수도 없다. 단지, database와query를 위주로 개발하면서 ‘객체지향’ 개발에서 멀어지는 것이 문제이다.

여기서는 일반적으로 많이 사용되고 있는 dynamic query 기능 외에 iBATIS를 좀 더 객체지향 적으로 사용할 수 있도록 해주는 iBATIS의 두 가지 기능을, 예제를 통해서 살펴보려고 한다.

한가지는 ‘complex type property에 대한 지원’(사용자가 정의한 class 를 property로 가지고 있는 경우), 
그리고 다른 하나는 discriminator를 이용한 ‘상속 class처리’에 대한 지원이다.

흔히 많이 사용하는 ‘고객-주문-주문item-상품’ 관계를 예를 들어보자.
간략하게 database table 은 아래와 같이 구성될 수 있을 것이다.
 


이러한 구조를 자바 class로 구현할 때, 아래와 같이 table 의 구조를 그대로 옮겨놓는 식으로 개발을 할 수 있을 것이다. 

     


이번에는 객체지향 설계 관점으로 접근해보자. 객체지향 시스템은 수많은 객체들간의 관계로 이루어진 하나의 네트웍이라고 할 수 있고 하나의 객체를 통해서 관련된 다른 객체의 정보들을 얻을 수 있다. (도메인 주도 개발방식에서는 이처럼 거대한 객체들의 관계 사이에서 접근을 시작하는 객체를 ‘Entry Point’ 라고 부른다.) 



여기서는 Order를 Entry Point로 삼도록 하겠다. 즉, Order 객체에 얻게 되면 그와 관련된 Customer 객체, Order Item 객체들 그리고 Order Item 객체가 관계를 맺고 있는 Product 객체의 모든 정보들을 가져올 수 있게 된다는 얘기이다. 이를 Class Diagram 으로 표현하면 아래와 같을 것이다.

 


관련 코드는 아래와 같이 달라진다.
  


과연 이러한 변화가 Business 코드에 어떤 영향을 미칠까?
한번 어떤 고객의 전체 주문 액을 구하는 기능을 살펴보자. 처음과 같이 테이블 구조에만 맞춘 클래스의 경우는 아래와 같이 구현이 될 것이다.

Dao 수행 3회


 
그럼 이번엔 아래 객체지향 시스템에서처럼 Entry Point 를 통해 모든 정보를 얻을 수 있는 경우를 보자.
 

Dao 수행 한 번으로 간소화 됨


두 번째 코드는 DAO 접근이 한번으로 줄어들면서 코드가 훨씬 간결해 졌다.

iBATIS에는 두번째와 같은 방식의 개발을 지원해주는 기능이 있는데 이는 사용자의 Class로 된 property에 대한 지원이다. 이는 

 Result map 안에서의 select 문 사용하여 다른 query를 실행하여 결과를 얻는 방법
Join을 사용하여 한번에 결과를 얻는 방법 


을 통해서 가능하다.

먼저 Result map 안에서 select 문을 사용하는 경우 iBATIS sql map 은 아래와 같을 수 있다. 
 




위에서 보면 Order 를 조회하게 되면 해당 Order와 관련된 Customer 그리고 OrderItem collection도 함께 조회하여 결과값을 return 되게 된다.

이번에는 Join 을 사용하고 iBATIS를 통해 정리된 결과 값을 받는 sqlmap이다.
 

 


여기서 살펴볼 것은, ‘orderItems’ property 와 같이 collection 의 경우는 “groupBy” 옵션을 통해 iBATIS가 알아서 collection 객체를 구성해주게 된다. 즉, customerId 에 의해 조회되는 Order가 여러 건이 될 수 있고, 또 각각의 Order 가 여러 개의 OrderItem을 가지게 될텐데, iBATIS는 ‘ORDER_ID’를 기준으로 OrderItem들은 grouping 하여 Order list 구성한 후 return 하게 된다

두 번째 방식의 경우 쿼리가 한번만 실행되므로 어떤 면에서는 성능 향상을 가져올 수 있다. 하지만 첫 번째 방식이 무조건 성능이 안 좋다고 할 수 없는데, 이는 ‘Lazy loading’ 이라는 기능이 있기 때문이다. 

이는 iBATIS에 기본적으로 적용되어 있는 기능인데, 첫 번째 경우와 같이 result map 을 통해서 다른 query를 수행하는 경우에, 실제로 처음부터 모든 query가 다 실행되는 것이 아니라, 해당 property에 접근하는 순간에 그 query가 수행되는 것이다.
 
즉, Order 를 조회했어도, 만일 customer property에 접근을 하지 않는다면 실제로 Customer 조회 query는 실행되지 않는다.

이와 같이 iBATIS는 비록 ORM은 아니지만, ORM이 제공하는 기능들을 여러 가지 방식으로 지원하므로써 객체지향 개발을 쉽게 할 수 있도록 도와준다.

다음 번에는 객체지향 개발에서 많이 사용하게 되는 ‘상속’을 iBATIS로 어떻게 적용할 수 있는지 살펴보겠다.



* 첨부한 eclipse project는 spring과 maven기반으로 되어 있습니다. Enterprise 버전 eclipse에m2eclipse plugin이 설치하여 직접 테스트해 볼 수 있습니다.




출처 - http://blog.skcc.com/90

'DB' 카테고리의 다른 글

mssql 천단위 콤마 처리  (0) 2013.01.08
MSSQL 날짜관련 함수  (0) 2012.12.11
TP-Monitor  (0) 2011.09.09
mysql 한글 메뉴얼 (최적화)  (0) 2010.12.05
인덱스 튜닝  (0) 2010.12.05
:

TP-Monitor

DB 2011. 9. 9. 13:51

중앙 집중식 메인프레임(Mainframe) 환경이 운영과 비용 등에서 여러 가지 문제가 나타나면서 업무별로 호스트를 분리하는 즉, 개방형 분산 시스템 환경으로 바꾸는 다운사이징(DOWNSIZING) 방법론이 도입되기 시작했다.

그러나 개방형 분산환경은 메인프레임에서 사용하던 업무를 여러 서버로 분산하여 관리하면서 서로 다른 운영체제 간의 통신이나 각 서버 프로그램 간의 연계, 호환성의 문제가 발생하게 되었다. 이러한 이유로 서로 다른 시스템이나 서버 프로그램, 네트워크 자원을 하나의 단일 사용자 환경으로 사용하고자 하는 요구가 생겼다.

다음은 중앙 집중식 메인프레임 환경과 개방형 분산 시스템 환경의 문제점에 대해서 설명한 표이다.

  • 중앙 집중식 메인프레임 환경의 문제점

    구분문제점
    비용적 측면

    - 고가의 도입 비용

    - 유지보수 비용 과다 지출

    운영적 측면 - 업무 프로세스보다는 메인프레임 환경이 최우선시 되므로 사용자 환경이 고려되지 않음
    시스템 측면

    - 이기종 간 통신의 어려움

    - 다른 시스템으로 프로그램 이식 곤란

    - 업무 확장의 어려움

  • 개방형 분산 시스템 환경의 문제점

    구분문제점
    비용적 측면 - 네트워크, DBMS 등 전문 기술 요구
    운영적 측면

    - 비효율적인 시스템 운영상의 문제

    - 사용자 환경이 고려되지 않음

    - 분산 환경에 따른 관리 문제

    - 시스템의 관리 및 감독의 어려움

    - 장애가 발생하는 경우 대처 어려움

    - 다른 서버 간 운영 방법 상이

    - 복수 공급자에 따른 문제

    - 사용자 증가에 따른 급격한 성능 저하

    - 서버 간 부하 차이

    시스템 측면

    - 프로세스 관리

    - 다양한 통신 방식 필요

    - 시스템 보안 기능 취약

    - 이기종 데이터베이스 및 전역 트랜잭션 처리의 어려움

    - 이기종 서버 간 프로그램 이식성 문제

    - 개발상의 문제(OS, 개발 언어 등이 너무 다양)

    - 미들웨어 한 종류로 이질적인 분산 환경에서 트랜잭션 처리 및 프로세스 관리의 기능을 제공

이러한 개방형 분산환경의 문제점을 해결하기 위해서 개발된 소프트웨어가 미들웨어이다.

미들웨어는 분산 컴퓨팅 환경에서 단일 사용자 환경을 제공하고 이기종 간 시스템의 네트워크를 연결하거나 클라이언트와 서버 간의 통신을 담당하거나 또는 컴퓨터와 컴퓨터의 연결을 담당하는 시스템 소프트웨어이다. 미들웨어는 이기종의 하드웨어나 프로토콜, 통신 환경 등을 하나로 연결해서 애플리케이션이나 운영 환경 사이에 원만한 통신이 가능하도록 해준다.

클라이언트와 데이터베이스 서버는 직접 통신을 하지 않고 미들웨어가 두 시스템 간의 통신을 연계한다. 미들웨어에는 업무에 필요한 비즈니스 로직을 가지고 있어서 클라이언트는 미들웨어와의 통신만 고려하고 서버 프로그램도 미들웨어와 통신만 고려하면 된다. 미들웨어를 통해서 클라이언트와 데이터베이스 서버는 하나의 단일 시스템 환경으로 구축이 가능해진다. 이기종 머신에서 사용하는 다수의 데이터베이스 환경에서도 시스템 통합을 보장할 수 있고 데이터의 호환성 및 일관성을 보장할 수 있다. 이러한 환경은 최소의 리소스로 최대의 성능을 제공할 수 있다.

다음은 미들웨어를 사용하여 클라이언트/서버 환경을 구축한 시스템 구성도이다.


미들웨어 제품은 각 제품의 용도와 목적에 따라 다음의 6가지로 나누어진다.

초기에 대부분의 업무 시스템은 메인프레임 기반의 중앙 집중식 환경으로 구성되어 있었다. 중앙 집중식 환경은 비용이나 관리상의 여러 가지 단점을 나타내기 시작했다. 이러한 중앙 집중식 환경의 문제점을 보완하기 위해 대두된 것이 개방형 분산 시스템이다. 그러나 개방형 분산 시스템 또한 시스템 운영이나 관리상에 또 다른 문제가 나타났다. 이러한 문제점을 해결하기 위해서 도입된 소프트웨어가 미들웨어이다. 미들웨어 중에 TP-Monitor는 프로토콜에서 동작하는 세션과 시스템 및 데이터베이스 사이의 최소 처리 단위인 트랜잭션을 감시하여 일관성있게 보관 및 유지하는 역할을 하는 트랜잭션 관리 미들웨어이다.

다음은 TP-Monitor의 주요 기능이다.

'DB' 카테고리의 다른 글

mssql 천단위 콤마 처리  (0) 2013.01.08
MSSQL 날짜관련 함수  (0) 2012.12.11
iBATIS 강좌 <1> Complex Type Property 사용하기  (0) 2012.11.13
mysql 한글 메뉴얼 (최적화)  (0) 2010.12.05
인덱스 튜닝  (0) 2010.12.05
:

MySQL 프로세스 리스트 보기

DB/MySQL 2011. 4. 22. 10:51

[출처] http://breakpoint.tistory.com/127

 

MySQL 프로세스 리스트 보기에는 다음의 두가지 방법을 사용

[aokio]$ mysqladmin processlist


mysql> show processlist;
+---------+------+-----------+-------+---------+------+-------+------------------+
| Id      | User | Host      | db    | Command | Time | State | Info             |
+---------+------+-----------+-------+---------+------+-------+------------------+
| 1602724 | root | localhost | test  | Sleep   | 70   |       | NULL             |
| 1603286 | root | localhost | NULL  | Query   | 0    | NULL  | show processlist |
+---------+------+-----------+-------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

프로세스 죽이기.
해당 아이디 번호를 가지고 킬하면 프로세스를 종료시킬 수 있다.

mysql> kill 1602724;
Query OK, 0 rows affected (0.00 sec)


mysql> show processlist;
+---------+------+-----------+-------+---------+------+-------+------------------+
| Id      | User | Host      | db    | Command | Time | State | Info             |
+---------+------+-----------+-------+---------+------+-------+------------------+
| 1603286 | root | localhost | NULL  | Query   | 0    | NULL  | show processlist |
+---------+------+-----------+-------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

Id    : 프로세스 아이디 MySQL 이 관리하는 스레드 번호。
User  : 스레드에 접속하고 있는 MySQL 유저명
Host  : 유저가 접속하고 있는 호스트명 , IP 어드레스
Command : 스레드의 현재 커맨드 상태 . 
Time  : 프로세스가 현재 커맨드상태에서 동작 시간
State : 스레드의 상태에 대해 사람이 읽을 수 있는 형태의 정보
Info  : 현 실행되고 있는 SQL .
        "SHOW PROCESSLIST" 최대 100자까지 표시
        전부 표시하려면 "SHOW FULL PROCESSLIST"
: