'(DB) MS SQL'에 해당되는 글 53건

  1. 2017.01.27 MS SQL.Trigger - 예제2
  2. 2017.01.27 MS SQL.Trigger - 예제1
  3. 2017.01.27 MS SQL.Trigger - 종류
  4. 2017.01.27 MS SQL.Trigger - 특징
  5. 2017.01.27 MS SQL.Trigger - 해법
  6. 2017.01.27 MS SQL.Trigger - 문법
  7. 2017.01.27 MS SQL.Trigger - 단점
  8. 2017.01.27 MS SQL.Trigger - 장점
  9. 2017.01.27 MS SQL.Trigger - 특징
  10. 2017.01.27 MS SQL.PLSQL - 메모리관리

[ MS SQL.Trigger - 예제2 ]

변수 정의해서 INSERTED 와 DELETED 를 SELECT 한 예제

 

CREATE TRIGGER TRG_TBL_MICHAK_INST ON TBL_MICHAK

FOR INSERT AS

 

DECLARE

    @Old_in_amt                     DECIMAL(10),

    @Comp_amt                      DECIMAL(10),

    @d_in_numb                     CHAR(11),

    @d_prat_row_id               DECIMAL(12),

    @i_item_dist_unit            DECIMAL(10)

 

SELECT @d_in_numb = IN_NUMB,   @d_prat_row_id = PRAT_ROW_ID

FROM   DELETED;

 

SELECT @i_item_dist_unit = ITEM_DIST_UNIT

FROM   INSERTED;

 

SELECT @TS_PURC_NUMB = PURC_NUMB,      @TS_IN_NUMB = IN_NUMB,

FROM   TBL_INPUT_DETA

WHERE  PRAT_ROW_ID = @d_prat_row_id;

 

SELECT @Comp_amt  = @Old_in_amt - @d_item_dist_unit + @i_item_dist_unit ;

                

UPDATE TBL_INPUT_DETA

SET    PRC   = @Comp_unit,        AMT   = @Comp_amt

WHERE  IN_NUMB       = @d_in_numb

AND    PRAT_ROW_ID = @d_prat_row_id ;

 

IF @d_cost_gubn = '5‘ OR @d_cost_gubn = ‘7’

   begin

      UPDATE TBL_PRATIQUE_DETAIL

      SET    DIST_QTY  = DIST_QTY  - @d_this_dist_qty + @i_item_dist_unit

      WHERE  PRAT_NO   = @d_prat_no

      AND    CODE_ITEM  = @d_code_item

   end   

ELSE

   begin

       …

   end

Print ‘난 Trigger 문이야….’

 

 

정의 :

- @ : 변수 정의 시 @를 붙여야 한다. 그리고 사용시에도 항상 @를 붙인다.

 

- SELECT 문법이 조금 변경 되었음. (INTO 문장이 없다)

 

- 계산식에도 SELECT 를 앞쪽에 기입해야 한다.

 

 -문장을 기입시         begin

                                            …….

                                     end 를 두어야 한다.

 

- 문장 끝에   ; (콜론)을 넣이 않아도 된다.

 

- if 문장에서 then , end if   라는 예약어가 없다.

 

- print 문을 사용 하면 Query Analyzer 를 사용시에는 흐름을 볼 수 있지만

  Application에서 작업시는 Error 로 인식 한다 (ROLLBACK 됨)

 

- DataWindow로 UPDATE() function 을 사용해서 저장시 Print 문을 만나면

  다음과 같이 Error 로 인식한다.

 

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 예제1 ]

 

1.

CREATE TRIGGER TRG_TBL_BL_DETAIL_INST ON TBL_BL_DETAIL

FOR INSERT AS

 

IF  NOT UPDATE(BL_QTY)   RETURN

 

DECLARE @tmp_qty    DECIMAL(10),

                   @tmp_num  DECIMAL(10)

 

SELECT @tmp_qty = 10;

 

SELECT @tmp_num = 20;

 

UPDATE TBL_OFFER_DETAIL

SET    ALL_BL_QTY = ALL_BL_QTY + I.BL_QTY + @tmp_qty + @tmp_num

FROM   TBL_OFFER_DETAIL A, INSERTED I

WHERE  A.OFFER_NO   = I.OFFER_NO

AND    A.CODE_ITEM    = I.CODE_ITEM

 

 

2.

CREATE TRIGGER TRG_TBL_BL_DETAIL_UPDT ON TBL_BL_DETAIL

FOR UPDATE AS

 

UPDATE TBL_OFFER_DETAIL

SET    ALL_BL_QTY = ALL_BL_QTY - D.BL_QTY + I.BL_QTY

FROM   TBL_OFFER_DETAIL A, INSERTED I,  DELETED D

WHERE  A.OFFER_NO   = I.OFFER_NO

AND    A.CODE_ITEM    = I.CODE_ITEM

AND    A.OFFER_NO      = D.OFFER_NO

AND    A.CODE_ITEM    = D.CODE_ITEM

 

 

정의 :

- DELETED 와 INSERTED 라는 가상테이블과 물리적으로 존재 하는 테이블

  간에 JOIN 으로 문장을 구성 할 수 있다.

 

-. IF NOT UPDATE(BL_QTY) RETURN : 이란 BL_QTY 수량이 변경이

   되지 않았을 경우에는 RETURN 해라는 뜻.

   즉, Trigger 를 더 이상 작동 하지 말라는 문장이다.

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제2  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 종류 ]

 

1. 중첩 트리거 : 트리거가 동작해서 다른 테이블의 값을 변경한다면 이런 동작을 CASCASE INSERT(또는 UPDATE, DELETE) 라고 한다.

                            이렇게 CASCADE 동작을 할 때 대상이 되는 테이블에 또 트리거가 걸려 있다면 이 트거리는 도 동작 하게 된다.

                            이런식으로 중첩 트리거는 SQL7.0에서 32단계 까지 동작 할 수 있다.

    - 중첩트리거 중지 :  sp_configure ‘nested trigger’, 0                       à 1로 해주면 실행 됨

                                       GO

                                       reconfigure

                                       GO

 

2. 재귀 트리거(Recursive Trigger) : 트리거가 자기 자신을 다시 부르는 것을 재귀 트리거라고 한다. 이때 무한 루프에 빠지지 않도록 빠져 나오는 루틴을

                             처리해야만 한다. 재귀트리거는 default 가 off 되어 있다.

                             - on :   exec sp_dboption ‘db_name’, ‘recursive triggers’, true

                             - 재귀 트리거 빠져 나오기 : @@nestlevel system 변수 사용

                             - 예)  CREATE   TRIGGER   trgInsert on t3  for insert as

                                      set nocount on

                                     declare @id int,    @level int;

                                     select @id = object_id(‘trgInsert’)

                                     select @level = trigger_nestlevel(@id)

                                     if @level > 5

                                        begin

                                             set nocount off

                                             return

                                        end

                                     ……..

                                     set nocount off

 

* 트리거가 계속 진행시 32단계 까지 진행 후 SQL 서버가 취소를 시키고 모든 트랜잭션이 취소된다..   

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제2  (0) 2017.01.27
MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 특징 ]

 

1. 숨어있는 두 테이블 : INSERTED 와 DELETED 라는 두 논리적 테이블, 임시적 저장 공간, 논리적 저장 공간, 가상테이블에 자료를 가지고 있게 된다.

                                         (임시적이란, 트랜잭션이 끝나면 없어진다는 뜻,  논리적이란 디스크 상에 존재하는 테이블이 아니라는 뜻)

    - INSERTED  : 새로 삽입된 행을 저장             

    - DELETED   : 삭제된 행을 저장

   : 트랜잭션이 끝날 때 까지 자료가 남아 있다.

2. 테이블이 UPDATE 가 되면 실제로는 해당 자료를 Delete 하고 Insert 하게 된다.

    그래서 UPDATE 시는  INSERTED 와 DELETED 가 동시에 존재 한다.

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 해법 ]

 

1. SYSOBJECTS 테이블은 table, Trigger, sp 등의 정보가 입력 되어 있는 테이블 이다.

                              Type ( U:User Table,   V:View,   TR:Trigger, K:Index,   S:system Table,     P : Stored Procedure ..)

2. WITH ENCRYPTION : 소스 코드의 암호화 ( Enterprise Manager 에서 보게 되면 알 수 없는 코드로 조회 된다.)

3. FOR  [DELETE], [INSERT], [UPDATE]  : 각 작업시 Trigger 가 동작 된다.

4. IF UPDATE (column_name)                      : 해당 column_name 이 변경시 다음문장이 동작 된다.

 

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
MS SQL.Trigger - 장점  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 문법 ]

 

 

- 존재시 삭제 : IF EXISTS ( SELECT NAME FROM SYSOBJECTS

                                                WHERE  NAME = ‘ TRG_TBL_LC_DETAIL_INST' AND TYPE = 'TR' )

                               DROP TRIGGER TRG_TBL_LC_DETAIL_INST

                          GO

 - 생성 :   CREATE TIRGGER  trigger_name

                ON TABLE

                [WITH ENCRYPTION]

                {  

                     { FOR { [DELETE], [INSERT] [,] [UPDATE] }

                AS

 

                IF UPDATE (column_name )

                    [ { AND | OR } UPDATE ( column_name ) … ]

 

               DECLARE   @variable_name    type ;

 

                sql_statement [ …. N ]

 

- 수정 :  ALTER TRIGGER

 

- 삭제 :  DROP TRIGGER

 

- 보기 : sp_helptext       tirgger_name

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
MS SQL.Trigger - 장점  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 단점 ]

 

1. Client Source 만으로 bug 를 잡을 수 없다.

2. 다른 사람이 트리거를 만들 었을 경우 문서가 없으면 존재 하는지 모를 수 있다. ( 그래서 필히 트리거에 대한 문서화를 해야만 한다)

3. 큰 프로젝트를 진행시 트리거를 너무 많이 사용하게 되면 예기치 못한 결과도 초래 할 수 있다. (중첩트리거 때문에….)

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 장점  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 장점 ]

 

1. Check 제약등으로 구현하기 힘든 것들을 트리거로 구현.

2. Network Traffic 이 없다.

3. 차후 Maintenance 를 할 경우 Application 은 수정 할 필요 없이 Trigger 만 수정 하면 된다.

    이렇게 되면 실행 Module 을 각 사용자에게 Copy 해줄 필요가 없다. Trigger 는 Server 에서 작동 하기 때문이다.

4. Application 작성시 코딩이 쉬워 진다.

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 특징 ]

 

1. 한 테이블에 어떤 값이 입력 되었을 때 자동적으로 다른 테이블의 데이터를 변경 해야 할 필요가 있을 경우 사용.

     과거에는 클라이언트에서 프로그램으로 처리 했지만, RDBMS 에서는 트리거를 사용한다.

2. Stored Procedure의 특별한 형태이다.

3. MS sql Server 6.5에서는 한 테이블당 최대 3개의 트리거

4. MS sql Server 7.0에서는 한 테이블당 제한이 없다.

6. CHECK, DEFAULT, RULE 등과는 달리 트랜잭션이 시작되기 전이 아니라, 트랜잭션이 시작된 후에 동작하는 무결성 구현 개체이다. 즉, 트랜잭션의 부분이다.

7. 한 INSERT에 대해서 트리거는 한번만 실행 된다. 즉, 여러행이 한 번에 INSERT 될 때 (INSERT… SELECT 의 경우)도 트리거는 한번만 수행 된다.

   (Oracle 은 그렇지 않다)

8. 트리거는 모든 변경문 (Insert, Update, Delete)이 정상적으로 끝나야만 그때 발생된다.

9. 트리거는 호출되지 않는다.  (즉, Event  이기 때문이다)

 

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
MS SQL.Trigger - 장점  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.PLSQL - 메모리관리 ]

 


업체 DB서버 중에 접속이 되어있다가 갑자기 접속 종료가 되고 아예 접속이 되질 않는 등..
간헐적으로 네트웍 오류와 같은 접속 장애가 발생을 한적이 있었는데요.
이 문제의 원인은 Mssql 메모리 설정이었습니다.

문제가 있었던 서버의 물리적 메모리가 12GB 였는데, 작업관리자로  메모리 사용량을 확인해봤더니 11.6GB....
그래서, 서버에 과부하가 걸려 DB서버가 정상적으로 돌아가지 않았던거였죠.. 
Mssql은 처음 설치시 물리적 메모리 사용량의 MAX를 사용하도록 설정되어지는데요.
이 부분을 관리자가 조정을 할수가 있습니다.

아래 글은 제 블로그에 기술한 내용을 그대로 복사했습니다.

 글렌베리라는 분이 제안한 메모리 설정

 

아래 표를 참조하여 Mssql Server 메모리를 설정을 하면 문제가 없다.

Physical RAM

MaxServerMem Seting 

2GB

1500

4GB

3200

6GB

4800

8GB

6400

12GB

10000

16GB

13500

24GB

21500

32GB

29000

48GB

44000

64GB

60000

72GB

68000

96GB

 92000

 128GB

124000

 

 Mssql 서버 메모리 사용률 변경

 

아래 설명 이미지의 서버 사양은 아래와 같다.

Windows Server 2008 R2 Standard
설치 메모리 6 GB 

그림을 보시면 아시겠지만, 서버의 총 메모리는 6GB인데, 실제 사용 메모리가 4.34GB 이다.
이렇게 되면 가용 할 수 있는 메모리가 적어지기 때문에 서버에 과부하가 걸리게 된다.

 


이럴 경우에는 아래 그림처럼, [서버속성]으로 들어가서 메모리 설정을 다시 해주는게 좋다.

기본설정 메모리 2147483647 MAX값이다.
이부분은 알맞게 수정해줘야한다.

그리고, Mssql 다시시작을 해주어야 설정한 메모리도 적용이 되어진다.
수정시는 위에 글렌베리 표를 참조하면 되겠다.

 


Mssql 서버를 재시작 한 후 메모리 사융률을 비교해보았더니, 이렇게 많이 차이가 난다.

4.34 GB -> 1.77 GB

이렇게 설정을 하게되면, 메모리 사용률로 인한 원인 모를 접속 장애를 해결 할 수 있다.
그리고, 위에 표를 굳이 참조할 필요는 없다.
상황에 따라서 서버에 과부하가 생기지 않을 정도로 메모리 설정을 해주면 되겠다.

 

'(DB) MS SQL > System관리' 카테고리의 다른 글

MS SqlServer. Lock 조회 및 관리방법  (0) 2017.04.03
Posted by 농부지기
,