[ 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 농부지기
,

[ MS SQL.PLSQL - 참고 ]

 

1. @@Error  : T-SQL 문을 실행 후 그 오류번호 가지고 있는 Global Variable 이다. (성공시 0)

 

2. Parameter : Create   procedure      up_name

                                     @make       char(5),         

                                     @name       char(20),

                                     @id            int   ouput

                       As

                        à @id 로 값이 Return 된다.

 

3. Return Value : Return  ‘값’   à 을 하게 되면 된다

 

4.. SP는 다른 SP에서 정의된 변수들을 액세스 할 수 없다.

Posted by 농부지기
,

[ MS SQL.PLSQL - SP로부터 정보를 넘겨받는 방법 ]

 

1. SP 를 호출할때 매개변수에 값이 없을 경우 오류가 발생. 그래서   default 값을 넣어 준다.

 

1. ResultSet : PS의 Body 로 Resultset 을 받환하는 T-SQL 문을 삽입한다.일반적으로   select  문을 사용하지만 또 다른 SP 에게 다른 호출자를 삽입할 수 있다.

                      또한 몇 개의 resultset 을 하나의 SP로부터 되돌려주는 것이 가능하다. 이러한 저장 프로시저는 단순히 몇 개의 select 문을 포함하게 된다.

                      모든 resultset 에 액세스할 수 있는 RDO 같은 일부 클라이언트 데이터 액세스 방법이 있지만 그 외 다른 방법들을 단지 첫 번째 resultset 을

                      받을 수 있고 오류를 일으킬 가능성이 있음을 참고해야 한다.

 

2. Parameter : Create   procedure      up_name

                                     @make       char(5),         

                                     @name       char(20),

                                     @id            int   ouput

                       As

                        à @id 로 값이 Return 된다.

 

3. Return Value : Return  ‘값’   à 을 하게 되면 된다.

'(DB) MS SQL > Procedure (단계별스터디)' 카테고리의 다른 글

MS SQL.PLSQL - 참고  (0) 2017.01.27
MS SQL.PLSQL - 매개변수전달  (0) 2017.01.27
MS SQL.PLSQL - 실행계획  (0) 2017.01.27
MS SQL.PLSQL - 실행과정  (0) 2017.01.27
MS SQL.PLSQL - 종류  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.PLSQL - 매개변수전달 ]

 

- 이름을 이용한 매개변수 전달 ( passing parameters by name )  :  EXECUTE    sp_name      @model  = ‘T%’

 

- 위치를 이용한 매개변수 전달 ( passing parameters by position) :  EXCUTE   sp_name    ‘T%’

 

 

8 위치를 이용한 매개변수 전달방식이 속도가 조금 빠른다. 그러나 이름을 이요한 매개변수 전달을 추천한다.

 

'(DB) MS SQL > Procedure (단계별스터디)' 카테고리의 다른 글

MS SQL.PLSQL - 참고  (0) 2017.01.27
MS SQL.PLSQL - SP로부터 정보를 넘겨받는 방법  (0) 2017.01.27
MS SQL.PLSQL - 실행계획  (0) 2017.01.27
MS SQL.PLSQL - 실행과정  (0) 2017.01.27
MS SQL.PLSQL - 종류  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.PLSQL - 실행계획 ]

 

 

± 실행계획의 재사용 : 실행계획들은 잠시동안 프로시저 캐시에 남는다. 같거나 다른 몇몇 사용자가 비슷한 배치(batch) 를 사용하면 관련된 엔진은 프로시저

                                         캐시에서 실행계획과 일치하는 것을 우선 찾는다. 만약 존재하면 재사용되고, 없을 경우에는 SQL Server 는 batch 를 해서(Parse)하고

                                         컴파일 할 것이다.  ( 이 재사용으로 Parsing 등을 하지 않으므로 속도가 빠르게 된다. )

     ž 재사용 가능 쿼리 : 첫번째로, 두 번째 쿼리의 쿼리 텍스트는 캐시 내 실행계획에 의해 기술된 쿼리의 텍스트와 모든 것들이 완벽하게 동일해야 한다.

                                               (공백, 줄바꿈, 들여쓰기)

                                           두번째는 쿼리가 실행계획을 재 사용하기 위해 fully qualified database object 를 포함할 때이다.

                                                             Select *

                                                             From       db_name.dbo.tbl_name

 

    ž 매개변수화된 쿼리들 : SQL Server 디자이너들은 저장 프로시저들로 쿼리를 재 사용하지 않도록 디자인된 저장 프로시저에 대해서 쿼들의 재 사용을

                                                 향상시키기 위해서 두 가지 방법이 존재

             1. Autoparameterization : T-SQL 문장이 SQL Server 에 보내질 때 그것은 모든 상수가 매개변수로 대치될 수 있는지 여부를 결정하는 시도를 할 것이다.

                                                       같은 템플릿을 사용하는 연속되는 퀴리들은 동일한 실행계획을 다시 사용할 것이다.

                  Autoparameterization 을 하기 위해 네개의 템플릿 세트와 일치해야 한다.

                               SELECT   { @ ¦ column-list ]

                               FROM      tbl_name

                               WHERE   column-expression

                               [ORDER BY  column-list ]

 

                               INSERT   tbl_name

                               VALUES ( { constant  ¦ Null  ¦ Default }   [ , ….  ] )

 

                               UPDATE   tbl_name

                               SET            column-name  = constant

                               WHERE     column-expression

 

 

                               DELETE   tbl_name

                               WHERE     column-expression

 

                   ; Autoparameterization 이 사용될 때 쿼리를 포맷팅하는 것을 문제 삼지 않지만, 여전히 개체가 capitalization 에 있어서의 변경이나  qualified 되는

                     방법에 있어서 변경을 허용하지 않는다.

    ž속도가 빠른이유 : 현재 버전의 SQL Server 쿼리 엔진은 쿼리나 SP를 프로세스하는 가장 최고를 선택하기 위한 수많은 새로운 프로세싱 기술들과

                    비교작업을 한다. 그러므로 SP를 재 컴파일하는데 필요한 시간은 이전보다 더욱 길어졌다.

 

± Lazywriter 프로세스가 하는 일 : 실행계획을 SP 캐시로부터 제거 한다. 다음과 같은 경우에…

     1. 많은 데이터 수량의 변경시

     2. 인덱스 생성 또는 삭제시

     3. Constrainsts 가 추가 또는 변경시

     4. 인덱스의 분산 통계들의 변화시

     5. SP 또는 trigger 에서 재 컴파일하기 위해 명시적으로 SP_recompile 을 호출 하였을 때

 

     ž

* SP 의 소스코드 : syscomments system table 의 text 라는 필드에 저장 됨

                                type : varchar(8000) 이지만 smallint 로 선언될 때 저장 프로시저는 32k * 8,000 bytes = 약 250MB 이다.

 

* SP 캐시에서 내리기 : DBCC   FREEPROCCACHE

                                        SQL Server 를 재 작동

 

 

 

Posted by 농부지기
,