http://www.sqler.com/336433

Isolation Level 중 Snapshot 설명입니다.

 

큰 이미지 파일은 첨부파일을 보시면 됩니다.

 

1PagePPT_Snapshot_윤선식_20110112_small.jpg

 

1.  Session 1.

 - DB 옵션에서 SNAPSHOT 격리수준을 사용가능하도록 변경합니다.

 

2. Session 1.

 - 테이블을 생성합니다.

 

3. Session 1.

  - 임의의 데이터를 넣습니다. SEQ 10만 보시면 됩니다.

 

4. Session 1.

  - 트랜잭션을 시작하면서 10의 "가"를 "ABC"로 변경합니다.

 

5. Session 1.

  - SELECT 해 보면 "ABC"로 나옵니다.

 

6. Session 2.

  - 격리수준을 SNAPSHOT으로 설정합니다.

 

7. Session 2.

  - 트랜잭션을 시작하고, SEQ 10을 SELECT 해 보면 이전 값인 "가"가 표시됩니다.

 

8. Session 1.

  - Session 1의 Update한 내역을 Commit합니다.

 

9. Session 1.

  - Session 1에서 "10"의 값을 가져오면 당연히 변경된 "ABC"로 가져옵니다.

 

10. Session 2.

  - Session 2에서 "10"의 값을 SELECT 하면 여전히 이전 값인 "가"입니다.

 

11. Session 2.

   - Commit합니다. 이렇게 되면 Session2의 트랜잭션도 종료됩니다.

 

12. Session 2.

  - 이제 "10"을 SELECT하면 변경된 값인 "ABC"로 가져옵니다.

 

즉, SNAPSHOT은 다른 트랜잭션의 종료유무와 상관없이 해당 트랜잭션에서는 동일한 값이 유지됨을 알 수 있습니다.

 

이상입니다.

http://www.sqler.com/333281

저 또한 처음 SQL을 시작할 때에는 제 마음대로 이름을 적곤 했지만,

시간이 지나면 지날수록 정말 보기 힘들다는 것을 알게 되죠.

물론 sysobjects 명령어를 사용해서 가져오면 되지만,

명명규칙을 정하고 나면, Object 이름만 봐도 무엇인지 알 수 있게 됩니다.

회사마다 차이점은 있겠지만, 일반적인 개체 명명 방법은 이렇습니다.

1.     Object 앞에 접두사 또는 뒤에 접미어 사용 : Upper Case

2.     Camel Case _ 사용

Object

접두어 또는 접미어

Example

User Table

TB_

TB_Order

User Function

UDF_ 또는 UF_

UDF_Get_PackSize

Stored Procedure

USP_ 또는 UP_

USP_Select_AllPacket

View

VW_ 또는 UV_

VW_UserHistory

Partitioned View

PV_

PV_OrginalCustomer

Trigger

TRI_ / TRU_ / TRIU_ etc

TRI_TB_Order

Primary Key

PK_

PK_TB_User

Foreign Key

FK_

FK_TB_User_TB_Order_001

Constraint

CT_

CT_TB_User_MEM_ID

User Defined Type

UT_ 또는 UD_

UT_REM_001

Index (Nonclustered)

IDX_ 또는 IX_

IX_TB_User_001

 

접두어 또는 접미어 이외에는 보통 다음과 같은 규칙을 적용합니다.

1.     테이블에 속해 있는 경우 테이블명 표시

-       FK는 주/종 관계를 표시

-       제약조건은 해당 컬럼명 표시 : _CK / _DF / _UN 등의 접미어 표현 또는 아예 이를 접두사로 사용하는 경우도 많습니다.

-       Index : Clustered Index인 경우 Primary Key가 아니면 _C 를 붙이기도 합니다.

-       Trigger : Insert / Update / Delete 등의 행위를 보통 접두어에 포함합니다.

2.     함수나 프로시저 등은 그 성격을 그대로 표시

-       함수는 동사(Action) + 반환(Return) 으로 표시하거나 그 반대로 표시 : 정하기 나름

-       프로시저는 업무의 성격이나 로직의 Action을 담는 경우가 많습니다.(CRUD)

è  UP_Select_~~~ / UP_Delete_~~~ / UP_Make_~~~

정말 회사마다 차이점이 있습니다. 이게 정답은 아니니오해 마시길.~

Naming Rule 만 정리해도 문서 하나라능...


http://www.sqler.com/331231

안녕하세요? 쓸만한게 없네 입니다.

 

어차피 웹에서는 자바스크립트를 통해 ASP / ASP.NET에서 유효성 체크를 하겠지만,

SQL에서 체크하는 로직은 별로 없었던 것 같네요.

 

CREATE FUNCTION [dbo].UFN_ValidEmailCheck

(

       @EMail VARCHAR(255)

)

RETURNS BIT

AS

BEGIN

       DECLARE @IsValid BIT

       SET @IsValid = 0    

       IF @EMail IS NOT NULL

       BEGIN

             SET @EMail = LOWER(@EMail)

            

             IF @EMail like '[a-z,0-9,_,-]%@[a-z,0-9,_,-]%.[a-z][a-z]%'

                    AND @EMail NOT like '%@%@%'

                    AND CHARINDEX('.@',@EMail) = 0

                    AND CHARINDEX('..',@EMail) = 0

                    AND CHARINDEX(',',@EMail) = 0

                    AND RIGHT(@EMail,1) between 'a' AND 'z'

             BEGIN

                    SET @IsValid = 1

             END

       END

       RETURN @IsValid

END

 

SELECT dbo.UFN_ValidEmailCheck('windtrap@paran.com') AS ValidEmail

SELECT dbo.UFN_ValidEmailCheck('박규리@naver.com') AS ValidEmail

* Result *

 

ValidEmail

----------

1

 

(1개 행이 영향을 받음)

 

ValidEmail

----------

0

 

(1개 행이 영향을 받음)

 

요렇게 나옵니다.

http://www.sqler.com/334903

이전에 올린 자료에 더해서 7.0 2000 자료 찾아서 올립니다.

한 눈에 비교해 보세요.

SQL Server 데이터베이스 엔진 개체

SQL Server 7.0

SQL Server 2000

일괄 처리 크기

65,536 * 네트워크 패킷 크기1

65,536 * 네트워크 패킷 크기1

짧은 문자열 열 각각의 바이트 수

8000

8000

text, ntext 또는 image 열 각각의 바이트 수

2GB-2

2GB-2

GROUP BY, ORDER BY 각각의 바이트 수

8060

 

인덱스 당 바이트 수

900

900

외래 키 당 바이트 수

900

900

기본 키 당 바이트 수

900

900

각 행의 바이트 수

8060

8060

저장 프로시저의 원본 텍스트의 바이트 수

일괄 처리 크기 또는 250MB 미만

일괄 처리 크기 또는 250MB 미만

각 테이블의 클러스터된 인덱스 수

1

1

GROUP BY, ORDER BY의 열 수

바이트 수로만 제한

 

GROUP BY WITH CUBE 또는 WITH ROLLUP 문의 열 또는 식의 수

10

 

인덱스 당 열 수

16

16

외래 키 당 열 수

16

16

기본 키 당 열 수

16

16

기본 테이블 당 열 수

1024

1024

SELECT 문 각각의 열 수

4096

4096

INSERT 문 각각의 열 수

1024

1024

클라이언트 당 연결 수

구성된 연결의 최대 값

구성된 연결의 최대 값

데이터베이스 크기

1,048,516TB

1,048,516TB

SQL Server 인스턴스 당 데이터베이스 수

32767

32767

데이터베이스 당 파일 그룹 수

256

256

데이터베이스 당 파일 수

32767

32767

파일 크기(데이터)

32TB

32TB

파일 크기(로그)

4TB

32TB

테이블 당 외래 키 테이블 참조 수

253

253

식별자 길이(문자 수)

128

128

각 컴퓨터의 인스턴스 수

N/A

16

SQL 문이 포함된 문자열의 길이(일괄 처리 크기)

65,536 * 네트워크 패킷 크기

65,536 * 네트워크 패킷 크기

연결 당 잠금 수

각 서버의 최대 잠금 수

각 서버의 최대 잠금 수

SQL Server 인스턴스 당 잠금 수

2,147,483,647(정적)

2,147,483,647(정적)

 

SQL Server 메모리의 40%(동적)

SQL Server 메모리의 40%(동적)

중첩 저장 프로시저 수준 수

32

32

중첩 하위 쿼리 수

32

32

중첩 트리거 수준 수

32

32

각 테이블의 클러스터되지 않은 인덱스 수

249

249

SQL Server의 한 인스턴스에서 현재 열려 있는 개체 수

2,147,483,647(또는 사용 가능한 메모리)

2,147,483,647(또는 사용 가능한 메모리)

데이터베이스의 개체 수

2,147,483,647

2,147,483,647

각 저장 프로시저의 매개 변수 개수

1024

1024

각 테이블의 REFERENCES

253

253

각 테이블의 행 수

사용 가능한 저장소로 제한됨

사용 가능한 저장소로 제한됨

데이터베이스 당 테이블 수

데이터베이스의 개체 수로 제한됨

데이터베이스의 개체 수로 제한됨

SELECT 문의 테이블 수

256

256

테이블 당 트리거 수

데이터베이스의 개체 수로 제한됨

데이터베이스의 개체 수로 제한됨

테이블 당 UNIQUE 인덱스 또는 제약 조건 수

249(클러스터되지 않음)/1(클러스터됨)

249(클러스터되지 않음)/1(클러스터됨)

잠금

96바이트

64바이트 + 32바이트(소유자 당)

열린 데이터베이스

2,880바이트

3924바이트 + 1640바이트(파일 당) 336바이트(파일 그룹 당)

열린 개체1

276바이트

256바이트 + 1724바이트(개체에 대해 열린 인덱스 당)2

사용자 연결

12 KB + (3 * 네트워크 패킷 크기)3

12 KB + (3 * 네트워크 패킷 크기

 

위 자료는 김대우님께서 올려주신 자료를 바탕으로 조금 짜집기했습니다.

원문출처 : http://www.sqler.com/bSQL2000Lec/126621

 

그런데, 아무리 찾아봐도 제 능력으로는 일부 빠진 항목들을 채우지 못했네요. 아시는 분 있으시면 리플로. ^^.

 

이전에 올려드렸던2005 2008 자료도 한번 더 올려 드립니다. ^^

SQL Server 데이터베이스 엔진 개체

SQL Server 2008

SQL Server 2005

최대 크기/개수 SQL Server(32비트)

최대 크기/개수 SQL Server(64비트)

최대 크기/개수 SQL Server 2005(32비트)

최대 크기/개수 SQL Server 2005(64비트)

일괄 처리 크기

65,536 * 네트워크 패킷 크기

65,536 * 네트워크 패킷 크기

65,536 * 네트워크 패킷 크기

65,536 * 네트워크 패킷 크기

짧은 문자열 열당 바이트 수

8,000

8,000

8,000

8,000

GROUP BY, ORDER BY당 바이트 수

8,060

8,060

8,060

8,060

인덱스 키당 바이트 수

900

900

900

900

외래 키당 바이트 수

900

900

900

900

기본 키당 바이트 수

900

900

900

900

행당 바이트 수

8,060

8,060

8,060

8,060

저장 프로시저의 원본 텍스트의 바이트 수

일괄 처리 크기 또는 250MB 미만

일괄 처리 크기 또는 250MB 미만

 

 

varchar(max), varbinary(max), xml, text 또는 image 열당 바이트 수

2^31-1

2^31-1

2^31-1

2^31-1

ntext 또는 nvarchar(max) 열당 문자 수

2^30-1

2^30-1

2^30-1

2^30-1

테이블당 클러스터형 인덱스 수

1

1

1

1

GROUP BY, ORDER BY의 열 수

바이트 수로만 제한

바이트 수로만 제한

바이트 수로만 제한

바이트 수로만 제한

GROUP BY WITH CUBE 또는 WITH ROLLUP 문의 열 또는 식의 수

10

10

10

10

인덱스 키당 열 수

16

16

16

16

외래 키당 열 수

16

16

16

16

기본 키당 열 수

16

16

16

16

넓지 않은 테이블당 열 수

1,024

1,024

1,024

1,024

넓은 테이블당 열 수

30,000

30,000

 

 

SELECT 문당 열 수

4,096

4,096

4,096

4,096

INSERT 문당 열 수

4096

4096

1,024

1,024

클라이언트당 연결 수

구성된 연결의 최대 값

구성된 연결의 최대 값

구성된 연결의 최대 값

구성된 연결의 최대 값

데이터베이스 크기

524,272TB

524,272TB

524,258TB

524,258TB

SQL Server 인스턴스당 데이터베이스 수

32,767

32,767

32,767

32,767

데이터베이스당 파일 그룹 수

32,767

32,767

32,767

32,767

데이터베이스당 파일 수

32,767

32,767

32,767

32,767

파일 크기(데이터)

16TB

16TB

16TB

16TB

파일 크기(로그)

2TB

2TB

2TB

2TB

테이블당 외래 키 테이블 참조 수

253

253

253

253

식별자 길이(문자 수)

128

128

128

128

컴퓨터당 인스턴스 수

Workgroup을 제외한 모든 SQL Server 버전에 대해 독립 실행형 서버당 50개의 인스턴스. Workgroup은 컴퓨터당 최대 16개의 인스턴스를 지원합니다.

독립 실행형 서버당 50개의 인스턴스

워크그룹 버전을 제외한 모든 SQL Server 2005 버전에 대해 독립 실행형 서버당 50개의 인스턴스. 워크그룹 버전에서는 최대 16개의 인스턴스를 지원합니다.

독립 실행형 서버당 50개의 인스턴스

SQL Server는 장애 조치(Failover) 클러스터에서 25개의 인스턴스를 지원합니다.

장애 조치 클러스터당 25개의 인스턴스

SQL Server 2005에서는 장애 조치(Failover) 클러스터당 25개의 인스턴스를 지원합니다.

장애 조치 클러스터당 25개의 인스턴스

 

봐야 할 게 많네요

http://www.sqler.com/327147

Repeatable Read 관련 설명입니다.

 

큰 이미지 파일은 첨부파일을 참조하세요. ^^.

 

Repeatable_Read_Small.jpg

 

1. Session 1.

  - 테이블을 생성합니다.

 

2. Session 1.

  - 데이터를 넣습니다. 이 때 10, 30, 50 으로 넣습니다.

 

3. Session 1.

  - Transaction을  REPEATABLE READ 로 걸고 10에서 50 범위를 SELECT 합니다.

  - 당연히 10, 30, 50 값만 나옵니다.

 

4. Session 2.

  - 테이블에 20, 40 값을 넣습니다. 데이터는 정상적으로 들어갑니다.

 

5. Session 2.

  - 20과 40 값을 지웁니다. 정상적으로 삭제됩니다.

 

6. Session 2.

  - Session2에서 30 의 값을 변경하려고 하면 Transaction 으로 인해 변경되지 않고 계속 대기하게 됩니다.

 

7. Session 1.

  - Rollback 하여 Session 1의 REPEATABLE READ 를 해제합니다.

  - INSERT가 아닌 SELECT기 때문에, 테이블에는 10, 30, 50이 남은 상태로 존재합니다.(20, 40 은 이미 삭제된 상태)

 

8. Session 1.

  - 3. 과 같이 SELECT 합니다.

 

9. Session 2.

  - 4. 와 같이 데이터 20, 40 을 넣습니다. 정상적으로 삽입됩니다.

 

10. Session 1.

  - 같은 트랜잭션 내에서 다시 한 번 SELECT 합니다.

  - 이렇게 되면 기존에 읽은 값 뿐만 아니라 Session 2.에서 입력한 20과 40도 표시되어 Pantom Read 가 됩니다.

 

11. Session 2.

  - 5. 와 같이 20과 40 값을 삭제하려고 하면, 10.에서 SELECT 한 Transaction의 영향으로 DELETE 가 되지 않습니다.

  - 6. 과 같이 30의 값을 변경하려고 해도 당연히 안됩니다.

 

어제 1 Page PPT에서 설명했던 내용을 간단하게 적어 보았습니다.

단... 배경그림은 집중도를 떨어뜨릴 것 같아서 뺐습니다. ㅋ.

+ Recent posts