SQL Server 2005 데이터베이스 엔진 기능의 변경 내용 분석

업데이트: 2008년 11월 17일

이 항목에서는 이전 버전의 SQL Server를 기반으로 하는 응용 프로그램을 중단시킬 수도 있는 Microsoft SQL Server 2005의 데이터베이스 엔진에 대한 변경 내용을 설명합니다.

클라이언트/서버 연결

기능 설명

Banyan VINES SPP(Sequenced Packet Protocol), 멀티프로토콜, AppleTalk 또는 NWLink IPX/SPX 네트워크 프로토콜

SQL Server 2005에서는 Banyan VINES SPP(Sequenced Packet Protocol), 멀티프로토콜, AppleTalk 또는 NWLink IPX/SPX 네트워크 프로토콜을 지원하지 않습니다. SQL Server 2005에 연결하려면 클라이언트 응용 프로그램이 지원되는 프로토콜을 사용해야 합니다. 지원되지 않는 프로토콜 중 하나를 사용하도록 설정된 별칭이 있는 경우 지원되는 프로토콜 중 하나를 사용하도록 해당 별칭을 수정해야 합니다.

응용 프로그램 연결 문자열에서 NETWORK=DBMSRPCN(RPC), NETWORK=DBMSADSN(Appletalk) 또는 NETWORK=DBMSVINN(Banyan VINES) 속성을 지정하거나 spx:server\instance(SPX), bv:server(Banyan VINES), adsp:server(AppleTalk) 또는 rpc:server(멀티프로토콜)와 같은 명시적 접두사를 사용하여 지원되지 않는 프로토콜 중 하나를 사용 또는 로드하는 경우에는 지원되는 프로토콜 중 하나를 사용하도록 응용 프로그램을 수정해야 합니다.

자세한 내용은 네트워크 프로토콜 선택을 참조하십시오.

MDAC

MDAC 2.6 이전의 MDAC 버전에서는 명명된 인스턴스를 지원하지 않습니다. 명명된 인스턴스에 대한 응용 프로그램 연결을 허용하려면 현재 버전의 MDAC로 업그레이드합니다.

Winsock 프록시

SQL Server 도구를 사용하여 Winsock 프록시를 구성할 수 없습니다. Winsock 프록시를 구성하는 방법은 프록시 서버 설명서를 참조하십시오.

구성 옵션

기능

설명

AUTO_UPDATE_STATISTICS

데이터베이스를 업그레이드하기 전에 AUTO_UPDATE_STATISTICS를 ON으로 설정하십시오. 그렇지 않으면 데이터베이스 통계가 SQL Server 2005 업그레이드의 일부로 업데이트되지 않습니다. 이전 버전의 SQL Server에서 생성된 통계를 사용하면 만족스럽지 않은 쿼리 계획이 생성될 수 있습니다. AUTO_UPDATE_STATISTICS를 ON으로 설정하면 처음 참조할 때 모든 통계가 업데이트됩니다. 통계를 업데이트하면 쿼리를 실행할 때 보다 만족스러운 쿼리 계획이 선택될 가능성이 커집니다.

ms143179.note(ko-kr,SQL.90).gif참고:

경우에 따라 AUTO_UPDATE_STATISTICS를 ON으로 설정한 후 통계를 처음 참조할 때 통계 업데이트 프로세스로 인해 쿼리의 서버 성능이 영향을 받을 수 있습니다.

ALTER DATABASE 문을 사용하여 AUTO_UPDATE_STATISTICS 데이터베이스 SET 옵션을 ON으로 설정하거나 sp_updatestats를 실행하여 데이터베이스 통계를 업데이트합니다.

max server memory 옵션

SQL Server 2000에서는 시스템 실제 메모리를 사용할 수 있는 경우 SQL Server 버퍼 풀이 max server memory 옵션에 지정된 제한을 초과할 수 있습니다. SQL Server 2005에서는 버퍼 풀이 max server memory 값을 초과할 수 없습니다. 이 제한에 도달하면 "시스템 메모리 부족" 오류가 발생하고 쿼리가 실패합니다.

이 오류가 발생한 경우 max server memory 옵션이 설정되어 있으면 옵션의 값을 늘리거나 기본값인 2147483647로 다시 설정하십시오. 자세한 내용은 server memory 옵션을 참조하십시오.

query governor cost limit 옵션

SET GOVERNOR_QUERY_COST_LIMIT 또는 sp_configure의 query governor cost limit 옵션을 적용하면 이전 버전의 SQL Server에서 실행된 쿼리가 SQL Server 2005에서 실행되지 않을 수 있습니다. 그 이유는 쿼리 비용 모델링이 변경되었기 때문입니다.

연결 또는 서버 인스턴스의 query governor cost limit 설정을 적절한 값으로 업데이트하거나 0으로 설정하여 쿼리 실행 기간을 제한 없음으로 지정하십시오.

데이터베이스, 데이터 및 로그 파일

기능 설명

압축된 드라이브

SQL Server 2005는 압축된 드라이브에서 데이터베이스를 만들거나 업그레이드할 수 없습니다. SQL Server 2005를 설치할 때 시스템 데이터베이스에 대해 압축되지 않은 드라이브를 선택하고 업그레이드할 데이터베이스가 압축된 드라이브에 있지 않은지 확인합니다. 데이터베이스를 업그레이드한 후에는 NTFS 압축 파일 시스템에 읽기 전용 데이터베이스 및 읽기 전용 보조 파일 그룹을 보관할 수 있습니다.

데이터 파일

데이터 파일에서 다음 변경 내용을 처리하려면 추가 디스크 공간이 필요합니다.

  • 각 사용자 데이터베이스의 PRIMARY 파일 그룹에 데이터베이스 개체 및 사용자 권한에 대한 추가 시스템 메타데이터가 생성되어 유지 관리됩니다. 예를 들어 이전 버전의 SQL Server에서는 권한을 허가한 사용자 또는 권한을 허가 받은 사용자와 관련된 사용 권한이 단일 행에 비트맵으로 저장됩니다. SQL Server 2005에서는 이 비트맵이 여러 개의 행으로 확장됩니다.
  • text, ntext 또는 image 데이터 형식으로 정의된 LOB(Large Object) 열은 열당 40바이트의 디스크 공간이 추가로 필요합니다. 이러한 디스크 증가는 각 LOB 열을 처음 업데이트할 때 한 번만 발생합니다.
  • 전체 텍스트 문서 ID(DOCID) 맵이 전체 텍스트 카탈로그 대신 데이터 파일에 저장됩니다.

리소스에서 업그레이드 및 후속 프로덕션 작업 중에 증가하는 크기를 수용할 수 있게 하려면 SQL Server 2005로 업그레이드하기 전에 모든 사용자 데이터의 자동 증가를 ON으로 설정하는 것이 좋습니다. 작업을 업그레이드하고 테스트한 후 자동 증가를 해제하거나 FILEGROWTH 증가분을 그에 맞게 조정할 수 있습니다. 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하십시오.

데이터베이스 호환성 모드

데이터베이스가 이전 버전의 SQL Server에서 SQL Server 2005로 업그레이드되면 데이터베이스는 기존 호환성 수준을 유지합니다. 업그레이드한 후 호환성 모드를 90으로 변경하면 호환성 모드의 차이가 응용 프로그램에 영향을 줄 수 있습니다. 이러한 차이에 대한 자세한 내용은 sp_dbcmptlevel(Transact-SQL)을 참조하십시오.

데이터베이스 ID 32767

이 데이터베이스 ID는 SQL Server 2005에서 예약되었습니다. 업그레이드하기 전에 데이터베이스를 분리합니다.

파일 그룹

SQL Server 2005로 업그레이드하기 전에 SQL Server 인스턴스에 있는 모든 데이터베이스의 파일 그룹을 READ_WRITE로 설정해야 합니다. 파일 그룹을 READ_WRITE로 설정하려면 ALTER DATABASE를 사용합니다.

로그 파일

SQL Server 2005에서는 트랜잭션 로그 파일을 위한 추가 디스크 공간이 필요합니다. SQL Server 2005에서는 충돌 복구의 실행 취소 단계에서 데이터베이스에 액세스할 수 있습니다. 이는 충돌이 발생했을 때 커밋되지 않은 트랜잭션이 충돌 전에 유지하던 잠금을 다시 획득하기 때문에 가능합니다. 트랜잭션이 롤백되는 동안 잠금은 사용자의 다른 작업이 발생하지 않도록 트랜잭션을 보호합니다. 이 추가 잠금 정보를 트랜잭션 로그에 유지해야 합니다.

업그레이드 및 후속 프로덕션 작업 중에 증가하는 크기를 리소스에서 수용할 수 있도록 하려면 SQL Server 2005로 업그레이드하기 전에 모든 사용자 로그 파일의 자동 증가를 ON으로 설정하는 것이 좋습니다. 작업을 업그레이드하고 테스트한 후 자동 증가를 해제하거나 FILEGROWTH 증가분을 그에 맞게 조정할 수 있습니다. 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하십시오.

model 데이터베이스

SQL Server 2005에서는 model 데이터베이스에 다음 변경 내용이 포함됩니다.

  • 최소 크기 증가
  • 호환성 수준이 90으로 설정됨
  • PAGE_VERIFY 데이터베이스 옵션이 CHECKSUM으로 설정됨

tempdb 데이터베이스

SQL Server 2005에서는 tempdb 데이터 및 로그 파일에 추가 디스크 공간이 필요합니다. 업그레이드 및 후속 프로덕션 작업 중에 증가하는 크기를 리소스에서 수용할 수 있게 하려면 SQL Server 2005로 업그레이드하기 전에 모든 tempdb 데이터 및 로그 파일에 대해 자동 증가를 ON으로 설정하는 것이 좋습니다. 작업을 업그레이드하고 테스트한 후 자동 증가를 해제하거나 FILEGROWTH 증가분을 그에 맞게 조정할 수 있습니다.

자세한 내용은 tempdb의 디스크 공간 부족 문제 해결을 참조하십시오.

기능

기능

설명

확장 저장 프로시저

SQL Server 2005로 업그레이드한 후 DLL 이름에 대한 전체 경로 없이 이전에 등록된 확장 저장 프로시저는 작동하지 않을 수도 있습니다. 이는 업그레이드 중에 이전 BINN 디렉터리가 새 경로에 추가되지 않기 때문입니다. SQL Server에서 확장 저장 프로시저를 찾지 못할 수도 있습니다.

SQL Server 2005로 업그레이드하기 전에 전체 경로 이름으로 등록되지 않은 각 확장 저장 프로시저에 대해 다음 단계를 따르십시오.

  1. 확장 저장 프로시저를 제거하려면 sp_dropextendedproc을 실행합니다.
  2. 확장 저장 프로시저를 전체 경로 이름으로 등록하려면 sp_addextendedproc을 실행합니다.

로그 전달

이전 버전의 SQL Server 로그 전달은 SQL Server 2005 로그 전달과 호환되지 않으며 직접 업그레이드할 수 없습니다. SQL Server 2005로 업그레이드한 후 SQL Server Management Studio 또는 저장 프로시저를 사용하여 로그 전달을 다시 구성하십시오. 자세한 내용은 SQL Server 2000 로그 전달 구성을 SQL Server 2005로 마이그레이션를 참조하십시오.

osql 유틸리티

osql 유틸리티는 ED!! 명령을 지원하지 않습니다. 스크립트에서 ED 및 **!!**에 대한 참조를 제거하십시오. ED!! 명령을 사용하려면 대신 sqlcmd 유틸리티를 사용하십시오.

SQL-DMO WMI 공급자

SQL-DMO WMI 공급자는 더 이상 지원되지 않습니다.

SQL 메일

SQL Server는 SQL Server 7.0 또는 SQL Server 2000에서 SQL 메일 업그레이드를 지원하지만 SQL Server 2005에서는 메일 클라이언트로 Microsoft Outlook 2002 이상 버전을 사용해야 합니다.

ms143179.note(ko-kr,SQL.90).gif참고:

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 말고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오. SQL Server 2005에서 메일을 보내려면 데이터베이스 메일을 사용하십시오.

SQL 메일

SQL Server 인증을 사용하여 연결한 클라이언트에서 첨부 파일을 포함하는 SQL 메일을 보내는 경우 SQL Server에서는 적절한 보안 컨텍스트를 설정하지 못하며 오류를 반환합니다. 이 문제를 방지하려면 Windows 인증을 사용하십시오.

SQL-NS(SQL 네임스페이스 API)

SQL-NS(SQL 네임스페이스 API)는 더 이상 지원되지 않습니다.

추적 플래그

SQL Server 2000에서는 A 세션에서 설정한 추적 플래그가 기존 B 세션에서 자동으로 적용되지 않습니다. 대신 B 세션에서 처음으로 추적 플래그를 설정한 후에 적용됩니다. 이 동작은 SQL Server 2000에서 비결정적이며 SQL Server 2005에서는 결정적입니다. SQL Server 2005에서는 A 세션에서 설정한 전역 추적 플래그가 다른 동시 세션에서 즉시 설정됩니다.

또한 SQL Server 2005에서는 DBCC TRACEON 문에 추가 인수를 사용하여 추적 플래그를 로컬 또는 전역으로 지정할 수 있습니다. 두 번째 인수를 지정하지 않으면 SQL Server 2005의 기본값은 로컬입니다. 이것은 기본값이 전역인 SQL Server 2000에서 변경된 사항입니다.

자세한 내용은 추적 플래그(Transact-SQL)를 참조하십시오.

추적 플래그

SQL Server 2005에는 일부 SQL Server 2000 추적 플래그가 제외되었습니다. 일부 추적 플래그는 SQL Server 2005에서 기능이 변경되었습니다. SQL Server 2005로 업그레이드하기 전에 추적 플래그를 모두 해제해야 합니다. 업그레이드 후 추적 플래그의 기능이 변경되지 않았는지 여부를 확인합니다. 추적 플래그를 다시 설정하기 전에 해당 추적 플래그가 계속 필요한지 여부도 확인합니다.

트리거

SQL Server 2005에서는 DML 트리거 내부에서 삽입되거나 삭제된 테이블에 대해 CREATE INDEX와 같은 DDL(데이터 정의 언어) 문을 실행할 수 없습니다. 이전 버전의 SQL Server에서는 삽입되거나 삭제된 테이블에 대해 일부 DDL 문을 실행할 수 있습니다. 자세한 내용은 inserted 및 deleted 테이블 사용을 참조하십시오.

중복 인덱스 이름

SQL Server 2005에서는 중복 테이블 또는 뷰 인덱스 이름이 허용되지 않습니다. 업그레이드하기 전에 인덱스 이름을 바꾸어 중복을 제거하십시오.

  1. 다음 쿼리를 실행하여 중복 인덱스를 찾습니다.

    SELECT DISTINCT OBJECT_NAME(o.id), name
    FROM sysindexes as o
    WHERE EXISTS 
        (SELECT name FROM sysindexes  as i
          WHERE i.id = o.id
          AND i.name = o.name and i.indid < o.indid);
    
  2. sp_rename을 사용하여 인덱스 이름 중 하나를 변경합니다. 인덱스 이름이 같기 때문에 이름이 변경될 인덱스를 결정할 수는 없습니다. 이 단계로 인덱스를 구분할 수 있습니다.

    EXEC sp_rename N'table_name.index_name', N'new_index_name, N'INDEX'
    
  3. 다음 쿼리를 실행하여 인덱스 이름이 변경되었는지 확인합니다. 다음 쿼리는 지정한 테이블이나 뷰의 모든 인덱스(키 열 이름 포함)를 반환합니다.

    SELECT i.name AS IndexName, c.name AS ColumnName, ik.colid, ik.keyno
    FROM sysindexes i
    JOIN sysindexkeys ik ON i.id = ik.id and i.indid = ik.indid 
    JOIN syscolumns c ON c.id = ik.id and ik.colid = c.colid
    WHERE i.id = OBJECT_ID('table_or_view_name')
    
  4. 필요한 경우 다시 sp_rename을 사용하여 인덱스 이름을 수정합니다.

개체 이름

SQL Server 2005에서는 개체 이름에 0xFFFF 문자를 사용할 수 없습니다. 데이터베이스 호환성 수준이 90인 경우 이 유니코드 문자를 포함하는 개체 이름에 액세스할 수 없습니다. 이 문자를 포함하는 개체의 이름을 바꾸십시오.

테이블 변수 및 열 데이터 정렬 일치

SQL Server 2000에서는 테이블 변수에 정의된 열이 tempdb 데이터베이스의 데이터 정렬에 따라 암시적으로 변환됩니다. SQL Server 2005에서는 테이블 변수에 정의된 열이 현재 데이터베이스의 데이터 정렬에 따라 암시적으로 변환됩니다. 따라서 SQL Server 2000 동작을 사용하는 쿼리를 실행할 경우 행의 개수나 순서가 다르게 반환되는 등의 예상치 않은 결과가 반환될 수 있습니다.

예를 들어 tempdb의 데이터 정렬 대신 TestDB 데이터베이스의 데이터 정렬을 사용할 경우, 다음 SELECT 문의 WHERE 절에 지정된 c1 열과 c2 열의 같음 비교 연산에서는 더 많거나 더 적은 수의 행이 반환될 수 있습니다. 예를 들어 데이터 정렬에서 대/소문자를 구분하지 않을 때는 'Name'과 'name' 값이 같은 것으로 평가되지만 데이터 정렬에서 대/소문자를 구분하는 경우에는 그렇지 않습니다.

CREATE DATABASE TestDB COLLATE Estonian_CS_AI;
GO
USE TestDB;
DECLARE @TempTable table (c1 varchar(10), c2 varchar(10);
SELECT * FROM @TempTable WHERE c1 = c2;

현재 데이터베이스의 데이터 정렬이 아닌 다른 데이터 정렬을 사용하려면 DECLARE 문의 열 정의나 해당 열을 참조하는 쿼리에 데이터 정렬을 지정하십시오. 다음 예제에서는 이 두 가지 방법을 보여 줍니다.

USE TestDB;
DECLARE @TempTable table (c1 varchar(10)COLLATE Latin1_General_CS_AS, c2 varchar(10)COLLATE Latin1_General_CS_AS);
SELECT * FROM @TempTable WHERE c1 = c2;
GO
-- or

DECLARE @TempTable table (c1 varchar(10), c2 varchar(10));
SELECT * FROM @TempTable WHERE c1 = c2 COLLATE Latin1_General_CS_AS;
GO

인덱싱된 뷰

기능 설명

함수 결정성

다음 함수 식은 SQL Server 2005에서 비결정적인 것으로 간주되므로 인덱싱된 뷰 생성을 방해할 수 있습니다.

  • 암시적으로 datetimesmalldatetime으로 변환되는 문자열 리터럴에 대한 참조
  • 데이터 정렬 간에 비유니코드 문자 데이터의 암시적 변환

호환성 수준이 80 이하로 설정되지 않은 경우 SQL Server 2005에서 문자열을 datetime 또는 smalldatetime으로 암시적으로 변환하는 작업과 관련된 식은 비결정적인 것으로 간주됩니다. 서버 세션의 LANGUAGE 및 DATEFORMAT 설정에 따라 결과가 달라지기 때문입니다. 예를 들어 언어가 다르면 'listopad' 문자열이 나타내는 월도 다르므로 CONVERT (datetime, '30 listopad 1996', 113) 식의 결과는 LANGUAGE 설정에 따라 달라집니다. 마찬가지로 DATEADD(mm,3,'2000-12-01') 식에서 SQL Server는 DATEFORMAT 설정을 기준으로 '2000-12-01' 문자열을 해석합니다.

호환성 수준이 80 이하로 설정되지 않은 경우에 데이터 정렬 간의 비유니코드 문자 데이터를 암시적으로 변환하는 작업도 비결정적인 것으로 간주됩니다.

데이터베이스 호환성 수준이 90인 경우 이러한 식을 포함하는 뷰에 인덱스를 만들 수 없습니다. 업그레이드된 데이터베이스에서 이러한 식이 포함된 기존 뷰를 유지 관리할 수 있지만 쿼리 최적화 프로그램에서는 80 또는 90 호환성 수준의 쿼리 계획에서 이 같은 뷰를 고려하지 않습니다. 호환성 수준 설정에 대한 자세한 내용은 sp_dbcmptlevel(Transact-SQL)을 참조하십시오.

SQL Server 2005의 인덱싱된 뷰 정의에서 결정적 날짜 형식 스타일을 사용하여 리터럴을 원하는 데이터 형식으로 명시적으로 변환해야 합니다. 결정적인 날짜 형식 스타일의 목록은 CAST 및 CONVERT(Transact-SQL)를 참조하십시오.

SQL Server 2005로 업그레이드된 기존의 인덱싱된 뷰에 문자열에서 날짜로의 암시적 변환을 사용하는 경우 인덱싱된 뷰의 손상을 방지하기 위해 데이터베이스와 응용 프로그램에서 LANGUAGE 및 DATEFORMAT 설정이 일치하는지 확인해야 합니다.

IGNORE_DUP_KEY

SQL Server 2005에서 뷰에 고유 클러스터형 인덱스를 만드는 경우 IGNORE_DUP_KEY 옵션을 OFF로 설정해야 합니다. 이 값은 기본 설정입니다. IGNORE_DUP_KEY를 ON으로 설정하면 인덱싱된 뷰가 손상될 수 있습니다.

뷰의 클러스터형 인덱스를 삭제한 다음 IGNORE_DUP_KEY 옵션을 지정하지 않고 클러스터형 인덱스를 다시 만듭니다.

쿼리 힌트

80 호환성 수준에서는 인덱싱된 뷰 정의의 쿼리 힌트가 무시됩니다. 이에 따라 일부 응용 프로그램이 80 및 90 호환성 수준 간에 다르게 동작할 수 있습니다. 자세한 내용은 인덱싱된 뷰 디자인, 인덱싱된 뷰 만들기쿼리 힌트(Transact-SQL)를 참조하십시오.

보안

기능 설명

로그인 이름

다음과 같은 고정 서버 역할 이름은 SQL Server 2005에서 예약되어 있으므로 사용자 정의 로그인 이름으로 사용할 수 없습니다.

  • sysadmin
  • serveradmin
  • setupadmin
  • securityadmin
  • processadmin
  • dbcreator
  • diskadmin
  • bulkadmin

SQL Server 2005로 업그레이드하기 전에 다음 단계를 수행하십시오.

  1. 다음 문을 실행하여 로그인의 SID(보안 ID)를 기록합니다.

    SELECT name, sid 
    FROM master.dbo.syslogins 
    WHERE name IN('sysadmin', 'serveradmin','setupadmin',
     'securityadmin','processadmin', 'dbcreator','diskadmin',
     'bulkadmin')
  2. 로그인을 삭제합니다.
  3. 새 로그인을 만들려면 sp_addlogin 시스템 프로시저를 사용합니다. 각 해당 로그인의 @sid 매개 변수에 1단계에서 반환된 SID를 지정하십시오.

로그인 SID(보안 ID)

SQL Server 2005에서는 중복 SID(보안 ID)가 허용되지 않습니다. 업그레이드하기 전에 로그인 및 연관된 사용자 중 하나를 제거합니다.

원격 로그인 매핑

이전 버전의 SQL Server에서는 sp_remoteoption 시스템 저장 프로시저를 사용하여 원격 SQL Server 인스턴스에서 제공된 로그인을 트러스트된 상태로 표시할 수 있었습니다. SQL Server 2005에서는 원격 로그인의 레이블을 작성하는 이 방법을 지원하지 않습니다. SQL Server 2005로 업그레이드하면 원격 로그인이 트러스트된 상태로 표시되지 않습니다.

원격 로그인을 설정하고 관리하려면 연결된 서버 및 연결된 서버 저장 프로시저를 사용합니다. 자세한 내용은 서버 연결을 참조하십시오.

SQL Server 6.5 로그인

SQL Server 6.5에서 저장된 암호 해시 형식은 더 이상 지원되지 않습니다. 이전 암호를 SQL Server 2005로 바로 업그레이드할 수 없습니다.

이 로그인을 설정하려면 암호를 다시 설정해야 합니다. ALTER LOGIN을 사용하여 암호를 다시 설정할 수 있습니다.

ALTER LOGIN <login name> WITH PASSWORD = '<new password>' MUST_CHANGE

정책 확인이 설정된 경우 시스템의 암호 복잡성 정책에 따라 새 암호의 유효성을 검사합니다. 복잡한 암호를 사용하고 정책 확인을 해제하지 않는 것이 좋습니다. MUST_CHANGE 옵션을 설정하면 사용자가 새 암호를 선택해야 합니다. 필수 옵션은 아니지만 권장 사항입니다.

다음 쿼리를 사용하여 유휴 SQL Server 6.5 로그인을 확인할 수 있습니다.

SELECT * FROM sysxlogins WHERE (xstatus & 2048) = 2048;
GO

sys 사용자 이름

SQL Server 2005에서는 sys 이름이 예약되어 있으며 사용자 이름으로 사용할 수 없습니다. SQL Server 2005로 업그레이드하기 전에 사용자 이름을 바꾸십시오. 사용자 이름을 바꾸지 않으면 업그레이드 후 데이터베이스가 주의 대상 상태가 되며 온라인 상태가 될 때까지 데이터베이스를 사용할 수 없습니다.

업그레이드 전 절차

SQL Server 2005로 업그레이드하기 전에 sys 사용자가 포함된 각 데이터베이스에서 다음을 수행하십시오.

  1. 새 사용자를 만듭니다.
  2. 다음 문을 사용하여 sys 사용자가 부여한 사용 권한과 sys 사용자에게 부여된 사용 권한을 모두 표시합니다.

    -- Return permissions granted by user sys.
    SELECT * FROM sysprotects WHERE grantor = USER_ID('sys')
    -- Return permissions granted to user sys.
    SELECT * FROM sysprotects WHERE uid = USER_ID('sys')
  3. sys가 소유한 모든 개체의 소유권을 새 사용자로 전송하려면 sp_changeobjectowner를 사용합니다.
  4. sys 사용자를 삭제합니다.
  5. 2단계에서 캡처된 원래 사용 권한을 복원하려면 GRANT 문의 AS new_user 절을 사용합니다.
  6. 새 사용자를 참조하도록 스크립트를 수정합니다.

업그레이드 후 절차

업그레이드하기 전에 sys 사용자의 이름을 바꾸지 않았다면 다음을 수행하십시오.

  1. ALTER DATABASE db_name SET ONLINE 문을 실행합니다. 데이터베이스는 SINGLE_USER 모드가 됩니다.
  2. "업그레이드 전 절차" 섹션의 모든 단계를 수행하십시오.
  3. ALTER DATABASE db_name SET MULTI_USER 문을 실행합니다.

시스템 개체 및 메타데이터

기능 설명

INFORMATION_SCHEMA.COLUMNS

SQL Server 2005에서 INFORMATION_SCHEMA.COLUMNS 뷰의 ORDINAL_POSITION 열은 COLUMNS_UPDATED 함수에서 반환하는 비트 패턴과 호환되지 않습니다.

COLUMNS_UPDATED와 호환되는 비트 패턴을 얻으려면 다음 예와 같이 INFORMATION_SCHEMA.COLUMNS 뷰를 쿼리할 때 COLUMNPROPERTY 시스템 함수의 ColumnID 속성을 참조합니다.

SELECT TABLE_NAME, COLUMN_NAME,
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
    COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contact';

INFORMATION_SCHEMA.SCHEMATA

이전 버전의 SQL Server에서는 INFORMATION_SCHEMA.SCHEMATA 뷰가 SQL Server 인스턴스의 모든 데이터베이스를 반환했습니다. SQL Server 2005에서는 데이터베이스의 모든 스키마를 반환합니다. 이 동작은 SQL 표준에 따라 수행됩니다. 자세한 내용은 SCHEMATA(Transact-SQL)를 참조하십시오.

'%SCHEMA' 값과 일치하는 INFORMATION_SCHEMA 열 이름

이전 버전의 SQL Server에서 값 '%SCHEMA'와 일치하는 INFORMATION_SCHEMA 열 이름은 사용자 이름을 반환합니다. SQL Server 2005에서는 이러한 열이 스키마 이름을 반환합니다. 데이터베이스를 SQL Server 2005로 업그레이드하면 스키마 이름이 항상 사용자 이름과 같으며 이러한 열을 참조하는 응용 프로그램이 실패하지 않습니다. 그러나 데이터베이스에 SQL Server 2005 사용자와 스키마 분리 기능을 구현하는 사용자는 필요한 데이터가 스키마 이름이 아닌 사용자 이름일 경우 응용 프로그램이 실패할 수 있음을 알아야 합니다.

자세한 내용은 사용자와 스키마 분리를 참조하십시오.

sp_helptrigger

SQL Server 2005에서는 sp_helptrigger 시스템 저장 프로시저가 반환하는 결과 집합의 마지막 열로 trigger_schema를 추가합니다. 응용 프로그램에서 sp_helptrigger의 사용을 검토합니다. 추가 열을 처리하려면 응용 프로그램을 수정해야 할 수 있습니다. 또는 sys.triggers 카탈로그 뷰를 사용할 수 있습니다.

syslockinfo 및 sp_lock

SQL Server 2000에서 syslockinfo의 rsc_objid 및 rsc_indid 열과 sp_lock의 objid 및 indid 열은 일관되게 개체 ID와 인덱스 ID를 반환합니다. SQL Server 2005에서는 0 값이 반환될 수 있습니다.

SQL Server 2000에서 syslockinfo 및 sp_lock은 단일 트랜잭션에서 지정한 잠금 리소스에 대해 최대 두 개의 행을 반환합니다. SQL Server 2005에서는 잠금 분할을 사용할 경우 한 트랜잭션에서 실행 중인 동일한 리소스에 대해 여러 개의 행이 반환될 수 있습니다. 반환될 수 있는 최대 행 수는 N + 1이며 여기서 N은 CPU의 수입니다. 또한 SQL Server 2005에서는 동일한 리소스에 대해 GRANTED 및 WAITING 요청이 표시될 수 있지만 SQL Server 2000에서는 동일한 리소스에 대해 이러한 요청이 표시될 수 없습니다. 자세한 내용은 sp_lock(Transact-SQL)sys.syslockinfo(Transact-SQL)를 참조하십시오.

시스템 개체 이름 및 시스템 유형 이름 데이터 정렬 일치

이전 버전의 SQL Server에서는 시스템 개체 및 시스템 유형 이름이 master 데이터베이스의 데이터 정렬과 비교되었습니다. SQL Server 2005에서는 시스템 개체 이름과 시스템 유형 이름이 자동으로 현재 데이터베이스의 데이터 정렬로 형변환됩니다. 스크립트 또는 응용 프로그램 내에서 이러한 개체에 대한 참조가 카탈로그에 표시되는 것과 일치하지 않고 현재 데이터베이스에 대/소문자를 구분하는 데이터 정렬이 있으면 스크립트 또는 응용 프로그램이 실패할 수 있습니다. 예를 들어 현재 데이터베이스에 대/소문자를 구분하는 데이터 정렬이 있으면 EXEC SP_heLP 문이 실패합니다.

시스템 개체 수정

SQL Server 2005에서는 직접 시스템 카탈로그 업데이트가 허용되지 않습니다. 직접 업데이트를 시도하면 다음 오류가 발생합니다.

"서버: 메시지 259, 수준 16, 상태 1, 줄 1"

"시스템 카탈로그에 대한 임의 업데이트를 사용할 수 없습니다."

SQL 스크립트에서 문서화된 공식 API를 사용하도록 수정합니다. 예를 들어 sysdatabases 시스템 테이블에 대해 UPDATE 문을 실행하는 대신 ALTER DATABASE database_name SET EMERGENCY를 사용합니다.

시스템 개체 제거

시스템 개체는 읽기 전용 리소스 데이터베이스에 배포되므로 DROP TABLE, DROP PROCEDURE 및 sp_dropextendedproc과 같은 문을 사용하여 제거할 수 없습니다.

응용 프로그램에서 시스템 개체를 삭제하는 문을 모두 제거하십시오. 응용 프로그램을 수정하여 시스템 개체에 대한 EXECUTE 권한을 취소하거나 거부하십시오. 또는 SQL Server 2005 노출 영역 구성 도구 중 하나를 사용하여 이러한 개체 중 일부를 비활성화할 수 있습니다. 예를 들어 노출 영역 구성 도구를 사용하여 xp_cmdshell 확장 저장 프로시저를 활성화 또는 비활성화할 수 있습니다.

sysperfinfo

SQL Server 2005에서 sysperfinfo는 cntr_value 열에 대해 bigint 값을 반환합니다. cntr_value 열의 bigint 값을 처리할 수 있도록 sysperfinfo를 사용하는 응용 프로그램을 수정합니다.

SQL Server 2005에서 sysperfinfo는 호환성 뷰이므로 대신 sys.dm_os_performance_counters 동적 관리 뷰를 사용해야 합니다.

검색 조건에서 'dbo'를 사용하여 쿼리한 시스템 테이블

이전 버전의 SQL Server에서 시스템 개체는 dbo의 소유이고 master 데이터베이스에 있습니다. SQL Server 2005에서는 시스템 개체가 sys의 소유이며 논리적으로 모든 데이터베이스에 나타납니다. 시스템 테이블을 쿼리하고 사용자 dbo를 지정하는 검색 조건이 있는 문은 실패합니다.

Transact-SQL

기능 설명

@@VERSION

SQL Server 2005에서는 major.minor.build.incremental-build의 형식으로 SQL Server 2000보다 자세한 정보를 반환합니다.

CREATE STATISTICS

SQL Server 2005에서는 CREATE STATISTICS 문에 WITH ROWS를 지정할 수 없습니다. WITH와 ROWS 사이에 SAMPLE number를 지정하거나 문서화된 구문에 따라 다른 옵션을 지정하여 WITH ROWS가 포함된 CREATE STATISTICS 문을 수정하십시오.

DISK INIT

이전 버전의 SQL Server에서 데이터베이스 또는 트랜잭션 로그 장치를 만드는 데 사용한 DISK INIT 문은 SQL Server 2005에서 제거되었습니다. 이 문의 모든 항목을 동등한 CREATE DATABASE 또는 ALTER DATABASE 문으로 바꿉니다.

INSERT INTO...SELECT 문 내의 UNION

UNION 연산자가 INSERT 문 내부에 있으면 SQL Server 2005는 데이터 형식 변환 규칙에 따라 각 UNION 연산의 데이터 형식을 독립적으로 형변환합니다. 그런 다음 최종 UNION 연산 결과의 데이터 형식이 INSERT 작업의 대상 테이블에서 해당하는 열로 형변환됩니다. 동작의 이러한 변경으로 인해 응용 프로그램에서 데이터 형식 형변환 오류가 발생할 수 있습니다.

다음 예에서는 데이터 형식 형변환 오류를 보여 줍니다. 80 이하 호환성 수준에서 첫 번째 SELECT 문의 정수 상수 1은 대상 열 ReturnedValue의 데이터 형식인 varchar(255)로 직접 형변환됩니다. 90 호환성 수준에서 UNION 결과 집합의 데이터 형식은 대상 열로 형변환되기 전에 결정됩니다. 첫 번째 SELECT 문의 두 번째 열의 경우 데이터 형식은 int로 결정됩니다. 두 번째 SELECT 문의 두 번째 열의 경우 데이터 형식은 varchar(4)로 결정됩니다. int 데이터 형식이 varchar(4) 데이터 형식보다 우선 적용되므로 UNION 결과 집합의 데이터 형식을 결정할 때 값 testint 데이터 형식으로 형변환되어 데이터 형식 변환 오류가 발생합니다.

CREATE TABLE #test(ReturnedName varchar(255) NOT NULL,
  ReturnedValue varchar(255) NULL)
INSERT INTO #test 
SELECT 'col1', 1
UNION ALL
SELECT 'test', 'test'
DROP TABLE #test

UPDATETEXT

SQL Server 2005에서는 UPDATETEXT 문에서 텍스트 포인터를 사용하여 동일한 텍스트 포인터로 동일한 BLOB(Binary Large Object) 읽기/쓰기를 수행하는 동작을 지원하지 않습니다. BLOB을 임시 테이블 또는 테이블 변수로 복사한 다음 이 값을 다시 원래 열에 할당하십시오.

테이블 힌트를 사용할 때의 WITH 키워드

일부 예외는 있으나 SQL Server 2005 쿼리의 FROM 절에서는 WITH 키워드를 사용하여 지정된 테이블 힌트만 지원됩니다.

자세한 내용은 FROM(Transact-SQL)테이블 힌트(Transact-SQL)를 참조하십시오.

뷰 정의의 ORDER BY

SQL Server 2005에서 뷰 정의의 ORDER BY 절은 TOP 절에서 반환되는 행을 결정하기 위한 용도로만 사용됩니다. 쿼리 자체에서 ORDER BY를 지정하지 않으면 ORDER BY 절은 뷰 쿼리 시 정렬된 결과를 보장하지 않습니다.

잠금 힌트를 사용하는 UPDATE

SQL Server 2000에서는 다음의 두 조건을 충족하는 경우 UPDATE 문에서의 충돌에 대해 잠금 힌트를 확인하지 않습니다.

  • FROM 절에서 테이블의 별칭이 지정되었습니다.
  • 같은 테이블을 별칭 없이 UPDATE 문의 대상으로 참조합니다.

SQL Server에서는 FROM 절에서 제공되는 잠금 힌트가 무시되며 힌트 충돌 시 오류가 발생하지 않습니다. SQL Server 2005에서는 다음 조건에서 잠금 힌트 충돌 시 오류를 반환합니다.

XML

기능 설명

OPENXML

MSXML이 변경되어 OPENXML에서 정수가 아닌 위치 조건자를 더 이상 지원하지 않습니다. SQL Server 2005에서 MSXML 3.0은 OPENXML 쿼리에 사용된 XPath 식을 처리하는 기본 엔진입니다. MSXML 3.0에는 위치 조건자에 포함된 정수가 아닌 값의 의미가 변경된 호환성이 큰 XPath 1.0 엔진이 있습니다.

예를 들어 XPath 식 a[5.1] 은 5번째 <a> 요소가 아니라 어떤 요소도 반환하지 않습니다. 이 문제를 수정하려면 직접 반올림 값을 사용하십시오. 예를 들어 앞의 예를 a[5]로 수정합니다.

OPENXML XPath 식

MSXML 3.0에는 다음 함수를 더 이상 지원하지 않는 좀 더 엄격한 XPath 1.0 엔진이 있습니다.

  • format-number()
  • formatNumber()
  • current()
  • element-available()
  • function-available()
  • system-property()

format-number() 및 formatNumber()에는 Transact-SQL을 사용할 수 있습니다. 지원되지 않는 다른 함수의 경우에는 직접적인 해결 방법이 없습니다.

사용자 정의 유형 'xml'

SQL Server 2005에서 xml은 예약된 시스템 유형입니다. 업그레이드하기 전 또는 후에 sp_rename을 사용하여 이 유형의 이름을 바꾸고 새 유형 이름을 사용하도록 응용 프로그램을 수정하십시오.

참고 항목

참조

SQL Server 2005 데이터베이스 엔진 기능의 동작 변경
SQL Server 2005 이후에는 지원되지 않는 데이터베이스 엔진 기능
SQL Server 2005에서 지원되지 않는 데이터베이스 엔진 기능

관련 자료

SQL Server 2005 데이터베이스 엔진의 이전 버전과의 호환성
sp_dbcmptlevel(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2008년 11월 17일

새로운 내용
  • 테이블 변수의 열 데이터 정렬 일치에 대한 항목을 기능 섹션에 추가했습니다.

2006년 4월 14일

새로운 내용
  • 뷰 정의에 ORDER BY를 사용하는 방법에 대한 항목을 Transact-SQL 섹션에 추가했습니다.
  • UPDATE에 잠금 힌트를 사용하는 방법에 대한 항목을 Transact-SQL 섹션에 추가했습니다.