728x90

32비트운영체제에서 MSSQL 2005은 메모리가 기본적으로 2기가만 지원을 하게 됩니다.

이것을 4기가까지 확장 할 수 있도록 하는 방법을 알려드립니다.


 작업환경

OS : Windows Server 2003 Standard Edition 32Bit

SQL : MSSQL 2005 Server Standard Edition

RAM : 4GB


1. 컴퓨터의 실제 메모리는 아래 보시는것처럼 4기가의 메모리를 가지고 있습니다.

사용자 삽입 이미지


2. 하지만 MSSQL2005은 2기가까지만 메모리가 설정되어 있어서 그 이상은 사용을 하지 않는것을 볼 수 있습니다.

사용자 삽입 이미지


아깝지 않습니까? 이 풍부한 하드웨어에서 반밖에 능력을 사용 못하고 있네요.

사용자 삽입 이미지


Lock Pages in Memory

3. MSSQL이 AWE를 사용하려면 Lock Rages in Memory 옵션이 지정된 윈도우 계정으로 MSSQL 엔진을 실행해야 합니다.

32비트 운영체제의 경우 SQL Server에 맞게 AWE를 구성하기 전에 Lock pages in memory권한을 얻어야 합니다.


4. 우선 MSSQL이 어떤 계정으로 구동이 되는지 알아야 합니다.

시작-> 프로그램 -> 관리 도구 -> 서비스 누른다음에 아래의 항목을 찾으면 됩니다.

'db_go' 혹은 'sql_starter'일것이다.

사용자 삽입 이미지


5. Lock Pages in Memory 옵션을 설정해야 합니다.

시작 -> 실행에서 gpedit.msc를 실행합니다.


6. 그룹 정책 개체 편집기가 나오면..

컴퓨터 구성 -> Windows 설정 -> 보안설정 -> 로컬 정책 -> 사용자 권한 할당 -> 메모리의 페이지 잠그기

더블클릭을 합니다.

사용자 삽입 이미지


7. 아까 확인한 'db_go' 사용자를 추가를 해줍니다.

사용자 삽입 이미지


awe enabled 옵션

8. 본격적으로 메모리를 늘리는 방법을 진행하도록 하겠습니다.

AWE(Address WindowingExtionsions)를 사용하여 가상 메모리에 설정된 한계봐 더 큰 실제 메모리를 액세스 할 수 있도록 설정 하도록 하겠습니다.


'awe enabled'는 고급옵션입니다. 'sp_configure' 시스템 저장 프로시저를 사용하여 설정을 변경하려면 'show advanced options'를 1로 설정해야만 'awe enabled'를 변경할 수 있습니다.

사용자 삽입 이미지

-------------------------------------------

sp_Configure 'show advanced options',1
RECONFIGURE
go
sp_Configure 'awe enabled',1
RECONFIGURE
go

-------------------------------------------


9. MSSQL을 다시 시작해야 합니다.

   MSSQL을 다시 시작 한 후 메모리를 설정하겠습니다.


  총 4기가중 3.5기가만 사용하도록 설정하겠습니다. 1024*3  = 3584

사용자 삽입 이미지

-------------------------------------------

sp_Configure 'max server memory',3584
RECONFIGURE
go

-------------------------------------------


네트워크 응용 프로그램을 위해 데이터 처리량 최대화

10. 네트워크연결에서 '파일 공유를 위해 데이터 처리량 최대화' 옵션을 선택하면 운영체제에서 파일 시스템 캐시에 I/O페이지를 캐시하여 버퍼링된 I/O작업을 수행하는 응용 프로그램에 우선 순위를 부여합니다. 이 옵션은 정상적인 작업을 수행하는 동안 SQL Server에서 사용가능한 메모리를 제한할 수 있습니다.


제어판 -> 네트워크 연결 -> 로컬 영역 연결 -> 일반 탭 -> Microsoft 네트워크용파일 및 프린터 공유 -> 속성

'네트워크 응용 프로그램을 취해 데이터 처리량 최대화'를 선택하고 확인을 누릅니다.





확인하기

여기까지 준비가 완료되었습니다.


메모리가 3.5기가까지 올라가나 확인하기 위해 무식한 쿼리를 날려보았습니다.


사용자 삽입 이미지

무하하...저 가파르게 올라가는 메모리양을 보십시오!!

성공했습니다.


728x90
 

제목

Oracle의 connect by 를 Mssql2005 의 CTE(WITH common_table_expression)로 변환

작성자

DEV.NAM( http://blog.naver.com/kilnam50)

작성일

2007-10-29

배포

public (단, 출처는 꼬~~~옥 밝혀 주세요)

출처

MSDN

SELECT GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_NAME, ORDER_DESC, LEVEL AS LEV
  FROM BPM_TEMPLETE
 WHERE GROUP_CODE=2
CONNECT BY PRIOR TASK_CODE = UPPER_TASK_CODE
START WITH UPPER_TASK_CODE = 0
order by order_desc

 

사용자 삽입 이미지



위와 같은 방식으로 출력하기 위해서는 CTE와 집계함수를 이용하면 된다.


처음 CTE의 구조를 몰랐을 때는 왜 이렇게 나오는 몰라서 참 고민을 많이 했었다.


하지만 구조를 이해하고 나면 정말 간편하게 출력할 수 있게 되었다.



처음으로 CTE의 기본 문법만 사용하면 아래와 같이 쿼리를 작성할 수 있다.


WITH BPM_CTE(GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_ORDER, TASK_NAME, TASK_DESC, TASK_ROLL, ORDER_DESC, LEVEL)
AS
(
    SELECT GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_ORDER, TASK_NAME, TASK_DESC, TASK_ROLL, ORDER_DESC, 1 AS LEVEL
 FROM BPM_TEMPLETE T
 WHERE GROUP_CODE=2

    UNION ALL
   SELECT C.GROUP_CODE, C.TASK_CODE, C.UPPER_TASK_CODE, C.TASK_ORDER, C.TASK_NAME, C.TASK_DESC, C.TASK_ROLL, C.ORDER_DESC, LEVEL+1
  FROM BPM_TEMPLETE C
 INNER JOIN BPM_CTE P
 ON C.UPPER_TASK_CODE = P.TASK_CODE
 WHERE C.GROUP_CODE=2
)
SELECT GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_ORDER, TASK_NAME, TASK_DESC, TASK_ROLL, ORDER_DESC, LEVEL
FROM BPM_CTE
WHERE GROUP_CODE=2

ORDER BY ORDER_DESC ASC



사용자 삽입 이미지




결과는 위와같이 같은 정보에 LEVEL이 중복되어서 출력된다.


이와같이 나온 이유는 UNION ALL 이 일반적으로 적용되는 방식과 달라서 헷갈릴 것이다.


이유는


부모 ROW에 자식 ROW가 LEVEL이 증가하면서 쌓이기 때문에 위와같은 결과가 나올 수 밖에 없다.


그래서 집계함수를 사용하여 아래와 같이 쿼리를 작성하였다.



WITH BPM_CTE(GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_NAME, ORDER_DESC, LEVEL)
AS
(
    SELECT GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_NAME, ORDER_DESC, 1 AS LEVEL
 FROM BPM_TEMPLETE T
 WHERE GROUP_CODE=2

    UNION ALL
   SELECT C.GROUP_CODE, C.TASK_CODE, C.UPPER_TASK_CODE, C.TASK_NAME, C.ORDER_DESC, LEVEL+1
  FROM BPM_TEMPLETE C
 INNER JOIN BPM_CTE P
 ON C.UPPER_TASK_CODE = P.TASK_CODE
 WHERE C.GROUP_CODE=2
)
SELECT GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_NAME, ORDER_DESC, MAX(LEVEL) AS LEVEL
FROM BPM_CTE
WHERE GROUP_CODE=2
GROUP BY GROUP_CODE, TASK_CODE, UPPER_TASK_CODE, TASK_NAME, ORDER_DESC

ORDER BY ORDER_DESC ASC



결과는 아래와 같이 깔끔하게 출력된다.



사용자 삽입 이미지



계층도를 뽑을 때 상당히 유용하게 사용되니 필요하신 분은 퍼가시고 Comment도 남겨주세요

728x90

현재 데이터베이스에 사용자를 추가합니다.

Transact-SQL 구문 표기 규칙

구문
CREATE USER user_name     [ { { FOR | FROM }
      { 
        LOGIN login_name 
        | CERTIFICATE cert_name 
        | ASYMMETRIC KEY asym_key_name
      } 
      | WITHOUT LOGIN
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ]
인수
user_name

이 데이터베이스 내에서 사용자를 식별하는 이름을 지정합니다.

LOGIN login_name

데이터베이스 사용자를 생성할 SQL Server 로그인을 지정합니다. login_name은 서버에서 유효한 로그인이어야 합니다. 이 SQL Server 로그인은 데이터베이스에 액세스할 때 생성될 데이터베이스 사용자의 이름과 ID를 얻게 됩니다.

CERTIFICATE cert_name

데이터베이스 사용자를 생성할 인증서를 지정합니다.

ASYMMETRIC KEY asym_key_name

데이터베이스 사용자를 생성할 비대칭 키를 지정합니다.

WITH DEFAULT_SCHEMA = schema_name

서버가 이 데이터베이스 사용자에 대한 개체의 이름을 확인할 때 검색할 첫 번째 스키마를 지정합니다.

WITHOUT LOGIN

사용자가 기존 로그인에 매핑되지 않도록 지정합니다.

주의

FOR LOGIN을 생략하면 새 데이터베이스 사용자가 같은 이름으로 SQL Server 로그인에 매핑됩니다.

DEFAULT_SCHEMA를 정의하지 않은 채로 두면 dbo가 데이터베이스 사용자의 기본 스키마로 사용됩니다. DEFAULT_SCHEMA는 현재 데이터베이스에 없는 스키마로 설정할 수 있으며 가리키는 스키마가 생성되기 전에 설정할 수 있습니다. Windows 그룹, 인증서 또는 비대칭 키에 매핑된 사용자를 생성할 때는 DEFAULT_SCHEMA를 지정할 수 없습니다.

WITHOUT LOGIN 절은 자체 데이터베이스 내에서만 작동할 수 있는 사용자를 만듭니다. 이 사용자는 어떤 로그인에도 매핑할 수 없습니다.

SQL Server 로그인, 인증서 또는 비대칭 키에 매핑되는 사용자의 이름에는 백슬래시 문자(\)가 포함될 수 없습니다.

guest 사용자가 이미 모든 데이터베이스 내에 있기 때문에 CREATE USER를 사용하여 guest 사용자를 만들 수 없습니다. 다음과 같이 CONNECT 권한을 부여하여 guest 사용자를 사용할 수 있습니다.

GRANT CONNECT TO GUEST;
GO

데이터베이스 사용자에 대한 정보는 sys.database_principals(Transact-SQL) 카탈로그 뷰에서 볼 수 있습니다.

사용 권한

데이터베이스에 대한 ALTER ANY USER 권한이 필요합니다.


1. 데이터베이스 사용자 만들기

다음 예에서는 암호를 사용하여 AbolrousHazem이라는 서버 로그인을 만든 다음 AdventureWorks에 해당 데이터베이스 사용자 AbolrousHazem을 만듭니다.

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks;
CREATE USER AbolrousHazem;
GO 

2. 기본 스키마로 데이터베이스 사용자 만들기

다음 예에서는 암호를 사용하여 WanidaBenshoof라는 서버 로그인을 만든 다음 기본 스키마인 Marketing을 사용하여 해당 데이터베이스 사용자 Wanida를 만듭니다.

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

3. 인증서에서 데이터베이스 사용자 만들기

다음 예에서는 CarnationProduction50 인증서에서 데이터베이스 사용자 JinghaoLiu를 만듭니다.

USE AdventureWorks;
CREATE CERTIFICATE CarnationProduction50
    WITH SUBJECT = 'Carnation Production Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO 

+ Recent posts