使用SQL語句建立基本資料庫
CREATE DATABASE Epiphany ON ( NAME = Epiphany, FILENAME = 'E:\SQL SERVER 2008\Epiphany_data.mdf', SIZE = 5MB, MAXSIZE = 20, FILEGROWTH = 20 ) LOG ON ( NAME = Epiphany, FILENAME = 'E:\SQL SERVER 2008\Epiphany_log.ldf', SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 1MB );
可以用這個模板,紅色字型自己新增就好了。
CREATE DATABASE Epiphany
ON
(
NAME = Epiphany,
FILENAME = 'E:\SQL SERVER 2008\Epiphany_data.mdf',
SIZE = 5MB,
MAXSIZE = 20,
FILEGROWTH = 20
)
LOG ON
(
NAME = Epiphany,
FILENAME = 'E:\SQL SERVER 2008\Epiphany_log.ldf',
SIZE = 2MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB
);
完畢!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL聯機叢書內容:
建立一個新資料庫及儲存該資料庫的檔案,建立一個數據庫快照,或從先前建立的資料庫的已分離檔案中附加資料庫。
Transact-SQL 語法約定
語法
CREATE DATABASE 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。
- ON
-
指定顯式定義用來儲存資料庫資料部分的磁碟檔案(資料檔案)。當後面是以逗號分隔的、用以定義主檔案組的資料檔案的 <filespec> 項列表時,需要使用 ON。主檔案組的檔案列表可後跟以逗號分隔的、用以定義使用者檔案組及其檔案的 <filegroup> 項列表(可選)。
- PRIMARY
-
指定關聯的 <filespec> 列表定義主檔案。在主檔案組的 <filespec> 項中指定的第一個檔案將成為主檔案。一個數據庫只能有一個主檔案。有關詳細資訊,請參閱檔案和檔案組體系結構。
如果沒有指定 PRIMARY,那麼 CREATE DATABASE 語句中列出的第一個檔案將成為主檔案。
- LOG ON
-
指定顯式定義用來儲存資料庫日誌的磁碟檔案(日誌檔案)。LOG ON 後跟以逗號分隔的用以定義日誌檔案的 <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 [ WITH <service_broker_option> ]
-
指定通過附加一組現有的作業系統檔案來建立資料庫。必須有一個指定主檔案的 <filespec> 項。至於其他 <filespec> 項,只需要指定與第一次建立資料庫或上一次附加資料庫時路徑不同的檔案的那些項即可。必須有一個 <filespec> 項指定這些檔案。
FOR ATTACH 具有以下要求:
- 所有資料檔案(MDF 和 NDF)都必須可用。
- 如果存在多個日誌檔案,這些檔案都必須可用。
如果一個可讀/寫資料庫具有一個當前不可用的日誌檔案,並且進行附加操作前在沒有使用使用者或開啟的事務的情況下關閉了該資料庫,那麼 FOR ATTACH 會自動重新生成日誌檔案並更新主檔案。相比之下,對於只讀資料庫,由於主檔案不能更新,將不能重新生成日誌。因此,如果附加一個日誌不可用的只讀資料庫,必須在 FOR ATTACH 子句中提供日誌檔案或檔案。
注意: 無法在早期版本的 SQL Server 中附加由較新版本的 SQL Server 建立的資料庫。源資料庫的版本必須至少為 80 (SQL Server 2000),才能附加到 SQL Server 2008。附加相容級別低於 80 的 SQL Server 2000 或 SQL Server 2005 資料庫時,會將其相容級別設定為 80。 在 SQL Server 中,作為待附加資料庫的組成部分的所有全文檔案也將隨之一起附加。若要指定全文目錄的新路徑,請指定不帶全文作業系統檔名的新位置。有關詳細資訊,請參閱“示例”部分。
不能對資料庫快照指定 FOR ATTACH。
如果資料庫使用 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 識別符號。
有關詳細資訊,請參閱管理 Service Broker 標識。
有關分離或附加資料庫時設定的檔案許可權的資訊,請參閱保護資料和日誌檔案的安全。
當您附加已複製的資料庫而不是分離的資料庫時,請注意以下事項:
- 如果將資料庫附加到與原始資料庫相同的伺服器例項和版本,則不需要執行其他步驟。
- 如果您將資料庫附加到同一個伺服器例項,但是版本已升級,則必須執行 sp_vupgrade_replication 才能在附加操作完成後升級複製。
- 如果您將資料庫附加到不同的伺服器例項,而不考慮版本,則必須執行 sp_removedbreplication 才能在附加操作完成後刪除複製。
注意: 附加使用 vardecimal 儲存格式,但 SQL Server 資料庫引擎 必須至少升級到 SQL Server 2005 Service Pack 2。無法將使用 Vardecimal 儲存格式的資料庫附加到早期版本的 SQL Server。有關 vardecimal 儲存格式的詳細資訊,請參閱將 Decimal 資料儲存為可變長度型別。 有關如何使用附加來升級資料庫的資訊,請參閱如何使用分離和附加來升級資料庫 (Transact-SQL)。
安全說明: 建議您不要附加未知或不可信源中的資料庫。此類資料庫可能包含惡意程式碼,這些程式碼可能會執行非預期的 Transact-SQL 程式碼,或者通過修改架構或物理資料庫結構導致錯誤。使用來自未知源或不可信源的資料庫前,請在非生產伺服器上針對資料庫執行 DBCC CHECKDB,然後檢查資料庫中的程式碼,例如儲存過程或其他使用者定義程式碼。 - 所有資料檔案(MDF 和 NDF)都必須可用。
- FOR ATTACH_REBUILD_LOG
-
指定通過附加一組現有的作業系統檔案來建立資料庫。該選項只限於讀/寫資料庫。如果缺少一個或多個事務日誌檔案,將重新生成日誌檔案。必須有一個指定主檔案的 <filespec> 項。
注意: 如果日誌檔案可用,資料庫引擎將使用這些檔案,而不會重新生成日誌檔案。 FOR ATTACH_REBUILD_LOG 具有以下要求:
- 完全關閉資料庫。
- 所有資料檔案(MDF 和 NDF)都必須可用。
重要提示: 該操作會中斷日誌備份鏈。建議在完成該操作後執行完整資料庫備份。有關詳細資訊,請參閱 BACKUP (Transact-SQL)。 通常,FOR ATTACH_REBUILD_LOG 用於將具有大型日誌的可讀/寫資料庫複製到另一臺伺服器,在這臺伺服器上,資料庫副本頻繁使用,或僅用於讀操作,因而所需的日誌空間少於原始資料庫。
不能對資料庫快照指定 FOR ATTACH_REBUILD_LOG。
有關附加資料庫和分離資料庫的詳細資訊,請參閱分離資料庫和附加資料庫。
- 完全關閉資料庫。
- <filespec>
-
控制檔案屬性。
- NAME logical_file_name
-
指定檔案的邏輯名稱。指定 FILENAME 時,需要使用 NAME,除非指定 FOR ATTACH 子句之一。無法將 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、C:\MyFiles 必須存在才能執行 ALTER DATABASE,但 MyFilestreamData 資料夾不能存在。
必須在同一語句中建立檔案組和檔案 (
<filespec>
)。只能有一個檔案,FILESTREAM 檔案組的<filespec>,
。SIZE、MAXSIZE 和 FILEGROWTH 屬性不適用於 FILESTREAM 檔案組。
- SIZE size
-
指定檔案的大小。
將 os_file_name 指定為 UNC 路徑時,不能指定 SIZE。SIZE 不適用於 FILESTREAM 檔案組。
- size
-
檔案的初始大小。
如果沒有為主檔案提供 size,則資料庫引擎將使用 model 資料庫中的主檔案的大小。如果指定了輔助資料檔案或日誌檔案,但未指定該檔案的 size,則資料庫引擎將以 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 的值,使用更大的單位。
- 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 固定伺服器角色的成員身份。
- 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。
- 然後,資料庫引擎使用空頁填充資料庫的剩餘部分,包含記錄資料庫中空間使用情況的內部資料頁除外。有關詳細資訊,請參閱資料庫檔案初始化。
在一個 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 中,會對每個資料庫的資料檔案和日誌檔案設定特定的許可權。每當對資料庫執行下列操作時,便會設定下列許可權:
建立 |
修改以新增新檔案 |
附加 |
備份 |
分離 |
還原 |
如果這些檔案位於具有開啟許可權的目錄中,那麼以上許可權可以防止檔案被意外篡改。有關詳細資訊,請參閱保護資料和日誌檔案的安全。
注意: |
---|
Microsoft SQL Server 2005 Express Edition 不設定資料檔案和日誌檔案許可權。 |
示例
A. 建立未指定檔案的資料庫
以下示例建立名為 mytest
的資料庫,並建立相應的主檔案和事務日誌檔案。因為語句沒有 <filespec> 項,所以主資料庫檔案的大小為
model 資料庫主檔案的大小。事務日誌將設定為下列值中的較大者:512 KB 或主資料檔案大小的 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 並按 MB 分配。Sales
_log
檔案以 MB 為單位進行分配,因為
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
_dat
和Spri2
_dat
的主檔案組。將這些檔案的 FILEGROWTH 增量指定為15%
。 - 名為
SalesGroup1
的檔案組,其中包含檔案SGrp1Fi1
和SGrp1Fi2
。 - 名為
SalesGroup2
的檔案組,其中包含檔案SGrp2Fi1
和SGrp2Fi2
。
複製程式碼 | |
---|---|
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. 附加資料庫
以下示例分離在示例 D 中建立的資料庫 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
。指定了排序規則名稱,並將 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\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf'), (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\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 資料。它包含一個位於C:\MyFSfolder\Resumes
中的 FILESTREAM 資料容器FSResumes
。
複製程式碼 | |
---|---|
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 |