共用方式為


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 
      { 
          = OFF
        | = ON [ ( <change_tracking_option_list > [ ,...n ] ) ] 
        | ( <change_tracking_option_list> [ ,...n ] )
      }
}

<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 時完整關閉資料庫,則要等到使用者嘗試在下次重新啟動 Database Engine 時使用資料庫之後,才會重新開啟資料庫。 

    • OFF
      在最後一個使用者結束之後,資料庫仍保持開啟狀態。

    對於桌面資料庫而言,AUTO_CLOSE 選項非常有用,因為它可讓您將資料庫檔案當做一般檔案來管理。您可以移動它們、複製它們來建立備份,甚至可以用電子郵件將它們傳給其他使用者。

    [!附註]

    在舊版 SQL Server 中,AUTO_CLOSE 是同步處理序,當有重複建立和中斷與 Database Engine 之連接的應用程式存取資料庫時,該處理序可能會降低效能。從 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 Service Pack 2 中,針對每次清除計畫快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清。」只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。

  • AUTO_CREATE_STATISTICS { ON | OFF }

    • ON
      查詢最佳化工具會視需要針對查詢述詞中的單一資料行建立統計資料,以便改善查詢計畫和查詢效能。這些單一資料行統計資料是在查詢最佳化工具編譯查詢時所建立的。它只會針對尚未成為現有統計資料物件之第一個資料行的資料行建立單一資料行統計資料。

      預設值是 ON。我們建議您針對大部分資料庫使用預設設定。

    • OFF
      查詢最佳化工具不會在編譯查詢時,針對單一資料行建立統計資料。將這個選項設定為 OFF 可能會導致次佳查詢計畫並降低查詢效能。

    您可以檢查 sys.databases 目錄檢視中的 is_auto_create_stats_on 資料行或 DATABASEPROPERTYEX 函數的 IsAutoCreateStatistics 屬性來判斷這個選項的狀態。

    如需詳細資訊,請參閱<使用統計資料來改善查詢效能>中的<使用資料庫範圍統計資料選項>一節。

  • AUTO_SHRINK { ON | OFF }

    • ON
      資料庫檔案是定期壓縮的候選項。

      資料檔和記錄檔都可以自動壓縮。只有在資料庫設為 SIMPLE 復原模式或備份記錄時,AUTO_SHRINK 才會縮減交易記錄的大小。當設為 OFF 時,便不會在定期檢查未用空間時,自動壓縮資料庫檔案。

      當超出 25% 的檔案包含未用空間時,AUTO_SHRINK 選項便會壓縮檔案。檔案會壓縮成 25% 的檔案是未用空間的大小,或建立檔案時的檔案大小,兩者取其較大者。

      您不能壓縮唯讀資料庫。

    • OFF
      在定期檢查未用空間時,不自動壓縮資料庫檔案。

    您可以檢查 sys.databases 目錄檢視中的 is_auto_shrink_on 資料行或 DATABASEPROPERTYEX 函數的 IsAutoShrink 屬性來判斷這個選項的狀態。

  • AUTO_UPDATE_STATISTICS { ON | OFF }

    • ON
      指定當查詢使用統計資料而且這些統計資料可能已過期時,查詢最佳化工具就會更新這些統計資料。當插入、更新、刪除或合併作業變更資料表或索引檢視表中的資料分佈之後,統計資料就會變成過期。查詢最佳化工具會計算自從上次更新統計資料以來資料修改的次數,並且比較修改次數與臨界值,藉以判斷統計資料可能過期的時間。此臨界值是以資料表或索引檢視表中的資料列數目為基礎。

      在編譯查詢之前以及執行快取查詢計畫之前,查詢最佳化工具會檢查是否有過期的統計資料。在編譯查詢之前,查詢最佳化工具會使用查詢述詞中的資料行、資料表和索引檢視表來判斷哪些統計資料可能已過期。在執行快取查詢計畫之前,Database Engine 會確認查詢計畫是否參考最新的統計資料。

      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 選項的統計資料更新是非同步的。在查詢最佳化工具編譯查詢之前,它不會等候統計資料更新完成。

      除非 AUTO_UPDATE_STATISTICS 設為 ON,否則將這個選項設為 ON 沒有作用。

      根據預設,AUTO_UPDATE_STATISTICS_ASYNC 選項設定為 OFF,而且查詢最佳化工具會以同步方式更新統計資料。

    • OFF
      指定 AUTO_UPDATE_STATISTICS 選項的統計資料更新是同步的。在查詢最佳化工具編譯查詢之前,它會先等候統計資料更新完成。

      除非 AUTO_UPDATE_STATISTICS 設為 ON,否則將這個選項設為 OFF 沒有作用。

    您可以檢查 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 的預設資料庫設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會發出連接層級的 SET 陳述式,將工作階段的 CURSOR_CLOSE_ON_COMMIT 設為 OFF。如需詳細資訊,請參閱<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)>。

在資料庫層級啟用加密時,所有的檔案群組都會加密。任何新的檔案群組都會繼承加密的屬性。如果資料庫內有任何檔案群組設定為 READ ONLY,則資料庫加密作業將會失敗。

您可以使用 sys.dm_database_encryption_keys 動態管理檢視來查看資料庫的加密狀態。

<db_state_option>::=

控制資料庫的狀態。

  • OFFLINE
    關閉資料庫,並將它完整關機,再標示為離線。資料庫在離線狀態時,無法修改。

  • ONLINE
    資料庫在開啟狀態,可供使用。

  • EMERGENCY
    資料庫標示為 READ_ONLY、停用記錄功能,而且只有系統管理員 (sysadmin) 固定伺服器角色的成員能夠存取它。EMERGENCY 主要用於進行疑難排解。例如,由於記錄檔損毀而被標示有疑問的資料庫可以設為 EMERGENCY 狀態。在這個情況下,系統管理員可以進行資料庫的唯讀存取。只有系統管理員 (sysadmin) 固定伺服器角色的成員,才能將資料庫的狀態設為 EMERGENCY。

[!附註]

權限:需要主旨資料庫的 ALTER DATABASE 權限,才能將資料庫變更為離線或緊急狀態。需要伺服器層級 ALTER ANY DATABASE 權限,才能將資料庫狀態從離線變更為線上。

您可以檢查 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
      資料庫無法參與跨資料庫擁有權鏈結。

    重要事項重要事項

    當 cross db ownership chaining 伺服器選項為 0 (OFF) 時,SQL Server 的執行個體可以辨識這項設定。當 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
      Database Engine 能夠偵測出不完整的頁面。

    • OFF
      Database Engine 無法偵測到不完整的頁面。

    重要事項重要事項

    在未來的 SQL Server 版本中,將移除 TORN_PAGE_DETECTION ON | OFF 語法結構。請避免在新的開發工作中使用這項語法結構,並規劃修改目前使用這項語法結構的應用程式。請改用 PAGE_VERIFY 選項。

  • PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
    探索 I/O 路徑錯誤所造成的損毀資料庫頁面。磁碟 I/O 路徑錯誤可能是資料庫損毀問題的原因,這通常是因為電源故障或頁面寫入磁碟時磁碟硬體故障所造成。

    • CHECKSUM
      計算整個頁面內容的總和檢查碼,當頁面寫入磁碟時,將值儲存在頁首。從磁碟讀取頁面時,會重新計算總和檢查碼,並與頁首所儲存的總和檢查碼值做比較。如果兩者不符,便會在 SQL Server 錯誤記錄檔和 Windows 事件記錄檔中,報告錯誤訊息 824 (表示總和檢查碼失敗)。總和檢查碼失敗表示 I/O 路徑發生問題。判斷主要原因時,需要調查硬體、韌體驅動程式、BIOS、篩選驅動程式 (例如,病毒軟體) 和其他 I/O 路徑元件。

    • TORN_PAGE_DETECTION
      將每個 512 位元組磁區的 2 位元模式儲存在 8 KB 資料庫頁面上,當頁面寫入磁碟時,便將它儲存在資料庫頁首。當從磁碟中讀取頁面時,會比較頁首中所儲存的損毀位元和實際的頁面磁區資訊。值不符合表示該頁面只有一部分寫入磁碟中。在這個狀況下,會在 SQL Server 錯誤記錄檔和 Windows 事件記錄檔中,報告錯誤訊息 824 (表示發生損毀頁的錯誤)。如果真的是頁面寫入不完整,通常會由資料庫復原作業來偵測出損毀頁。不過,其他 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 錯誤而失敗的讀取作業四次。如果任何一次重試讀取成功,都會將訊息寫入錯誤記錄檔中,且會繼續觸發讀取作業的命令。如果重試失敗,此命令便會失敗,且會出現錯誤訊息 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 識別>。如需有關交談優先權等級的詳細資訊,請參閱<交談優先權>。如需示範如何使用 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 Agent,讓 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,或是每當 FROM 子句參考 ALLOW_SNAPSHOT_ISOLATION 是 OFF 的資料庫中的資料表時,交易中的每個陳述式都必須使用鎖定提示。

    • 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 會暫停六秒然後重試作業。

    如果資料庫是 OFFLINE,您不能變更 ALLOW_SNAPSHOT_ISOLATION 的狀態。

    如果您在 READ_ONLY 資料庫中設定 ALLOW_SNAPSHOT_ISOLATION,資料庫後來又設為 READ_WRITE,這個設定會保留下來。

    您可以變更 master、model、msdb 和 tempdb 資料庫的 ALLOW_SNAPSHOT_ISOLATION 設定。如果您變更了 tempdb 的設定,每次停止和重新啟動 Database Engine 執行個體時,這個設定會保留下來。如果您變更 model 的設定,除了 tempdb 以外,這項設定會成為任何新建資料庫的預設值。

    根據預設,master 和 msdb 資料庫的這個選項是 ON。

    您可以檢查 sys.databases 目錄檢視中的 snapshot_isolation_state 資料行來判斷這個選項的目前設定。

  • READ_COMMITTED_SNAPSHOT { ON | OFF }

    • ON
      在資料庫層級啟用讀取認可快照集選項。啟用此選項時,DML 陳述式就會開始產生資料列版本,即使沒有任何交易使用快照集隔離也一樣。一旦啟用此選項之後,指定讀取認可隔離等級的交易就會使用資料列版本控制,而不是鎖定。在讀取認可隔離等級執行交易時,所有的陳述式都會看到資料的快照集,就與陳述式開始時所存在的資料一樣。

    • OFF
      在資料庫層級關閉讀取認可快照集選項。指定 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 的預設資料庫層級設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會將工作階段的 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
      比較非 UNICODE 值和 Null 值,如果兩個值都是 NULL,便會得出 TRUE。

    重要事項重要事項

    在未來的 SQL Server 版本中,ANSI_NULLS 一律為 ON,而且明確將此選項設定為 OFF 的任何應用程式都會產生錯誤。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

    利用 SET 陳述式來設定的連接層級設定會覆寫 ANSI_NULLS 的預設資料庫設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會將工作階段的 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 資料行的二進位值尾端零。值不會填補到資料行的長度。

    • OFF
      會修剪 varchar 或 nvarchar 的尾端空格及 varbinary 的尾端零。

    當指定 OFF 時,這個設定只會影響新資料行的定義。

    重要事項重要事項

    在未來的 SQL Server 版本中,ANSI_PADDING 一律為 ON,而且明確將此選項設定為 OFF 的應用程式將會產生錯誤。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

    當 ANSI_PADDING 設為 ON 時,允許 Null 的 char(n) 和 binary(n) 資料行會填補到資料行的長度,但是當 ANSI_PADDING 是 OFF 時,則會修剪尾端的空格和零。不允許 Null 的 char(n) 和 binary(n) 資料行,一律會填補到資料行的長度。

    利用 SET 陳述式來設定的連接層級設定會覆寫 ANSI_PADDING 的預設資料庫層級設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會發出連接層級的 SET 陳述式,將工作階段的 ANSI_PADDING 設為 ON。如需詳細資訊,請參閱<SET ANSI_PADDING (Transact-SQL)>。

    重要事項重要事項

    我們建議您一律將 ANSI_PADDING 設為 ON。當您建立或操作計算資料行索引或索引檢視表時,ANSI_PADDING 也必須是 ON。

    您可以檢查 sys.databases 目錄檢視中的 is_ansi_padding_on 資料行或 DATABASEPROPERTYEX 函數的 IsAnsiPaddingEnabled 屬性來判斷這個選項的狀態。

  • ANSI_WARNINGS { ON | OFF }

    • ON
      當發生除以零之類的狀況,或彙總函式中出現 NULL 值時,便會發出錯誤或警告。

    • OFF
      當發生除以零之類的情況時,不會產生警告,但會傳回 NULL 值。

    當您建立或變更計算資料行索引或索引檢視表時,SET ANSI_WARNINGS 必須設為 ON。

    利用 SET 陳述式來設定的連接層級設定會覆寫 ANSI_WARNINGS 的預設資料庫設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會發出連接層級的 SET 陳述式,將工作階段的 ANSI_WARNINGS 設為 ON。如需詳細資訊,請參閱<SET ANSI_WARNINGS (Transact-SQL)>。

    您可以檢查 sys.databases 目錄檢視中的 is_ansi_warnings_on 資料行或 DATABASEPROPERTYEX 函數的 IsAnsiWarningsEnabled 屬性來判斷這個選項的狀態。

  • ARITHABORT { ON | OFF }

    • ON
      在查詢執行期間,當發生溢位或除以零的錯誤時,查詢會結束。

    • 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 會得出 NULL 值,而不是 "This is" 值。

    • OFF
      將 Null 值當做空的字元字串來處理。

    當您建立或變更計算資料行索引或索引檢視表時,CONCAT_NULL_YIELDS_NULL 也必須設為 ON。

    重要事項重要事項

    在未來的 SQL Server 版本中,CONCAT_NULL_YIELDS_NULL 一律為 ON,而且明確將此選項設定為 OFF 的應用程式將會產生錯誤。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

    利用 SET 陳述式來設定的連接層級設定會覆寫 CONCAT_NULL_YIELDS_NULL 的預設資料庫設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會發出連接層級的 SET 陳述式,將工作階段的 CONCAT_NULL_YIELDS_NULL 設為 ON。如需詳細資訊,請參閱<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 設定為何,用方括號括住的識別項永遠可以使用。如需詳細資訊,請參閱<分隔識別碼 (Database Engine)>。

    當建立資料表時,一律會在資料表的中繼資料中,將 QUOTED IDENTIFIER 選項儲存成 ON,即使建立資料表時將選項設成 OFF,也是如此。

    利用 SET 陳述式來設定的連接層級設定會覆寫 QUOTED_IDENTIFIER 的預設資料庫設定。根據預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會發出連接層級的 SET 陳述式,將 QUOTED_IDENTIFIER 設為 ON。如需詳細資訊,請參閱<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,將巢狀觸發程序伺服器選項設成 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 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清」。只要快取發生排清,這個訊息就會每五分鐘記錄一次。 

範例

A. 設定資料庫的選項

下列範例會設定 AdventureWorks2008R2 範例資料庫的復原模式和資料頁面驗證選項。

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

B. 將資料庫設為 READ_ONLY

將資料庫或檔案群組的狀態改成 READ_ONLY 或 READ_WRITE 時,需要資料庫的獨佔存取權。下列範例會將資料庫設成 SINGLE_USER 模式來取得獨佔存取。之後,範例會將 AdventureWorks2008R2 資料庫的狀態設成 READ_ONLY,並將資料庫的存取權還給所有使用者。

[!附註]

這個範例在第一個 ALTER DATABASE 陳述式中,使用終止選項 WITH ROLLBACK IMMEDIATE。所有未完成的交易都會回復,而且 AdventureWorks2008R2 範例資料庫的任何其他連接都會立即中斷。

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

C. 啟用資料庫的快照集隔離

下列範例會啟用 AdventureWorks2008R2 資料庫的快照集隔離架構選項。

USE AdventureWorks2008R2;
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'AdventureWorks2008R2';
GO
USE master;
GO
ALTER DATABASE AdventureWorks2008R2
    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'AdventureWorks2008R2';
GO

結果集顯示啟用快照集隔離架構。

name            snapshot_isolation_state  description

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

AdventureWorks2008R2  1                         ON

D. 啟用、修改及停用變更追蹤

下列範例會啟用 AdventureWorks2008R2 資料庫的變更追蹤,並將保留週期設定為 4 天。

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

下列範例會示範如何將保留週期變更為 3 天。

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

下列範例會示範如何停用 AdventureWorks2008R2 資料庫的變更追蹤。

ALTER DATABASE AdventureWorks2008R2
SET CHANGE_TRACKING = OFF;