ALTER DATABASE (Transact-SQL)

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

由於長度的關係,ALTER DATABASE 語法會分成下列主題:

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

語法

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

<file_and_filegroup_options >::=
  <add_or_modify_files>::=  <filespec>::=  <add_or_modify_filegroups>::=  <filegroup_updatability_option>::=<set_database_options>::=  <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> ::=  <termination> ::=

引數

  • database_name
    這是要修改的資料庫名稱。

  • MODIFY NAME =new_database_name
    利用指定為 new_database_name 的名稱來重新命名資料庫。

  • COLLATE collation_name
    指定資料庫的定序。collation_name 可以是 Windows 定序名稱,也可以是 SQL 定序名稱。若未指定,就會將 SQL Server 執行個體的定序指派給資料庫。

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

<file_and_filegroup_options >::=

如需詳細資訊,請參閱<ALTER DATABASE 檔案及檔案群組選項 (Transact-SQL)>。

<set_database_options >::=

如需詳細資訊,請參閱<ALTER DATABASE SET 選項 (Transact-SQL)>。

備註

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

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

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

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

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

設定下列其中一個選項,清除 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 次快取存放區排清」。只要在該時間間隔內排清快取,這個訊息就會每五分鐘記錄一次。 

變更資料庫定序

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

  1. 您是資料庫目前唯一的使用者。

  2. 沒有結構描述繫結的物件相依於資料庫的定序。

    如果資料庫中有相依於資料庫定序的下列物件,ALTER DATABASEdatabase_nameCOLLATE 陳述式將會失敗。對於每個封鎖 ALTER 動作的物件,SQL Server 都會傳回一則錯誤訊息:

    • 利用 SCHEMABINDING 來建立的使用者定義函數和檢視表。

    • 計算資料行。

    • CHECK 條件約束。

    • 傳回包含字元資料行之資料表的資料表值函式,該資料行的定序繼承自預設資料庫定序。

    變更資料庫定序時,就會自動更新非結構描述繫結實體的相依性資訊。如需詳細資訊,請參閱<了解 SQL 相依性>。

  3. 變更資料庫定序並不會在資料庫物件的任何系統名稱之間建立複本。

    如果變更的定序會造成名稱重複,下列命名空間可能會使資料庫定序的變更失敗:

    • 物件名稱,如程序、資料表、觸發程序或檢視表。

    • 結構描述名稱

    • 群組、角色或使用者之類的主體。

    • 純量類型名稱,如系統和使用者定義類型。

    • 全文檢索目錄名稱。

    • 物件內的資料行或參數名稱。

    • 資料表內的索引名稱。

    新定序所造成的重複名稱會使變更動作失敗,SQL Server 會傳回錯誤訊息,指出出現重複名稱的命名空間。

檢視資料庫資訊

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

權限

需要資料庫的 ALTER 權限。

範例

A. 變更資料庫的名稱

下列範例會將 AdventureWorks2008R2 資料庫的名稱變更為 Northwind。

USE master;
GO
ALTER DATABASE AdventureWorks2008R2
Modify Name = Northwind ;
GO

B. 變更資料庫的定序

下列範例會使用 SQL_Latin1_General_CP1_CI_AS 定序來建立名為 testdb 的資料庫,然後將 testdb 資料庫的定序變更為 COLLATE French_CI_AI。

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO