CREATE DATABASE (Transact-SQL)

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

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

語法

CREATE DATABASE database_name 
[ CONTAINMENT = { NONE | PARTIAL } ]
[ ON 
      [ PRIMARY ] <filespec> [ ,...n ] 
      [ , <filegroup> [ ,...n ] ] 
      [ LOG ON <filespec> [ ,...n ] ] 
] 
[ COLLATE collation_name ]
[ WITH  <option> [,...n ] ]
[;]

<option> ::=
{
      FILESTREAM ( <filestream_option> [,...n ] )
    | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias }
    | DEFAULT_LANGUAGE = { lcid | language_name | language_alias }
    | NESTED_TRIGGERS = { OFF | ON }
    | TRANSFORM_NOISE_WORDS = { OFF | ON}
    | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 
    | DB_CHAINING { OFF | ON }
    | TRUSTWORTHY { OFF | ON }
}

<filestream_option> ::=
{
      NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
    | DIRECTORY_NAME = 'directory_name' 
}

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

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

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

<attach_database_option> ::=
{
      <service_broker_option>
    | RESTRICTED_USER
    | FILESTREAM ( DIRECTORY_NAME = { 'directory_name' | NULL } )
}

<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_name 和 os_file_name。 這會將 database_name 限制為 123 個字元,使所產生的邏輯檔案名稱不超過 128 個字元。

    如果未指定資料檔案名稱,SQL Server 會將 database_name 同時當做 logical_file_name 和 os_file_name 使用。 預設路徑是從登錄取得。 預設路徑可以變更,其方式是使用 Management Studio 中的 [伺服器屬性] ([資料庫設定] 頁面)。 變更預設路徑需要重新啟動 SQL Server。

  • CONTAINMENT
    指定資料庫的內含項目狀態。 NONE = 非自主資料庫 PARTIAL = 部分自主資料庫

  • ON
    指定必須明確定義用來儲存資料庫之資料區段 (資料檔案) 的磁碟檔案。 當其後接著一份定義主要檔案群組之資料檔案的 <filespec> 項目清單 (以逗號分隔) 時,必須使用 ON。 主要檔案群組中的檔案清單後面可以接著一份定義使用者檔案群組及其檔案之選擇性 <filegroup> 項目清單 (以逗號分隔)。

  • PRIMARY
    指定相關聯的 <filespec> 清單必須定義主要檔案。 主要檔案群組中 <filespec> 項目所指定的第一個檔案會成為主要檔案。 資料庫只能有一個主要檔案。 如需詳細資訊,請參閱<資料庫檔案與檔案群組>。

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

  • LOG ON
    指定必須明確定義用來儲存資料庫記錄 (記錄檔) 的磁碟檔案。 LOG ON 後面會接著定義記錄檔的 <filespec> 項目清單 (以逗號分隔)。 如果未指定 LOG ON,系統會自動建立一個記錄檔,該檔案的大小是資料庫之所有資料檔的大小總和的 25% 或 512 KB 其中較大者。 這個檔案會放置在預設的記錄檔位置中。 如需有關這個位置的詳細資訊,請參閱<檢視或變更資料及記錄檔的預設位置 (SQL Server Management Studio)>。

    資料庫快照集中無法指定 LOG ON。

  • COLLATE collation_name
    指定資料庫的預設定序。 定序名稱可以是 Windows 定序名稱或 SQL 定序名稱。 若未指定,會將 SQL Server 執行個體的預設定序指派給資料庫。 資料庫快照集中無法指定定序名稱。

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

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

    [!附註]

    自主資料庫的定序方式不同於非自主資料庫。 如需詳細資訊,請參閱<自主資料庫定序>。

  • WITH <選項>

    • <filestream_options>

      • NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
        指定資料庫層級的非交易式 FILESTREAM 存取層級。

        描述

        OFF

        已停用非交易式存取

        READONLY

        非交易式處理序可以讀取此資料庫中的 FILESTREAM 資料。

        FULL

        已啟用 FILESTREAM FileTables 的完整非交易式存取。

    只有當 CONTAINMENT 已經設為 PARTIAL 時,才允許下列選項。 如果 CONTAINMENT 設定為 NONE,便會發生錯誤。

    • DEFAULT_FULLTEXT_LANGUAGE = <lcid> | <語言名稱> | <語言別名>

      如需此選項的完整描述,請參閱<設定 default full-text language 伺服器組態選項>。

    • DEFAULT_LANGUAGE = <lcid> | <語言名稱> | <語言別名>

      如需此選項的完整描述,請參閱<設定 default language 伺服器組態選項>。

    • NESTED_TRIGGERS = { OFF | ON}

      如需此選項的完整描述,請參閱<設定 nested triggers 伺服器組態選項>。

    • TRANSFORM_NOISE_WORDS = { OFF | ON}

      如需此選項的完整描述,請參閱<轉換非搜尋字伺服器組態選項>。

    • TWO_DIGIT_YEAR_CUTOFF = { 2049 | <1753 和 9999 之間的任何年份> }

      表示一年的四位數。 2049 是預設值。 如需此選項的完整描述,請參閱<設定 two digit year cutoff 伺服器組態選項>。

    • DB_CHAINING { OFF | ON }

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

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

      重要事項重要事項

      當 cross db ownership chaining 伺服器選項為 0 (OFF) 時,SQL Server 的執行個體可以辨識這項設定。 當 cross db ownership chaining 為 1 (ON) 時,不論這個選項的值為何,所有使用者資料庫都可以參與跨資料庫擁有權鏈結。 您可以利用 sp_configure 來設定這個選項。

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

    • TRUSTWORTHY { OFF | ON }

      當指定 ON 時,使用模擬內容的資料庫模組 (例如,檢視表、使用者定義函數或預存程序) 可以存取資料庫外部的資源。

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

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

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

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

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

    FOR ATTACH 需要下列項目:

    • 所有資料檔 (MDF 和 NDF) 都必須是可用的。

    • 如果存在多個記錄檔,它們必須全部都是可用的。

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

    [!附註]

    由較新版本 SQL Server 所建立的資料庫無法附加在舊版本中。 來源資料庫的版本至少必須為 90 版 (SQL Server 2005),才能附加至 SQL Server 2012。 進行附加時,相容性層級低於 90 的 SQL Server 2005 資料庫將會設定為相容性 90。

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

    若將包含 FILESTREAM [目錄名稱] 選項的資料庫附加至 SQL Server 執行個體,會提示 SQL Server 驗證 Database_Directory 名稱是否唯一。 如果不是,附加作業會失敗,並顯示錯誤訊息「FILESTREAM Database_Directory 名稱 <名稱> 在此 SQL Server 執行個體中不是唯一的」。 若要避免這個錯誤,應該將選擇性參數 directory_name 傳遞給此作業。

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

    FOR ATTACH 可以指定 RESTRICTED_USER 選項。 RESTRICTED_USER 只允許 db_owner 固定資料庫角色以及資料庫建立者 (dbcreator) 和系統管理員 (sysadmin) 固定伺服器角色的成員連接到資料庫,但並不限制他們的數目。 不合格的使用者嘗試連接遭到拒絕。

    如果資料庫使用 Service Broker,請在 FOR ATTACH 子句中使用 WITH <service_broker_option>:

    • <service_broker_option>
      控制 Service Broker 訊息傳遞以及資料庫的 Service Broker 識別碼。 只有在使用 FOR ATTACH 子句的情況下才能指定 Service Broker 選項。

      • ENABLE_BROKER
        指定啟用指定之資料庫的 Service Broker。 換句話說,在 sys.databases 目錄檢視中,訊息傳遞已啟動且 is_broker_enabled 設為 True。 資料庫會保留現有的 Service Broker 識別碼。

      • NEW_BROKER
        在 sys.databases 和還原的資料庫中,建立新的 service_broker_guid 值,並以清除結束所有交談端點。 它會啟用 Broker,但不會傳送任何訊息到遠端交談端點。 您必須使用新的識別碼來重新建立參考舊 Service Broker 識別碼的任何路由。

      • ERROR_BROKER_CONVERSATIONS
        結束所有交談,並顯示一則指出已附加或還原資料庫的錯誤。 Broker 將保持停用,直到這項作業完成之後才會啟用。 資料庫會保留現有的 Service Broker 識別碼。

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

    • 如果您要將資料庫附加至與原始資料庫相同的伺服器執行個體和版本,則不需要其他步驟。

    • 如果您將資料庫附加至相同伺服器執行個體,但卻是升級的版本,則必須在附加作業完成後,執行 sp_vupgrade_replication 來升級複寫。

    • 如果您將資料庫附加至不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後,執行 sp_removedbreplication 以移除複寫。

    [!附註]

    附加作業可使用 vardecimal 儲存格式,但是 SQL Server Database Engine 至少必須升級到 SQL Server 2005 Service Pack 2。 您不能將使用 Vardecimal 儲存格式的資料庫附加到舊版 SQL Server。 如需有關 vardecimal 儲存格式的詳細資訊,請參閱<資料壓縮>。

    當資料庫第一次連接或還原到新的 SQL Server 執行個體時,資料庫主要金鑰複本 (由服務主要金鑰加密) 尚未儲存在伺服器中。 您必須利用 OPEN MASTER KEY 陳述式來解密資料庫主要金鑰 (DMK)。 DMK 解密之後,您便可以選擇利用 ALTER MASTER KEY REGENERATE 陳述式來提供服務主要金鑰 (SMK) 所加密的 DMK 複本給伺服器,以在未來啟用自動解密。 當資料庫從舊版升級時,應該會重新產生 DMK 以使用較新的 AES 演算法。 如需有關重新產生 DMK 的詳細資訊,請參閱<ALTER MASTER KEY (Transact-SQL)>。 重新產生 DMK 金鑰以升級至 AES 所需的時間是取決於 DMK 所保護的物件數目而定。 重新產生 DMK 金鑰以升級至 AES 只需執行一次,且不會影響金鑰循環策略中後續的重新產生。 如需有關如何使用附加來升級資料庫的詳細資訊,請參閱<使用卸離與附加來升級資料庫 (Transact-SQL)>。

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

    [!附註]

    附加資料庫時,TRUSTWORTHYDB_CHAINING 選項沒有受到影響。

  • FOR ATTACH_REBUILD_LOG
    指定資料庫是藉由附加一組現有的作業系統檔案所建立。 這個選項只適用於讀取/寫入資料庫。 必須有一個用來指定主要檔案的 <filespec> 項目。 如果遺漏一個或多個交易記錄檔,記錄檔就會重建。 ATTACH_REBUILD_LOG 會自動建立新的 1 MB 記錄檔。 這個檔案會放置在預設的記錄檔位置中。 如需有關這個位置的詳細資訊,請參閱<檢視或變更資料及記錄檔的預設位置 (SQL Server Management Studio)>。

    [!附註]

    如果記錄檔是可用的,Database Engine 就會使用這些檔案,而不會重建記錄檔。

    FOR ATTACH_REBUILD_LOG 需要下列項目:

    • 正常關閉資料庫。

    • 所有資料檔 (MDF 和 NDF) 都必須是可用的。

    重要事項重要事項

    這項作業會中斷記錄備份鏈結。 建議您在作業完成之後執行完整的資料庫備份。 如需詳細資訊,請參閱<BACKUP (Transact-SQL)>。

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

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

    如需有關附加及卸離資料庫的詳細資訊,請參閱<資料庫卸離與附加 (SQL Server)>。

  • <filespec>
    控制檔案屬性。

  • NAME logical_file_name
    指定檔案的邏輯名稱。 除非指定其中一個 FOR ATTACH 子句,否則指定 FILENAME 時,NAME 是必要的。 FILESTREAM 檔案群組不能命名為 PRIMARY。

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

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

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

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

      除非檔案是唯讀次要檔案,或者,資料庫是唯讀的,否則資料檔不應該放在壓縮的檔案系統中。 記錄檔永遠不應放在壓縮的檔案系統中。

    • ' filestream_path '
      如果是 FILESTREAM 檔案群組,FILENAME 會參考儲存 FILESTREAM 資料所在的路徑。 到最後一個資料夾為止的路徑必須存在,而最後一個資料夾則不得存在。 例如,如果您指定 C:\MyFiles\MyFilestreamData 路徑,則在您執行 ALTER DATABASE 之前,C:\MyFiles 必須存在,但是 MyFilestreamData 資料夾不得存在。

      檔案群組和檔案 (<filespec>) 必須在相同的陳述式中建立。

      SIZE 和 FILEGROWTH 屬性不會套用到 FILESTREAM 檔案群組。

  • SIZE size
    指定檔案的大小。

    將 os_file_name 指定為 UNC 路徑時,不能指定 SIZE。 SIZE 不會套用到 FILESTREAM 檔案群組。

    • 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 中,指定為無限成長的記錄檔,大小上限是 2 TB,資料檔的大小上限是 16 TB。

    [!附註]

    為 FILESTREAM 容器指定這個選項時沒有最大大小。 它會繼續成長,直到磁碟已滿。

  • FILEGROWTH growth_increment
    指定檔案的自動成長遞增。 檔案的 FILEGROWTH 設定不能超過 MAXSIZE 設定。 將 os_file_name 指定為 UNC 路徑時,不能指定 FILEGROWTH。 FILEGROWTH 不會套用到 FILESTREAM 檔案群組。

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

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

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

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

      [!附註]

      在 SQL Server 中,資料檔的預設成長遞增已從 10% 改成 1 MB。 記錄檔預設值 10% 維持不變。

  • <檔案群組>
    控制檔案群組屬性。 資料庫快照集中無法指定檔案群組。

  • FILEGROUP filegroup_name
    這是檔案群組的邏輯名稱。

    • filegroup_name
      資料庫中的 filegroup_name 必須是唯一的,且不能是系統提供的名稱 PRIMARY 和 PRIMARY_LOG。 名稱可以是字元或 Unicode 常數,或是一般識別碼或分隔識別碼。 名稱必須符合識別碼的規則。

    • CONTAINS FILESTREAM
      指定檔案群組會將 FILESTREAM 二進位大型物件 (BLOB) 儲存在檔案系統中。

    • DEFAULT
      指定具名的檔案群組必須是資料庫中的預設檔案群組。

  • database_snapshot_name
    這是新資料庫快照集的名稱。 資料庫快照集名稱在 SQL Server 執行個體內必須是唯一的,且必須符合識別碼的規則。 database_snapshot_name 最多可有 128 個字元。

  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,...n ]
    若要建立資料庫快照集,請在來源資料庫中指定檔案清單。 必須個別指定所有資料檔,快照集才能運作。 不過,記錄檔不能用在資料庫快照集。 資料庫快照集不支援 FILESTREAM 檔案群組。 如果 FILESTREAM 資料檔案包含在 CREATE DATABASE ON 子句中,此陳述式將會失敗,並引發錯誤。

    如需 NAME 和 FILENAME 及其值的描述,請參閱對等 <filespec> 值的描述。

    [!附註]

    建立資料庫快照集時,不允許使用其他 <filespec> 選項和關鍵字 PRIMARY。

  • AS SNAPSHOT OF source_database_name
    指定要建立的資料庫是 source_database_name 指定之來源資料庫的資料庫快照集。 該快照集和來源資料庫必須位於相同的執行個體上。

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

備註

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

CREATE DATABASE 陳述式必須在自動認可模式 (預設交易管理模式) 下執行,而且不能用於明確或隱含的交易。

您可使用 CREATE DATABASE 陳述式建立資料庫與儲存資料庫的檔案。 SQL Server 利用下列步驟實作 CREATE DATABASE 陳述式:

  1. SQL Server 會利用 model 資料庫的副本來初始化資料庫及其中繼資料。

  2. 將 Service Broker GUID 指派給資料庫。

  3. 之後,Database Engine 就會在其餘的資料庫中填入空白頁面,但不包括含有記錄資料庫中空間使用方式之內部資料的頁面。

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

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

資料庫檔案與檔案群組

每個資料庫至少都有兩個檔案:「主要檔案」(Primary File) 和「交易記錄檔案」(Transaction Log File),以及至少一個檔案群組。 每個資料庫最多可以指定 32,767 個檔案和 32,767 個檔案群組。

當您建立資料庫時,請根據資料庫的預期最大資料量,盡可能擴大資料檔。

建議您利用存放區域網路 (SAN)、iSCSI 型網路或本機連接的磁碟來儲存 SQL Server 資料庫檔案,因為這個組態可使 SQL Server 效能和可靠性最佳化。

資料庫快照集

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

[!附註]

當您建立資料庫快照集時,CREATE DATABASE 陳述式無法參考記錄檔、離線檔案、還原檔案及已解除功能的檔案。

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

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

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

資料庫選項

每當您建立資料庫時,系統就會自動設定數個資料庫選項。 如需這些選項的清單,請參閱<ALTER DATABASE SET 選項 (Transact-SQL)>。

model 資料庫和建立新資料庫

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

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

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

檢視資料庫資訊

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

權限

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

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

資料和記錄檔的權限

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

已建立

修改以加入新檔案

已附加

已備份

已卸離

已還原

檔案所在的目錄如有開放權限,上述權限可防止檔案遭到意外竄改。

[!附註]

Microsoft SQL Server 2005 Express Edition 不會設定資料和記錄檔的權限。

範例

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

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

USE master;
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 並 MB 來配置。 Sales_log 檔會以 MB 為單位配置,因為 SIZE 參數中明確陳述 MB 後置詞。

USE master;
GO
CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

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

下列範例會建立資料庫 Archive,這個資料庫有三個 100-MB 的資料檔和兩個 100-MB 的交易記錄檔。 主要檔案是清單中的第一個檔案,並以關鍵字 PRIMARY 明確指定。 交易記錄檔是以關鍵字 LOG ON 指定的。 請注意,FILENAME 選項中之檔案所使用的副檔名:.mdf 會用於主要資料檔,.ndf 會用於次要資料檔,.ldf 會用於交易記錄檔。 此範例會將此資料庫放在 D: 磁碟機上,而不是與 master 資料庫放在一起。

USE master;
GO
CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = 'D:\SalesData\archdat1.mdf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = 'D:\SalesData\archdat2.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = 'D:\SalesData\archdat3.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = 'D:\SalesData\archlog1.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = 'D:\SalesData\archlog2.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20) ;
GO

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

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

  • 含有檔案 Spri1_dat 和 Spri2_dat 的主要檔案群組。 這些檔案的 FILEGROWTH 遞增指定為 15%。

  • 名為 SalesGroup1 的檔案群組,該檔案群組含有檔案 SGrp1Fi1 和 SGrp1Fi2。

  • 名為 SalesGroup2 的檔案群組,該檔案群組含有檔案 SGrp2Fi1 和 SGrp2Fi2。

此範例將資料和記錄檔放在不同的磁碟上,藉此改進效能。

USE master;
GO
CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = 'D:\SalesData\SPri1dat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = 'D:\SalesData\SPri2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'E:\SalesLog\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

E.附加資料庫

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

USE master;
GO
sp_detach_db Archive;
GO
CREATE DATABASE Archive
      ON (FILENAME = 'D:\SalesData\archdat1.mdf') 
      FOR ATTACH ;
GO

F.建立資料庫快照集

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

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

USE master;
GO
CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = 'D:\SalesData\SPri1dat_0600.ss'),
    ( NAME = SPri2_dat, FILENAME = 'D:\SalesData\SPri2dt_0600.ss'),
    ( NAME = SGrp1Fi1_dat, FILENAME = 'D:\SalesData\SG1Fi1dt_0600.ss'),
    ( NAME = SGrp1Fi2_dat, FILENAME = 'D:\SalesData\SG1Fi2dt_0600.ss'),
    ( NAME = SGrp2Fi1_dat, FILENAME = 'D:\SalesData\SG2Fi1dt_0600.ss'),
    ( NAME = SGrp2Fi2_dat, FILENAME = 'D:\SalesData\SG2Fi2dt_0600.ss')
AS SNAPSHOT OF Sales ;
GO

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

下列範例會建立資料庫 MyOptionsTest。 它指定定序名稱,並將 TRUSTYWORTHY 和 DB_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.附加已移動的全文檢索目錄

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

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

I.建立可指定一個資料列檔案群組和兩個 FILESTREAM 檔案群組的資料庫

下列範例會建立 FileStreamDB 資料庫。 此資料庫是使用一個資料列檔案群組和兩個 FILESTREAM 檔案群組所建立。 每個檔案群組都包含一個檔案:

  • FileStreamDB_data 包含資料列資料, 它包含一個檔案 FileStreamDB_data.mdf (具有預設路徑)。

  • FileStreamPhotos 包含 FILESTREAM 資料。 其也包含兩個 FILESTREAM 資料容器 FSPhotos (位於 C:\MyFSfolder\Photos) 及 FSPhotos2 (位於 D:\MyFSfolder\Photos)。 它會標示為預設的 FILESTREAM 檔案群組。

  • FileStreamResumes 包含 FILESTREAM 資料。 它包含一個 FILESTREAM 資料容器 FSResumes (位於 C:\MyFSfolder\Resumes)。

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 FileStreamDB
ON PRIMARY 
    (
    NAME = FileStreamDB_data 
    ,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
    ,SIZE = 10MB
    ,MAXSIZE = 50MB
    ,FILEGROWTH = 15%
    ),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
    (
    NAME = FSPhotos
    ,FILENAME = ''C:\MyFSfolder\Photos''
-- SIZE and FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
, MAXSIZE = 5000 MB
    ),
    (
      NAME = FSPhotos2
      , FILENAME = ''D:\MyFSfolder\Photos''
      , MAXSIZE = 10000 MB
     ),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
    (
    NAME = FileStreamResumes
    ,FILENAME = ''C:\MyFSfolder\Resumes''
    ) 
LOG ON
    (
    NAME = FileStream_log
    ,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )'
);
GO

J.建立包含多個檔案之 FILESTREAM 檔案群組的資料庫

下列範例會建立 BlobStore1 資料庫。 此資料庫是使用一個資料列檔案群組和一個 FILESTREAM 檔案群組 FS 所建立。 FILESTREAM 檔案群組包含兩個檔案:FS1 和 FS2。 然後,此範例會將第三個檔案 FS3 加入至 FILESTREAM 檔案群組,藉以改變資料庫。

USE [master]
GO

CREATE DATABASE [BlobStore1]
CONTAINMENT = NONE
ON PRIMARY 
( 
    NAME = N'BlobStore1', 
    FILENAME = N'C:\BlobStore\BlobStore1.mdf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1MB
), 
FILEGROUP [FS] CONTAINS FILESTREAM DEFAULT 
(
    NAME = N'FS1',
    FILENAME = N'C:\BlobStore\FS1',
    MAXSIZE = UNLIMITED
), 
(
    NAME = N'FS2',
    FILENAME = N'C:\BlobStore\FS2',
    MAXSIZE = 100MB
)
LOG ON 
(
    NAME = N'BlobStore1_log',
    FILENAME = N'C:\BlobStore\BlobStore1_log.ldf',
    SIZE = 100MB,
    MAXSIZE = 1GB,
    FILEGROWTH = 1MB
)
GO

ALTER DATABASE [BlobStore1]
ADD FILE
(
    NAME = N'FS3',
    FILENAME = N'C:\BlobStore\FS3',
    MAXSIZE = 100MB
)
TO FILEGROUP [FS]
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)

資料庫快照集 (SQL Server)

資料庫

二進位大型物件 (Blob) 資料 (SQL Server)

其他資源

移動資料庫檔案