CREATE DATABASE (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' | 'filestream_path' }
[ , 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 [ CONTAINS FILESTREAM ] [ 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_name 和 os_file_name。這會將 database_name 限制為 123 個字元,使所產生的邏輯檔案名稱不超過 128 個字元。
如果未指定資料檔案名稱,SQL Server 會將 database_name 同時當做 logical_file_name 和 os_file_name 來使用。預設路徑是從登錄取得。預設路徑可以變更,其方式是使用 Management Studio 中的 [伺服器屬性] ([資料庫設定] 頁面)。變更預設路徑需要重新啟動 SQL Server。
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 子句中提供記錄檔或檔案。
[!附註]
由較新版本 SQL Server 所建立的資料庫無法附加在舊版本中。來源資料庫必須至少為版本 80 (SQL Server 2000),才能附加至 SQL Server 2008。相容性層級小於 80 的 SQL Server 2000 或 SQL Server 2005 資料庫會在附加時設為相容性 80。
在 SQL Server 中,所附加之資料庫中的任何全文檢索檔案,都會隨著資料庫而一起附加。若要指定全文檢索目錄的新路徑,請指定一個不含全文檢索作業系統檔案名稱的新位置。如需詳細資訊,請參閱<範例>一節。
資料庫快照集中無法指定 FOR ATTACH。
安全性注意事項 建議您不要附加來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。
如需有關附加及卸離資料庫的詳細資訊,請參閱<卸離和附加資料庫>。
[!附註]
如果資料庫使用 Service Broker,請參閱 <service_broker_option>。
如需有關卸離和附加資料庫時所設定之檔案權限的資訊,請參閱<保護資料和記錄檔>。
當您附加的複寫資料庫是複製而非卸離時,請考慮下列各項:
如果您要將資料庫附加至與原始資料庫相同的伺服器執行個體和版本,則不需要其他步驟。
如果您將資料庫附加至相同伺服器執行個體,但卻是升級的版本,則必須在附加作業完成後,執行 sp_vupgrade_replication 來升級複寫。
如果您將資料庫附加至不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後,執行 sp_removedbreplication 以移除複寫。
[!附註]
附加作業可使用 vardecimal 儲存格式,但是 SQL Server Database Engine 至少必須升級到 SQL Server 2005 Service Pack 2。您不能將使用 Vardecimal 儲存格式的資料庫附加到舊版 SQL Server。如需有關 vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。
如需有關如何使用附加來升級資料庫的詳細資訊,請參閱<如何:使用卸離與附加來升級資料庫 (Transact-SQL)>。
FOR ATTACH_REBUILD_LOG
指定利用附加一組現有的作業系統檔來建立資料庫。這個選項只適用於讀取/寫入資料庫。如果遺漏一個或多個交易記錄檔,記錄檔就會重建。必須有一個用來指定主要檔案的 <filespec> 項目。[!附註]
如果記錄檔是可用的,Database Engine 就會使用這些檔案,而不會重建記錄檔。
FOR ATTACH_REBUILD_LOG 需要下列項目:
正常關閉資料庫。
所有資料檔 (MDF 和 NDF) 都必須是可用的。
重要事項 這項作業會中斷記錄備份鏈結。建議您在作業完成之後執行完整的資料庫備份。如需詳細資訊,請參閱<BACKUP (Transact-SQL)>。
一般而言,如果您要將一個含有大型記錄的讀/寫資料庫複製到其他伺服器,而該伺服器中,因為該項複製作業大部分用在讀取作業或只用在讀取作業,所以該項複製作業所需的記錄空間比原始資料庫少,在這種情況下,通常就會使用 FOR ATTACH_REBUILD_LOG。
資料庫快照集中無法指定 FOR ATTACH_REBUILD_LOG。
如需有關附加及卸離資料庫的詳細資訊,請參閱<卸離和附加資料庫>。
<filespec>
控制檔案屬性。NAME logical_file_name
指定檔案的邏輯名稱。除非指定其中一個 FOR ATTACH 子句,否則指定 FILENAME 時,NAME 是必要的。FILESTREAM 檔案群組不能命名為 PRIMARY。- logical_file_name
這是參考檔案時在 SQL Server 中使用的邏輯名稱。Logical_file_name 在資料庫中必須是唯一的,且必須符合識別碼的規則。名稱可以是字元或 Unicode 常數,或是一般識別碼或分隔識別碼。
- logical_file_name
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>) 必須在相同的陳述式中建立。FILESTREAM 檔案群組只能有一個檔案 <filespec>,。
SIZE、MAXSIZE 和 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。MAXSIZE 不會套用到 FILESTREAM 檔案群組。- max_size
這是檔案大小上限。可以使用 KB、MB、GB 及 TB 後置詞。預設值是 MB。請指定一個整數,不包括小數點。如果未指定 max_size,檔案可以成長到磁碟已滿。Max_size 是整數值。如果是大於 2147483647 的值,請使用較大的單位。
- max_size
UNLIMITED
指定檔案可成長直到磁碟已滿。在 SQL Server 中,指定為無限成長的記錄檔,大小上限是 2 TB,資料檔的大小上限是 16 TB。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 filegroup_name
這是檔案群組的邏輯名稱。filegroup_name
資料庫中的 filegroup_name 必須是唯一的,且不能是系統提供的名稱 PRIMARY 和 PRIMARY_LOG。名稱可以是字元或 Unicode 常數,或是一般識別碼或分隔識別碼。名稱必須符合識別碼的規則。CONTAINS FILESTREAM
指定檔案群組會將 FILESTREAM 二進位大型物件 (BLOB) 儲存在檔案系統中。DEFAULT
指定具名的檔案群組必須是資料庫中的預設檔案群組。
<external_access_option>
控制資料庫內外的外部存取。DB_CHAINING { ON | OFF }
當指定 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 { ON | OFF }
當指定 ON 時,使用模擬內容的資料庫模組 (例如:檢視表、使用者定義函數或預存程序) 可以存取資料庫外部的資源。當指定 OFF 時,模擬內容中的資料庫模組不能存取資料庫外部的資源。預設值是 OFF。
每當附加資料庫時,TRUSTWORTHY 都設為 OFF。
根據預設,除了 msdb 資料庫以外,所有的系統資料庫都會將 TRUSTWORTHY 設為 OFF。model 和 tempdb 資料庫的這個值不可變更。建議您絕對不要將 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> 值的描述。
[!附註]
建立資料庫快照集時,不允許使用其他 <filespec> 選項和關鍵字 PRIMARY。
AS SNAPSHOT OF source_database_name
指定要建立的資料庫是 source_database_name 指定之來源資料庫的資料庫快照集。該快照集和來源資料庫必須位於相同的執行個體上。如需詳細資訊,請參閱<備註>一節中的「資料庫快照集」。
備註
每當建立、修改或卸除使用者資料庫時,都應該備份 master 資料庫。
CREATE DATABASE 陳述式必須在自動認可模式 (預設交易管理模式) 下執行,而且不能用於明確或隱含的交易。如需詳細資訊,請參閱<自動認可交易>。
您可以利用一個 CREATE DATABASE 陳述式來建立資料庫,並建立用來儲存該資料庫的檔案。SQL Server 利用下列步驟來實作 CREATE DATABASE 陳述式:
SQL Server 會利用 model 資料庫的副本來初始化資料庫及其中繼資料。
將 Service Broker GUID 指派給資料庫。
之後,Database Engine 就會在其餘的資料庫中填入空白頁面,但不包括含有記錄資料庫中空間使用方式之內部資料的頁面。如需詳細資訊,請參閱<資料庫檔案初始化>。
在 SQL Server 的一個執行個體上,最多可以指定 32,767 個資料庫。
每個資料庫都有一個可以在資料庫中執行特殊活動的擁有者。該擁有者就是建立資料庫的使用者。您可以利用 sp_changedbowner 來變更資料庫擁有者。
資料庫檔案和檔案群組
每個資料庫至少都有兩個檔案 (主要檔案和交易記錄檔案) 以及至少一個檔案群組。每個資料庫可以指定最多 32,767 個檔案和 32,767 個檔案群組。如需詳細資訊,請參閱<檔案與檔案群組架構>。
當您建立資料庫時,請根據您預期之資料庫中的資料量上限,盡量使資料檔有足夠的空間。如需詳細資訊,請參閱<利用檔案及檔案群組來管理資料庫的擴展>。
建議您利用存放區域網路 (SAN)、iSCSI 型網路或本機連接的磁碟來儲存 SQL Server 資料庫檔案,因為這個組態可使 SQL Server 效能和可靠性最佳化。依預設,不會針對 SQL Server 啟用使用網路資料庫檔案 (儲存在具備網路功能的伺服器或網路連接的儲存體上)。不過,您可以使用追蹤旗標 1807 建立具有網路型資料庫檔案的資料庫。如需有關此追蹤旗標的資訊以及重要的效能及維護考量,請參閱 Microsoft 網站。
資料庫快照集
您可以利用 CREATE DATABASE 陳述式來建立唯讀靜態檢視、現有資料庫 ( 「來源資料庫」 ) 的「資料庫快照集」。資料庫快照集在交易上與來源資料庫是一致的,因為它是在快照集建立時即存在。來源資料庫可以有多個快照集。
[!附註]
當您建立資料庫快照集時,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 中,某些權限是針對每個資料庫的資料檔和記錄檔所設定。每當在資料庫上套用下列作業時,都會設定下列權限:
已建立 |
修改以加入新檔案 |
已附加 |
已備份 |
已卸離 |
已還原 |
檔案所在目錄如有開放權限,這個權限可防止檔案遭到竄改。如需詳細資訊,請參閱<保護資料和記錄檔>。
[!附註]
MicrosoftSQL Server 2005 Express Edition 不會設定資料和記錄檔的權限。
範例
A. 不指定檔案來建立資料庫
下列範例會建立資料庫 mytest 並建立相對應的主要記錄檔和交易記錄檔。因為該陳述式沒有 <filespec> 項目,所以主要資料庫檔案的大小就是 model 資料庫主要檔案的大小。交易記錄設為下列二值中之較大者:512KB 或主要資料檔大小的 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 並以百萬位元來配置。Sales_log 檔會以百萬位元來配置,因為 SIZE 參數中明確陳述 MB 後置詞。
USE master;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.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 及 AdventureWorks 資料檔和記錄檔。在這個範例中,全文檢索目錄會從它的預設位置移至新的位置 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
I. 建立可指定一個資料列檔案群組和兩個 FILESTREAM 檔案群組的資料庫
下列範例會建立 FileStreamDB 資料庫。此資料庫是使用一個資料列檔案群組和兩個 FILESTREAM 檔案群組所建立。每個檔案群組都包含一個檔案:
FileStreamDB_data 包含資料列資料,它包含一個檔案 FileStreamDB_data.mdf (具有預設路徑)。
FileStreamPhotos 包含 FILESTREAM 資料,它包含一個 FILESTREAM 資料容器 FSPhotos (位於 C:\MyFSfolder\Photos)。它會標示為預設的 FILESTREAM 檔案群組。
FileStreamResumes 包含 FILESTREAM 資料,它包含一個 FILESTREAM 資料容器 FSResumes (位於 C:\MyFSfolder\Resumes)。
USE master;
GO
IF DB_ID (N'FileStreamDB') IS NOT NULL
DROP DATABASE FileStreamDB;
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, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
),
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