AD에 DirectoryEntry 로 객체를 찾은 후 해당 객체의 member 를 조회할때
보통은 group.properties["member"].value 로 검색을 하여 찾는다.

그런데 해당 member 에 할당된 객체수가 1500 건이 넘어가면 1500건 이상 조회가 되지 않는다.
아래는 1500건이 넘는경우 조회하는 방법이다. 

member 객체수가 1500 이상인 그룹에서 테스트를 해보면 마지막 cnt 값이 1500을 넘는것을 확인 할 수 있을것이다.
위 내용은 MSDN을 참조하였다.

출처: http://msdn.microsoft.com/ko-kr/library/ms180907(v=vs.90).aspx


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

받은 트랙백이 없고 , 댓글이 없습니다.
secret

● 교착상태


한 작업에서 잠근 리소스를 다른 작업에서 잠그려고 하여 둘 이상의 태스크가 서로 영구적으로 차단하면 교착 상태가 발생합니다. 예를 들면 다음과 같습니다.


  • 트랜잭션 A가 1행에 대한 공유 잠금을 획득합니다.

  • 트랜잭션 B가 2행에 대한 공유 잠금을 획득합니다.

  • 트랜잭션 A가 2행에 대한 배타적 잠금을 요청하고 트랜잭션 B가 2행에 대해 소유하고 있는 공유 잠금을 종료 및 해제할 때까지 트랜잭션 A가 차단됩니다.

  • 트랜잭션 B가 1행에 대한 배타적 잠금을 요청하고 트랜잭션 A가 1행에 대해 소유하고 있는 공유 잠금을 종료 및 해제할 때까지 트랜잭션 B가 차단됩니다.


트랜잭션 B가 완료되어야 트랜잭션 A도 완료될 수 있지만 트랜잭션 B는 트랜잭션 A에 의해 차단된 상태입니다. 이러한 상태를 순환 종속 관계라고 합니다. 트랜잭션 A는 트랜잭션 B에 종속되고 트랜잭션 B는 트랜잭션 A에 종속된 형태로 순환됩니다.


교착 상태의 트랜잭션은 둘 다 외부 프로세스에서 교착 상태를 해제할 때까지 기다립니다. MicrosoftSQL Server 데이터베이스 엔진 교착 상태 모니터는 교착 상태에 있는 태스크가 있는지 주기적으로 검사합니다. 순환 종속 관계가 발견되면 모니터는 두 작업 중 처리하지 않을 태스크를 하나 선택하고 해당 트랜잭션을 오류와 함께 종료합니다. 이렇게 하여 다른 태스크가 해당 트랜잭션을 완료할 수 있습니다. 오류와 함께 종료된 트랜잭션의 응용 프로그램은 해당 트랜잭션을 다시 시도하며 이 트랜잭션은 대개 교착 상태의 다른 트랜잭션이 완료된 후에 끝납니다.


응용 프로그램에 특정 코딩 규칙을 사용하여 응용 프로그램에서 교착 상태를 일으킬 가능성을 줄일 수 있습니다. 자세한 내용은 교착 상태 최소화를 참조하십시오.


교착 상태는 종종 일반적인 차단과 혼동됩니다. 트랜잭션이 다른 트랜잭션에서 잠근 리소스에 대한 잠금을 요청하면 잠금이 해제될 때까지 잠금을 요청한 트랜잭션이 기다립니다. 기본적으로 LOCK_TIMEOUT이 설정되지 않은 한 SQL Server 트랜잭션 시간은 제한되지 않습니다. 잠금을 요청하는 트랜잭션은 잠금을 소유하는 트랜잭션을 차단하기 위한 작업을 수행하지 않으므로 교착 상태에 빠지지 않고 차단됩니다. 결국 잠금을 소유하는 트랜잭션이 완료되고 잠금을 해제하면 잠금을 요청하는 트랜잭션에 잠금이 허가되고 트랜잭션이 진행됩니다.


교착 상태는 deadly embrace(치명적인 포옹)라고도 합니다.


교착 상태는 관계형 데이터베이스 관리 시스템뿐만 아니라 다중 스레드를 사용하는 어느 시스템에서나 발생할 수 있으며 데이터베이스 개체에 대한 잠금 이외의 리소스에 대해 발생할 수 있습니다. 예를 들어 다중 스레드 운영 체제의 스레드는 메모리 블록과 같은 하나 이상의 리소스를 획득할 수 있습니다. 획득하려는 리소스를 현재 다른 스레드가 소유하고 있으면 대상 리소스가 해제될 때까지 첫 번째 스레드가 기다려야 할 수 있습니다. 이렇게 대기 중인 스레드는 해당 리소스에 대해 리소스를 소유하는 스레드에 종속됩니다. 데이터베이스 엔진의 인스턴스에서 세션은 메모리나 스레드 등의 데이터베이스가 아닌 리소스를 획득할 때 교착 상태에 빠질 수 있습니다.


트랜잭션 교착 상태를 보여 주는 다이어그램


이 그림에서 트랜잭션 T1은 Part 테이블 잠금 리소스에 대해 트랜잭션 T2에 종속됩니다. 마찬가지로 스레드 T2는 Supplier 테이블 잠금 리소스에 대해 트랜잭션 T1에 종속됩니다. 이러한 종속 관계는 순환적이므로 스레드 T1과 T2 간에 교착 상태가 발생합니다.


테이블이 분할되고 ALTER TABLE의 LOCK_ESCALATION 설정이 AUTO로 설정된 경우에도 교착 상태가 발생할 수 있습니다. LOCK_ESCALATION이 AUTO로 설정되면 데이터베이스 엔진에서 TABLE 수준이 아니라 HoBT 수준에서 테이블 파티션을 잠그도록 허용하여 동시성이 증가합니다. 그러나 개별 트랜잭션이 테이블에 파티션 잠금을 보유하고 다른 트랜잭션 파티션에서 잠금을 원하면 교착 상태가 발생합니다. 이런 유형의 교착 상태는 LOCK_ESCALATION을 TABLE로 설정하면 방지할 수 있습니다. 하지만 이 설정으로 인해 테이블 잠금을 기다리도록 파티션에 대규모 업데이트가 강제 적용되어 동시성이 감소됩니다.


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


위 내용은 MSDN에서 참조한 내용이다.


출처 : http://msdn.microsoft.com/ko-kr/library/ms177433(v=sql.100).aspx



하나의 테이블에 여러 트랜잭선에서 동시다발적으로 UPDATE/DELETE 등을 실행할 경우 교착상태(DEADLOCK)이 발생한다.
보통 이런경우 아래와 같은 에러메세지가 출력한다.


SqlException:System.Data.SqlClient.SqlException (0x80131904): 트랜잭션(프로세스 ID 95)이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.


이런 증상을 최소화 하기 위해서는 몇가지 방법이 있다.


1. 인덱스를 설정한다. 인덱스가 없는 경우 DEADLOCK 이 발생할 확률이 넓어진다.
2. 트랜젝션을 가급적 짧고 단순하게 만든다.
3. Transaction Isolation Level 을 "Read UnCommitted"로 설정한다.
4.
LOCK_ESCALATION 을 "Disable", ALLOW_PAGE_LOCKS 를 "OFF"로 설정한다.


위의 4가지 항목들을 모두 설정해야 오류가 발생하지 않는것 같다.



▷ Isolation Level 설정 방법


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


쿼리문 상단에 위 설정구분을 넣어두면 된다.



▷ LOCK_ESCALATION 설정 방법


ALTER TABLE dbo.tb_ExTable SET (LOCK_ESCALATION = DISABLE )


LOCK_ESCALATION 은 AUTO, TABLE, DISABLE 로 설정할 수 있다.(기본값 TABLE)
설정된 LOCK_ESCALATION 값을 보고 싶은경우 아래와 같은 쿼리를 실행하면 된다.


SELECT lock_escalation, lock_escalation_desc FROM sys.tables WHERE name IN ('tb_ExTable')



▷ ALLOW_PAGE_LOCKS 설정 방법


EXEC SP_INDEXOPTION tb_ExTable, DISALLOWPAGELOCKS, 1;


ALLOW_PAGE_LOCKS 는 테이블 생성할 때 WITH 문에 "ALLOW_PAGE_LOCKS = OFF"를 추가 하거나
위와 같이 테이블 생성 이후 DISALLOWPAGELOCKS 를 "1"로 설정하여 값을 변경할 수 있다.
설정된 ALLOW_PAGE_LOCKS 값을 보고 싶은 경우 아래와 같은 쿼리를 실행하면 된다.


SELECT ALLOW_PAGE_LOCKS FROM sys.indexes
WHERE OBJECT_ID IN (OBJECT_ID('tb_ExTable'))



위 항목들을 모두 설정하였는데도 에러가 발생한다면;;;;
다른 방법을 찾아보기 바란다.
SP 또는 해당 Update/Delete 작업을 최소한으로 수정하여 처리하는 방법밖에 없을것 같다. 




저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백이 하나이고 , 댓글이 없습니다.
secret
SQL 에서 정규식을 어떻게 사용해야 하는지 검색을 하다 찾은 방법입니다.
MS-SQL 2005 부터는 닷넷 dll을 등록해서 사용할수 있다고 합니다.

출처 : http://jihyunsama.egloos.com/4601342

우선 닷넷에서 dll을 만듭니다.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;

namespace UserRegexFunctions
{
    public partial class UserRegex
    {
        public static SqlString RegexMatch(SqlString pattern, SqlString val)
        {
            if (pattern.IsNull || val.IsNull)
                return SqlString.Null;
            else
            {
                string strRet = "";
                Regex rx = new Regex(pattern.Value, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                MatchCollection matches = rx.Matches(val.Value);
                foreach (Match match in matches)
                {
                    strRet += match.Value;
                }
                return new SqlString(strRet);
            }
        }
    }
}

그리고 해당 dll을 DB 서버로 올린 후

DB 서버에서 아래 쿼리를 실행 시킵니다.

--CLR이 가능하도록 CONFIGURE 를 수정 한다.
SET NOCOUNT ON;
USE MASTER;

ALTER database [MASTER] SET TRUSTWORTHY ON; <- 클러스트링 되어 있는 서버에는 해당 DB에 추가한다.

EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO

USE MASTER;
-- DLL을 어셈블리에 등록한다.
CREATE ASSEMBLY UserRegexFunction
FROM 'D:\Project\UserRegexFunctions\UserRegexFunctions\bin\Debug\UserRegexFunctions.dll'
WITH PERMISSION_SET = SAFE;

-- DLL을 사용하는 사용자 정의 함수를 생성한다.
CREATE FUNCTION [dbo].[UserRegexFunction](@Pattern [nvarchar](max), @Val [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [UserRegexFunction].[UserRegexFunctions.UserRegex].[RegexMatch];
GO

// 사용자 정의 함수를 사용하여 정규식을 실행한다.
USE MASTER
SELECT dbo.UserRegexFunction(우하하하하하하(t,b+), '\([^)]*\)')

결과 : 우하하하하하하(t,b+) -> 우하하하하하


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백이 하나이고 , 댓글이 없습니다.
secret
파티션된 테이블을 관리하다 보면 오래된 정보들은 사용을 많이 안하게 된다.
이러한 정보들을 따로 관리하기 위해 기존 파티션 테이블에서 빼내서 새로운 파티션 테이블에 추가하는 방법이 파티션 스위칭(슬라이딩 윈도우) 이다.

우선 월별로 나누어져 있는 파티션 테이블이 있다고 가정하에 설명하겠다.

  기존 파티션 테이블
 2009-04
 2009-05
 2009-06
 2009-07
 2009-08
 2009-09
 빈 파티션

1) 파티션 분할
기존 파티션 테이블에서 오래된 항목을 새로운 파티션으로 나누어 만든다.

ALTER PARTITION FUNCTION Partition_Function
SPLIT RANGE (Value);

Partition_Function : 파티션 함수명
Value : 새로운 구분값

위 문법을 적용한 예제는 아래와 같다.

ALTER PARTITION FUNCTION MarsterPF()
SPLIT RANGE ('2009-10');

위와 같이 기존 파티션을 나누면 2009-10 이후의 파티션이 새로 하나 생성이 된다.

마찬가지로 History 파티션도 새로 추가할 파티션을 하나 새로 생성한다.

HIstory 파티션 테이블
 2009-03
 빈 파티션

ALTER PARTITION FUNCTION HistoryPF()
SPLIT RANGE ('2009-04');

여기에는 기존 파티션에 가장 오래된 파티션의 기준값과 동일하게 정한다.

2) 파티션 스위칭
각각의 파티션 테이블에 새로운 파티션을 생성했으니 이제는 기존 파티션 테이블에서 History 파티션 테이블로
데이타를 옴겨야 한다.

ALTER TABLE Master_Table_Name
SWITCH PARTITION Marster_Partition_Number to
History_Table_Name PARTITION History_Partition_Number

Marster_Table_Name : 기존 파티션 테이블명
Marster_Partition_Number : History 파티션 테이블로 보낼 파티션 번호
History_Table_Name : History 파티션 테이블명
History_Partition_Number : History 파티션 테이블에 추가될 파티션 번호

위 문법을 적용한 예제는 다음과 같다.

ALTER TABLE [tempdb].[TestCalender]
SWITCH PARTITION 1 to
[tempdb].[HIstoryTestCalender] PARTITION 2

위와 같이 기존 파티션 테이블에서 가장 오래된 1 번 파티션을 History 파티션 테이블의 2번 파티션으로 옮긴다.
실제 옮길때는 메타데이타만 이동하기 때문에 시간이 오래 걸리지는 않는다.

3) 파티션 병함
마지막으로 기존 파티션 테이블에서 History 파티션 테이블로 이동한 파티션은 비워져있기 때문에 해당 파티션을 병합한다.

ALTER PARTITION FUNCTION Partition_Function
MERGE RANGE (Value);

Partition_Function : 파티션 함수명
Value : 오래된 구분값

위 문법을 적용한 예제는 아래와 같다.

ALTER PARTITION FUNCTION MarsterPF()
MERGE RANGE ('2009-04');

위와 같이 가장 오래된 파티션 테이블을 병합하면 해당 파티션은 사라진다.

마찬가지로 History 파티션도 오래된 파티션은 병합을 한다. 하지만 History 파티션 테이블도 기준값(월별)별로 관리를 할려면
병합을 하지 않아도 된다.
병합을 하지 않은경우 파티션 스위칭 시 History 파티션 번호를 잘 확인해야 한다.

병합전에는 항상 sys.partition_range_values 라는 테이블로 항상 파티션 테이블을 확인해보고 병합한다.
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

받은 트랙백이 없고 , 댓글이 없습니다.
secret

테이블 파티션을 사용하면 데이터 하위 집합을 빠르고 효율적으로 관리 및 액세스하는 동시에 데이터 컬렉션의 무결성을
유지할 수 있으므로 큰 테이블 또는 인덱스를 보다 편리하게 관리할 수 있습니다. 테이블 파티션을 사용하면 이전 릴리스에서는 몇 분 내지 몇 시간이 걸렸던 작업(예: OLTP에서 OLAP 시스템으로 데이터 로드)이 몇 초 안에 끝납니다.
데이터 하위 집합에서 수행되는 유지 관리 작업도 보다 효율적으로 수행할 수 있습니다. 전체 테이블 대신 필요한 데이터만
대상으로 삼기 때문입니다.

참고 분할 테이블 및 인덱스는 Microsoft SQL Server 2005 Enterprise Edition 및 Developer Edition에서만 지원됩니다.

분할된 테이블 및 인덱스의 데이터는 데이터베이스에서 두 개 이상의 파일 그룹으로 분할될 수 있는 단위로 나누어집니다. 행 그룹이 개별 파티션에 매핑되도록 데이터는 수평적으로 분할됩니다. 데이터에서 쿼리나 업데이트가 수행되면 테이블이나 인덱스는 단일 논리적 엔터티로 처리됩니다. 단일 인덱스나 테이블의 모든 파티션은 동일 데이터베이스에 상주해야 합니다.

분할된 테이블 및 인덱스는 제약 조건, 기본값, ID 및 타임스탬프 값, 트리거 등 표준 테이블 및 인덱스를 디자인하고 쿼리하는 작업과 관련된 모든 속성과 기능을 지원합니다. 따라서 한 서버의 로컬에만 있는 분할된 뷰를 구현하려는 경우에는 분할된 테이블을 대신 구현할 수도 있습니다.

현재 테이블의 크기, 증가된 테이블의 크기, 테이블의 사용 방법, 테이블이 사용자 쿼리 및 유지 관리 작업을 얼마나 잘 수행하는지에 따라 분할을 구현할지 여부를 결정합니다.

일반적으로 큰 테이블은 다음의 두 조건이 모두 충족될 때 분할에 적합합니다.

    ▷ 테이블에 서로 다른 방법으로 사용되는 데이터가 많거나 많아질 것으로 예상됩니다. 
    ▷ 테이블에 대한 쿼리나 업데이트가 의도 대로 수행되지 않거나 유지 관리 비용이 미리 정의된 유지 관리 기간을 초과합니다.

예를 들어 데이터가 이번 달의 경우 주로 INSERT, UPDATE 및 DELETE 작업에 사용되는 반면 이전 달의 경우 SELECT 쿼리에 사용된 경우에는 테이블을 월별로 분할하는 것이 관리하기에 더 수월할 수도 있습니다. 테이블의 정기적인 유지 관리 작업에서 데이터 하위 집합만을 대상으로 해야 하는 경우에 이러한 이점이 특히 부각됩니다. 테이블이 분할되어 있지 않으면 이러한 작업이 전체 데이터 집합에서 많은 리소스를 소비하게 됩니다. 예를 들어 분할을 사용하면 인덱스 다시 작성 및 조각화 모음 같은 유지 관리 작업을 단일 월의 읽기 전용 데이터에서 수행할 수 있습니다. 이때에도 읽기 전용 데이터는 여전히 온라인 액세스가 가능합니다.

이 예를 좀 더 확장하여 분석을 위해 1개월의 읽기 전용 데이터를 이 테이블에서 데이터 웨어하우스 테이블로 이동하려는 경우를 가정해 보십시오. 분할을 사용하면 데이터 하위 집합을 오프라인 유지 관리를 위한 준비 영역으로 빠르게 나눈 다음 기존 분할 테이블에 파티션으로 추가할 수 있습니다. 이때 이러한 테이블은 모두 동일한 데이터베이스 인스턴스에 있다고 가정합니다. 이전 릴리스에서 몇 분에서 몇 시간까지 걸렸던 이러한 작업은 일반적으로 몇 초밖에 걸리지 않습니다. 

테이블 파티션을 만들기 위해서는 다음과 같은 순서로 작업하면 데이타를 분할해서 테이블에 저장할 수 있습니다.
일반적으로 작업하는 경우에는 테이블을 생성하고 Insert를 계속 수행하면 단순하게 입력됩니다. 이런 일반 테이블과는 달리 파티션 테이블에서는 사전 작업이 필요합니다.
필요하다면 파일 그룹을 생성해서 서로 다른 디스크 드라이브에 저장 공간을 할당하고 파티션 함수와 파티션 스키마를 적용시켜서 필요한 규칙대로 데이터가 분할되어서 저장되게 합니다.

1) 파일그룹 생성

우선 테이블을 나누기 휘한 파티션 그룹이 필요하다.

USE TP_Test
GO
ALTER DATABASE TP_Test ADD FILEGROUP fg1
ALTER DATABASE TP_Test ADD FILEGROUP fg2
ALTER DATABASE TP_Test ADD FILEGROUP fg3
ALTER DATABASE TP_Test ADD FILEGROUP fg4

ALTER DATABASE TP_Test
ADD FILE
( NAME = data1,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test1.ndf',
  SIZE = 1MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 1MB)
TO FILEGROUP fg1

ALTER DATABASE TP_Test
ADD FILE
( NAME = data1,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test2.ndf',
  SIZE = 1MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 1MB)
TO FILEGROUP fg2

ALTER DATABASE TP_Test
ADD FILE
( NAME = data1,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test3.ndf',
  SIZE = 1MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 1MB)
TO FILEGROUP fg3

ALTER DATABASE TP_Test
ADD FILE
( NAME = data1,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test4.ndf',
  SIZE = 1MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 1MB)
TO FILEGROUP fg4

하나의 데이타 베이스에 FILEGROUP 을 fg1~fg4까지 4개로 생성을 합니다.

2) PARTITION FUNCTION 생성


파티션 생성 함수 문법은 다음과 같습니다.

CREATE PARTITION FUNCTION Partition_Function (InputType)
AS RANGE [LEFT | RIGHT]
FOR VALUES (Value1,[Value2],...)

테이블 파티션 작업을 하기 위해서는 위와 같이 우선 테이블 파티션 생성 함수가 필요합니다.

Partition_Function : 파티션 함수명
InputType : 기준이 되는 파라메터 타입
Range : 구분 기준(기본값은 LEFT)
VALUES : 구분값(1개이상은 적용해아 분할이 됨)

위 문법을 적용한 예제는 아래와 같습니다.

CREATE PARTITION FUNCTION CalenderPF (NVARCHAR(4))
AS RANGE LEFT
FOR VALUES ('4월','7월','10월')

위와 같이 함수를 생성하면 월별로 입력받는다고 가정을 한다면
1~3월까지는 첫번째 파티션에,
4~6월까지는 두번째 파티션에,
7~9월까지는 세번째 파티션에,
10~12월까지는 네번째 파티션에 저장됩니다.

모두를 합하면 전체 데이타가 되고 각각 파티션 별로 분기별 데이타가 됩니다.
그리고 AS RANGE LEFT 는 각 파티션별 구분값을 앞에서 비교할것인지 뒤에서 비교할것인지를 확인 하는 기준값입니다.

3) PARTITION SCHEME 생성

파티션 스키마 생성 문법은 다음과 같습니다.

CREATE PARTITION SCHEME Partition_Schema
AS PARTITIOIN Partition_Function
[ALL] TO (File_Group1|[PRIMERY],[File_Group2],...)

파티션 함수가 생성되면 그다음은 위와 같이 스키마를 생성해야 합니다.

Partition_Schema : 파티션 스키마명
Partition_Function : 파티션 함수명
FileGroup : 파티션을 나눌 파일 그룹

위 문법을 적용한 예제는 다음과 같습니다.

CREATE PARTITION SCHEME CalenderPS
AS PARTITIOIN CalenderPF
TO (fg1, fg2, fg3, fg4)

위와 같이 스키마를 생성하면 파일 그룹별로 파티션이 생성됩니다.
파일 그룹을 동일 드라이브로 잡아도 되고 그룹별로 다른 드라이브를 잡아서 작업을 하셔도 됩니다.

4) 파티션 테이블 생성

마지막으로 테스트할 파티션 테이블을 생성하면 됩니다.

CREATE TABLE tempdb.TestCalender
(     Seq INT,
      Month NVARCHAR(4))
ON CalenderPS ( Month )

테이블 생성시 위에서 만들어준 파티션 스키마와 파티션을 나눌 파라메터 값을 등록합니다.

이제 모든 준비는 끝났습니다.
테스트를 위해 데이타를 등록해 보겠습니다.

INSERT tempdb.TestCalender VALUES(1, '2월')
INSERT tempdb.TestCalender VALUES(1, '4월')
INSERT tempdb.TestCalender VALUES(1, '8월')
INSERT tempdb.TestCalender VALUES(1, '12월')

데이타를 모드 등록하고 등록된 정보를 조회하면 파티션 별로 데이타가 등록된걸 볼수 있습니다.

SELECT Month, $partition.CalenderPF(Month) FileGroup
FROM tempdb.TestCalender

위와 같이 SELECT 조회를 하면 데이타 별로 입력된 파티션 정보가 나타납니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

받은 트랙백이 없고 , 댓글이 없습니다.
secret
프로젝트를 진행하면서 서버에서 개발할때 분명 "ASP.NET 웹 응용 프로그램" 이라는 프로젝트 형식이 존재했었는데 어느날 로컬에서 확인을 해보니 "ASP.NET 웹 응용 프로그램" 이라는 프로젝트 형식이 안보이는게 아닌가...;;;

그래서 서버에서 작업을 하던 소스를 로컬에서 불러올 수가 없었다.

임시방편으로 로컬에 새 웹 싸이트 프로젝트를 생성하여 소스만 카피해와 동일 하게 구현하여 작업을 하였다.

그리고 나서 찾아보니 아래와 같은 이유가 있었다...;; 무식하면 죄다ㅜㅜ

아래 원문은 HeeJae's Blog 에서 퍼온 글이다.

===========================================================================================================

Visual Studio 2005 가 릴리지 된지 어언.... 어언... 하여간 좀 됐다. VS 2005 가 릴리즈 된후에 가장 많이 받은 feedback 중 하나가 VS 2005에서 새로 바뀐 웹 프로젝트 방식이 기존 2003 방식과 너무 달라 2003에서 2005로 Migrate 하기가 힘들다는 거였다.

소위 Web Site Project 라 불리는 이 새로운 방식은 일반적인 VS project system을 사용하지 않고 php나 asp 처럼 on-demand로 각 페이지를 컴파일 하고 서비스 하는 방법인데, 그 나름의 사용상의 편의점이나 이점이 있다.
 
문제는 WSP가 WAP 보다 낫다 나쁘다가 아니라, 이 새로운 WSP를 채용하면서 기존의 WAP - Web Application Project의 지원을 아예 안 함으로써 기존 WAP 형태로 많은 코드를 이미 보유 하고 있는 기업/사람들로 하여금 VS 2005를 사용하기 위해선 기존 WAP을 WSP로 무조건 바꾸게 하는것이 문제 였다.

하여간 많은 분들이 이 점을 지적하자 VS 2005가 발표된 이후 Venus team 에서 Add-in 형식으로 VS 2005에서 2003과 같은 WAP 형태의 웹 프로젝트를 사용 가능 하게 하는 AddIn을 발표 하였다.

이번 VS 2005 SP1에서 이 Add-in 형식으로 발표된 기능을 SP1에 집어 넣기로 했다.

다시 말해 SP1 부터 WAP 을 지원하기로 한거다. 여기 까지는 우리 팀이 아닌 Venus 팀의 일이라 나도 자세히 모른다 더 자세한 정보는 Venus team의 blog를 읽어 보기 바란다.

하여간, 이렇게 SP1에 부터 web application project 형태의 웹 프로젝트를 지원하기로 함으로써 우리 C# IDE 팀도 WAP 형태의 프로젝트에 맞게 몇가지 수정을 해야 하는데. 현재 아직 어떻게 할지 결정이 안난 상태다.

일단 문제가 무엇이냐면. 이 새로운 WAP 에서는 aspx 파일에 불록 안에 들어 있는 코드에 대해 몇가지 지원 되지 않는 기능이 있다.

첫째는 aspx 파일 안에는 Find All reference가 작동 하지 않게 된다.
두번째는 rename refactoring 기능이 작동하지 않게 된다.
세번째는 Go to Definition이 소스 파일로 가는게 아니라 메타 데이타로 가게 된다.

이유는 WAP 시스템이 내부적으로 작동하는 방식 때문인데 알다 시피 WAP은 VS 2003 버젼에서 쓰던 시스템이고 그때 까지는 모든 reference가 metadata reference 였다.

다시 말해 솔루션 안에 2개의 C# 프로젝트 간에 reference를 추가 하더라도 이건 project to project의 reference가 아닌, project to metadata reference 였다.
 
이번 2005에 들어가면서 새로 도입된 기능이 project to project 기능인데, 이 기능이 들어 가면서 사용자가 다른 project에서 정의 된 타입에 대해 go to definition을 하게 되면 자동으로 그 소스 파일을 열어 IDE에 보여줄수 있게 된거다.

하지만 이 WAP은 여전히 VS 2003 형태의 시스템을 사용하게 됨으로써, code behind 파일이 metadata reference로 aspx 파일에 전달 되게 되고, 이렇게 됨으로써 위에 말한 여러 기능들을 사용할수 없게 되는거다.

VS 2003과 비교해서 더 나뻐지는건 없지만 VS 2005에 새로 들어간 여러 가지 기능들을 쓸수 없게 된다.

어떻게 결론 날진 모르겠지만, 하여간 몇가지 안되는 기능들이 있더라도, WAP 형태로 웹을 쓰시고 싶으신 분들은 SP1 을 이용하시면 2003과 똑같은 작업 환경을 이용하실수 있을꺼 같다.
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백  10 , 댓글이 없습니다.
secret
출처 : http://blogs.msdn.com/jspark/default.aspx

Silverlight 에 대해 웹서핑중 박중석님의 강좌가 있어서 퍼왔습니다.

Silverlight 공부중이신분은 많은 도움이 되셨으면 좋겠네요~^^
 
-----------------------------------------------------------------------------------------------

찰떡궁합 Silverlight & ASP.NET

지난주 목요일 MSDN세미나 에서 찰떡궁합 Silverlight & ASP.NET 이라는 세션을 진행을 했습니다.
저와 훈스닷넷 ASP.NET시샵 서동진님, Silverlight 시샵 오일석님과 3명이서 같이 했는데요,

제가 왜 ASP.NET과 Silverlight을 같이 사용해야 하는지에 대해서 간단히 10여분 동안 설명을 했고, 오일석 님이 ASP.NET에서 사용가능한 두개의 Silverlight 컨트롤(MediaPlayer, Silverlight)에 대한 사용 데모를 Live로 보여 주셨습니다.

그리고 서동진 님이 ASP.NET 의 컨트롤과 Silverlight 를 연동하고 그 외에 LINQ나 WCF와 같은 기술을 사용해서 댓글을 달 수 있는 멋진 Silverlight MediaPlayer 만들기를 Live 로 보여 주셨습니다.(아래쪽 링크에 가시면 소스코드를 보실 수 있습니다)

평일 오후에 포스코센터 서관 5층을 세미나 실을 가득 메워주셨던 발표 자료 및 영상을 아래 공유 합니다. 추후에 촬영 본이 나오겠지만 그날 오셨던 분들 중에 데모를 다시 보고 싶으시거나 혹은 부득이하게 못오신 분들이 보시면 좋을 것 같습니다.

Soapbox에 올리느라 전체화면으로 보시면 화질이 별로 좋지 못한데요, 세세한 코드 보다는 전체적인 진행을 보시면 더 좋을 것 같습니다. 필요하신 분들이 있으시면 댓글을 달아주시면 더 좋은 화질을 볼 수 있도록 영상을 올려드리도록 하겠습니다.

세션의 결론은 Silverlight 와 ASP.NET 찰떡궁합이라는 문장으로 끝을 맺었는데요, Silverlight으로 미디어 플레이어를 만들거나 혹은 실버라이트로 만든 컨트롤틀 ASP.NET 페이지에 쉽게 적용해서 사용자들이 쓰기 편한 웹 애플리케이션을 개발자들이 더 많이 만들 수 있으면 좋겠습니다.

발표자료 및 소스코드 다운로드

발표영상(1/3) : 박중석 - 찰떡궁합 ASP.NET & SIlverlight



발표영상(2/3) : 오일석 - ASP.NET용 Silverlight 컨트롤의 사용
|

발표영상(3/3) : 서동진 - Silverlight 와 ASP.NET의 사용(고급)


끝으로 그날 두개의 세션이 진행되었는데요 이전 세션은 김대우 과장님의 Silverlight 2 세션 이었는데요 UX KOREA 사이트에 가시면 김대우 과장님의 발표자료들도 받으실 수 있습니다.
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백이 하나이고 , 댓글이 없습니다.
secret

Figure 1: FixedDocumentViewer





XPS 문서를 silverlight 를 사용하여 웹에서 보여주는 Toolkit 이다.
현재 나온건 silverlight 1.1 에서 사용가능한 Document Toolkit 1.0 과 Silverlight 2.0, 3.0 에서 사용가능한
Document Toolkit 1.1 Beta 2 버전까지 나온것 같다.
온라인 데모버전(평가판)을 사용해보면 상당히 깔끔하다.

현재 진행중인 프로젝트에서 위 Toolkit 을 사용하기 위해 분석중이다.
잘만 사용하면 데모용만 가지고도 사용이 가능할것 같다.

평가판은 현재 무료로 다운로드 받을수 있다.

Description Size Link
 Document Toolkit 1.0 RTW
Evaluation Version
2.37 MB  DocumentToolkit.msi
Document Toolkit 1.1 Beta 2
Evaluation Version * 
2.84 MB  DocumentToolkit.msi

홈페이지 주소 : http://firstfloorsoftware.com/

위 링크가 연결이 안될 시 아래 파일로 받으세요.
참고로 평가판입니다.


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백이 하나이고 , 댓글이 없습니다.
secret
'/' 응용 프로그램에 서버 오류가 있습니다.
--------------------------------------------------------------------------------

컴파일 오류
설명: 이 요청을 제공하는 데 필요한 리소스를 컴파일하는 동안 오류가 발생했습니다. 아래의 오류 정보를 확인한 다음 소스 코드를 적절하게 수정하십시오.
컴파일러 오류 메시지: CS0016: 'c:WINNTMicrosoft.NETFrameworkv1.1.4322Temporary ASP.NET Filesroot2135a5088d69a834gdksfxh3.dll' 출력 파일에 쓸 수 없습니다. '액세스가 거부되었습니다.
이런 오류가 나옵니다. 물론 검색을 해봐야지요...
MSDN.. 딸랑 한줄 나옵니다. 반가워야 할 에러가 죽도록 밉습니다.
MS사이트 갑니다. 그래도 해결이 어렵습니다.
이런... 마지막으로 외국의 유명 .NET사이트 검색합니다.
역시~ 해결책 나옵니다. ㅋ
데브피아에서 검색하면 IIS의 응용프로그램 폴의 속성중 ID의 계정을 "로컬시스템"으로 변경하라 합니다.
잘 됩니다.
asp.net사이트에서 검색을 합니다. 닷넷 Framework을 복구 시킵니다. "aspnet_regiis /r"을 합니다.
이것도 잘됩니다. 휴~
참고로... VS.NET씨디 넣고 재설치/복구 해도 안되니 하지 마세요. ㅋ
"검색을 생활화 합시다.~!!"
http://www.taeyo.pe.kr 사이트의 박찬규님의 글을 불펌 하였습니다. ㅡㅡa

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

트랙백  3 , 댓글이 없습니다.
secret
{"요청한 작업이 개체의 클래스와 연관된 하나 이상의 제약 조건을 만족하지 않습니다." }
[System.Runtime.InteropServices.COMException]: {System.Runtime.InteropServices.COMException}
System.Object: {System.Runtime.InteropServices.COMException}
_className: null
_COMPlusExceptionCode: -532459699
_exceptionMethod: <정의되지 않은 값>
_exceptionMethodString: null
_helpURL: null
_HResult: -2147016684
_innerException: { }
_message: "요청한 작업이 개체의 클래스와 연관된 하나 이상의 제약 조건을 만족하지 않습니다."
_remoteStackIndex: 0
_remoteStackTraceString: null
_source: null
_stackTrace: {System.Array}
_stackTraceString: null
_xcode: -532459699
_xptrs: 0
HelpLink: null
HResult: -2147016684
InnerException: { }
Message: "요청한 작업이 개체의 클래스와 연관된 하나 이상의 제약 조건을 만족하지 않습니다."
Source: "System.DirectoryServices"
StackTrace: " at System.DirectoryServices.Interop.IAds.SetInfo()rn at System.DirectoryServices.DirectoryEntry.CommitChanges()rn at eHRSync.Sync.ADSync.DoubleDept_Group_IU(DataTable dt) in c:\lotte\source\nets\coutomizition source\ehrsync\sync\adsync.cs:line 977"
TargetSite: {System.Reflection.RuntimeMethodInfo}
=========================================================
위와 같은 에러 메세지가 나왔다....
여러개의 DirectoryEntry 를 생성하다 생긴 오류이다.
오류 발생 사유는 변경하려는 Properties 가 존재하지 않아서 발생하였다.
CommitChanges을 하기전에 변경을 한 Properties 가 있다면 Properties명을 확인해 봐야
할것 같다.

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

WRITTEN BY
WizCody
WizCody 의 Tistory

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. 아 대박 ㅋㅋ
    차장님~ 도움받고 갑니다~
secret