ALTER DATABASE (Transact-SQL)

更新: 2006 年 12 月 12 日

修改資料庫或與資料庫相關聯的檔案和檔案群組。在資料庫中新增或移除檔案和檔案群組、變更資料庫或其檔案和檔案群組的屬性、變更資料庫定序,以及設定資料庫選項。無法修改資料庫快照集。若要修改與複寫相關聯的資料庫選項,請使用 sp_replicationdboption

主題連結圖示Transact-SQL 語法慣例

語法

ALTER DATABASE database_name 
{
    <add_or_modify_files>
  | <add_or_modify_filegroups>
  | <set_database_options>
  | MODIFY NAME = new_database_name 
  | COLLATE collation_name
}
[;]

<add_or_modify_files>::=
{
    ADD FILE <filespec> [ ,...n ] 
        [ TO FILEGROUP { filegroup_name } ]
  | ADD LOG FILE <filespec> [ ,...n ] 
  | REMOVE FILE logical_file_name 
  | MODIFY FILE <filespec>
}

<filespec>::= 
(
    NAME = logical_file_name  
    [ , NEWNAME = new_logical_name ] 
    [ , FILENAME = 'os_file_name' ] 
    [ , SIZE = size [ KB | MB | GB | TB ] ] 
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ] 
    [ , OFFLINE ]
) 

<add_or_modify_filegroups>::=
{
    | ADD FILEGROUP filegroup_name 
    | REMOVE FILEGROUP filegroup_name 
    | MODIFY FILEGROUP filegroup_name
        { <filegroup_updatability_option> 
        | DEFAULT
        | NAME = new_filegroup_name 
        }
}
<filegroup_updatability_option>::=
{
    { READONLY | READWRITE } 
    | { READ_ONLY | READ_WRITE }
}

<set_database_options>::=
SET 
{
    { <optionspec> [ ,...n ] [ WITH <termination> ] }
}

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

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

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

<db_update_option> ::=
    { READ_ONLY | READ_WRITE }

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

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

<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 }
}

<sql_option> ::= 
{
    ANSI_NULL_DEFAULT { ON | OFF } 
  | ANSI_NULLS { ON | OFF } 
  | ANSI_PADDING { ON | OFF } 
  | ANSI_WARNINGS { ON | OFF } 
  | ARITHABORT { ON | OFF } 
  | CONCAT_NULL_YIELDS_NULL { ON | OFF } 
  | NUMERIC_ROUNDABORT { ON | OFF } 
  | QUOTED_IDENTIFIER { ON | OFF } 
  | RECURSIVE_TRIGGERS { ON | OFF } 
}

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

<database_mirroring_option> ::= 
{ <partner_option> | <witness_option> }
    <partner_option> ::=
    PARTNER { = 'partner_server' 
            | FAILOVER 
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME 
            | SAFETY { FULL | OFF }
            | SUSPEND 
            | TIMEOUT integer
            }
    <witness_option> ::=
    WITNESS { = 'witness_server' 
            | OFF 
            }

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

<date_correlation_optimization_option> ::=
{
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }
}

<parameterization_option> ::=
{
    PARAMETERIZATION { SIMPLE | FORCED }
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION {ON | OFF }
  | READ_COMMITTED_SNAPSHOT {ON | OFF }
}
<termination> ::= 
{
    ROLLBACK AFTER integer [ SECONDS ] 
  | ROLLBACK IMMEDIATE 
  | NO_WAIT
}

引數

  • database_name
    這是要修改的資料庫名稱。
  • MODIFY NAME **=**new_database_name
    利用指定為 new_database_name 的名稱來重新命名資料庫。
  • COLLATE collation_name
    指定資料庫的定序。collation_name 可以是 Windows 定序名稱,也可以是 SQL 定序名稱。若未指定,就會將 SQL Server 執行個體的定序指派給資料庫。

    如需有關 Windows 和 SQL 定序名稱的詳細資訊,請參閱<COLLATE (Transact-SQL)>。

<add_or_modify_files>::=

指定要新增、移除或修改的檔案。

  • ADD FILE
    將檔案加入資料庫中。

    • TO FILEGROUP { filegroup_name }
      指定要加入指定檔案的檔案群組。若要顯示目前檔案群組及目前是預設值的檔案群組,請使用 sys.filegroups 目錄檢視。
  • ADD LOG FILE
    將記錄檔加入指定的資料庫中。
  • REMOVE FILE logical_file_name
    從 SQL Server 執行個體中移除邏輯檔案描述和刪除實體檔案。除非檔案是空的,否則無法移除檔案。

    • logical_file_name
      這是在參考檔案時,SQL Server 所用的邏輯名稱。
  • MODIFY FILE
    指定應該修改的檔案。每次只能變更一個 <filespec> 屬性。您必須在 <filespec> 中指定 NAME,以識別要修改的檔案。如果指定了 SIZE,新的大小必須大於目前檔案大小。

    若要修改資料檔或記錄檔的邏輯名稱,請在 NAME 子句中指定要重新命名的邏輯檔案名稱,在 NEWNAME 子句中指定檔案的新邏輯名稱。例如:

    MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name ) 
    

    若要將資料檔或記錄檔移至新的位置,請在 NAME 子句中指定目前的邏輯檔案名稱,在 FILENAME 子句中指定新的路徑和作業系統檔案名稱。例如:

    MODIFY FILE ( NAME = logical_file_name, FILENAME = ' new_path/os_file_name ' )
    

    當您移動全文檢索目錄時,只有當 FILENAME 子句中指定新的路徑。請勿指定作業系統檔案名稱。

    如需詳細資訊,請參閱<移動資料庫檔案>。

<filespec>::=

控制檔案屬性。

  • NAME logical_file_name
    指定檔案的邏輯名稱。

    • logical_file_name
      這是在參考檔案時,SQL Server 執行個體所用的邏輯名稱。
  • NEWNAME new_logical_file_name
    指定檔案的新邏輯名稱。

    • new_logical_file_name
      這是要取代現有邏輯檔案名稱的名稱。這個名稱在資料庫內必須是唯一的,且必須符合識別碼的規則。這個名稱可以是字元或 Unicode 常數、正規識別碼,或分隔的識別碼。如需詳細資訊,請參閱<將識別碼當成物件名稱使用>。
  • FILENAME 'os_file_name'
    指定作業系統 (實體) 檔案名稱。

    • ' os_file_name '
      這是當您建立檔案時,作業系統所用的路徑和檔案名稱。這個檔案必須在安裝了 SQL Server 的伺服器中。在執行 ALTER DATABASE 陳述式之前,指定的路徑必須已經存在。

      當指定檔案的 UNC 路徑時,無法設定 SIZE、MAXSIZE 和 FILEGROWTH 參數。

      除非檔案是唯讀的次要檔案,或資料庫是唯讀的,否則,不應將資料檔放在壓縮的檔案系統中。記錄檔永遠不應放在壓縮的檔案系統中。如需詳細資訊,請參閱<唯讀檔案群組和壓縮>。

      如果檔案在原始資料分割中,os_file_name 只能指定現有原始資料分割的磁碟機代號。每個原始資料分割只能放置一個檔案。

  • SIZE size
    指定檔案大小。

    • size
      這是檔案的大小。

      當設定 ADD FILE 來指定時,size 是檔案的起始大小。當設定 MODIFY FILE 來指定時,size 是檔案的新大小,且必須大於目前的檔案大小。

      當未提供主要檔案的大小 (size) 時,SQL Server 2005 Database Engine 會採用 model 資料庫中主要檔案的大小。當指定了次要資料檔或記錄檔,但未指定檔案的大小 (size ) 時,Database Engine 會使檔案成為 1 MB。

      您可以利用 KB、MB、GB 和 TB 後置詞來指定千位元組、百萬位元組、十億位元組或兆位元組。預設值是 MB。請指定不包括小數的整數。若要指定 MB 的小數,請將數字乘以 1024,以便將值轉換成 KB。例如,請指定 1536 KB,而不要指定 1.5 MB (1.5 x 1024 = 1536)。

  • MAXSIZE { max_size| UNLIMITED }
    指定檔案所能成長的大小上限。

    • max_size
      這是檔案大小上限。您可以利用 KB、MB、GB 和 TB 後置詞來指定千位元組、百萬位元組、十億位元組或兆位元組。預設值是 MB。請指定不包括小數的整數。如果未指定 max_size,檔案大小會增加到磁碟已滿。
    • UNLIMITED
      指定檔案可成長直到磁碟已滿。在 SQL Server 2005 中,指定為無限成長的記錄檔,大小上限是 2 TB,資料檔的大小上限是 16 TB。
  • FILEGROWTH growth_increment
    指定檔案的自動成長遞增。檔案的 FILEGROWTH 設定不能超過 MAXSIZE 設定。

    • growth_increment
      這是每次需要新空間時,檔案所增加的空間量。

      您可以利用 MB、KB、GB、TB 或百分比 (%) 來指定這個值。如果指定的數字不含 MB、KB 或 % 後置詞,預設值是 MB。當指定 % 時,成長遞增大小便是遞增發生時,檔案大小的指定百分比。指定的大小會捨入到最接近 64 KB。

      0 值表示將自動成長設為關閉,且不允許任何其他空間。

      如果未指定 FILEGROWTH,資料檔的預設值是 1 MB,記錄檔的預設值是 10%,最小值是 64 KB。

      ms174269.note(zh-tw,SQL.90).gif附註:
      在 SQL Server 2005 中,資料檔的預設成長遞增已從 10% 改成 1 MB。記錄檔預設值 10% 維持不變。
  • OFFLINE
    將檔案設成離線,使檔案群組中的所有物件都成為無法存取。

    ms174269.Caution(zh-tw,SQL.90).gif注意:
    請只在檔案損毀且可以還原時,才使用這個選項。設為 OFFLINE 的檔案,只能藉由從備份中還原檔案來設成連接。如需有關還原單一檔案的詳細資訊,請參閱<RESTORE (Transact-SQL)>。
<add_or_modify_filegroups>::=

在資料庫中新增、修改或移除檔案群組。

  • ADD FILEGROUP filegroup_name
    將檔案群組加入資料庫中。
  • REMOVE FILEGROUP filegroup_name
    從資料庫中移除檔案群組。除非檔案群組是空的,否則,無法移除檔案群組。請先移除檔案群組中的所有檔案。如需詳細資訊,請參閱本主題前面的「REMOVE FILE logical_file_name」。
  • MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME **=**new_filegroup_name }
    將狀態設成 READ_ONLY 或 READ_WRITE,使檔案群組成為資料庫的預設檔案群組,或變更檔案群組名稱,來修改檔案群組。

    • <filegroup_updatability_option>
      將檔案群組的屬性設成唯讀或讀取/寫入。
    • DEFAULT
      將預設資料庫檔案群組改為 filegroup_name。資料庫中只能有一個檔案群組是預設檔案群組。如需詳細資訊,請參閱<瞭解檔案及檔案群組>。
    • NAME = new_filegroup_name
      將檔案群組名稱改為 new_filegroup_name
<filegroup_updatability_option>::=

將檔案群組的屬性設成唯讀或讀取/寫入。

  • READ_ONLY | READONLY
    將檔案群組指定成唯讀狀態。不允許更新其中的物件。主要檔案群組不能設為唯讀。若要變更這個狀態,您必須有資料庫的獨佔存取權。如需詳細資訊,請參閱 SINGLE_USER 子句。

    由於唯讀資料庫不允許修改資料,因此,會出現下列情況:

    • 在系統開機時跳過自動復原。
    • 不可能壓縮資料庫。
    • 唯讀資料庫不會出現鎖定。因此,查詢效能會比較快。
    ms174269.note(zh-tw,SQL.90).gif附註:
    在未來的 Microsoft SQL Server 版本中,將移除 READONLY 關鍵字。請避免在新的開發工作中使用 READONLY,並規劃修改目前在使用 READONLY 的應用程式。請改用 READ_ONLY。
  • READ_WRITE | READWRITE
    將群組指定成 READ_WRITE 狀態。檔案群組中的物件可以更新。若要變更這個狀態,您必須有資料庫的獨佔存取權。如需詳細資訊,請參閱 SINGLE_USER 子句。

    ms174269.note(zh-tw,SQL.90).gif附註:
    在未來的 Microsoft SQL Server 版本中,將移除 READWRITE 關鍵字。請避免在新的開發工作中使用 READWRITE,並規劃修改目前在使用 READWRITE 的應用程式。請改用 READ_WRITE。

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

<db_state_option>::=

控制資料庫的狀態。

  • OFFLINE
    關閉資料庫,將它完整關機,再標示為離線。資料庫在離線狀態時,無法修改。
  • ONLINE
    資料庫在開啟狀態,可供使用。
  • EMERGENCY
    資料庫標示為 READ_ONLY,停用記錄功能,只有系統管理員 (sysadmin) 固定伺服器角色的成員能夠存取它。EMERGENCY 主要用來進行疑難排解。例如,由於記錄檔損毀而被標示有疑問的資料庫可以設為 EMERGENCY 狀態。在這個情況下,系統管理員可以進行資料庫的唯讀存取。只有系統管理員 (sysadmin) 固定伺服器角色的成員,才能將資料庫的狀態設為 EMERGENCY。

您可以檢查 sys.databases 目錄檢視的 statestate_desc 資料行,或檢查 DATABASEPROPERTYEX 函數的 Status 屬性來判斷這個選項的狀態。如需詳細資訊,請參閱<資料庫狀態>。

標示為 RESTORING 的資料庫不能設為 OFFLINE、ONLINE 或 EMERGENCY。在使用中的還原作業期間,或是由於備份檔損毀導致資料庫或記錄檔的還原作業失敗時,資料庫都有可能處於 RESTORING 狀態。如需詳細資訊,請參閱<回應由損毀備份造成的 SQL Server 還原錯誤>。

<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 動態管理檢視,檢查是否有作用中的非同步統計資料作業。
    3. 如果有作用中的作業,請等待作業完成,或使用 KILL STATS JOB 手動終止作業。
  • RESTRICTED_USER
    RESTRICTED_USER 只允許 db_owner 固定資料庫角色以及資料庫建立者 (dbcreator)系統管理員 (sysadmin) 固定伺服器角色的成員連接到資料庫,但並不限制他們的數目。在 ALTER DATABASE 陳述式的 termination 子句所指定的時間範圍中,會中斷資料庫的所有連接。在資料庫進入 RESTRICTED_USER 狀態之後,不合格使用者的連接嘗試都會遭到拒絕。
  • MULTI_USER
    允許所有具備適當資料庫連接權限的使用者。

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

<db_update_option>::=

控制是否允許更新資料庫。

  • READ_ONLY
    使用者可以從資料庫中讀取資料,但不能修改它。
  • READ_WRITE
    資料庫可以執行讀取和寫入作業。

若要變更這個狀態,您必須有資料庫的獨佔存取權。如需詳細資訊,請參閱 SINGLE_USER 子句。

<external_access_option>::=

控制外部資源 (如另一個資料庫的物件) 是否能夠存取資料庫。

  • DB_CHAINING { ON | OFF }

    • ON
      資料庫可以是跨資料庫擁有權鏈結的來源或目標。
    • OFF
      資料庫無法參與跨資料庫擁有權鏈結。
    ms174269.note(zh-tw,SQL.90).gif重要事項:
    cross db ownership chaining 伺服器選項為 0 (OFF) 時,SQL Server 的執行個體可以辨識這項設定。當 cross db ownership chaining 為 1 (ON) 時,不論這個選項的值為何,所有使用者資料庫都可以參與跨資料庫擁有權鏈結。您可以利用 sp_configure 來設定這個選項。

    若要設定這個選項,則需要有系統管理員 (sysadmin) 固定伺服器角色的成員資格。下列系統資料庫不能設定 DB_CHAINING 選項:mastermodeltempdb

    您可以檢查 sys.databases 目錄檢視中的 is_db_chaining_on 資料行來判斷這個選項的狀態。

    如需詳細資訊,請參閱<擁有權鏈結>。

  • TRUSTWORTHY { ON | OFF }

    • ON
      使用模擬內容的資料庫模組 (如使用者自訂函數或預存程序),能夠在資料庫之外存取資源。
    • OFF
      模擬內容中的資料庫模組無法存取資料庫之外的資源。

    每當附加資料庫時,TRUSTWORTHY 都設為 OFF。

    依預設,除了 msdb 資料庫以外,所有的系統資料庫都會將 TRUSTWORTHY 設為 OFF。modeltempdb 資料庫的這個值不可變更。建議您絕對不要將 master 資料庫的 TRUSTWORTHY 選項設為 ON。

    若要設定這個選項,則需要有系統管理員 (sysadmin) 固定伺服器角色的成員資格。

    您可以檢查 sys.databases 目錄檢視中的 is_trustworthy_on 資料行來判斷這個選項的狀態。

<cursor_option>::=

控制資料指標選項。

  • CURSOR_CLOSE_ON_COMMIT { ON | OFF }

    • ON
      關閉認可或回復交易時在開啟狀態的任何資料指標。
    • OFF
      當認可交易時,資料指標維持開啟狀態;回復交易便關閉任何資料指標,但定義為 INSENSITIVE 或 STATIC 的資料指標除外。

    利用 SET 陳述式來設定的連接層級設定,會覆寫 CURSOR_CLOSE_ON_COMMIT 的預設資料庫設定。依預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會將工作階段的 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 屬性來判斷這個選項的狀態。

<auto_option>::=

控制自動選項。

  • AUTO_CLOSE { ON | OFF }

    • ON
      資料庫會完整關機,最後一位使用者結束之後,便會將它的資源釋放出來。

      當使用者試圖重新使用資料庫時,會自動重新開啟資料庫。例如,使用者發出 database_name 陳述式。如果在 AUTO_CLOSE 設為 ON 時,完整關閉資料庫,下次重新啟動 Database Engine 時,在使用者試圖使用資料庫之前,不會重新開啟資料庫。

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

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

    ms174269.note(zh-tw,SQL.90).gif附註:
    在舊版 SQL Server 中,AUTO_CLOSE 是同步處理序,當有重複連接和中斷 Database Engine 的應用程式存取資料庫時,效能可能會退化。在 SQL Server 2005 中,AUTO_CLOSE 處理序是非同步的;重複開啟和關閉資料庫不會降低效能。

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

    ms174269.note(zh-tw,SQL.90).gif附註:
    當 AUTO_CLOSE 是 ON 時,sys.databases 目錄中的某些資料行及 DATABASEPROPERTYEX 函數會傳回 NULL,因為資料庫無法擷取資料。若要解決這個問題,請執行 USE 陳述式來開啟資料庫。
    ms174269.note(zh-tw,SQL.90).gif附註:
    資料庫鏡像需要 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
      在查詢最佳化期間,會自動建置查詢最佳化所需要的任何遺漏的統計資料。

      加入統計資料可以增進查詢效能,因為 SQL Server 查詢最佳化工具可以更妥善地判斷如何評估查詢。如果未使用統計資料,Database Engine 會自動刪除它們。當設為 OFF 時,不會自動建立統計資料;相反地,此時可以手動建立統計資料。如需詳細資訊,請參閱<索引統計資料>。

    • OFF
      必須手動建立統計資料。

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

    ms174269.note(zh-tw,SQL.90).gif附註:
    查詢最佳化工具會將所有內部系統資料表當做 AUTO_CREATE_STATISTICS 設為 ON 來處理,不論實際的設定為何,都是如此。這些資料表包括系統基底資料表、XML 索引、全文檢索索引、Service Broker 佇列資料表,以及查詢通知資料表。
  • 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
      在查詢最佳化期間,會自動更新查詢最佳化所需要的任何過期統計資料。
    • OFF
      統計資料必須手動更新。
    ms174269.note(zh-tw,SQL.90).gif附註:
    除非指定了 NORECOMPUTE 子句,否則,UPDATE STATISTICS 陳述式會重新啟用目標資料表或檢視的自動統計更新。
    ms174269.note(zh-tw,SQL.90).gif附註:
    查詢最佳化工具會將所有內部系統資料表當做 AUTO_UPDATE_STATISTICS 設為 ON 來處理,不論實際的設定為何,都是如此。這些資料表包括系統基底資料表、XML 索引、全文檢索索引、Service Broker 佇列資料表,以及查詢通知資料表。

    如需詳細資訊,請參閱<索引統計資料>。

  • AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

    • ON
      初始化自動更新過期統計資料的查詢,不會在編譯之前等待統計資料更新。當有可用的更新統計資料時,後續的查詢會使用這些統計資料。
    • OFF
      初始化自動更新過期統計資料的查詢,會等到能夠在查詢最佳化計劃中使用更新的統計資料。

    除非 AUTO_UPDATE_STATISTICS 設為 ON,否則,將這個選項設為 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。

    利用 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
      在轉換或插入 varcharnvarchar 資料類型之前,會將字串填補到相同的長度。

      不會修剪插入 varcharnvarchar 資料行中的字元值尾端空格及插入 varbinary 資料行的二進位值尾端零。值不會填補到資料行的長度。

    • OFF
      會修剪 varcharnvarchar 的尾端空格及 varbinary 的尾端零。

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

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

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

    ms174269.note(zh-tw,SQL.90).gif重要事項:
    我們建議您將 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 用戶端會將工作階段的 ANSI_WARNINGS 設為 ON 來發出連接層級的 SET 陳述式。如需詳細資訊,請參閱<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 屬性來判斷這個選項的狀態。

  • CONCAT_NULL_YIELDS_NULL { ON | OFF }

    • ON
      當任何一個運算元是 NULL 時,串連作業的結果都會是 NULL。例如,串連字元字串 "This is" 和 NULL 會得出 NULL 值,而不是 "This is" 值。
    • OFF
      將 Null 值當做空的字元字串來處理。

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

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

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

    利用 SET 陳述式來設定的連接層級設定,會覆寫 QUOTED_IDENTIFIER 的預設資料庫設定。依預設,當連接到 SQL Server 執行個體時,ODBC 和 OLE DB 用戶端會將 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,將巢狀觸發程序伺服器選項設成 0
    ms174269.note(zh-tw,SQL.90).gif附註:
    當 RECURSIVE_TRIGGERS 設為 OFF 時,只防止直接遞迴。若要停用間接遞迴,您也必須將巢狀觸發程序伺服器選項設為 0

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

<recovery_option> ::=

控制資料庫復原選項及磁碟 I/O 錯誤檢查。

  • FULL
    在媒體失敗之後,利用交易記錄備份來提供完整復原。如果資料檔損毀,媒體復原可以還原所有已認可的交易。如需詳細資訊,請參閱<在完整復原模式下備份>。
  • BULK_LOGGED
    提供媒體失敗之後的復原功能,針對特定大規模或大量作業,結合最好的效能及最少的記錄使用空間。如需有關大量記錄哪些作業的資訊,請參閱<最低限度記錄作業>。在 BULK_LOGGED 復原模式之下,這些作業的記錄是最少的。如需詳細資訊,請參閱<大量記錄復原模式下的備份>。
  • SIMPLE
    提供使用最少記錄空間的簡單備份策略。當伺服器失敗復原不再需要記錄空間,會自動重複使用這個記錄空間。如需詳細資訊,請參閱<簡單復原模式下的備份>。

    ms174269.note(zh-tw,SQL.90).gif重要事項:
    簡單復原模式比另兩種模式更容易管理,但在資料檔損毀時,遺失資料的風險比較大。在最近的資料庫或差異資料庫備份之後進行的所有變更都會遺失,必須以手動方式重新輸入。

預設復原模式取決於 model 資料庫的復原模式。如需有關選取適當復原模式的詳細資訊,請參閱<選擇資料庫的復原模式>。

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

  • TORN_PAGE_DETECTION { ON | OFF }

    • ON
      Database Engine 能夠偵測出不完整的頁面。
    • OFF
      Database Engine 無法偵測到不完整的頁面。
    ms174269.note(zh-tw,SQL.90).gif重要事項:
    在未來的 Microsoft 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 位元組磁區一個特定位元儲存在 8 KB 資料庫頁面上,當頁面寫入磁碟時,便將它儲存在資料庫頁面標頭中。當從磁碟中讀取頁面時,會比較頁面標頭所儲存的損毀位元和實際的頁面磁區資訊。值不符合表示該頁面只有一部分寫入磁碟中。在這個狀況下,會在 SQL Server 錯誤記錄和 Windows 事件記錄中,報告錯誤訊息 824 (表示發生損毀頁的錯誤)。如果真的是頁面寫入不完整,通常會由資料庫復原作業來偵測出損毀頁。不過,其他 I/O 路徑失敗也可能隨時造成損毀頁。
    • NONE
      寫入資料庫頁面不會產生 CHECKSUM 或 TORN_PAGE_DETECTION 值。在讀取期間,SQL Server 不會驗證總和檢查碼或損毀頁,即使頁面標頭中有 CHECKSUM 或 TORN_PAGE_DETECTION 值也是如此。

    當您使用 PAGE_VERIFY 選項時,請考慮下列要點:

    • 在 SQL Server 2005 中,預設值是 CHECKSUM。在 SQL Server 2000 中,TORN_PAGE_DETECTION 是預設值。
    • 將使用者或系統資料庫升級為 SQL Server 2005 時,都會保留 PAGE_VERIFY 值 (NONE 或 TORN_PAGE_DETECTION)。我們建議您使用 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 屬性來判斷這個選項目前的設定。

<database_mirroring_option>::=

控制資料庫的資料庫鏡像。資料庫鏡像選項所指定的值適用於資料庫的這兩個副本,且會作為一個整體套用在資料庫鏡像工作階段上。在 ALTER DATABASE 陳述式之下,只允許執行一個 <database_mirroring_option>:{ SET PARTNER <partner_option> | SET WITNESS <witness_option>}。

ms174269.note(zh-tw,SQL.90).gif重要事項:
SET PARTNER 或 SET WITNESS 命令可以在輸入時成功完成,但在之後失敗。
ms174269.note(zh-tw,SQL.90).gif附註:
我們建議您將資料庫鏡像作業設定在離峰時間執行,因為組態會影響效能。

如需有關資料庫鏡像的資訊,請參閱<資料庫鏡像>。

  • PARTNER <partner_option>
    控制定義資料庫鏡像工作階段的容錯移轉夥伴及其行為的資料庫屬性。部分 SET PARTNER 選項可以設在任何一個夥伴上;但其他選項只適用於主體伺服器或鏡像伺服器。如需詳細資訊,請參閱下面的個別 PARTNER 選項。SET PARTNER 子句會影響資料庫的這兩個副本,不論哪個夥伴指定它,都是如此。

    若要執行 SET PARTNER 陳述式,兩個夥伴的端點狀態 (STATE) 必須都設為 STARTED。另外,也請注意,每個夥伴伺服器執行個體之資料庫鏡像端點的 ROLE 都必須設成 PARTNER 或 ALL。如需有關如何指定端點的資訊,請參閱<如何:建立 Windows 驗證的鏡像結束點 (Transact-SQL)>。若要瞭解伺服器執行個體之資料庫鏡像端點的角色和狀態,請在這個執行個體上,使用下列 Transact-SQL 陳述式:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option> ::=

    ms174269.note(zh-tw,SQL.90).gif附註:
    每個 SET PARTNER 子句都只能有一個 <partner_option>。
    • 'partner_server'
      指定要在新資料庫鏡像工作階段中,作為容錯移轉夥伴的 SQL Server 執行個體之伺服器網路位址。每個工作階段都需要兩個夥伴:一個啟動作為主體伺服器,一個啟動作為鏡像伺服器。我們建議您將這些夥伴放在不同電腦中。

      在每個夥伴上,每個工作階段都指定一次這個選項。初始化資料庫鏡像工作階段需要兩個 ALTER DATABASE database SET PARTNER ='partner_server' 陳述式。它們的順序很重要。首先是連接到鏡像伺服器,將主體伺服器執行個體指定為 partner_server (SET PARTNER ='principal_server')。其次是連接到主體伺服器,將鏡像伺服器執行個體指定為 partner_server (SET PARTNER ='mirror_server');這會在這兩個夥伴之間,啟動一個資料庫鏡像工作階段。如需詳細資訊,請參閱<設定資料庫鏡像>。

      partner_server 的值是一個伺服器網路位址。這個值的語法如下:

      TCP**://<system-address>:**<port>

      其中

      • <system-address> 是明確識別目的地電腦系統的字串,例如系統名稱、完整網域名稱或 IP 位址。
      • <port> 是夥伴伺服器執行個體之鏡像端點的相關聯通訊埠編號。

      如需詳細資訊,請參閱<指定伺服器網路位址 (資料庫鏡像)>。

      下列範例說明 SET PARTNER ='partner_server' 子句:

      SET PARTNER = 'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      ms174269.note(zh-tw,SQL.90).gif重要事項:
      如果工作階段是利用 ALTER DATABASE 陳述式而不是 SQL Server Management Studio 來設定的,依預設,工作階段會設為完整交易安全 (SAFETY 設為 FULL),並以不具自動容錯移轉的高安全性模式執行。若要允許自動容錯移轉,請設定見證;若要以高效能模式執行,請關閉交易安全性 (SAFETY OFF)。
    • FAILOVER
      以手動方式將主體伺服器容錯移轉到鏡像伺服器。您只能在主體伺服器上指定 FAILOVER。只有在 SAFETY 設定是 FULL (預設值) 時,這個選項才有效。

      FAILOVER 選項需要 master 當做資料庫內容。

      如需詳細資訊,請參閱<手動容錯移轉>。

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      在主體伺服器失敗之後 (未發生自動容錯移轉且資料庫處於尚未同步或同步的狀態),將資料庫服務強制移轉到鏡像資料庫。

      我們強烈建議您只在主體伺服器已不執行時,才強制執行服務。否則,某些用戶端可能仍會繼續存取原始的主體資料庫,而不是新的主體資料庫。

      您只能在鏡像伺服器上使用 FORCE_SERVICE_ALLOW_DATA_LOSS,且只適用於下列情況:

      • 主體伺服器已關閉。
      • WITNESS 設定為 OFF 或見證連接到鏡像伺服器。

      請只在您願意承擔失去某些資料的風險,以便在資料庫中立即還原服務時,才強制服務。如需有關強制服務之替代方案的資訊,請參閱<非同步資料庫鏡像 (高效能模式)>。

      強制服務會暫停工作階段,暫時將所有資料保留在原始主體資料庫中。原始的主體資料庫一旦可以提供服務且與新的主體伺服器開始通訊後,資料庫管理員就可以繼續提供服務。恢復工作階段時,便會失去任何尚未傳送的記錄和對應的更新。

      如需有關強制服務風險的詳細資訊,請參閱<強制服務 (可能發生資料遺失)>。

    • OFF
      移除資料庫鏡像工作階段並從資料庫移除鏡像。您可以在任何一個夥伴上指定 OFF。如需有關移除鏡像所造成影響的詳細資訊,請參閱<移除資料庫鏡像>。
    • RESUME
      繼續暫停的資料庫鏡像工作階段。您只能在主體伺服器上指定 RESUME。
    • SAFETY { FULL | OFF }
      設定交易安全層級。您只能在主體伺服器上指定 SAFETY。

      預設值是 FULL。使用完整安全性時,資料庫鏡像工作階段會同步執行 (在高安全性模式)。如果 SAFETY 設定為 OFF,則資料庫鏡像工作階段會非同步執行 (在高效能模式)。

      高安全性模式行為會依見證而有部分的不同,如下所述:

      • 當安全性設定為 FULL,且設定了工作階段的見證時,工作階段會以具有自動容錯移轉的高安全性模式執行。當主體伺服器遺失時,如果資料庫已同步處理而且鏡像伺服器執行個體及見證仍彼此連接 (也就是擁有仲裁),工作階段就會自動進行容錯移轉。如需詳細資訊,請參閱<仲裁:見證如何影響資料庫可用性>。
        如果設定了工作階段的見證,但目前已中斷連接,則遺失鏡像伺服器會使主體伺服器降低效能。
      • 當安全性設定為 FULL,且見證設定為 OFF 時,工作階段會以不具自動容錯移轉的高安全性模式執行。如果鏡像伺服器執行個體降低效能,主體伺服器執行個體不受影響。如果主體伺服器執行個體降低效能,您可以對鏡像伺服器執行個體強制進行服務 (資料可能會遺失)。

      如果 SAFETY 設定為 OFF,則工作階段會以高效能模式執行,且不支援自動容錯移轉和手動容錯移轉。不過,鏡像上的問題不會影響主體,而且如果主體伺服器執行個體無法使用,您可以在必要時將服務強制移轉至鏡像伺服器執行個體 (資料可能會遺失) -- 如果 WITNESS 設定為 OFF 或見證目前仍與鏡像連接。如需有關強制服務的詳細資訊,請參閱本章節稍早的「FORCE_SERVICE_ALLOW_DATA_LOSS」。

      ms174269.note(zh-tw,SQL.90).gif重要事項:
      高效能模式不使用見證。不過,當您將 SAFETY 設定為 OFF 時,強烈建議您確認 WITNESS 已設定為 OFF。

      如需詳細資訊,請參閱<Transact-SQL 設定和資料庫鏡像作業模式>。

    • SUSPEND
      暫停資料庫鏡像工作階段。

      您可以在任何一個夥伴上指定 SUSPEND。

    • TIMEOUT integer
      指定逾時週期 (以秒為單位)。逾時期間是伺服器執行個體等待接收鏡像工作階段中之另一執行個體發出的 PING 訊息的最大時間,之後,便將其他執行個體視為已經中斷。

      您只能在主體伺服器上指定 TIMEOUT 選項。如果您沒有指定這個選項,依預設,這個期間是 10 秒。如果您指定 5 或以上,逾時期間便設為指定的秒數。如果您指定的逾時值是 0 - 4 秒,逾時期間會自動設為 5 秒。

      ms174269.note(zh-tw,SQL.90).gif重要事項:
      我們建議您讓逾時期間保持在 10 秒或更久。將這個值設定為小於 10 秒,可能會使負荷重的系統遺漏 PING 以及宣告假失敗。

      如需詳細資訊,請參閱<資料庫鏡像期間可能發生的失敗>。

  • WITNESS <witness_option>
    控制定義資料庫鏡像見證的資料庫屬性。SET WITNESS 子句會影響資料庫的這兩個副本,但您只能在主體伺服器上設定 SET WITNESS。如果設定了工作階段的見證,則不論 SAFETY 設定為何,都需要仲裁才能為資料庫提供服務;如需詳細資訊,請參閱<仲裁:見證如何影響資料庫可用性>。

    我們建議您將見證和容錯移轉夥伴放在不同的電腦中。如需有關見證的資訊,請參閱<資料庫鏡像見證>。如需有關自動容錯移轉的資訊,請參閱<自動容錯移轉>。

    若要執行 SET WITNESS 陳述式,主體和見證伺服器執行個體的端點 STATE 都必須設為 STARTED。另外,也請注意,見證伺服器執行個體之資料庫鏡像端點的 ROLE 必須設成 WITNESS 或 ALL。如需有關指定端點的資訊,請參閱<資料庫鏡像端點>。

    若要瞭解伺服器執行個體之資料庫鏡像端點的角色和狀態,請在這個執行個體上,使用下列 Transact-SQL 陳述式:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    ms174269.note(zh-tw,SQL.90).gif附註:
    在見證上,無法設定資料庫屬性。

    <witness_option> ::=

    ms174269.note(zh-tw,SQL.90).gif附註:
    每個 SET WITNESS 子句只能有一個 <witness_option>。
    • 'witness_server'
      指定 Database Engine 的執行個體扮演資料庫鏡像工作階段見證伺服器的角色。您只能在主體伺服器上指定 SET WITNESS。

      在 SET WITNESS ='witness_server' 陳述式中,witness_server 的語法與 partner_server 的語法相同。

    • OFF
      從資料庫鏡像工作階段中移除見證。將見證設成 OFF 會停用自動容錯移轉。如果資料庫設為 FULL SAFETY,且見證設為 OFF,鏡像伺服器失敗,會使主體伺服器將資料庫設為無法使用。
<service_broker_option>::=

控制 Service Broker 選項

  • ENABLE_BROKER
    指定啟用指定資料庫的 Service Broker。sys.databases 目錄檢視中的 is_broker_enabled 旗標會設為 true,且會啟動傳遞訊息。

    ms174269.note(zh-tw,SQL.90).gif附註:
    在任何資料庫中啟用 SQL Server Service Broker 時都需要資料庫鎖定。若要在 msdb 資料庫中啟用 Service Broker,請先停止 SQL Server Agent,使 Service Broker 可以取得必要的鎖定。
  • DISABLE_BROKER
    指定停用指定資料庫的 Service Broker。sys.databases 目錄檢視中的 is_broker_enabled 旗標會設為 false,且會停止傳遞訊息。
  • NEW_BROKER
    指定資料庫應該接收新的 Broker 識別碼。由於資料庫會被視為新的 Service Broker,因此,會立即移除資料庫中所有現有的交談,不會產生結束對話訊息。
  • ERROR_BROKER_CONVERSATIONS
    指定當附加資料庫時,資料庫中的交談應該收到錯誤訊息。這可讓您的應用程式執行現有交談作業的正規清除工作。
<date_correlation_optimization_option> ::=

控制 date_correlation_optimization 選項。

  • DATE_CORRELATION_OPTIMIZATION { ON | OFF }

    • OFF
      不維護相互關聯統計資料。

    若要將 DATE_CORRELATION_OPTIMIZATION 設定為 ON,則除了正在執行 ALTER DATABASE 陳述式的連接外,資料庫都不可以有使用中的連接。之後就可以支援多個連接。

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

<parameterization_option> ::=

控制參數化選項。

  • PARAMETERIZATION { SIMPLE | FORCED }

    • SIMPLE
      根據資料庫的預設行為,將查詢參數化。如需詳細資訊,請參閱<簡單參數化>。
    • FORCED
      SQL Server 會將資料庫中的所有查詢參數化。如需詳細資訊,請參閱<強制參數化>。

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

<snapshot_option>::=

決定交易隔離等級。

  • ALLOW_SNAPSHOT_ISOLATION { ON | OFF }

    • ON
      交易可以指定 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,這個設定會保留下來。

    您可以變更 mastermodelmsdbtempdb 等資料庫的 ALLOW_SNAPSHOT_ISOLATION 設定。如果您變更了 tempdb 的設定,每次停止和重新啟動 Database Engine 執行個體,這個設定會保留下來。如果您變更模型的設定,除了 tempdb,任何新建資料庫都會以這個設定為預設值。

    依預設,mastermsdb 資料庫的這個選項是 ON。

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

  • READ_COMMITTED_SNAPSHOT { ON | OFF }

    • ON
      指定讀取認可之隔離等級的交易會使用資料列版本控制,而不用鎖定。當在讀取認可之隔離等級執行交易時,所有的陳述式都會看到資料的快照集,就與陳述式開始時所存在的資料一樣。
    • OFF
      指定 READ_COMMITTED 隔離等級的交易會使用鎖定。

    若要設定 READ_COMMITTED_SNAPSHOT ON 或 OFF,除了執行 ALTER DATABASE 命令的連接之外,不能有任何使用中的資料庫連接。不過,資料庫不一定要處於單一使用者模式。當資料庫是 OFFLINE 時,您便不能變更這個選項的狀態。

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

    mastertempdbmsdb 系統資料庫的 READ_COMMITTED_SNAPSHOT 不能設為 ON。如果您變更 model 的設定,除了 tempdb,這項設定會成為任何新建資料庫的預設值。

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

WITH <termination>::=

指定資料庫狀態轉換時,何時回復不完整的交易。如果省略 termination 子句,且資料庫有任何鎖定,ALTER DATABASE 陳述式會無限等待。只能指定一個 termination 子句,它在 SET 子句之後。

ms174269.note(zh-tw,SQL.90).gif附註:
並非所有的資料庫選項都會使用 WITH <termination> 子句。如需詳細資訊,請參閱「備註」一節中「設定選項」下的表格。
  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
    指定在指定的秒數之後回復,或立即回復。
  • NO_WAIT
    指定若要求的資料庫狀態或選項變更無法立即完成,必須等待交易自身的認可或回復,要求便告失敗。

備註

若要移除資料庫,請使用 DROP DATABASE

若要重新命名資料庫,請搭配 ALTER DATABASE 使用 MODIFY NAME = new_database_name 選項。

若要縮小資料庫大小,請使用 DBCC SHRINKDATABASE

當 BACKUP 陳述式在執行中,您不能新增或移除檔案。

每個資料庫可以指定最多 32,767 個檔案和 32,767 個檔案群組。

ALTER DATABASE 陳述式必須執行自動認可模式 (預設的交易管理模式),且不能在明確或隱含的交易中。如需詳細資訊,請參閱<自動認可交易>。

在 SQL Server 2005 中,資料庫檔案狀態 (如線上或離線) 的維護與資料庫狀態無關。如需詳細資訊,請參閱<檔案狀態>。檔案群組內的檔案狀態決定了整個檔案群組的可用性。若要能夠使用檔案群組,檔案群組內的所有檔案都必須在線上。如果檔案群組離線,SQL 陳述式存取檔案群組的任何嘗試都會失敗,且會出現錯誤。當您建置 SELECT 陳述式的查詢計劃時,查詢最佳化工具會避開在離線檔案群組中的非叢集索引和索引檢視。這使得這些陳述式能夠執行成功。不過,如果這個離線檔案群組包含目標資料表的堆積或叢集索引,SELECT 陳述式便會失敗。另外,當資料表有任何索引在離線檔案群組中,任何修改這份資料表的 INSERT、UPDATE 或 DELETE 陳述式都會失敗。

當資料庫處於 RESTORING 狀態時,大部分的 ALTER DATABASE 陳述式都會失敗。設定資料庫鏡像選項例外。在使用中的還原作業期間,或是由於備份檔損毀導致資料庫或記錄檔的還原作業失敗時,資料庫都有可能處於 RESTORING 狀態。如需詳細資訊,請參閱<回應由損毀備份造成的 SQL Server 還原錯誤>。

設定選項

若要擷取資料庫選項的目前設定,請使用 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>

設定下列其中一個選項,清除 SQL Server 執行個體的計劃快取:

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

 

清除計劃快取會導致重新編譯所有後續執行計劃,而且可能會導致查詢效能突然暫時下降。在 SQL Server 2005 Service Pack 2 中,針對每次清除計劃快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計劃快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。

移動檔案

在 SQL Server 2005 中,您可以在 FILENAME 中指定新位置,來移動系統或使用者自訂資料和記錄檔。在下列狀況中,這非常有用:

  • 失敗復原。例如,在質疑模式的資料庫或硬體故障所造成的關閉。
  • 計劃的重新放置。
  • 重新放置排程的磁碟維護。

如需詳細資訊,請參閱<移動資料庫檔案>。

初始化檔案

依預設,資料和記錄檔初始化的方式是在您執行下列作業之一時,在檔案中填入 0:

  • 建立資料庫。
  • 將檔案加入現有的資料庫中。
  • 增加現有檔案的大小。
  • 還原資料庫或檔案群組。

在 SQL Server 2005 中,資料檔可以立即初始化。這可以加快這些檔案作業的執行速度。如需詳細資訊,請參閱<資料庫檔案初始化>。

變更資料庫定序

將不同定序套用至資料庫之前,請確定已符合下列條件:

  1. 您是資料庫目前唯一的使用者。
  2. 沒有結構描述繫結的物件相依於資料庫的定序。
    如果資料庫中有相依於資料庫定序的下列物件,ALTER DATABASE database_name COLLATE 陳述式將會失敗。對於每個封鎖 ALTER 動作的物件,SQL Server 都會傳回一則錯誤訊息:
    • 利用 SCHEMABINDING 來建立的使用者自訂函數和檢視。
    • 計算資料行。
    • CHECK 條件約束。
    • 傳回所包含之字元資料行的定序繼承預設資料庫定序的資料表之資料表值函數。
  3. 變更資料庫定序並不會在資料庫物件的任何系統名稱之間建立複本。
    如果變更的定序會造成名稱重複,下列命名空間可能會使資料庫定序的變更失敗:
    • 物件名稱,如程序、資料表、觸發程序或檢視。
    • 結構描述名稱
    • 群組、角色或使用者之類的主體。
    • 純量類型名稱,如系統和使用者自訂類型。
    • 全文檢索目錄名稱。
    • 物件內的資料行或參數名稱。
    • 資料表內的索引名稱。
      新定序所造成的重複名稱,會使變更動作失敗,SQL Server 會傳回錯誤訊息,指出出現重複名稱的命名空間。

檢視資料庫資訊

您可以利用目錄檢視、系統函數和系統預存程序,以傳回資料庫、檔案和檔案群組的相關資訊。如需詳細資訊,請參閱<檢視資料庫中繼資料>。

權限

需要資料庫的 ALTER 權限。

範例

A. 將檔案加入資料庫中

下列範例會將 5 MB 的資料檔加入 AdventureWorks 資料庫中。

USE master;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD FILE 
(
    NAME = Test1dat2,
    FILENAME = '''+ @data_path + 't1dat2.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)'
);
GO

B. 將含有兩個檔案的檔案群組加入資料庫中

下列範例會在 AdventureWorks 資料庫中建立 Test1FG1 檔案群組,且會將兩個 5 MB 的檔案加入檔案群組中。

USE master
GO
ALTER DATABASE AdventureWorks
ADD FILEGROUP Test1FG1;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD FILE 
(
    NAME = test1dat3,
    FILENAME = '''+ @data_path + 't1dat3.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1dat4,
    FILENAME = '''+ @data_path + 't1dat4.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)
TO FILEGROUP Test1FG1'
);
GO

C. 將兩個記錄檔加入資料庫中

下列範例會將兩個 5 MB 的記錄檔加入 AdventureWorks 資料庫中。

USE master;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD LOG FILE 
(
    NAME = test1log2,
    FILENAME = '''+ @data_path + 'test2log.ldf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1log3,
    FILENAME = '''+ @data_path + 'test3log.ldf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)'
);
GO

D. 從資料庫中移除檔案

下列範例會移除 B 範例中所加入的其中一個檔案。

USE master;
GO
ALTER DATABASE AdventureWorks
REMOVE FILE test1dat4;
GO

E. 修改檔案

下列範例會增加 B 範例中所加入的其中一個檔案的大小。

USE master;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILE
    (NAME = test1dat3,
    SIZE = 20MB);
GO

F. 將檔案移到新位置

下列範例會將 A 範例中所建立的 Test1dat2 檔移至新目錄中。

ms174269.note(zh-tw,SQL.90).gif附註:
您必須實際上將檔案移到新目錄之後,才能執行這個範例。之後,請停止再啟動 SQL Server 的執行個體,或使 AdventureWorks 資料庫離線 (OFFLINE) 再連接 (ONLINE),來實作變更。
USE master;
GO
ALTER DATABASE AdventureWorks
MODIFY FILE
(
    NAME = Test1dat2,
    FILENAME = N'c:\t1dat2.ndf'
);
GO

G. 將 tempdb 移到新位置

下列範例會將 tempdb 從磁碟中目前的位置移到另一個磁碟位置。由於在每次啟動 MSSQLSERVER 服務時都會重新建立 tempdb,因此您不需要實際移動資料和記錄檔。在步驟 3 重新啟動服務時就會建立這些檔案。在重新啟動服務之前,tempdb 都會持續在現有的位置運作。

  1. 決定 tempdb 資料庫的邏輯檔案名稱,及它們目前在磁碟中的位置。

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    GO
    
  2. 請利用 ALTER DATABASE 來變更每個檔案的位置。

    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE  tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLData\templog.ldf');
    GO
    
  3. 停止和重新啟動 SQL Server 執行個體。

  4. 確認檔案變更。

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
  5. 將 tempdb.mdf 和 templog.ldf 檔案從它們的原始位置刪除。

H. 使檔案群組成為預設值

下列範例會使 B 範例所建立的 Test1FG1 檔案群組成為預設檔案群組。之後,預設檔案群組會重設為 PRIMARY 檔案群組。請注意,您必須用方括號或引號來分隔 PRIMARY

USE master;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO

I. 設定資料庫的選項

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

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

J. 將資料庫設為 READ_ONLY

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

ms174269.note(zh-tw,SQL.90).gif附註:
這個範例在第一個 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

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

下列範例會啟用 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

L. 利用見證建立資料庫鏡像工作階段

利用見證來設定資料庫鏡像,需要設定安全性和準備鏡像資料庫,另外,還需要利用 ALTER DATABASE 來設定夥伴。如需完成設定程序的範例,請參閱<設定資料庫鏡像>。

M. 資料庫鏡像工作階段的手動容錯移轉

您可以從任何一個資料庫鏡像夥伴來初始化手動容錯移轉。在容錯移轉之前,您應該先確認您認為是目前主體伺服器的伺服器,實際上就是主體伺服器。例如,如果是 AdventureWorks 資料庫,請在您認為是目前主體伺服器的伺服器執行個體上,執行下列查詢:

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks' 
GO

如果伺服器執行個體實際上就是主體,mirroring_role_desc 值便是 Principal。如果這個伺服器執行個體是鏡像伺服器,SELECT 陳述式會傳回 Mirror

下列範例假設伺服器是目前的主體。

  1. 以手動方式執行容錯移轉,將工作交給資料庫鏡像夥伴:

    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    GO
    
  2. 若要驗證在新鏡像上的容錯移轉結果,請執行下列查詢:

    SELECT name, mirroring_role_desc 
    FROM sys.databases WHERE name = N'AdventureWorks';
    GO
    

    現在,mirroring_role_desc 的現行值是 Mirror

請參閱

參考

CREATE DATABASE (Transact-SQL)
DATABASEPROPERTYEX (Transact-SQL)
DROP DATABASE (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_configure (Transact-SQL)
sp_spaceused (Transact-SQL)
sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)
sys.database_mirroring_witnesses (Transact-SQL)
sys.data_spaces (Transact-SQL)
sys.filegroups (Transact-SQL)
sys.master_files (Transact-SQL)

其他資源

啟用資料列版本控制式的隔離等級
系統資料庫

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 將清除計劃快取的選項之相關資訊新增到<備註>的<設定選項>章節以及 AUTO_CLOSE 的定義。
  • 將在單一使用者模式中使用 AUTO_UPDATE_STATISTICS_ASYNC 選項的相關資訊新增到 SINGLE_USER 的定義。

2006 年 4 月 14 日

變更的內容:
  • 更新 FAILOVER 選項的描述,指出它需要 master 當做資料庫內容。
  • 在「<database_mirroring_option>」一節的簡介中新增重要注意事項。
  • 在 ALLOW_SNAPSHOT_ISOLATION 引數下,更新有關在資料庫中判斷快照集隔離交易狀態的資訊,以及該狀態如何在此選項變更時影響 SQL Server 的行為。
  • 更正 DATE_CORRELATION_OPTIMIZATION 的定義。

2005 年 12 月 5 日

新增內容:
  • 新增有關 ENABLE_BROKER 定義的附註。
  • 新增在已升級資料庫上修改 PAGE_VERIFY 選項的建議。
變更的內容:
  • 移除 SUPPLEMENTAL_LOGGING 選項。
  • 更正範例 G。
  • 更正有關系統資料庫中 TRUSTWORTHY 選項的資訊。
  • 更新 READ_COMMITTED_SNAPSHOT 的定義,指出單一使用者模式不是必要的。
  • 更新 <db_state_option> 的定義,指出當資料庫處於 RESTORING 狀態時,不能設定 OFFLINE、ONLINE 和 EMERGENCY 等選項。