共用方式為


CREATE DATABASE (Transact-SQL)

更新: 2006 年 12 月 12 日

建立新資料庫和用來儲存資料庫的檔案、建立資料庫快照集,或從先前建立之資料庫的卸離檔案附加資料庫。

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

語法

CREATE DATABASE database_name 
    [ ON 
        [ PRIMARY ] [ <filespec> [ ,...n ] 
        [ , <filegroup> [ ,...n ] ] 
    [ LOG ON { <filespec> [ ,...n ] } ] 
    ] 
    [ COLLATE collation_name ]
    [ WITH <external_access_option> ]
]
[;]

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH [ WITH <service_broker_option> ]
        | ATTACH_REBUILD_LOG }
[;]

<filespec> ::= 
{
(
    NAME = logical_file_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 | % ] ]
) [ ,...n ]
}

<filegroup> ::= 
{
FILEGROUP filegroup_name [ DEFAULT ]
    <filespec> [ ,...n ]
}

<external_access_option> ::=
{
    [ DB_CHAINING { ON | OFF } ]
    [ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

Create a database snapshot
CREATE DATABASE database_snapshot_name 
    ON 
        (
        NAME = logical_file_name,
        FILENAME = 'os_file_name' 
        ) [ ,...n ] 
    AS SNAPSHOT OF source_database_name
[;]

引數

  • database_name
    這是新資料庫的名稱。資料庫名稱在 SQL Server 的執行個體內必須是唯一的,且必須符合識別碼的規則。

    除非沒有指定記錄檔的邏輯名稱,否則 database_name 的長度最多可有 128 個字元。如果未指定邏輯記錄檔案名稱,SQL Server 會將 database_name 加上後置詞,來產生記錄的 logical_file_nameos_file_name。這會將 database_name 限制為 123 個字元,使所產生的邏輯檔案名稱不超過 128 個字元。

    如果未指定資料檔案名稱,SQL Server 會將 database_name 同時當做 logical_file_nameos_file_name 來使用。

  • ON
    指定必須明確定義用來儲存資料庫之資料區段 (資料檔案) 的磁碟檔案。當其後接著一份定義主要檔案群組之資料檔案的 <filespec> 項目清單 ( <filespec> 項目之間以逗號分隔) 時,必須使用 ON。主要檔案群組中的檔案清單後面可以接著一份定義使用者檔案群組及其檔案之選擇性 <filegroup> 項目清單 ( <filegroup> 項目之間以逗號分隔)。
  • PRIMARY
    指定相關聯的 <filespec> 清單必須定義主要檔案。主要檔案群組中 <filespec> 項目所指定的第一個檔案會成為主要檔案。資料庫只能有一個主要檔案。如需詳細資訊,請參閱<實體資料庫檔案與檔案群組>。

    如果未指定 PRIMARY,CREATE DATABASE 陳述式中列出的第一個檔案會成為主要檔案。

  • LOG ON
    指定必須明確定義用來儲存資料庫記錄 (記錄檔) 的磁碟檔案。LOG ON 後面會接著定義記錄檔的 <filespec> 項目清單 ( <filespec> 項目之間以逗號分隔)。如果未指定 LOG ON,會自動建立一個記錄檔,該檔案的大小是資料庫之所有資料檔的大小總和的 25% 或 512 KB 其中較大者。資料庫快照集中無法指定 LOG ON。
  • COLLATE collation_name
    指定資料庫的預設定序。定序名稱可以是 Windows 定序名稱或 SQL 定序名稱。若未指定,會指派資料庫作為 SQL Server 之執行個體的預設定序。資料庫快照集中無法指定定序名稱。

    無法利用 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 子句來指定定序名稱。如需有關如何變更附加資料庫之定序的資訊,請造訪 Microsoft 網站

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

  • FOR ATTACH
    指定利用附加一組現有的作業系統檔來建立資料庫。必須有一個用來指定主要檔案的 <filespec> 項目。唯一所需的其他 <filespec> 項目,就是其路徑與第一次建立資料庫或最後一次附加資料庫時的路徑不同的任何檔案之 <filespec> 項目。必須針對這些檔案指定 <filespec> 項目。

    FOR ATTACH 需要下列項目:

    • 所有資料檔 (MDF 和 NDF) 都必須是可用的。
    • 如果存在多個記錄檔,它們必須全部都是可用的。

    如果讀取/寫入資料庫有目前無法使用的單一記錄檔,且在進行附加作業之前,資料庫因為沒有使用者或開啟的交易而關閉,則 FOR ATTACH 會自動重建記錄檔並更新主要檔案。反之,如果是唯讀資料庫,則會因為無法更新主要檔案而無法重建記錄。因此,當您所附加的唯讀資料庫之記錄無法使用時,您必須在 FOR ATTACH 子句中提供記錄檔或檔案。

    ms176061.note(zh-tw,SQL.90).gif附註:
    由較新版本 SQL Server 所建立的資料庫無法附加在舊版本中。

    在 SQL Server 2005 中,所附加之資料庫中的任何全文檢索檔案,都會隨著資料庫而一起附加。若要指定全文檢索目錄的新路徑,請指定一個不含全文檢索作業系統檔案名稱的新位置。如需詳細資訊,請參閱「範例」一節。

    資料庫快照集中無法指定 FOR ATTACH。

    ms176061.security(zh-tw,SQL.90).gif安全性注意事項:
    建議您不要附加來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。

    如需有關附加及卸離資料庫的詳細資訊,請參閱<卸離和附加資料庫>。

    ms176061.note(zh-tw,SQL.90).gif附註:
    如果資料庫使用 Service Broker,請參閱 <service_broker_option>。

    如需有關卸離和附加資料庫時所設定之檔案權限的資訊,請參閱<保護資料和記錄檔>。

    當您附加的複寫資料庫是複製而非卸離時,請考慮下列各項:

    • 如果您要將資料庫附加至與原始資料庫相同的伺服器執行個體和版本,則不需要其他步驟。
    • 如果您將資料庫附加至相同伺服器執行個體,但卻是升級的版本,則必須在附加作業完成後,執行 sp_vupgrade_replication 來升級複寫。
    • 如果您將資料庫附加至不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後,執行 sp_removedbreplication 以移除複寫。
    ms176061.note(zh-tw,SQL.90).gif附註:
    您可以附加 vardecimal 儲存格式,但 SQL Server Database Engine 必須升級到至少為 SQL Server 2005 Service Pack 2。您不能將壓縮的 Service Pack 2 資料庫附加到舊版 SQL Server。如需有關 vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。
  • FOR ATTACH_REBUILD_LOG
    指定利用附加一組現有的作業系統檔來建立資料庫。這個選項只適用於讀取/寫入資料庫。如果遺漏一或多個交易記錄檔,記錄檔就會重建。必須有一個用來指定主要檔案的 <filespec> 項目。

    ms176061.note(zh-tw,SQL.90).gif附註:
    如果記錄檔是可用的,Database Engine 就會使用這些檔案,而不會重建記錄檔。

    FOR ATTACH_REBUILD_LOG 需要下列項目:

    • 正常關閉資料庫。
    • 所有資料檔 (MDF 和 NDF) 都必須是可用的。
    ms176061.note(zh-tw,SQL.90).gif重要事項:
    這項作業會中斷記錄備份鏈結。建議您在作業完成之後執行完整的資料庫備份。如需詳細資訊,請參閱<BACKUP (Transact-SQL)>。

    一般而言,如果您要將一個含有大型記錄的讀/寫資料庫複製到其他伺服器,而該伺服器中,因為該項複製作業大部分用在讀取作業或只用在讀取作業,所以該項複製作業所需的記錄空間比原始資料庫少,在這種情況下,通常就會使用 FOR ATTACH_REBUILD_LOG。

    資料庫快照集中無法指定 FOR ATTACH_REBUILD_LOG。

    如需有關附加及卸離資料庫的詳細資訊,請參閱<卸離和附加資料庫>。

  • <filespec>
    控制檔案屬性。
  • NAME logical_file_name
    指定檔案的邏輯名稱。除非指定其中一個 FOR ATTACH 子句,否則指定 FILENAME 時,NAME 是必要的。

    • logical_file_name
      這是參考檔案時在 SQL Server 中使用的邏輯名稱。logical_file_name 在資料庫中必須是唯一的,且必須符合識別碼的規則。名稱可以是字元或 Unicode 常數,或是一般識別碼或分隔識別碼。
  • FILENAME 'os_file_name'
    指定作業系統 (實體) 檔案名稱。

    • 'os_file_name'
      這是當您建立檔案時作業系統所使用的路徑和檔案名稱。該檔案必須位於下列其中一個裝置:從中安裝 SQL Server 的本機伺服器、存放區域網路 [SAN] 或 iSCSI 型網路。執行 CREATE DATABASE 陳述式之前,指定的路徑必須存在。如需詳細資訊,請參閱<備註>一節中的「資料庫檔案和檔案群組」。

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

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

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

  • SIZE size
    指定檔案的大小。

    os_file_name 指定為 UNC 路徑時,不能指定 SIZE。

    • size
      這是檔案的初始大小。

      當未提供主要檔案的大小 (size) 時,Database Engine 會採用 model 資料庫中主要檔案的大小。當指定了次要資料檔或記錄檔,但未指定檔案的大小 (size ) 時,Database Engine 會使檔案成為 1 MB。所指定的主要檔案大小至少必須跟 model 資料庫的主要檔案的大小一樣大。

      可以使用千位元組 (KB)、百萬位元組 (MB)、十億位元組 (GB) 或兆位元組 (TB) 後置詞。預設值是 MB。指定整數;不包含小數。size 是整數值。如果是大於 2147483647 的值,請使用較大的單位。

  • MAXSIZE max_size
    指定檔案所能成長的大小上限。將 os_file_name 指定為 UNC 路徑時,不能指定 MAXSIZE。

    • max_size
      這是檔案大小上限。可以使用 KB、MB、GB 及 TB 後置詞。預設值是 MB。請指定一個整數,不包括小數點。如果未指定 max_size,檔案可以成長到磁碟已滿。max_size 是整數值。如果是大於 2147483647 的值,請使用較大的單位。
  • UNLIMITED
    指定檔案可成長直到磁碟已滿。在 SQL Server 2005 中,指定為無限成長的記錄檔,大小上限是 2 TB,資料檔的大小上限是 16 TB。
  • FILEGROWTH growth_increment
    指定檔案的自動成長遞增。檔案的 FILEGROWTH 設定不能超過 MAXSIZE 設定。將 os_file_name 指定為 UNC 路徑時,不能指定 FILEGROWTH。

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

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

      0 值指出自動成長是關閉的,且不允許其他空間。

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

      ms176061.note(zh-tw,SQL.90).gif附註:
      在 SQL Server 2005 中,資料檔的預設成長遞增已從 10% 改成 1 MB。記錄檔預設值 10% 維持不變。
  • <filegroup>
    控制檔案群組屬性。資料庫快照集中無法指定檔案群組。
  • FILEGROUP filegroup_name
    這是檔案群組的邏輯名稱。

    • filegroup_name
      資料庫中的 filegroup_name 必須是唯一的,且不能是系統提供的名稱 PRIMARY 和 PRIMARY_LOG。名稱可以是字元或 Unicode 常數,或是一般識別碼或分隔識別碼。名稱必須符合識別碼的規則。
    • DEFAULT
      指定具名的檔案群組必須是資料庫中的預設檔案群組。
  • <external_access_option>
    控制資料庫內外的外部存取。

    • DB_CHAINING { ON | OFF }
      當指定 ON 時,資料庫可以是跨資料庫擁有權鏈結的來源或目標。

      當指定 OFF 時,資料庫不能參與跨資料庫擁有權鏈結。預設值是 OFF。

      ms176061.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

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

    • TRUSTWORTHY { ON | OFF }
      當指定 ON 時,使用模擬內容的資料庫模組 (例如:檢視、使用者自訂函數或預存程序) 可以存取資料庫外部的資源。

      當指定 OFF 時,模擬內容中的資料庫模組不能存取資料庫外部的資源。預設值是 OFF。

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

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

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

  • <service_broker_option>
    控制資料庫上的 Service Broker 選項。

    只有在使用 FOR ATTACH 子句時,才能指定 Service Broker 選項。

    • ENABLE_BROKER
      指定啟用指定資料庫的 Service Broker。換句話說,在 sys.databases 目錄檢視中,is_broker_enabled 必須設為 True,且訊息傳遞必須啟動。
    • NEW_BROKER
      sys.databases 和還原的資料庫中,建立新的 service_broker_guid 值,並以清除結束所有交談端點。它會啟用 Broker,但不會傳送任何訊息到遠端交談端點。
    • ERROR_BROKER_CONVERSATIONS
      結束所有交談,並顯示一則指出已附加或還原資料庫的錯誤。Broker 將保持停用,直到這項作業完成之後才會啟用。
  • database_snapshot_name
    這是新資料庫快照集的名稱。資料庫快照集名稱在 SQL Server 的執行個體內必須是唯一的,且必須符合識別碼的規則。database_snapshot_name 最多可有 128 個字元。
  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ]
    若要建立資料庫快照集,請在來源資料庫中指定檔案清單。必須個別指定所有資料檔,快照集才能運作。不過,記錄檔不能用在資料庫快照集。

    有關 NAME 和 FILENAME 及其值的描述,請參閱相等 <filespec> 值的描述。

    ms176061.note(zh-tw,SQL.90).gif附註:
    建立資料庫快照集時,不允許使用其他 <filespec> 選項和關鍵字 PRIMARY。
  • AS SNAPSHOT OF source_database_name
    指定要建立的資料庫是 source_database_name 指定之來源資料庫的資料庫快照集。該快照集和來源資料庫必須位於相同的執行個體上。

    如需詳細資訊,請參閱<備註>一節中的「資料庫快照集」。

備註

每當建立、修改或卸除使用者資料庫時,都應該備份 master 資料庫

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

您可以利用一個 CREATE DATABASE 陳述式來建立資料庫,並建立用來儲存該資料庫的檔案。SQL Server 利用下列步驟來實作 CREATE DATABASE 陳述式:

  1. SQL Server 2005 Database Engine 會利用 model 資料庫的副本,來初始化資料庫及其中繼資料。
  2. 將 Service Broker GUID 指派給資料庫。
  3. 之後,Database Engine 就會在其餘的資料庫中填入空白頁面,但不包括含有記錄資料庫中空間使用方式之內部資料的頁面。如需詳細資訊,請參閱<資料庫檔案初始化>。

在 SQL Server 的一個執行個體上,最多可以指定 32,767 個資料庫。

每個資料庫都有一個可以在資料庫中執行特殊活動的擁有者。該擁有者就是建立資料庫的使用者。您可以利用 sp_changedbowner (Transact-SQL) 來變更資料庫擁有者。

資料庫檔案和檔案群組

每個資料庫至少都有兩個檔案 (主要檔案和交易記錄檔案) 以及至少一個檔案群組。每個資料庫可以指定最多 32,767 個檔案和 32,767 個檔案群組。如需詳細資訊,請參閱<實體資料庫檔案與檔案群組>。

當您建立資料庫時,請根據您預期之資料庫中的資料量上限,盡量使資料檔有足夠的空間。如需詳細資訊,請參閱<利用檔案及檔案群組來管理資料庫的擴展>。

建議您利用存放區域網路 (SAN)、iSCSI 型網路或本機連接的磁碟來儲存 SQL Server 資料庫檔案,因為這個組態可使 SQL Server 效能和可靠性最佳化。依預設,不會針對 SQL Server 啟用使用網路資料庫檔案 (儲存在具備網路功能的伺服器或網路連接的儲存體上)。不過,您可以利用追蹤旗標 1807 來建立含有網路型資料庫檔案的資料庫。如需有關這個追蹤旗標和重要的效能與維護考量的資訊,請參閱 Microsoft 網站

資料庫快照集

您可以利用 CREATE DATABASE 陳述式來建立唯讀靜態檢視、現有資料庫 ( 「來源資料庫」 ) 的*「資料庫快照集」*。資料庫快照集在交易上與來源資料庫是一致的,因為它是在快照集建立時即存在。來源資料庫可以有多個快照集。

ms176061.note(zh-tw,SQL.90).gif附註:
當您建立資料庫快照集時,CREATE DATABASE 陳述式無法參考記錄檔、離線檔案、還原檔案及已解除功能的檔案。

如果資料庫快照集的建立作業失敗,快照集會受到質疑且必須刪除。如需詳細資訊,請參閱<DROP DATABASE (Transact-SQL)>。

每個快照集都會繼續保存,直到利用 DROP DATABASE 加以刪除為止。

如需詳細資訊,請參閱<資料庫快照集>。

資料庫選項

當您建立資料庫時,會自動設定數個資料庫選項。如需這些選項及其預設值的清單,請參閱<設定資料庫選項>。您可以利用 ALTER DATABASE 陳述式來修改這些選項。

model 資料庫和建立新資料庫

model 資料庫中的所有使用者自訂物件,都會複製到所有新建立的資料庫中。您可以將所有要併入新建立之資料庫中的任何物件 (如資料表、檢視、預存程序、資料類型等) 加入至 model 資料庫。

當指定不含其他大小參數的 CREATE DATABASE database_name 陳述式時,會將主要資料檔案的大小設為與 model 資料庫中主要檔案的大小相同。

除非指定 FOR ATTACH,否則每個新資料庫都會從 model 資料庫繼承資料庫選項設定。例如,model 資料庫和您建立的任何新資料庫中的 auto shrink 資料庫選項會設為 true。如果您在 model 資料庫中變更選項,您建立的任何新資料庫也會使用這些新的選項設定。變更 model 資料庫中的作業不會影響現有的資料庫。如果在 CREATE DATABASE 陳述式上指定 FOR ATTACH,新資料庫就會繼承原始資料庫的資料庫選項設定。

檢視資料庫資訊

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

權限

需要 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 權限。

為了維護 SQL Server 執行個體的磁碟控制,通常只有少數登入帳戶有建立資料庫的權限。

資料和記錄檔的權限

在 SQL Server 2005 中,部分權限是在每個資料庫的資料和記錄檔上設定的。每當在資料庫上套用下列作業時,都會設定下列權限:

已建立

修改以加入新檔案

已附加

已備份

已卸離

已還原

檔案所在目錄如有開放權限,這個權限可防止檔案遭到竄改。如需詳細資訊,請參閱<保護資料和記錄檔>。

ms176061.note(zh-tw,SQL.90).gif附註:
Microsoft SQL Server 2005 Express Edition 並不設定資料和記錄檔的權限。

範例

A. 不指定檔案來建立資料庫

下列範例會建立資料庫 mytest 並建立相對應的主要記錄檔和交易記錄檔。因為該陳述式沒有 <filespec> 項目,所以主要資料庫檔案的大小就是 model 資料庫主要檔案的大小。交易記錄設為下列二值中之較大者:512KB 或主要資料檔大小的 25%。因為沒有指定 MAXSIZE,所以檔案會成長,直到填滿所有可用的磁碟空間為止。

USE master;
GO
IF DB_ID (N'mytest') IS NOT NULL
DROP DATABASE mytest;
GO
CREATE DATABASE mytest;
GO
-- Verify the database files and sizes
SELECT name, size, size*1.0/128 AS [Size in MBs] 
FROM sys.master_files
WHERE name = N'mytest';
GO

B. 建立指定資料檔和交易記錄檔的資料庫

下列範例會建立資料庫 Sales。因為沒有使用關鍵字 PRIMARY,所以第一個檔案 (Sales_dat) 會成為主要檔案。因為 Sales_dat 檔的 SIZE 參數中沒有指定 MB 或 KB,所以它會使用 MB 並以百萬位元來配置。Sales_log 檔會以百萬位元來配置,因為 SIZE 參數中明確陳述 MB 後置詞。

USE master;
GO
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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 the CREATE DATABASE statement 
EXECUTE ('CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = '''+ @data_path + 'saledat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

C. 利用指定多個資料檔和交易記錄檔的方式建立資料庫

範例會建立資料庫 Archive,這個資料庫有三個 100 MB 的資料檔和兩個 100 MB 的交易記錄檔。主要檔案是清單中的第一個檔案,並以關鍵字 PRIMARY 明確指定。交易記錄檔是以關鍵字 LOG ON 指定的。請注意 FILENAME 選項中之檔案的副檔名:.mdf 用於主要資料庫,.ndf 用於次要資料檔,.ldf 則用於交易記錄檔。

USE master;
GO
IF DB_ID (N'Archive') IS NOT NULL
DROP DATABASE Archive;
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 the CREATE DATABASE statement 
EXECUTE ('CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = '''+ @data_path + 'archdat1.mdf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = '''+ @data_path + 'archdat2.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = '''+ @data_path + 'archdat3.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = '''+ @data_path + 'archlog1.ldf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = '''+ @data_path + 'archlog2.ldf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)'
);
GO

D. 建立含有檔案群組的資料庫

下列範例會建立含有下列檔案群組的資料庫 Sales

  • 含有檔案 Spri1_datSpri2_dat 的主要檔案群組。這些檔案的 FILEGROWTH 遞增設為 15%
  • 名為 SalesGroup1 的檔案群組,該檔案群組含有檔案 SGrp1Fi1SGrp1Fi2
  • 名為 SalesGroup2 的檔案群組,該檔案群組含有檔案 SGrp2Fi1SGrp2Fi2
USE master;
GO
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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 the CREATE DATABASE statement 
EXECUTE ('CREATE DATABASE  Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = '''+ @data_path + 'SPri1dat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = '''+ @data_path + 'SPri2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = '''+ @data_path + 'SG1Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = '''+ @data_path + 'SG1Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = '''+ @data_path + 'SG2Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = '''+ @data_path + 'SG2Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

E. 附加資料庫

下列範例會先卸離在範例 C 中建立的資料庫 Archive,再利用 FOR ATTACH 子句來附加該資料庫。Archive 被定義為具有多個資料檔和記錄檔。不過,因為檔案建立之後並未改變位置,所以在 FOR ATTACH 子句中只需要指定主要檔案。在 SQL Server 2005 中,所附加之資料庫中的任何全文檢索檔案,都會隨著資料庫而一起附加。

USE master;
GO
sp_detach_db Archive;
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 CREATE DATABASE FOR ATTACH statement
EXEC ('CREATE DATABASE Archive
      ON (FILENAME = '''+ @data_path + 'archdat1.mdf'')
      FOR ATTACH');
GO

F. 建立資料庫快照集

下列範例會建立資料庫快照集 sales_snapshot0600。因為資料庫快照集是唯讀的,所以不能指定記錄檔。依照語法規定,會指定來源資料庫中的每個檔案,但不會指定檔案群組。

這個範例中的來源資料庫就是在範例 D 中建立的資料庫 Sales

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 the CREATE DATABASE statement 
EXECUTE (
'CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = '''+ @data_path + 'SPri1dat_0600.ss''),
    ( NAME = SPri2_dat, FILENAME = '''+ @data_path + 'SPri2dt_0600.ss''),
    ( NAME = SGrp1Fi1_dat, FILENAME = '''+ @data_path + 'SG1Fi1dt_0600.ss''),
    ( NAME = SGrp1Fi2_dat, FILENAME = '''+ @data_path + 'SG1Fi2dt_0600.ss''),
    ( NAME = SGrp2Fi1_dat, FILENAME = '''+ @data_path + 'SG2Fi1dt_0600.ss''),
    ( NAME = SGrp2Fi2_dat, FILENAME = '''+ @data_path + 'SG2Fi2dt_0600.ss'')
AS SNAPSHOT OF Sales');
GO

G. 建立資料庫並指定定序名稱和選項

下列範例會建立資料庫 MyOptionsTest。它指定定序名稱,並將 TRUSTYWORTHYDB_CHAINING 選項設為 ON

USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE French_CI_AI
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
--Verifying collation and option settings.
SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO

H. 附加已移動的全文檢索目錄

下列範例會附加全文檢索目錄 AdvWksFtCatAdventureWorks 資料檔和記錄檔。在這個範例中,全文檢索目錄會從它的預設位置移至新的位置 c:\myFTCatalogs。資料檔和記錄檔仍保留在它們的預設位置中。

USE master;
GO
--Detach the AdventureWorks database
sp_detach_db AdventureWorks;
GO
-- Physically move the full text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

請參閱

參考

ALTER DATABASE (Transact-SQL)
DROP DATABASE (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_changedbowner (Transact-SQL)
sp_detach_db (Transact-SQL)
sp_removedbreplication (Transact-SQL)

其他資源

卸離和附加資料庫
瞭解資料庫
資料庫快照集
移動資料庫檔案

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 在 FOR ATTACH 的描述中新增「注意」,說明附加啟用 vardecimal 儲存格式的 SQL Server 2005 Service Pack 2 資料庫時應注意的事項。
  • 在 FOR ATTACH 的描述中加入「附註」,說明以較新版本 SQL Server 所建立的資料庫無法附加在舊版本中。

2005 年 12 月 5 日

新增內容:
  • 在 FOR ATTACH 的定義中加入安全性注意事項。
變更的內容:
  • 更正有關系統資料庫中 TRUSTWORTHY 選項的資訊。