程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> create database(Transact SQL)

create database(Transact SQL)

編輯:關於SqlServer
創建一個新數據庫及存儲該數據庫的文件,創建一個數據庫快照,或從先前創建的數據庫的已分離文件中附加數據庫。

 

 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

[;]

 

 

備注

創建用戶數據庫後,應備份 master 數據庫。

 

CREATE DATABASE 語句必須以自動提交模式(默認事務管理模式)運行,不允許在顯式或隱式事務中使用。有關詳細信息,請參閱自動提交事務。

 

使用一條 CREATE DATABASE 語句即可創建數據庫以及存儲該數據庫的文件。SQL Server 通過使用以下步驟實現 CREATE DATABASE 語句:

 

SQL Server 2005 Database Engine 使用 model 數據庫的副本初始化該數據庫及其元數據。

 

 

為數據庫分配 Service Broker GUID。

 

 

然後,數據庫引擎 使用空頁填充數據庫的剩余部分,包含記錄數據庫中空間使用情況的內部數據頁除外。有關詳細信息,請參閱數據庫文件初始化。

 

 

在一個 SQL Server 的實例中最多可以指定 32,767 個數據庫。

 

每個數據庫都有一個所有者,它可以在數據庫中執行特殊操作。所有者是創建數據庫的用戶。可以使用 sp_changedbowner (Transact-SQL) 更改數據庫所有者。

 

數據庫文件和文件組

每個數據庫至少有兩個文件(一個主文件和一個事務日志文件)和一個文件組。可以為每個數據庫指定最多 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,則新數據庫將繼承原始數據庫的數據庫選項設置。

 

查看數據庫信息

可以使用目錄視圖、系統函數和系統存儲過程返回有關數據庫、文件和文件組的信息。有關詳細信息,請參閱查看數據庫元數據。

 

參數

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

指定通過附加一組現有的操作系統文件來創建數據庫。必須有一個指定主文件的 <filespec> 項。至於其他 <filespec> 項,只需要指定與第一次創建數據庫或上一次附加數據庫時路徑不同的文件的那些項即可。必須有一個 <filespec> 項指定這些文件。

 

FOR ATTACH 具有以下要求:

 

所有數據文件(MDF 和 NDF)都必須可用。

 

 

如果存在多個日志文件,這些文件都必須可用。

 

 

如果一個可讀/寫數據庫具有一個當前不可用的日志文件,並且進行附加操作前在沒有使用用戶或打開的事務的情況下關閉了該數據庫,那麼 FOR ATTACH 會自動重新生成日志文件並更新主文件。相比之下,對於只讀數據庫,由於主文件不能更新,將不能重新生成日志。因此,如果附加一個日志不可用的只讀數據庫,必須在 FOR ATTACH 子句中提供日志文件或文件。

 

在 SQL Server 2005 中,要附加的數據庫中包含的所有全文文件也將隨之一起附加。若要指定全文目錄的新路徑,請指定不帶全文操作系統文件名的新位置。有關詳細信息,請參閱“示例”部分。

 

不能對數據庫快照指定 FOR ATTACH。

 

有關附加數據庫和分離數據庫的詳細信息,請參閱分離和附加數據庫。

 

注意: 

如果數據庫使用 Service Broker,請參閱 <service_broker_option>。

 

 

 

有關分離或附加數據庫時設置的文件權限的信息,請參閱保護數據和日志文件的安全。

 

當您附加已復制而不是分離的復制數據庫時,請注意下列事項:

 

如果您將數據庫附加到原始數據庫所在的同一服務器實例和版本,則不需要其他步驟。

 

 

如果您將數據庫附加到同一個服務器實例,但是版本已升級,則必須執行 sp_vupgrade_replication 才能在附加操作完成後升級復制。

 

 

如果您將數據庫附加到不同的服務器實例,而不考慮版本,則必須執行 sp_removedbreplication 才能在附加操作完成後刪除復制。

 

 

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 子句之一。

 

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,則數據庫引擎 將使用 model 數據庫中的主文件的大小。如果指定了輔助數據文件或日志文件,但未指定該文件的 size ,則數據庫引擎 將以 1 MB 作為該文件的大小。為主文件指定的大小至少應與 model 數據庫的主文件大小相同。

 

可以使用千字節 (KB)、兆字節 (MB)、千兆字節 (GB) 或兆兆字節 (TB) 後綴。默認為 MB。指定一個整數,不包含小數位。

 

MAXSIZE max_size

指定文件可增大到的最大大小。將 os_file_name 指定為 UNC 路徑時,不能指定 MAXSIZE。

 

max_size

最大的文件大小。可以使用 KB、MB、GB 和 TB 後綴。默認為 MB。指定一個整數,不包含小數位。如果未指定 max_size,則文件將一直增大,直至磁盤已滿。

 

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。

 

注意: 

在 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。

 

重要事項: 

如果 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。

 

默認情況下,master 數據庫始終將 TRUSTWORTHY 設置為 ON。model、tempdb 數據庫始終將 TRUSTWORTHY 設置為 OFF,並且不能對這些數據庫更改該值。

 

若要設置此選項,要求具有 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。

 

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 指定的源數據庫的數據庫快照。快照和源數據庫必須位於同一實例中。

 

有關詳細信息,請參閱“備注”部分的“數據庫快照”。

 

權限

要求具有 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 的權限。

 

為了控制對運行 SQL Server 實例的計算機上的磁盤使用,通常只有少數登錄帳戶才有創建數據庫的權限。

 

對數據文件和日志文件的權限

在 SQL Server 2005 中,對各個數據庫的數據和日志文件設置了某些權限。每當對數據庫執行下列操作時,便會設置下列權限:

 

創建

 修改以添加新文件

 

附加

 備份

 

分離

 還原

 

 

如果這些文件位於具有打開權限的目錄中,那麼以上權限可以防止文件被意外篡改。有關詳細信息,請參閱保護數據和日志文件的安全。

 

注意: 

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

 

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 + '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\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)

sp_changedbowner (Transact-SQL)

sp_detach_db (Transact-SQL)

sp_removedbreplication (Transact-SQL)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved