天天看點

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

修改一個資料庫或與該資料庫關聯的檔案和檔案組。在資料庫中添加或删除檔案和檔案組、更改資料庫的屬性或其檔案和檔案組、更改資料庫排序規則和設定資料庫選項。不能修改資料庫快照。若要修改與複制相關的資料庫選項,請使用 sp_replicationdboption。

 Transact-SQL 文法約定

 文法

sql server 2005 T-SQL ALTER DATABASE (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 }      

 參數

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
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 子句中指定檔案的新邏輯名稱。例如:

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
複制代碼
MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name )       
若要将資料檔案或日志檔案移至新位置,請在 NAME 子句中指定目前的邏輯檔案名稱,并在 FILENAME 子句中指定新路徑和作業系統檔案名稱。例如:
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
複制代碼
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 資料庫引擎将使用 model 資料庫中的主檔案的大小。如果指定了輔助資料檔案或日志檔案,但未指定該檔案的 size ,則資料庫引擎将以 1 MB 作為該檔案的大小。

字尾 KB、MB、GB 和 TB 可用于指定千位元組、兆位元組、千兆位元組或兆兆位元組。預設值為 MB。指定整數,不包含小數。若要指定兆位元組的分數,應通過乘以數字 1024 将該值轉換為千位元組。例如,應指定 1536 KB 而不是 1.5MB(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。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
在 SQL Server 2005 中,資料檔案的預設增量已從 10% 改為 1 MB。日志檔案的預設值仍然為 10%。
OFFLINE
将檔案設定為脫機并使檔案組中的所有對象都不可通路。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
僅當檔案已損壞但可以還原時,才能使用該選項。對于設定為 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>
對檔案組設定隻讀或讀/寫屬性。
預設值
将預設資料庫檔案組改為 filegroup_name。資料庫中隻能有一個檔案組作為預設檔案組。有關詳細資訊,請參閱了解檔案和檔案組。
NAME = new_filegroup_name
将檔案組名稱改為 new_filegroup_name。
<filegroup_updatability_option>::=

對檔案組設定隻讀或讀/寫屬性。

READ_ONLY | READONLY

指定檔案組為隻讀。不允許更新其中的對象。主檔案組不能設定為隻讀。若要更改此狀态,您必須對資料庫有獨占通路權限。有關詳細資訊,請參閱 SINGLE_USER 子句。

因為隻讀資料庫不允許資料修改,是以将發生以下情況:

  • 系統啟動時,将跳過自動恢複。
  • 不能收縮資料庫。
  • 在隻讀資料庫中不會進行鎖定。這可以加快查詢速度。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
在 Microsoft SQL Server 的未來版本中,将删除 READONLY 關鍵字。請避免在新的開發工作中使用 READONLY,并計劃修改目前使用 READONLY 的應用程式。請改用 READ_ONLY。
READ_WRITE | READWRITE
将該組指定為 READ_WRITE。允許更新檔案組中的對象。若要更改此狀态,您必須對資料庫有獨占通路權限。有關詳細資訊,請參閱 SINGLE_USER 子句。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
在 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 目錄視圖中的 state 和 state_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 語句的終止子句所指定的時間範圍内,所有資料庫連接配接都将被斷開。在資料庫轉換到 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
資料庫不能參與跨資料庫所有權連結。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
如果 cross db ownership chaining 伺服器選項為 0 (OFF),SQL Server 執行個體将可以識别此設定。如果 cross db ownership chaining 為 1 (ON),則不論此選項為何值,所有使用者資料庫都可以參與跨資料庫所有權鍊。可以使用 sp_configure 設定此選項。

若要設定此選項,要求具有 sysadmin 固定伺服器角色的成員身份。不能針對下列系統資料庫設定 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。

若要設定此選項,要求具有 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 用戶端會發出連接配接級别 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 屬性來确定此選項的狀态。

<auto_option>::=

控制自動選項。

AUTO_CLOSE { ON | OFF }
ON

在最後一個使用者退出後,資料庫完全關閉,并且釋放資源。

當使用者嘗試再次使用該資料庫時,該資料庫将自動重新打開。例如,通過發出 USE database_name 語句。如果資料庫在 AUTO_CLOSE 設定為 ON 時完全關閉,則該資料庫不會重新打開,直到下一次資料庫引擎重新啟動時,使用者試圖使用該資料庫為止。

OFF
在最後一個使用者退出後,資料庫仍然保持打開狀态。
AUTO_CLOSE 選項允許将資料庫檔案作為正常檔案進行管理,是以,該選項對于桌面資料庫很有用。它們可以移動、複制以制作備份,或者甚至通過電子郵件發送給其他使用者。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
在 SQL Server 的早期版本中,AUTO_CLOSE 是一個同步程序,當與資料庫引擎反複連接配接并不斷中斷連接配接的應用程式通路資料庫時,将會導緻性能下降。在 SQL Server 2005 中,AUTO_CLOSE 程序為異步程序;反複打開和關閉資料庫不會降低性能。
可通過檢視 sys.databases 目錄視圖中的 is_auto_close_on 列或 DATABASEPROPERTYEX 函數的 IsAutoClose 屬性來确定此選項的狀态。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
當 AUTO_CLOSE 為 ON 時,由于該資料庫不可用于檢索資料,是以 sys.databases 目錄視圖中的某些列和 DATABASEPROPERTYEX 函數将傳回 NULL。若要解決此問題,請執行 USE 語句打開資料庫。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
資料庫鏡像要求将 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 查詢優化器可以更好地确定估算查詢的方式。如果未使用統計資訊,則資料庫引擎将自動删除它們。如果設定為 OFF,将不自動建立統計資訊;相反,您可以手動建立統計資訊。有關詳細資訊,請參閱索引統計資訊。

OFF
必須手動建立統計資訊。
可通過檢視 sys.databases 目錄視圖中的 is_auto_update_stats_on 列或 DATABASEPROPERTYEX 函數的 IsAutoUpdateStatistics 屬性來确定此選項的狀态。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
無論 AUTO_CREATE_STATISTICS 實際設定情況如何,查詢優化器在處理所有内部系統表時,都按照它被設定為 ON 的情況來處理。這些表包括系統基表、XML 索引、全文索引、Service Broker 隊清單和查詢通知表。
AUTO_SHRINK { ON | OFF }
ON

資料庫檔案是定期收縮的候選項。

資料檔案和日志檔案都可以自動收縮。隻有在資料庫設定為 SIMPLE 恢複模式時,或事務日志已備份時,AUTO_SHRINK 才可減小事務日志的大小。當設定為 OFF 時,在定期檢查未使用空間的過程中,資料庫檔案不自動收縮。

當檔案中超過百分之二十五的部分包含未使用的空間時,AUTO_SHRINK 選項将導緻收縮檔案。檔案将收縮至未使用空間占檔案 25% 的大小,或收縮至檔案建立時的大小,以兩者中較大者為準。

不能收縮隻讀資料庫。

OFF
在定期檢查未使用空間時不會自動收縮資料庫檔案。
可通過檢視 sys.databases 目錄視圖中的 is_auto_shrink_on 列或 DATABASEPROPERTYEX 函數的 IsAutoShrink 屬性來确定此選項的狀态。 .
AUTO_UPDATE_STATISTICS { ON | OFF }
ON
在查詢優化期間,将自動更新優化查詢需要但已過期的所有統計資訊。
OFF
必須手動更新統計資訊。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
除非指定了 NORECOMPUTE 子句,否則 UPDATE STATISTICS 語句會在目标表或視圖上重新啟用統計資訊自動更新。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
無論 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 語句中未顯式定義為空性的 alias 資料類型或 CLR user-defined type 列的預設值(NULL 或 NOT NULL)。使用限制定義的列都将遵循限制規則,而與此設定無關。
ON
預設值為 NULL。
OFF
預設值為 NOT NULL。

連接配接級設定(使用 SET 語句設定)覆寫 ANSI_NULL_DEFAULT 的預設資料庫級别設定。預設情況下,當連接配接到 SQL Server 的執行個體時,ODBC 和 OLE DB 用戶端發出連接配接級 SET 語句,将會話的 ANSI_NULL_DEFAULT 設定為 ON。有關詳細資訊,請參閱 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
與空值的所有比較的結果均為 UNKNOWN。
OFF
如果兩個值都為 NULL,則非 UNICODE 值與空值的比較結果為 TRUE。

連接配接級設定(使用 SET 語句設定)覆寫 ANSI_NULLS 的預設資料庫設定。預設情況下,當連接配接到 SQL Server 的執行個體時,ODBC 和 OLE DB 用戶端發出連接配接級 SET 語句,以将會話的 ANSI_NULLS 設定為 ON。有關詳細資訊,請參閱 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,該設定隻影響新列的定義。

char( n ) 和 binary(n) 列(允許為空值)在 ANSI_PADDING 設定為 ON 時将填充到列長,而當 ANSI_PADDING 為 OFF 時,則将剪裁尾随空格和零。不允許為空值的 char(n) 和 binary(n) 列将始終填充到列長。

連接配接級别設定(使用 SET 語句設定)覆寫 ANSI_PADDING 的預設資料庫級别設定。預設情況下,當連接配接到 SQL Server 的執行個體時,ODBC 和 OLE DB 用戶端發出連接配接級 SET 語句,将會話的 ANSI_PADDING 設定為 ON。有關詳細資訊,請參閱 SET ANSI_PADDING (Transact-SQL)。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
建議始終将 ANSI_PADDING 設定為 ON。建立或更改計算列或索引視圖的索引時,ANSI_PADDING 也必須為 ON。
可通過檢視 sys.databases 目錄視圖中的 is_ansi_padding_on 列或 DATABASEPROPERTYEX 函數的 IsAnsiPaddingEnabled 屬性來确定此選項的狀态。
ANSI_WARNINGS { ON | OFF }
ON
當出現被零除的情況或聚合函數中出現空值時,将發出錯誤或警告。
OFF
出現被零除等情況時不會引發警告,而是傳回空值。

建立或更改計算列或索引視圖的索引時,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 屬性來确定此選項的狀态。

CONCAT_NULL_YIELDS_NULL { ON | OFF }
ON
當串聯運算的兩個操作數中任意一個為 NULL 時,結果也為 NULL。例如,将字元串“This is”和 NULL 串聯将得到 NULL 值,而不是值“This is”。
OFF
空值被視為空字元串進行處理。

建立或更改計算列或索引視圖的索引時,CONCAT_NULL_YIELDS_NULL 也必須為 ON。

連接配接級别設定(使用 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 的設定如何,都可以始終使用括号辨別符。有關詳細資訊,請參閱分隔辨別符(資料庫引擎)。

建立表後,表的中繼資料中 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。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
當 RECURSIVE_TRIGGERS 設定為 OFF 時,隻禁止直接遞歸觸發。若要禁用間接遞歸觸發,還必須将 nested triggers 伺服器選項設定為 0。
可通過檢視 sys.databases 目錄視圖中的 is_recursive_triggers_on 列或 DATABASEPROPERTYEX 函數的 IsRecursiveTriggersEnabled 屬性來确定此選項的狀态。
<recovery_option> ::=

控制資料庫恢複選項和磁盤 I/O 錯誤檢查。

FULL
通過使用事務日志備份,在媒體發生故障後提供完整恢複。如果資料檔案損壞,媒體恢複可以還原所有已送出的事務。有關詳細資訊,請參閱在完整恢複模式下備份。
BULK_LOGGED
在某些大規模或大容量操作中,可以提供最佳性能,占用的日志空間也最少,是以,在媒體發生故障後,可以提供恢複。有關有日志記錄的大容量操作的資訊,請參閱按最小方式記錄操作。在 BULK_LOGGED 恢複模式下,這些操作的日志記錄最少。有關詳細資訊,請參閱在大容量日志恢複模式下備份。
SIMPLE
系統将提供占用日志空間最小的簡單備份政策。伺服器故障恢複不再需要的日志空間可被自動重用。有關詳細資訊,請參閱簡單恢複模式下的備份。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
簡單恢複模式比其他兩種模式更容易管理,但代價是資料檔案損壞時丢失資料的風險也較大。最近的資料庫備份或差異資料庫備份之後的所有更改都将丢失,必須手動重新輸入。

預設恢複模式由 model 資料庫的恢複模式确定。有關選擇适當恢複模式的詳細資訊,請參閱選擇資料庫恢複模式。

可通過檢視 sys.databases 目錄視圖中的 recovery_model 和 recovery_model_desc 列,或者檢視 DATABASEPROPERTYEX 函數的 Recovery 屬性來确定此選項的狀态。

TORN_PAGE_DETECTION { ON | OFF }
ON
資料庫引擎可以檢測不完整頁。
OFF
資料庫引擎不能檢測不完整頁。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
在 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 值。在讀取過程中,即使頁頭中存在 CHECKSUM 或 TORN_PAGE_DETECTION 值,SQL Server 也不會驗證校驗和或殘缺頁。
使用 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>}。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
SET PARTNER 或 SET WITNESS 指令在輸入時可以成功完成,但随後失敗。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
我們建議您在非高峰時段配置資料庫鏡像,因為此配置會影響性能。

有關資料庫鏡像的資訊,請參閱資料庫鏡像。

PARTNER <partner_option>

控制用于定義資料庫鏡像會話的故障轉移合作夥伴及其行為的資料庫屬性。有些 SET PARTNER 選項可在任一合作夥伴上設定;而其他選項則僅限于在主體伺服器或鏡像伺服器上設定。有關詳細資訊,請參閱下文所述的各個 PARTNER 選項。無論在哪個合作夥伴上指定 SET PARTNER 子句,該子句都會同時影響資料庫的兩個副本。

若要執行 SET PARTNER 語句,必須将兩個合作夥伴的端點的 STATE 都設定為 STARTED。另請注意,必須将每個合作夥伴伺服器執行個體的資料庫鏡像端點的 ROLE 設定為 PARTNER 或 ALL。有關如何指定端點的資訊,請參閱如何建立使用 Windows 身份驗證的鏡像端點 (Transact-SQL)。若要了解伺服器執行個體的資料庫鏡像端點的角色和狀态,請使用以下 Transact-SQL 語句:

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
複制代碼
SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints      
<partner_option> ::=
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
每個 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' 子句:

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
複制代碼
SET PARTNER = 'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'      
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
如果會話是使用 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”。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
高性能模式并非旨在使用見證伺服器。但是,我們極力建議您:一旦将 SAFETY 設定為 OFF,也要確定将 WITNESS 也設定為 OFF。
有關詳細資訊,請參閱 Transact-SQL 設定和資料庫鏡像運作模式。
SUSPEND

挂起資料庫鏡像會話。

可以在任一合作夥伴上指定 SUSPEND。

TIMEOUT integer

以秒為機關指定逾時期限。逾時期限是在認為鏡像會話中的另一執行個體已斷開連接配接之前,一個伺服器執行個體等待接收來自該鏡像會話另一執行個體的 PING 消息的最長時間。

隻能在主體伺服器上指定 TIMEOUT 選項。如果不指定此選項,則在預設情況下,逾時期限為 10 秒。如果指定 5 或更高,則逾時期限将設定為指定的秒數。如果指定 0 到 4 秒之間的逾時值,則逾時期限将自動設定為 5 秒。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
重要提示:
我們建議您将逾時期限保持為 10 秒或更長。如果将值設定為低于 10 秒,則可能使高負荷系統丢失 PING 并聲明錯誤故障。
有關詳細資訊,請參閱資料庫鏡像期間可能出現的故障。
WITNESS <witness_option>

控制定義資料庫鏡像見證伺服器的資料庫屬性。SET WITNESS 子句會影響資料庫的兩個副本,但隻能在主體伺服器上指定 SET WITNESS。如果為會話設定一個見證伺服器,則需要仲裁為資料庫提供服務,而不用考慮 SAFETY 設定;有關詳細資訊,請參閱仲裁:見證伺服器如何影響資料庫可用性。

建議使見證伺服器和故障轉移合作夥伴駐留在單獨伺服器上。有關見證伺服器的資訊,請參閱資料庫鏡像見證伺服器。有關自動故障轉移的資訊,請參閱自動故障轉移。

若要執行 SET WITNESS 語句,必須将主體伺服器和見證伺服器執行個體端點的 STATE 都設定為 STARTED。另請注意,必須将見證伺服器執行個體的資料庫鏡像端點的 ROLE 設定為 WITNESS 或 ALL。有關指定端點的資訊,請參閱資料庫鏡像端點。

若要了解伺服器執行個體的資料庫鏡像端點的角色和狀态,請使用以下 Transact-SQL 語句:

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
複制代碼
SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints      
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
不能在見證伺服器上設定資料庫屬性。
<witness_option> ::=
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
每個 SET WITNESS 子句隻允許使用一個 <witness_option>。
' witness_server '

指定一個資料庫引擎執行個體,作為資料庫鏡像會話的見證伺服器。隻能在主體伺服器上指定 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,消息傳遞已開始。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
在任何資料庫中啟用 SQL Server Service Broker 都需要資料庫鎖。若要在 msdb 資料庫中啟用 Service Broker,請首先停止 SQL Server 代理,這樣 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 }
ON
SQL Server 維護由 FOREIGN KEY 限制連結并包含 datetime 列的資料庫中的任意兩個表中之間的相關統計資訊。有關詳細資訊,請參閱優化通路相關 datetime 列的查詢。
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 時,仍将保留該設定。

可以為 master、model、msdb 和 tempdb 資料庫更改 ALLOW_SNAPSHOT_ISOLATION 設定。如果更改 tempdb 的設定,則每次停止和重新啟動資料庫引擎執行個體時會保留該設定。如果為 model 更改該設定,則該設定将成為除 tempdb 以外的所有建立資料庫的預設設定。

預設情況下,在 master 和 msdb 資料庫中,該選項設定為 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 時,仍将保留該設定。

對于 master、tempdb 或 msdb 系統資料庫,不能将 READ_COMMITTED_SNAPSHOT 設定為 ON。如果為 model 更改該設定,則該設定将成為除 tempdb 以外的所有建立資料庫的預設設定。

可通過檢視 sys.databases 目錄視圖中的 is_read_committed_snapshot_on 列确定此選項的目前設定。

WITH <termination>::=

指定當資料庫從一種狀态轉換到另一種狀态時,何時復原未完成的事務。如果終止子句被忽略,則當資料庫中存在任何鎖時,ALTER DATABASE 語句将無限期等待。隻能指定一條終止子句,而且該子句應跟在 SET 子句後面。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
并非所有資料庫選項都使用 WITH <termination> 子句。有關詳細資訊,請參閱“備注”部分中的“設定選項”下面的表。
ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
設定是在指定秒數之後復原還是立即復原。
NO_WAIT
指定如果請求的資料庫語句或選項更改隻有等待事務自主送出或復原才能立即完成,該請求将失敗。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

 備注

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

若要删除資料庫,請使用 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 中指定新位置來移動系統或使用者定義的資料和日志檔案。這在下列情況下可能很有用:

  • 故障恢複。例如,資料庫處于可疑模式或因硬體故障而關閉。
  • 預先安排的重定位。
  • 為預定的磁盤維護操作而進行的重定位。

有關詳細資訊,請參閱移動資料庫檔案。

初始化檔案

預設情況下,在執行下列操作之一時,将通過在檔案中填充零來初始化資料和日志檔案。

  • 建立資料庫。
  • 向現有資料庫添加檔案。
  • 增加現有檔案的大小。
  • 還原資料庫或檔案組。

在 SQL Server 2005 中,可以在瞬間對資料檔案進行初始化。這樣,可以快速執行這些檔案操作。有關詳細資訊,請參閱資料庫檔案初始化。

更改資料庫排序規則

在對資料庫應用不同排序規則之前,請確定已滿足下列條件:

  1. 您是目前資料庫的唯一使用者。
  2. 沒有依賴資料庫排序規則的架構綁定對象。

    如果資料庫中存在下列依賴于資料庫排序規則的對象,則 ALTER DATABASE database_name COLLATE 語句将失敗。SQL Server 将針對每一個阻塞 ALTER 操作的對象傳回一個錯誤消息:

    • 通過 SCHEMABINDING 建立的使用者定義函數和視圖。
    • 計算列。
    • CHECK 限制。
    • 表值函數傳回包含字元列的表,這些列繼承了預設的資料庫排序規則。
  3. 改變資料庫的排序規則不會在任何資料對象的系統名稱中産生重複名稱。

    如果改變排序規則後出現重複的名稱,則下列命名空間可能導緻改變資料庫排序規則的操作失敗:

    • 對象名,如過程、表、觸發器或視圖。
    • 架構名稱
    • 主體,例如組、角色或使用者。
    • 标量類型名,如系統和使用者定義類型。
    • 全文目錄名稱。
    • 對象内的列名或參數名。
    • 表範圍内的索引名。
    由新的排序規則産生的重複名稱将導緻更改操作失敗,SQL Server 将傳回錯誤消息,指出重複名稱所在的命名空間。

檢視資料庫資訊

可以使用目錄視圖、系統函數和系統存儲過程傳回有關資料庫、檔案和檔案組的資訊。有關詳細資訊,請參閱檢視資料庫中繼資料。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

 權限

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

需要對資料庫具有 ALTER 權限。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

 示例

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

A. 向資料庫中添加檔案

以下示例将一個 5 MB 的資料檔案添加到 AdventureWorks 資料庫。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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 的檔案添加到該檔案組。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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. 向資料庫中添加兩個日志檔案

以下示例向 AdventureWorks 資料庫中添加兩個 5 MB 的日志檔案。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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 中添加的一個檔案。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

USE master;

GO

ALTER DATABASE AdventureWorks

REMOVE FILE test1dat4;

GO
      

E. 修改檔案

以下示例增加示例 B 中添加的一個檔案的大小。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

USE master;

GO

ALTER DATABASE AdventureWorks 

MODIFY FILE

(NAME = test1dat3,

SIZE = 20MB);

GO
      

F. 将檔案移至新位置

以下示例将在示例 A 中建立的 Test1dat2 檔案移至新目錄中。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
必須先将該檔案實際移至新目錄中,然後才能運作此示例。然後,停止和啟動 SQL Server 的執行個體,或使 AdventureWorks 資料庫 OFFLINE 再 ONLINE,以實施更改。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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 資料庫的邏輯檔案名稱以及這些檔案在磁盤上的目前位置。
    sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
    複制代碼
    SELECT name, physical_name
    
        FROM sys.master_files
    
        WHERE database_id = DB_ID('tempdb');
    
        GO      
  2. 使用 ALTER DATABASE 更改每個檔案的位置。
    sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
    複制代碼
    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. 驗證檔案更改。
    sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
    複制代碼
    SELECT name, physical_name
    
        FROM sys.master_files
    
        WHERE database_id = DB_ID('tempdb');      
  5. 将 tempdb.mdf 和 templog.ldf 檔案從其原始位置中删除。

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

以下示例使示例 B 中建立的 Test1FG1 檔案組成為預設檔案組。然後,預設檔案組被重置為 PRIMARY 檔案組。請注意,必須使用括号或引号分隔 PRIMARY。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

USE master;

GO

ALTER DATABASE AdventureWorks 

MODIFY FILEGROUP Test1FG1 DEFAULT;

GO

ALTER DATABASE AdventureWorks 

MODIFY FILEGROUP [PRIMARY] DEFAULT;

GO
      

I. 設定資料庫選項

以下示例設定 AdventureWorks 示例資料庫的恢複模式和資料頁面驗證選項。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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,然後将對資料庫的通路權傳回給所有使用者。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
注意:
此示例在第一個 ALTER DATABASE 語句中使用終止選項 WITH ROLLBACK IMMEDIATE。所有未完成事務都将被復原,并将立刻斷開 AdventureWorks 示例資料庫的所有其他連接配接。
sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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 資料庫啟用快照隔離架構選項。

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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
      

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

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

name            snapshot_isolation_state  description

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

AdventureWorks  1                         ON      

L. 建立具有見證伺服器的資料庫鏡像會話

設定具有見證伺服器的資料庫鏡像會話需要配置安全性并準備鏡像資料庫,還需要使用 ALTER DATABASE 設定合作夥伴。有關完整設定過程的示例,請參閱設定資料庫鏡像。

M. 手動将故障轉移到資料庫鏡像會話

可從任一資料庫鏡像合作夥伴啟動手動故障轉移。進行故障轉移之前,應确認您認為是目前主體伺服器的伺服器确實是主體伺服器。例如,對于 AdventureWorks 資料庫,請在您認為是目前主體伺服器的伺服器上執行以下查詢:

sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)

複制代碼

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. 手動将故障轉移到資料庫鏡像合作夥伴:
    sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
    複制代碼
    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    
        GO      
  2. 若要在新鏡像上驗證故障轉移結果,請執行以下查詢:
    sql server 2005 T-SQL ALTER DATABASE (Transact-SQL)
    複制代碼
    SELECT name, mirroring_role_desc 
    
        FROM sys.databases WHERE name = N'AdventureWorks';
    
        GO      
    現在,mirroring_role_desc 的目前值為 Mirror。