다음을 통해 공유


ALTER DATABASE SET 옵션(Transact-SQL)

이 항목에서는 데이터베이스 옵션 설정과 관련된 ALTER DATABASE 구문을 제공합니다. 다른 ALTER DATABASE 구문은 ALTER DATABASE(Transact-SQL)를 참조하십시오. 데이터베이스 미러링 및 호환성 수준도 SET 옵션이지만 지면 관계상 별도의 항목으로 설명합니다. 자세한 내용은 ALTER DATABASE 데이터베이스 미러링(Transact-SQL)ALTER DATABASE 호환성 수준(Transact-SQL)를 참조하십시오.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

ALTER DATABASE database_name 
SET 
{
    { <optionspec> [ ,...n ] [ WITH <termination> ] }
}

<optionspec>::= 
{
    <auto_option> 
  | <change_tracking_option> 
  | <cursor_option> 
  | <database_mirroring_option>
  | <date_correlation_optimization_option>
  | <db_encryption_option>
  | <db_state_option>
  | <db_update_option> 
  | <db_user_access_option>
  | <external_access_option>
  | <parameterization_option>
  | <recovery_option> 
  | <service_broker_option>
  | <snapshot_option>
  | <sql_option> 
}

<auto_option> ::= 

{
    AUTO_CLOSE { ON | OFF } 
  | AUTO_CREATE_STATISTICS { ON | OFF } 
  | AUTO_SHRINK { ON | OFF } 
  | AUTO_UPDATE_STATISTICS { ON | OFF } 
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<change_tracking_option> ::=
{
  CHANGE_TRACKING { 
        = ON [ <change_tracking_option_list > ] |
    <change_tracking_option_list> |
        = OFF
  }
}

<change_tracking_option_list> ::=
{
    ( <change_tracking_option> | <change_tracking_option_list> , 
    <change_tracking_option> )
}
  
<change_tracking_option> ::=
{
  AUTO_CLEANUP = { ON | OFF } 
  | CHANGE_RETENTION = { retention_period { DAYS | HOURS | MINUTES } ]
}

<cursor_option> ::= 
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF } 
  | CURSOR_DEFAULT { LOCAL | GLOBAL } 
}

<database_mirroring_option>ALTER DATABASE Database Mirroring<date_correlation_optimization_option> ::=
{
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }
}

<db_encryption_option> ::=
    ENCRYPTION { ON | OFF }

<db_state_option> ::=
    { ONLINE | OFFLINE | EMERGENCY }

<db_update_option> ::=
    { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
    { SINGLE_USER | RESTRICTED_USER | MULTI_USER }

<external_access_option> ::=
{
    DB_CHAINING { ON | OFF }

  | TRUSTWORTHY { ON | OFF }
}
<parameterization_option> ::=
{
    PARAMETERIZATION { SIMPLE | FORCED }
}

<recovery_option> ::= 
{
    RECOVERY { FULL | BULK_LOGGED | SIMPLE } 
  | TORN_PAGE_DETECTION { ON | OFF }
  | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | DISABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
  | HONOR_BROKER_PRIORITY { ON | OFF}
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT {ON | OFF }
}
<sql_option> ::= 
{
    ANSI_NULL_DEFAULT { ON | OFF } 
  | ANSI_NULLS { ON | OFF } 
  | ANSI_PADDING { ON | OFF } 
  | ANSI_WARNINGS { ON | OFF } 
  | ARITHABORT { ON | OFF } 
  | COMPATIBILITY_LEVEL = { 80 | 90 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF } 
  | NUMERIC_ROUNDABORT { ON | OFF } 
  | QUOTED_IDENTIFIER { ON | OFF } 
  | RECURSIVE_TRIGGERS { ON | OFF } 
}

<termination>::= 
{
    ROLLBACK AFTER integer [ SECONDS ] 
  | ROLLBACK IMMEDIATE 
  | NO_WAIT
}

인수

<auto_option>::=

자동 옵션을 제어합니다.

  • database_name
    수정할 데이터베이스의 이름입니다.

  • AUTO_CLOSE { ON | OFF }

    • ON
      마지막 사용자가 사용을 끝낸 후 데이터베이스가 종료되고 해당 리소스가 해제됩니다.

      사용자가 데이터베이스를 다시 사용하려고 하면(예: USE database_name 문 사용) 데이터베이스가 자동으로 다시 열립니다. AUTO_CLOSE가 ON으로 설정되어 있는 상태에서 데이터베이스가 완전히 종료된 경우 다음 번에 사용자가 데이터베이스 엔진을 다시 시작하고 데이터베이스 사용을 시도할 때까지 데이터베이스는 다시 열리지 않습니다. 

    • OFF
      마지막 사용자가 사용을 끝낸 후에도 데이터베이스는 열려 있는 상태가 됩니다.

    AUTO_CLOSE 옵션을 사용하면 데이터베이스 파일을 일반 파일처럼 다룰 수 있기 때문에 데스크톱 데이터베이스에서 유용합니다. 데이터베이스 파일을 이동하거나 복사하여 백업본을 만들 수도 있고 다른 사용자에게 전자 우편으로 보낼 수도 있습니다.

    [!참고]

    이전 버전의 SQL Server에서 AUTO_CLOSE는 동기 프로세스이기 때문에 데이터베이스 엔진에 연결과 연결 해제를 반복하는 응용 프로그램이 데이터베이스에 액세스하는 경우 성능이 저하될 수 있습니다. SQL Server 2005부터 AUTO_CLOSE는 비동기 프로세스이기 때문에 데이터베이스에 대한 연결 및 연결 해제가 반복되는 경우에도 더 이상 성능이 저하되지 않습니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_auto_close_on 열 또는 DATABASEPROPERTYEX 함수의 IsAutoClose 속성을 검사하여 확인할 수 있습니다.

    [!참고]

    AUTO_CLOSE가 ON으로 설정되어 있으면 sys.databases 카탈로그 뷰의 일부 열과 DATABASEPROPERTYEX 함수는 데이터베이스에서 데이터를 검색할 수 없는 경우 NULL을 반환합니다. 이 문제를 해결하려면 USE 문을 실행하여 데이터베이스를 엽니다.

    [!참고]

    데이터베이스 미러링은 AUTO_CLOSE가 OFF로 설정되어 있어야 합니다.

    데이터베이스가 AUTOCLOSE = ON으로 설정되어 있으면 자동 데이터베이스 종료를 시작하는 작업이 SQL Server 인스턴스에 대한 계획 캐시를 삭제합니다. 계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 일시적으로 갑자기 쿼리 성능이 저하됩니다. SQL Server 2005 서비스 팩 2에서는 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "데이터베이스 유지 관리 또는 재구성 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.

  • AUTO_CREATE_STATISTICS { ON | OFF }

    • ON
      쿼리 최적화 프로그램에서 필요에 따라 쿼리 조건자의 단일 열에 대한 통계를 생성하여 쿼리 계획 및 쿼리 성능을 향상시킵니다. 쿼리 최적화 프로그램에서 쿼리를 컴파일할 때 이러한 단일 열 통계가 생성됩니다. 단일 열 통계는 기존 통계 개체의 첫 번째 열이 아닌 열에 대해서만 생성됩니다.

      기본값은 ON입니다. 대부분의 데이터베이스의 경우 기본 설정을 사용하는 것이 좋습니다.

    • OFF
      쿼리 최적화 프로그램에서 쿼리를 컴파일할 때 쿼리 조건자의 단일 열에 대한 통계를 생성하지 않습니다. 이 옵션을 OFF로 설정하면 최적이 아닌 쿼리 계획을 사용하므로 쿼리 성능이 저하됩니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_auto_create_stats_on 열 또는 DATABASEPROPERTYEX 함수의 IsAutoCreateStatistics 속성을 검사하여 확인할 수 있습니다.

    자세한 내용은 통계를 사용하여 쿼리 성능 향상의 "데이터베이스 차원의 통계 옵션 사용" 섹션을 참조하십시오.

  • AUTO_SHRINK { ON | OFF }

    • ON
      데이터베이스 파일이 주기적인 축소의 후보가 됩니다.

      데이터 파일과 로그 파일 모두 자동으로 축소될 수 있습니다. AUTO_SHRINK는 데이터베이스가 단순 복구 모델로 설정되거나 로그가 백업된 경우에만 트랜잭션 로그의 크기를 축소합니다. 이 옵션이 OFF로 설정되면 사용되지 않는 공간을 정기적으로 검사하는 동안 데이터베이스 파일을 자동으로 축소하지 않습니다.

      AUTO_SHRINK 옵션은 파일에서 사용되지 않는 공간이 25% 이상일 때 파일을 축소합니다. 파일은 파일의 25%가 사용되지 않을 때의 크기 또는 파일이 만들어졌을 때의 크기 중 더 큰 크기로 축소됩니다.

      읽기 전용 데이터베이스는 축소할 수 없습니다.

    • OFF
      사용되지 않는 공간을 정기적으로 검사하는 동안에는 데이터베이스 파일을 자동으로 축소하지 않습니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_auto_shrink_on 열 또는 DATABASEPROPERTYEX 함수의 IsAutoShrink 속성을 검사하여 확인할 수 있습니다.

  • AUTO_UPDATE_STATISTICS { ON | OFF }

    • ON
      쿼리에서 통계를 사용하거나 통계가 최신이 아닐 때 쿼리 최적화 프로그램에서 통계를 업데이트하도록 지정합니다. 삽입, 업데이트, 삭제 또는 병합 작업을 통해 테이블이나 인덱싱된 뷰의 데이터 분포가 변경되면 통계 내용이 더 이상 최신이 아니게 됩니다. 쿼리 최적화 프로그램은 마지막 통계 업데이트 이후 데이터 수정 개수를 계산한 다음 이 수를 임계값과 비교하여 통계가 최신이 아니게 된 시점을 결정합니다. 임계값은 테이블 또는 인덱싱된 뷰의 행 수를 기준으로 합니다.

      쿼리 최적화 프로그램은 쿼리를 컴파일하기 전과 캐시된 쿼리 계획을 실행하기 전에 최신이 아닌 통계가 있는지를 확인합니다. 쿼리 최적화 프로그램은 쿼리를 컴파일하기 전에 쿼리 조건자의 열, 테이블 및 인덱싱된 뷰를 사용하여 어떤 통계가 최신이 아닌지를 결정합니다. 데이터베이스 엔진에서는 캐시된 쿼리 계획을 실행하기 전에 쿼리 계획에서 최신 통계가 참조되는지 확인합니다.

      AUTO_UPDATE_STATISTICS 옵션은 인덱스에 대해 생성된 통계, 쿼리 조건자의 단일 열 및 CREATE STATISTICS 문을 사용하여 생성된 통계에 적용됩니다. 이 옵션은 또한 필터링된 통계에 적용됩니다.

      기본값은 ON입니다. 대부분의 데이터베이스의 경우 기본 설정을 사용하는 것이 좋습니다.

      AUTO_UPDATE_STATISTICS_ASYNC 옵션을 사용하여 통계를 동기적으로 업데이트할지 또는 비동기적으로 업데이트할지를 지정합니다.

    • OFF
      쿼리에서 통계를 사용하거나 통계가 최신이 아닐 때 쿼리 최적화 프로그램에서 통계를 업데이트하지 않도록 지정합니다. 이 옵션을 OFF로 설정하면 최적이 아닌 쿼리 계획을 사용하므로 쿼리 성능이 저하됩니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_auto_update_stats_on 열 또는 DATABASEPROPERTYEX 함수의 IsAutoUpdateStatistics 속성을 검사하여 확인할 수 있습니다.

    자세한 내용은 통계를 사용하여 쿼리 성능 향상의 "데이터베이스 차원의 통계 옵션 사용" 섹션을 참조하십시오.

  • AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

    • ON
      AUTO_UPDATE_STATISTICS 옵션에 대한 통계 업데이트를 비동기로 지정합니다. 쿼리 최적화 프로그램은 쿼리를 컴파일하기 전에 통계 업데이트가 완료될 때까지 기다리지 않습니다.

      이 옵션을 ON으로 설정해도 AUTO_UPDATE_STATISTICS가 ON으로 설정되어 있지 않으면 영향을 주지 않습니다.

      기본적으로 AUTO_UPDATE_STATISTICS_ASYNC 옵션은 OFF로 설정되므로 쿼리 최적화 프로그램은 통계를 동기적으로 업데이트합니다.

    • OFF
      AUTO_UPDATE_STATISTICS 옵션에 대한 통계 업데이트를 동기로 지정합니다. 쿼리 최적화 프로그램은 쿼리를 컴파일하기 전에 통계 업데이트가 완료될 때까지 기다립니다.

      이 옵션을 OFF로 설정해도 AUTO_UPDATE_STATISTICS가 ON으로 설정되어 있지 않으면 영향을 주지 않습니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_auto_update_stats_async_on 열을 검사하여 확인할 수 있습니다.

    동기적 통계 업데이트를 사용하는 경우 또는 비동기적 통계 업데이트를 사용하는 경우에 대한 자세한 설명은 통계를 사용하여 쿼리 성능 향상의 "데이터베이스 차원의 통계 옵션 사용" 섹션을 참조하십시오.

<change_tracking_option>::=

변경 내용 추적 옵션을 제어합니다. 변경 내용 추적을 설정 또는 해제하고 옵션을 설정 또는 변경할 수 있습니다. 예를 보려면 이 항목의 뒤 부분에 나오는 예 섹션을 참조하십시오.

  • ON
    데이터베이스에 변경 내용 추적을 설정합니다. 변경 내용 추적을 설정하면 AUTO CLEANUP 및 CHANGE RETENTION 옵션도 설정할 수 있습니다.

  • AUTO_CLEANUP = { ON | OFF }

    • ON
      지정된 보존 기간 후에 변경 내용 추적 정보가 자동으로 제거됩니다.

    • OFF
      변경 내용 추적 데이터가 데이터베이스에서 제거되지 않습니다.

  • CHANGE_RETENTION =retention_period { DAYS | HOURS | MINUTES }
    데이터베이스에 변경 내용 추적 정보를 보존하는 최소 기간을 지정합니다. 데이터는 AUTO_CLEANUP 값이 ON일 때만 제거됩니다.

    retention_period는 보존 기간의 숫자 부분을 지정하는 정수입니다.

    기본 보존 기간은 2일입니다. 최소 보존 기간은 1분입니다.

  • OFF
    데이터베이스에서 변경 내용 추적을 해제합니다. 데이터베이스에서 변경 내용 추적을 해제하려면 모든 테이블에서 변경 내용 추적을 해제해야 합니다.

<cursor_option>::=

커서 옵션을 제어합니다.

  • CURSOR_CLOSE_ON_COMMIT { ON | OFF }

    • ON
      트랜잭션이 커밋되거나 롤백될 때 열린 모든 커서가 닫힙니다.

    • OFF
      트랜잭션 커밋 시에는 커서가 그대로 열려 있으나 트랜잭션 롤백 시에는 INSENSITIVE 또는 STATIC으로 정의된 것을 제외한 모든 커서가 닫힙니다.

    SET 문을 사용하여 설정한 연결 수준 설정은 CURSOR_CLOSE_ON_COMMIT의 기본 데이터베이스 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 CURSOR_CLOSE_ON_COMMIT을 OFF로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET CURSOR_CLOSE_ON_COMMIT(Transact-SQL)을 참조하십시오.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_cursor_close_on_commit_on 열 또는 DATABASEPROPERTYEX 함수의 IsCloseCursorsOnCommitEnabled 속성을 검사하여 확인할 수 있습니다.

  • CURSOR_DEFAULT { LOCAL | GLOBAL }
    커서 범위가 LOCAL인지 GLOBAL인지 여부를 제어합니다.

    • LOCAL
      LOCAL을 지정하고 커서를 만들 때 GLOBAL로 정의하지 않은 경우 커서의 범위는 커서가 생성된 일괄 처리, 저장 프로시저 또는 트리거에 로컬로 적용됩니다. 커서 이름은 그 범위 내에서만 유효합니다. 일괄 처리, 저장 프로시저, 트리거의 로컬 커서 변수 또는 저장 프로시저의 OUTPUT 매개 변수에서 커서를 참조할 수 있습니다. 커서는 OUTPUT 매개 변수에서 다시 전달되지 않는 한 일괄 처리, 저장 프로시저 또는 트리거가 종료될 때 암시적으로 할당이 취소됩니다. OUTPUT 매개 변수에서 커서가 다시 전달되면 커서를 참조하는 마지막 변수의 할당이 취소되거나 범위를 벗어날 때 커서의 할당이 취소됩니다.

    • GLOBAL
      GLOBAL을 지정하고 커서를 만들 때 LOCAL로 정의하지 않은 경우 커서의 범위는 연결에 대해 전역으로 적용됩니다. 연결되어 실행하는 모든 저장 프로시저 또는 일괄 처리에서 커서 이름을 참조할 수 있습니다.

    커서는 연결이 끊어질 때만 암시적으로 할당이 취소됩니다. 자세한 내용은 DECLARE CURSOR(Transact-SQL)를 참조하십시오.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_local_cursor_default 열 또는 DATABASEPROPERTYEX 함수의 IsLocalCursorsDefault 속성을 검사하여 확인할 수 있습니다.

<database_mirroring>

인수에 대한 설명은 ALTER DATABASE 데이터베이스 미러링(Transact-SQL)을 참조하십시오.

<date_correlation_optimization_option> ::=

date_correlation_optimization 옵션을 제어합니다.

  • DATE_CORRELATION_OPTIMIZATION { ON | OFF }

    DATE_CORRELATION_OPTIMIZATION을 ON으로 설정하려면 ALTER DATABASE 문을 실행하는 연결을 제외하고 데이터베이스에 대한 활성 연결이 없어야 합니다. 그런 후에는 여러 개의 연결이 지원됩니다.

    이 옵션의 현재 설정은 sys.databases 카탈로그 뷰의 is_date_correlation_on 열을 검사하여 확인할 수 있습니다.

<db_encryption_option>::=

데이터베이스 암호화 상태를 제어합니다.

  • ENCRYPTION {ON | OFF}
    데이터베이스를 암호화하거나(ON) 암호화하지 않도록(OFF) 설정합니다. 데이터베이스 암호화에 대한 자세한 내용은 TDE(Transparent Data Encryption) 이해를 참조하십시오.

데이터베이스 수준에서 암호화가 설정되면 모든 파일 그룹이 암호화됩니다. 새로운 파일 그룹은 암호화된 속성을 상속합니다. 데이터베이스의 파일 그룹이 READ ONLY로 설정되면 데이터베이스 암호화 작업이 실패합니다.

sys.dm_database_encryption_keys 동적 관리 뷰를 사용하면 데이터베이스의 암호화 상태를 확인할 수 있습니다.

<db_state_option>::=

데이터베이스의 상태를 제어합니다.

  • OFFLINE
    데이터베이스가 닫히고 완전히 종료되어 오프라인 상태로 표시됩니다. 데이터베이스가 오프라인 상태인 동안에는 데이터베이스를 수정할 수 없습니다.

  • ONLINE
    데이터베이스가 열려 사용할 수 있게 됩니다.

  • EMERGENCY
    데이터베이스가 READ_ONLY로 표시되고 로깅이 비활성화되며 sysadmin 고정 서버 역할의 멤버로 액세스가 제한됩니다. 응급 상태는 주로 문제 해결을 위해 사용됩니다. 예를 들어 손상된 로그 파일로 인해 주의 대상으로 표시된 데이터베이스를 EMERGENCY 상태로 설정할 수 있습니다. 이 경우 시스템 관리자는 읽기 전용으로 데이터베이스에 액세스할 수 있습니다. sysadmin 고정 서버 역할의 멤버만 데이터베이스를 응급 상태로 설정할 수 있습니다.

이 옵션의 상태는 sys.databases 카탈로그 뷰의 state 열과 state_desc 열 또는 DATABASEPROPERTYEX 함수의 Status 속성을 검사하여 확인할 수 있습니다. 자세한 내용은 데이터베이스 상태를 참조하십시오.

RESTORING으로 표시된 데이터베이스는 OFFLINE, ONLINE 또는 EMERGENCY로 설정할 수 없습니다. 활성 복원 작업 중이나 데이터베이스 또는 로그 파일의 복원 작업이 손상된 백업 파일로 인해 실패할 경우 데이터베이스가 RESTORING 상태일 수 있습니다. 자세한 내용은 손상된 백업에 의해 발생한 SQL Server 복원 오류에 응답을 참조하십시오.

<db_update_option>::=

데이터베이스에 대한 업데이트 허용 여부를 제어합니다.

  • READ_ONLY
    사용자는 데이터베이스에서 데이터를 읽을 수 있지만 수정은 할 수 없습니다.

  • READ_WRITE
    데이터베이스에서 읽기와 쓰기 작업을 할 수 있습니다.

이 상태를 변경하려면 데이터베이스에 대해 배타적 액세스 권한이 있어야 합니다. 자세한 내용은 SINGLE_USER 절을 참조하십시오.

<db_user_access_option> ::=

데이터베이스에 대한 사용자 액세스를 제어합니다.

  • SINGLE_USER
    한 번에 한 사용자만 데이터베이스에 액세스할 수 있도록 지정합니다. SINGLE_USER가 지정된 상태에서 다른 사용자들이 데이터베이스에 연결되어 있는 경우 모든 사용자가 지정된 데이터베이스와의 연결을 끊을 때까지 ALTER DATABASE 문이 차단됩니다. 이 동작을 무시하는 방법은 WITH <termination> 절을 참조하십시오.

    옵션을 설정한 사용자가 로그오프해도 데이터베이스는 SINGLE_USER 모드로 유지됩니다. 이때 다른 한 명의 사용자만 데이터베이스에 연결할 수 있습니다.

    데이터베이스를 SINGLE_USER로 설정하기 전에 AUTO_UPDATE_STATISTICS_ASYNC 옵션이 OFF로 설정되어 있는지 확인합니다. 이 옵션이 ON으로 설정되어 있으면 통계 업데이트에 사용되는 백그라운드 스레드가 데이터베이스에 대해 연결하고 사용자가 단일 사용자 모드로 데이터베이스에 액세스할 수 없습니다. 이 옵션의 상태를 보려면 sys.databases 카탈로그 뷰의 is_auto_update_stats_async_on 열을 쿼리합니다. 옵션이 ON으로 설정되어 있으면 다음 태스크를 수행합니다.

    1. AUTO_UPDATE_STATISTICS_ASYNC를 OFF로 설정합니다.

    2. sys.dm_exec_background_job_queue 동적 관리 뷰를 쿼리하여 활성 비동기 통계 작업을 검사합니다.

    활성 작업이 있을 경우 KILL STATS JOB을 사용하여 해당 작업을 완료하도록 허용하거나 수동으로 종료합니다.

  • RESTRICTED_USER
    RESTRICTED_USER는 db_owner 고정 데이터베이스 역할 및 dbcreator와 sysadmin 고정 서버 역할의 멤버만 데이터베이스에 연결하도록 허용하지만, 멤버 수는 제한하지 않습니다. 데이터베이스에 대한 모든 연결은 ALTER DATABASE 문의 termination 절에 지정된 시간대에서 끊어집니다. 데이터베이스가 RESTRICTED_USER 상태로 바뀐 후 자격이 없는 사용자의 연결 시도는 거부됩니다.

  • MULTI_USER
    데이터베이스에 연결할 수 있는 적절한 권한이 있는 모든 사용자의 연결을 허용합니다.

이 옵션의 상태는 sys.databases 카탈로그 뷰의 user_access 열 또는 DATABASEPROPERTYEX 함수의 UserAccess 속성을 검사하여 확인할 수 있습니다.

<external_access_option>::=

다른 데이터베이스의 개체와 같은 외부 리소스에서 데이터베이스에 액세스할 수 있는지 여부를 제어합니다.

  • DB_CHAINING { ON | OFF }

    • ON
      데이터베이스가 데이터베이스 간 소유권 체인의 원본이나 대상이 될 수 있습니다.

    • OFF
      데이터베이스가 데이터베이스 간 소유권 체인에 참여할 수 없습니다.

    중요 정보중요

    SQL Server 인스턴스는 cross db ownership chaining 서버 옵션이 0(OFF)일 때 이 설정을 인식합니다. cross db ownership chaining이 1(ON)이면 모든 사용자 데이터베이스가 이 옵션의 값에 관계없이 데이터베이스 간 소유권 체인에 참여할 수 있습니다. sp_configure를 사용하여 이 옵션을 설정할 수 있습니다.

    이 옵션을 설정하려면 데이터베이스에 대한 CONTROL SERVER 권한이 필요합니다. DB_CHAINING 옵션은 master, model 및 tempdb 시스템 데이터베이스에서는 설정할 수 없습니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_db_chaining_on 열을 검사하여 확인할 수 있습니다.

    자세한 내용은 소유권 체인을 참조하십시오.

  • TRUSTWORTHY { ON | OFF }

    • ON
      가장 컨텍스트를 사용하는 데이터베이스 모듈(예: 사용자 정의 함수 또는 저장 프로시저)이 데이터베이스 외부의 리소스에 액세스할 수 있습니다.

    • OFF
      가장 컨텍스트의 데이터베이스 모듈이 데이터베이스 외부 리소스에 액세스할 수 없습니다.

    TRUSTWORTHY는 데이터베이스를 연결할 때마다 OFF로 설정됩니다.

    기본적으로 msdb 데이터베이스를 제외한 모든 시스템 데이터베이스는 TRUSTWORTHY가 OFF로 설정되어 있습니다. model 및 tempdb 데이터베이스의 경우 이 값을 변경할 수 있습니다. master 데이터베이스의 경우 TRUSTWORTHY 옵션을 ON으로 설정하지 않는 것이 좋습니다.

    이 옵션을 설정하려면 데이터베이스에 대한 CONTROL SERVER 권한이 필요합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_trustworthy_on 열을 검사하여 확인할 수 있습니다.

<parameterization_option> ::=

매개 변수화 옵션을 제어합니다.

  • PARAMETERIZATION { SIMPLE | FORCED }

    • SIMPLE
      데이터베이스의 기본 동작에 따라 쿼리를 매개 변수화합니다. 자세한 내용은 단순 매개 변수화를 참조하십시오.

    • FORCED
      SQL Server에서 데이터베이스의 모든 쿼리를 매개 변수화합니다. 자세한 내용은 강제 매개 변수화를 참조하십시오.

    이 옵션의 현재 설정은 sys.databases 카탈로그 뷰의 is_parameterization_forced 열을 검사하여 확인할 수 있습니다.

<recovery_option> ::=

데이터베이스 복구 옵션과 디스크 I/O 오류 검사를 제어합니다.

  • FULL
    미디어 오류가 발생한 후에는 트랜잭션 로그 백업을 사용하여 전체 복구를 제공합니다. 데이터 파일이 손상된 경우 미디어 복구 기능을 통해 모든 커밋된 트랜잭션을 복원할 수 있습니다. 자세한 내용은 전체 복구 모델에서의 백업을 참조하십시오.

  • BULK_LOGGED
    미디어 오류가 발생한 후에 일부 대량 작업에 대해 성능은 좋고 로그 공간 사용량은 적은 방법으로 복구를 제공합니다. 대량 로그되는 작업에 대한 자세한 내용은 최소 로깅 가능한 작업을 참조하십시오. BULK_LOGGED 복구 모델에서는 이러한 작업에 대해서 최소 로깅이 사용됩니다. 자세한 내용은 대량 로그 복구 모델에서의 백업을 참조하십시오.

  • SIMPLE
    최소 로그 공간을 사용하는 단순 백업 전략을 제공합니다. 서버 오류 복구에 더 이상 필요 없는 로그 공간은 자동으로 재사용됩니다. 자세한 내용은 단순 복구 모델에서의 백업을 참조하십시오.

    중요 정보중요

    단순 복구 모델은 다른 두 모델보다 관리하기는 쉽지만 데이터 파일이 손상된 경우 데이터 손실 위험은 더 큽니다. 최신 데이터베이스 또는 차등 데이터베이스 백업이 손실된 이후의 변경 사항은 모두 수동으로 다시 입력해야 합니다.

기본 복구 모델은 model 데이터베이스의 복구 모델에 의해 결정됩니다. 적절한 복구 모델을 선택하는 방법은 데이터베이스 복구 모델 선택을 참조하십시오.

이 옵션의 상태는 sys.databases 카탈로그 뷰의 recovery_model 및 recovery_model_desc 열 또는 DATABASEPROPERTYEX 함수의 Recovery 속성을 검사하여 확인할 수 있습니다.

  • TORN_PAGE_DETECTION { ON | OFF }

    • ON
      데이터베이스 엔진에서 완료되지 않은 페이지를 검색할 수 있습니다.

    • OFF
      데이터베이스 엔진에서 완료되지 않은 페이지를 검색할 수 없습니다.

    중요 정보중요

    TORN_PAGE_DETECTION ON | OFF 구문 구조는 이후 버전의 SQL Server에서는 제거될 예정입니다. 새 개발 작업에서는 이 구문 구조를 사용하지 않도록 하고 현재 이 구문 구조를 사용하는 응용 프로그램은 수정하십시오. 대신 PAGE_VERIFY 옵션을 사용하십시오.

  • PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
    디스크 I/O 경로 오류로 인해 손상된 데이터베이스 페이지를 찾습니다. 디스크 I/O 경로 오류는 일반적으로 페이지를 디스크에 쓸 때 전원 오류나 디스크 하드웨어 오류로 인해 발생하며 데이터베이스 손상 문제를 일으킬 수 있습니다.

    • CHECKSUM
      페이지를 디스크에 쓸 때 전체 페이지의 내용에 대한 체크섬을 계산하고 이 값을 페이지 머리글에 저장합니다. 디스크에서 페이지를 읽으면 체크섬이 다시 계산되어 페이지 헤더에 저장된 체크섬 값과 비교됩니다. 두 값이 일치하지 않으면 체크섬 오류를 나타내는 824 오류 메시지가 SQL Server 오류 로그와 Windows 이벤트 로그에 보고됩니다. 체크섬 오류는 I/O 경로 문제를 나타냅니다. 오류에 대한 근본 원인을 확인하려면 하드웨어, 펌웨어 드라이버, BIOS, 필터 드라이버(예: 바이러스 소프트웨어) 및 기타 I/O 경로 구성 요소를 조사해야 합니다.

    • TORN_PAGE_DETECTION
      페이지를 디스크에 쓸 때 8KB 데이터베이스 페이지의 각 512바이트 섹터에 대해 특정 2비트 패턴을 데이터베이스 페이지 머리글에 저장합니다. 디스크에서 페이지를 읽으면 페이지 헤더에 저장된 조각난 비트가 실제 페이지 섹터 정보와 비교됩니다. 값이 일치하지 않으면 페이지의 일부분만 디스크에 쓰여졌음을 의미합니다. 이 경우 조각난 페이지 오류를 나타내는 824 오류 메시지가 SQL Server 오류 로그와 Windows 이벤트 로그에 보고됩니다. 조각난 페이지가 실제로 쓰기가 완료되지 않은 페이지인 경우 조각난 페이지는 보통 데이터베이스 복구에서 검색됩니다. 그러나 다른 I/O 경로 오류도 언제든 조각난 페이지의 원인이 될 수 있습니다.

    • NONE
      데이터베이스 페이지 쓰기에서 CHECKSUM 또는 TORN_PAGE_DETECTION 값이 생성되지 않습니다. SQL Server는 페이지 머리글에 CHECKSUM 또는 TORN_PAGE_DETECTION 값이 있는 경우에도 읽기 중 체크섬이나 조각난 페이지를 확인하지 않습니다.

    PAGE_VERIFY 옵션을 사용하는 경우 다음 중요 사항을 고려하십시오.

    • SQL Server 2005 및 SQL Server 2008에서 기본값은 CHECKSUM입니다. SQL Server 2000에서는 TORN_PAGE_DETECTION이 기본값입니다.

    • 사용자 또는 시스템 데이터베이스를 SQL Server 2005 또는 SQL Server 2008로 업그레이드하는 경우 PAGE_VERIFY 값(NONE 또는 TORN_PAGE_DETECTION)이 유지됩니다. CHECKSUM을 사용하는 것이 좋습니다. 

      [!참고]

      이전 버전의 SQL Server에서는 tempdb 데이터베이스의 PAGE_VERIFY 데이터베이스 옵션이 NONE으로 설정되며 수정할 수 없습니다. SQL Server 2008에서 새 SQL Server 설치의 경우 tempdb 데이터베이스의 기본값은 CHECKSUM입니다. SQL Server 설치를 업그레이드하면 기본값이 NONE으로 유지됩니다. 이 옵션은 수정할 수 없습니다. tempdb 데이터베이스에는 CHECKSUM을 사용하는 것이 좋습니다.

    • TORN_PAGE_DETECTION은 리소스는 더 적게 사용하지만 CHECKSUM 보호의 하위 집합은 최소로 제공합니다.

    • PAGE_VERIFY는 데이터베이스를 잠그거나 오프라인으로 설정하지 않고 즉, 데이터베이스의 동시성을 방해하지 않고 설정할 수 있습니다.

    • CHECKSUM과 TORN_PAGE_DETECTION은 상호 배타적이므로 두 옵션을 동시에 사용할 수 없습니다.

    조각난 페이지나 체크섬 오류가 검색되면 데이터를 복원하거나 오류가 인덱스 페이지에만 해당되는 경우 인덱스를 다시 작성하여 복구할 수 있습니다. 체크섬 오류가 발생하면 DBCC CHECKDB를 실행하여 이 오류의 영향을 받는 데이터베이스 페이지의 형식 또는 페이지를 확인할 수 있습니다. 복원 옵션에 대한 자세한 내용은 RESTORE 인수(Transact-SQL)를 참조하십시오. 데이터를 복원하면 데이터 손상 문제를 해결할 수 있지만 오류가 계속 발생하지 않도록 하려면 예를 들어 하드웨어 오류와 같은 근본 원인을 진단하여 수정해야 합니다.

    SQL Server는 체크섬, 조각난 페이지 또는 기타 I/O 오류로 읽기가 실패할 경우 4번 다시 시도합니다. 다시 시도를 통해 한 번이라도 읽기가 성공하면 오류 로그에 메시지가 기록되며 해당 읽기를 트리거한 명령은 계속 수행됩니다. 다시 시도가 실패하면 824 오류 메시지와 함께 명령이 실패합니다.

    체크섬, 조각난 페이지, 읽기 다시 시도, 823 및 824 오류 메시지와 기타 SQL Server I/O 감사 기능에 대한 자세한 내용은 Microsoft 웹 사이트를 참조하십시오.

    이 옵션의 현재 설정은 sys.databases 카탈로그 뷰의 page_verify_option 열 또는 DATABASEPROPERTYEX 함수의 IsTornPageDetectionEnabled 속성을 검사하여 확인할 수 있습니다.

<service_broker_option>::=

Service Broker 옵션을 제어합니다. 메시지 배달을 사용 또는 사용하지 않도록 설정하거나, 새 Service Broker 식별자를 설정하거나, 대화 우선 순위를 ON 또는 OFF로 설정합니다. 메시지 배달 및 Service Broker 식별자에 대한 자세한 내용은 Service Broker ID 관리를 참조하십시오. 대화 우선 순위 수준에 대한 자세한 내용은 대화 우선 순위를 참조하십시오. HONOR_BROKER_PRIORITY 옵션을 사용하는 방법에 대한 예는 대화 우선 순위 관리를 참조하십시오.

  • ENABLE_BROKER
    지정된 데이터베이스에 대해 Service Broker가 설정되도록 지정합니다. 메시지 배달이 시작되고 sys.databases 카탈로그 뷰에서 is_broker_enabled 플래그가 True로 설정됩니다. 데이터베이스에 기존 Service Broker 식별자가 유지됩니다.

    [!참고]

    ENABLE_BROKER를 사용하려면 배타적 데이터베이스 잠금이 필요합니다. 다른 세션이 데이터베이스의 리소스를 잠근 경우 ENABLE_BROKER는 다른 세션이 해당 잠금을 해제할 때까지 기다립니다. 사용자 데이터베이스에서 Service Broker를 활성화하려면 데이터베이스를 단일 사용자 모드로 설정하는 등의 방법으로 데이터베이스가 다른 세션에 의해 사용되지 않도록 한 다음 ALTER DATABASE SET ENABLE_BROKER 문을 실행합니다. msdb 데이터베이스에서 Service Broker를 사용하도록 설정하려면 먼저 SQL Server 에이전트를 중지하여 Service Broker에서 필요한 잠금을 획득할 수 있도록 합니다.

  • DISABLE_BROKER
    지정된 데이터베이스에 대해 Service Broker가 해제되도록 지정합니다. 메시지 배달이 중지되고 sys.databases 카탈로그 뷰에서 is_broker_enabled 플래그가 False로 설정됩니다. 데이터베이스에 기존 Service Broker 식별자가 유지됩니다.

  • NEW_BROKER
    데이터베이스가 새 Broker 식별자를 받도록 지정합니다. 데이터베이스는 새 Service Broker가 될 것으로 간주되기 때문에 데이터베이스 내의 모든 기존 대화는 종료 대화 메시지 없이 즉시 제거됩니다. 이전 Service Broker 식별자를 참조하는 경로는 새 식별자로 다시 만들어야 합니다.

  • ERROR_BROKER_CONVERSATIONS
    Service Broker 메시지 배달을 사용하도록 지정합니다. 이렇게 하면 데이터베이스의 기존 Service Broker 식별자가 보존됩니다. Service Broker는 오류가 있는 데이터베이스의 모든 대화를 종료합니다. 또한 응용 프로그램에서 기존 대화에 대해 일반적인 정리 작업을 수행할 수 있습니다.

  • HONOR_BROKER_PRIORITY {ON | OFF}

    • ON
      보내기 작업에서 대화에 할당된 우선 순위 수준을 고려합니다. 우선 순위 수준이 높은 대화의 메시지는 우선 순위 수준이 낮은 대화의 메시지보다 먼저 전송됩니다.

    • OFF
      모든 대화에 기본 우선 순위 수준이 할당된 것으로 간주하고 보내기 작업이 실행됩니다.

    HONOR_BROKER_PRIORITY 옵션의 변경 내용은 전송 대기 중인 메시지가 없는 대화 또는 새 대화에 즉시 적용됩니다. ALTER DATABASE가 실행될 때 대화에 전송 대기 중인 메시지가 있는 경우에는 대화의 해당 메시지가 전송되기 전까지 새 설정이 적용되지 않습니다. 모든 대화에 새 설정이 적용되는 데 걸리는 시간은 상당히 다양할 수 있습니다.

    이 속성의 현재 설정은 sys.databases 카탈로그 뷰의 is_broker_priority_honored 열에 보고됩니다.

<snapshot_option>::=

트랜잭션 격리 수준을 결정합니다.

  • ALLOW_SNAPSHOT_ISOLATION { ON| OFF }

    • ON
      데이터베이스 수준에서 스냅숏 옵션을 설정합니다. 이 옵션이 설정되면 스냅숏 격리를 사용하는 트랜잭션이 없어도 DML 문이 행 버전 생성을 시작합니다. 이 옵션을 설정하고 나면 트랜잭션에서 SNAPSHOT 트랜잭션 격리 수준을 지정할 수 있습니다. 트랜잭션이 SNAPSHOT 격리 수준에서 실행되면 모든 문에서 트랜잭션 시작 시점의 상태로 데이터 스냅숏을 봅니다. SNAPSHOT 격리 수준에서 실행되는 트랜잭션이 여러 데이터베이스의 데이터에 액세스할 경우 모든 데이터베이스에서 ALLOW_SNAPSHOT_ISOLATION을 ON으로 설정하거나 ALLOW_SNAPSHOT_ISOLATION을 OFF로 설정한 경우에는 데이터베이스의 테이블에 대한 FROM 절의 참조에서 트랜잭션 내의 각 문에 잠금 힌트를 사용해야 합니다.

    • OFF
      데이터베이스 수준에서 스냅숏 옵션을 해제합니다. 트랜잭션을 SNAPSHOT 트랜잭션 격리 수준으로 지정할 수 없습니다.

    ALLOW_SNAPSHOT_ISOLATION을 새 상태로 설정하는 경우(ON에서 OFF로 또는 OFF에서 ON으로) ALTER DATABASE는 데이터베이스 내의 기존 트랜잭션이 모두 커밋될 때까지 호출자에게 제어를 반환하지 않습니다. 데이터베이스가 이미 ALTER DATABASE 문에 지정된 상태인 경우 제어는 호출자에게 즉시 반환됩니다. ALTER DATABASE 문이 제어를 빨리 반환하지 않는 경우 sys.dm_tran_active_snapshot_database_transactions를 사용하여 장기 실행 트랜잭션이 있는지 여부를 확인합니다. ALTER DATABASE 문을 취소하면 데이터베이스는 ALTER DATABASE가 시작된 시점의 상태로 남게 됩니다. sys.databases 카탈로그 뷰는 데이터베이스에 있는 스냅숏 격리 트랜잭션의 상태를 나타냅니다. snapshot_isolation_state_desc = IN_TRANSITION_TO_ON인 경우 ALTER DATABASE ALLOW_SNAPSHOT_ISOLATION을 OFF로 설정하는 작업은 6초간 일시 중지된 다음 다시 시도됩니다.

    데이터베이스가 OFFLINE인 경우 ALLOW_SNAPSHOT_ISOLATION의 상태를 변경할 수 없습니다.

    READ_ONLY 데이터베이스에서 ALLOW_SNAPSHOT_ISOLATION을 설정하는 경우 데이터베이스가 이후에 READ_WRITE로 설정되어도 이 설정은 그대로 유지됩니다.

    master, model, msdb 및 tempdb 데이터베이스에 대해 ALLOW_SNAPSHOT_ISOLATION 설정을 변경할 수 있습니다. tempdb에 대해 이 설정을 변경해도 데이터베이스 엔진 인스턴스를 중지한 후 다시 시작할 때마다 설정이 그대로 유지됩니다. model 데이터베이스에 대해 이 설정을 변경하면 새로 생성된 모든 데이터베이스(tempdb 제외)에 대해 이 설정이 기본값으로 사용됩니다.

    master 및 msdb 데이터베이스에 대해 이 옵션은 기본적으로 ON입니다.

    이 옵션의 현재 설정은 sys.databases 카탈로그 뷰의 snapshot_isolation_state 열을 검사하여 확인할 수 있습니다.

  • READ_COMMITTED_SNAPSHOT { ON | OFF }

    • ON
      데이터베이스 수준에서 READ COMMITTED 스냅숏 옵션을 설정합니다. 이 옵션이 설정되면 스냅숏 격리를 사용하는 트랜잭션이 없어도 DML 문이 행 버전 생성을 시작합니다. 이 옵션을 설정하고 나면 READ COMMITTED 격리 수준을 지정하는 트랜잭션에서 잠금 대신 행 버전 관리를 사용합니다. 트랜잭션이 커밋된 읽기 격리 수준에서 실행되면 모든 문에서 해당 문의 시작 시점 상태로 데이터의 스냅숏을 봅니다.

    • OFF
      데이터베이스 수준에서 READ COMMITTED 스냅숏 옵션을 해제합니다. READ COMMITTED 격리 수준이 지정된 트랜잭션은 잠금을 사용합니다.

    READ_COMMITTED_SNAPSHOT을 ON 또는 OFF로 설정하려면 ALTER DATABASE 명령을 실행하는 연결을 제외하고 데이터베이스에 대한 활성 상태의 연결이 없어야 합니다. 그러나 데이터베이스가 단일 사용자 모드에 있을 필요는 없습니다. 데이터베이스가 OFFLINE인 경우 이 옵션의 상태를 변경할 수 없습니다.

    READ_ONLY 데이터베이스에서 READ_COMMITTED_SNAPSHOT을 설정하는 경우 데이터베이스가 이후에 READ_WRITE로 설정되어도 이 설정은 그대로 유지됩니다.

    master, tempdb 또는 msdb 시스템 데이터베이스에 대해서는 READ_COMMITTED_SNAPSHOT을 ON으로 설정할 수 없습니다. model 데이터베이스에 대해 이 설정을 변경하면 새로 생성된 모든 데이터베이스(tempdb 제외)에 대해 이 설정이 기본값으로 사용됩니다.

    이 옵션의 현재 설정은 sys.databases 카탈로그 뷰의 is_read_committed_snapshot_on 열을 검사하여 확인할 수 있습니다.

<sql_option>::=

ANSI 호환 옵션을 데이터베이스 수준에서 제어합니다.

  • ANSI_NULL_DEFAULT { ON | OFF }
    CREATE TABLE 또는 ALTER TABLE 문에서 Null 허용 여부가 명시적으로 정의되어 있지 않은 별칭 데이터 형식 또는 CLR 사용자 정의 형식의 열에 대한 기본값(NULL 또는 NOT NULL)을 결정합니다. 제약 조건이 정의된 열은 이 설정에 상관 없이 제약 조건 규칙을 따릅니다.

    • ON
      기본값은 NULL입니다.

    • OFF
      기본값이 NOT NULL입니다.

    SET 문을 사용하여 설정한 연결 수준의 설정은 ANSI_NULL_DEFAULT에 대한 기본 데이터베이스 수준 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 ANSI_NULL_DEFAULT를 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET ANSI_NULL_DFLT_ON(Transact-SQL)을 참조하십시오.

    ANSI 호환을 위해 ANSI_NULL_DEFAULT 데이터베이스 옵션을 ON으로 설정하면 데이터베이스의 기본값이 NULL로 변경됩니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_ansi_null_default_on 열 또는 DATABASEPROPERTYEX 함수의 IsAnsiNullDefault 속성을 검사하여 확인할 수 있습니다.

  • ANSI_NULLS { ON | OFF }

    • ON
      Null 값에 대한 모든 비교는 UNKNOWN으로 평가됩니다.

    • OFF
      Null 값에 대한 비-UNICODE 값 비교는 두 값이 모두 NULL인 경우 TRUE로 평가됩니다.

    중요 정보중요

    SQL Server의 이후 버전에서는 ANSI_NULLS가 항상 ON으로 설정되므로 명시적으로 이 옵션을 OFF로 설정한 응용 프로그램에서는 오류가 발생합니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

    SET 문을 사용하여 설정한 연결 수준의 설정은 ANSI_NULLS에 대한 기본 데이터베이스 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 ANSI_NULLS를 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET ANSI_NULLS (Transact-SQL)를 참조하십시오.

    계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경하는 경우에도 SET ANSI_NULLS을 ON으로 설정해야 합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_ansi_nulls_on 열 또는 DATABASEPROPERTYEX 함수의 IsAnsiNullsEnabled 속성을 검사하여 확인할 수 있습니다.

  • ANSI_PADDING { ON | OFF }

    • ON
      문자열을 동일한 길이만큼 채운 후에 varchar 또는 nvarchar 데이터 형식으로 변환 또는 삽입합니다.

      varchar 또는 nvarchar 열에 삽입된 문자 값의 후행 공백과 varbinary 열에 삽입된 이진 값의 후행 0이 잘리지 않습니다. 값은 열의 크기만큼 오른쪽에 공백으로 채워집니다.

    • OFF
      varchar 또는 nvarchar의 후행 공백과 varbinary의 0이 잘립니다.

    OFF로 지정하면 이 설정은 새 열의 정의에만 영향을 줍니다.

    중요 정보중요

    SQL Server의 이후 버전에서는 ANSI_PADDING이 항상 ON으로 설정되므로 명시적으로 이 옵션을 OFF로 설정한 응용 프로그램에서는 오류가 발생합니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

    ANSI_PADDING을 ON으로 설정하면 Null을 허용하는 char(n) 및 binary(n) 열이 열 길이까지 채워지지만 ANSI_PADDING을 OFF로 설정하면 후행 공백과 0이 잘립니다. Null을 허용하지 않는 char(n) 및 binary(n) 열은 항상 열 길이까지 채워집니다.

    SET 문을 사용하여 설정한 연결 수준의 설정은 ANSI_PADDING에 대한 기본 데이터베이스 수준 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 ANSI_PADDING을 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET ANSI_PADDING(Transact-SQL)을 참조하십시오.

    중요 정보중요

    ANSI_PADDING은 항상 ON으로 설정하는 것이 좋습니다. 계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 조작할 때는 ANSI_PADDING을 ON으로 설정해야 합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_ansi_padding_on 열 또는 DATABASEPROPERTYEX 함수의 IsAnsiPaddingEnabled 속성을 검사하여 확인할 수 있습니다.

  • ANSI_WARNINGS { ON | OFF }

    • ON
      0으로 나누기 또는 집계 함수에 Null 값이 나타나는 등의 상황에서 오류 또는 경고가 발생합니다.

    • OFF
      0으로 나누기와 같은 상황이 발생해도 아무런 경고도 발생하지 않으며 Null 값이 반환됩니다.

    계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경하는 경우 SET ANSI_WARNINGS를 ON으로 설정해야 합니다.

    SET 문을 사용하여 설정한 연결 수준의 설정은 ANSI_WARNINGS에 대한 기본 데이터베이스 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 ANSI_WARNINGS를 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET ANSI_WARNINGS(Transact-SQL)를 참조하십시오.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_ansi_warnings_on 열 또는 DATABASEPROPERTYEX 함수의 IsAnsiWarningsEnabled 속성을 검사하여 확인할 수 있습니다.

  • ARITHABORT { ON | OFF }

    • ON
      쿼리 실행 중 오버플로 또는 0으로 나누기 오류가 발생하면 쿼리를 종료합니다.

    • OFF
      이러한 오류 중 하나가 발생할 경우 경고 메시지가 표시되지만 쿼리, 일괄 처리 또는 트랜잭션은 오류가 발생하지 않은 것처럼 계속 처리됩니다.

    계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때 SET ARITHABORT를 ON으로 설정해야 합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_arithabort_on 열 또는 DATABASEPROPERTYEX 함수의 IsArithmeticAbortEnabled 속성을 검사하여 확인할 수 있습니다.

  • COMPATIBILITY_LEVEL { 80 | 90 | 100 }
    자세한 내용은 ALTER DATABASE 호환성 수준(Transact-SQL)을 참조하십시오.

  • CONCAT_NULL_YIELDS_NULL { ON | OFF }

    • ON
      피연산자 중 하나가 NULL일 경우 연결 연산의 결과는 NULL입니다. 예를 들어 문자열 "This is"와 NULL을 연결하면 결과는 "This is"가 아니라 NULL이 됩니다.

    • OFF
      Null 값은 빈 문자열로 취급됩니다.

    계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때 SET CONCAT_NULL_YIELDS_NULL은 반드시 ON으로 설정되어야 합니다.

    중요 정보중요

    SQL Server의 이후 버전에서는 CONCAT_NULL_YIELDS_NULL이 항상 ON으로 설정되므로 명시적으로 이 옵션을 OFF로 설정한 응용 프로그램에서는 오류가 발생합니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

    SET 문을 사용하여 설정한 연결 수준의 설정은 CONCAT_NULL_YIELDS_NULL의 기본 데이터베이스 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 세션의 CONCAT_NULL_YIELDS_NULL을 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET CONCAT_NULL_YIELDS_NULL(Transact-SQL)을 참조하십시오.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_concat_null_yields_null_on 열 또는 DATABASEPROPERTYEX 함수의 IsNullConcat 속성을 검사하여 확인할 수 있습니다.

  • QUOTED_IDENTIFIER { ON | OFF }

    • ON
      큰따옴표는 구분 식별자를 묶을 때 사용할 수 있습니다.

      큰따옴표로 구분되는 모든 문자열은 개체 식별자로 해석됩니다. 따옴표 붙은 식별자는 Transact-SQL 식별자 규칙을 따르지 않아도 됩니다. 따옴표 붙은 식별자는 키워드일 수 있으며 Transact-SQL 식별자에서 일반적으로 허용되지 않는 문자를 포함할 수 있습니다. 작은따옴표(')가 리터럴 문자열의 일부로 포함되면 큰따옴표(")로 나타낼 수 있습니다.

    • OFF
      식별자는 따옴표 안에 있을 수 없으며 식별자에 대한 모든 Transact-SQL 규칙을 따라야 합니다. 리터럴은 작은따옴표 또는 큰따옴표로 구분할 수 있습니다.

    SQL Server에서도 식별자를 대괄호([ ])로 구분할 수 있습니다. 대괄호로 묶은 식별자는 QUOTED_IDENTIFIER의 설정에 관계없이 항상 사용할 수 있습니다. 자세한 내용은 구분 식별자(데이터베이스 엔진)를 참조하십시오.

    테이블이 생성될 때 QUOTED IDENTIFIER 옵션이 OFF로 설정된 경우에도 해당 테이블의 메타데이터에는 항상 ON으로 저장됩니다.

    SET 문을 사용하여 설정한 연결 수준의 설정은 QUOTED_IDENTIFIER의 기본 데이터베이스 설정을 무시합니다. 기본적으로 ODBC 및 OLE DB 클라이언트는 SQL Server 인스턴스에 연결할 때 QUOTED_IDENTIFIER를 ON으로 설정하여 연결 수준의 SET 문을 실행합니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하십시오.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_quoted_identifier_on 열 또는 DATABASEPROPERTYEX 함수의 IsQuotedIdentifiersEnabled 속성을 검사하여 확인할 수 있습니다.

  • NUMERIC_ROUNDABORT { ON | OFF }

    • ON
      식에서 전체 자릿수가 손실되면 오류가 발생합니다.

    • OFF
      전체 자릿수가 손실되어도 오류 메시지가 생성되지 않으며 결과를 저장하는 열 또는 변수의 전체 자릿수로 결과가 반올림됩니다.

    계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때 NUMERIC_ROUNDABORT는 OFF로 설정되어야 합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_numeric_roundabort_on 열 또는 DATABASEPROPERTYEX 함수의 IsNumericRoundAbortEnabled 속성을 검사하여 확인할 수 있습니다.

  • RECURSIVE_TRIGGERS { ON | OFF }

    • ON
      AFTER 트리거의 재귀적 실행이 허용됩니다.

    • OFF
      AFTER 트리거의 직접 재귀적 실행이 허용되지 않습니다. AFTER 트리거의 간접 재귀도 사용하지 않도록 하려면 sp_configure를 사용하여 nested triggers 서버 옵션을 0으로 설정합니다.

    [!참고]

    RECURSIVE_TRIGGERS가 OFF로 설정되면 직접 재귀만 금지됩니다. 간접 재귀를 사용하지 않도록 하려면 nested triggers 서버 옵션도 0으로 설정해야 합니다.

    이 옵션의 상태는 sys.databases 카탈로그 뷰의 is_recursive_triggers_on 열 또는 DATABASEPROPERTYEX 함수의 IsRecursiveTriggersEnabled 속성을 검사하여 확인할 수 있습니다.

WITH <termination>::=

데이터베이스가 다른 상태로 바뀔 때 완료되지 않은 트랜잭션을 롤백할 시점을 지정합니다. termination 절을 생략하면 데이터베이스에 잠금이 있는 경우 ALTER DATABASE 문이 무기한 기다립니다. termination 절은 SET 절 다음에 한 번만 지정할 수 있습니다.

[!참고]

모든 데이터베이스 옵션에서 WITH <termination> 절을 사용하는 것은 아닙니다. 자세한 내용은 주의 섹션의 "옵션 설정" 아래에 있는 표를 참조하십시오.

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
    지정한 시간(초)이 경과한 후 롤백할 것인지 또는 즉시 롤백할 것인지를 지정합니다.

  • NO_WAIT
    트랜잭션이 자체적으로 커밋되거나 롤백되기를 기다리지 않고 요청된 데이터베이스 상태 또는 옵션 변경을 즉시 완료할 수 없는 경우에 요청이 실패하도록 지정합니다.

주의

옵션 설정

데이터베이스 옵션에 대한 현재 설정을 검색하려면 sys.databases 카탈로그 뷰 또는 DATABASEPROPERTYEX를 사용합니다. 데이터베이스를 처음 만들 때 데이터베이스에 할당된 기본값 목록은 데이터베이스 옵션 설정을 참조하십시오.

데이터베이스 옵션을 설정하면 수정 사항이 즉시 반영됩니다.

새로 생성된 모든 데이터베이스에 대한 데이터베이스 옵션의 기본값을 바꾸려면 model 데이터베이스에서 해당 데이터베이스 옵션을 변경하십시오.

모든 데이터베이스 옵션에서 WITH <termination> 절을 사용하거나 데이터베이스 옵션을 다른 옵션과 조합하여 지정할 수 있는 것은 아닙니다. 다음 표에서는 이러한 옵션 및 이들의 옵션과 종료 상태를 나열합니다.

옵션 범주

다른 옵션과 함께 지정할 수 있음

WITH <termination> 절을 사용할 수 있음

<db_state_option>

<db_user_access_option>

<db_update_option>

<external_access_option>

아니요

<cursor_option>

아니요

<auto_option>

아니요

<sql_option>

아니요

<recovery_option>

아니요

<database_mirroring_option>

아니요

아니요

ALLOW_SNAPSHOT_ISOLATION

아니요

아니요

READ_COMMITTED_SNAPSHOT

아니요

<service_broker_option>

아니요

DATE_CORRELATION_OPTIMIZATION

<parameterization_option>

<change_tracking_option>

<db_encryption>

아니요

SQL Server 인스턴스에 대한 계획 캐시는 다음 옵션 중 하나를 설정하여 삭제됩니다.

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

 

계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 쿼리 성능이 갑자기 일시적으로 저하될 수 있습니다. 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "데이터베이스 유지 관리 또는 재구성 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다. 

1. 데이터베이스 옵션 설정

다음 예에서는 AdventureWorks 예제 데이터베이스에 대해 복구 모델 및 데이터 페이지 확인 옵션을 설정합니다.

USE master;
GO
ALTER DATABASE AdventureWorks 
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

2. 데이터베이스를 READ_ONLY로 설정

데이터베이스 또는 파일 그룹의 상태를 READ_ONLY 또는 READ_WRITE로 변경하려면 데이터베이스에 대한 배타적 액세스가 필요합니다. 다음 예에서는 데이터베이스를 SINGLE_USER 모드로 설정하여 배타적 액세스 권한을 확보한 다음 AdventureWorks 데이터베이스의 상태를 READ_ONLY로 설정한 후 데이터베이스 액세스를 모든 사용자에게 반환합니다.

[!참고]

이 예에서는 첫 번째 ALTER DATABASE 문에서 WITH ROLLBACK IMMEDIATE 종료 옵션을 사용합니다. 완료되지 않은 트랜잭션은 모두 롤백되며 AdventureWorks 예제 데이터베이스로의 다른 모든 연결은 즉시 끊어집니다.

USE master;
GO
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks
SET MULTI_USER;
GO

3. 데이터베이스에서 스냅숏 격리 활성화

다음 예에서는 AdventureWorks 데이터베이스에 대해 스냅숏 격리 프레임워크 옵션을 활성화합니다.

USE AdventureWorks;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO
USE master;
GO
ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check again.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO

결과 집합은 스냅숏 격리 프레임워크가 활성화되었음을 보여 줍니다.

name            snapshot_isolation_state  description
--------------- ------------------------  -----------
AdventureWorks  1                         ON

4. 변경 내용 추적 설정, 수정 및 해제

다음 예에서는 AdventureWorks 데이터베이스에 대해 변경 내용 추적을 설정하고 보존 기간을 4일로 설정합니다.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

다음 예에서는 보존 기간을 3일로 바꾸는 방법을 보여 줍니다.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

다음 예에서는 AdventureWorks 데이터베이스에 대한 변경 내용 추적을 해제하는 방법을 보여 줍니다.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING = OFF;

문서의 변경 내역

업데이트된 내용

정확도를 향상시키기 위해 AUTO_CREATE_STATISTICS, AUTO_UPDATE_STATISTICS 및 AUTO_UPDATE_STATISTICS_ASYNC에 대한 설명을 수정했습니다.