官术网_书友最值得收藏!

2.3 命令方式創建數據庫

除了可以通過“SQL Server Management Studio”的圖形界面方式創建數據庫外,還可以使用T-SQL命令(稱為命令方式)來創建數據庫。與界面方式創建數據庫相比,命令方式更為常用,使用也更為靈活。

2.3.1 創建數據庫:CREATE DATABASE

命令方式創建數據庫使用CREATE DATABASE命令,創建前要確保用戶具有創建數據庫的權限。

CREATE DATABASE命令主要格式如下:

  CREATE DATABASE數據庫名
  [     ON
        [ PRIMARY ]
        [ <數據文件選項> ...
        [ , <數據文件組選項> ...   ]
        [ LOG ON { <日志文件選項> ... } ]   ]
        [ COLLATE排序名]
      ……
  ]

1. 文件選項

其中,<文件選項>格式為:

  {   (
      NAME =邏輯文件名,
      FILENAME = { '操作系統文件名' | '存儲路徑' }
        [ , SIZE =文件初始容量]
        [ , MAXSIZE = { 文件最大容量 | UNLIMITED } ]
        [ , FILEGROWTH = 文件增量[容量 | % ] ]
    )
  }

說明

(1)邏輯文件名:數據庫使用的名字。

(2)操作系統文件名:操作系統在創建物理文件時使用的路徑和文件名。

(3)文件初始容量:對于主文件,若不指出大小,則默認為model數據庫主文件的大小。對于輔助數據文件,自動設置為3 MB。

(4)文件最大容量:指定文件的最大大小。UNLIMITED關鍵字表示文件大小不受限制,但實際上受磁盤可用空間的限制。如果不指定MAXSIZE選項,則文件將增長到磁盤空間滿。

(5)文件增量:有百分比和容量值兩種格式,前者如10%,即每次在原來空間大小的基礎上增長10%;后者如5 MB,即每次增長5 MB,而不管原來空間大小是多少。

注意

沒有說明的部分參考聯機文檔,后面不再特別說明。

2. 文件組選項

<文件組選項>格式為:

  {
        FILEGROUP文件組名[ DEFAULT ]
        <文件選項> ……
  }

(1)DEFAULT關鍵字:指定命名文件組為數據庫中的默認文件組。

(2)<文件選項>:用于指定屬于該文件組的文件的屬性,其格式描述和數據文件的屬性描述相同。

另外,COLLATE排序名:指定數據庫的默認排序規則。“排序名”既可以是Windows排序規則名稱,也可以是數據庫排序規則名稱(默認)。

【例2.4】創建一個名為test1的數據庫,其初始大小為5 MB,最大為50 MB,允許數據庫自動增長,增長方式是按10%比例增長。日志文件初始為2 MB,最大可增長到5 MB,按1 MB增長。數據文件和日志文件的存放位置為“'E:\Data”。假設SQL Server服務已啟動,并以系統管理員身份登錄計算機。

在“SQL Server Management Studio”窗口中單擊“新建查詢”按鈕新建一個查詢窗口,在“查詢分析器”窗口中輸入如下T-SQL語句:

  CREATE DATABASE  test1
      ON
      (
          NAME= "test1_data",
          FILENAME="E:\Data\test1.mdf",
          SIZE=5MB,
          MAXSIZE=50MB,
          FILEGROWTH=10%
      )
      LOG ON
      (
          NAME="test1_log",
          FILENAME="E:\Data\test1.ldf",
          SIZE=2MB,
          MAXSIZE=5MB,
          FILEGROWTH=1MB
  );

輸入完畢后,單擊SSMS面板上的“!執行”按鈕,消息窗口將顯示命令執行情況。如圖2.12所示。

圖2.12 在查詢分析器中執行創建數據庫命令

注意

在FILENAME中使用的文件擴展名,.mdf用于主數據文件,.ndf用于輔數據文件,.ldf用于日志文件。FILENAME選項中指定的數據和日志文件的目錄“E:\Data\”必須存在,否則將產生錯誤,即創建數據庫失敗。

如果“消息框”中顯示錯誤信息,需要查找原因,然后更正后執行;也可通過調試查找原因。

當命令成功執行后,在“對象資源管理器”中展開“數據庫”,可以看到新建的數據庫“test1”就顯示于其中。如果沒有發現“test1”,則選擇“數據庫”,單擊鼠標右鍵,在彈出的快捷菜單中選擇“刷新”菜單項即可。

通過“數據庫屬性”對話框,可以看到新建立test1數據庫的各項屬性完全符合預定要求。

【例2.5】創建一個名為test2的數據庫,它有兩個數據文件,其中主數據文件為20 MB,最大不限,按10%增長。1個輔數據文件為20 MB,最大不限,按10%增長;有1個日志文件,為50 MB,最大為100 MB,按10 MB增長。

在“查詢分析器”中輸入如下T-SQL語句并執行:

  CREATE DATABASE  test2
       ON
       PRIMARY
       (
          NAME = 'test2_data1',
          FILENAME = 'E:\Data\test2_data1.mdf',
          SIZE = 20 MB,
          MAXSIZE = UNLIMITED,
          FILEGROWTH = 10%
       ) ,
       (
          NAME = 'test2_data2',
          FILENAME = 'E:\Data\test2_data2.ndf',
          SIZE = 20 MB,
          MAXSIZE = UNLIMITED,
          FILEGROWTH = 10%
       )
       LOG ON
       (
          NAME = 'test2_log1',
          FILENAME = 'E:\Data\test2_log1.ldf',
          SIZE = 50 MB,
          MAXSIZE = 100 MB,
          FILEGROWTH = 10 MB
       );

【例2.6】創建一個具有2個文件組的數據庫test3。要求:

(1)主文件組包括文件test3_dat1,文件初始大小為20 MB,最大為60 MB,按5 MB增長。

(2)有1個文件組名為test3Group1,包括文件test3_dat2,文件初始大小為10 MB,最大為30 MB,按10%增長。

  CREATE DATABASE  test3
      ON
      PRIMARY
      (
         NAME ='test3_dat1',
         FILENAME = 'E:\Data\test3_dat1.mdf',
         SIZE = 20MB,
         MAXSIZE = 60MB,
         FILEGROWTH = 5MB
      ),
      FILEGROUP  test3Group1
      (
         NAME ='test3_dat2',
         FILENAME = 'E:\Data\test3_dat2.ndf',
         SIZE = 10MB,
         MAXSIZE = 30MB,
         FILEGROWTH = 10%
      );

2.3.2 修改數據庫:ALTER DATABASE

使用ALTER DATABASE命令可對數據庫進行修改,語法格式如下:

  ALTER DATABASE數據庫名
  {   ADD FILE <文件選項>... [TO FILEGROUP文件組名]    / *在文件組中增加數據文件* /
      | ADD LOG FILE <文件選項>...                    / *增加日志文件* /
      | REMOVE FILE邏輯文件名                         / *刪除數據文件* /
      | ADD FILEGROUP文件組名[……]                     / *增加文件組* /
      | REMOVE FILEGROUP文件組名                      / *刪除文件組* /
      | MODIFY FILE <文件選項>                        / *更改文件屬性* /
      | MODIFY NAME = 新數據庫名                      / *數據庫更名* /
      | MODIFY FILEGROUP文件組名
      {           <文件組可更新選項>
           | DEFAULT
           | NAME = 新文件組名
      }                                             / *更改文件組屬性* /
      | SET <屬性選項> ... [ WITH <終止> ]            / *設置數據庫屬性* /
      | COLLATE排序名                                / *指定數據庫排序規則* /
  }

1. 命令主體

ALTER DATABASE命令主體結構說明如下。

(1)ADD FILE子句:向數據庫添加數據文件,<文件屬性>給出文件的屬性,其構成參見CREATE DATABASE語法說明。關鍵字TO FILEGROUP指出了添加的數據文件所在的文件組名,若缺省,則為主文件組。

(2)ADD LOG FILE子句:向數據庫添加日志文件,<文件屬性>給出日志文件的屬性。

(3)REMOVE FILE子句:從數據庫中刪除數據文件,被刪除的數據文件由其中的參數“邏輯文件名”給出。當刪除一個數據文件時,邏輯文件與物理文件全部被刪除。

(4)ADD FILEGROUP子句:向數據庫中添加文件組,被添加的文件組名由參數“文件組名”給出。

(5)REMOVE FILEGROUP子句:刪除文件組,被刪除的文件組名由參數“文件組名”給出。

(6)MODIFY FILE子句:修改數據文件的屬性,被修改文件的邏輯名由<文件屬性>的NAME選項給出,可以修改的文件屬性包括FILENAME、SIZE、MAXSIZE和FILEGROWTH,但要注意,一次只能修改其中的一個屬性。修改文件大小時,修改后的大小不能小于當前文件的大小。

(7)MODIFY NAME子句:更改數據庫名,新的數據庫名由參數“新數據庫名”給出。

(8)MODIFY FILEGROUP子句:用于修改文件組的屬性。“文件組名”為要修改的文件組名稱。其中:

<文件組可更新選項>設置文件組讀寫權限;

DEFAULT選項表示將默認數據庫文件組改為指定文件組;

NAME選項用于將文件組名稱改為新文件組名。

(9)SET子句:用于設置數據庫的屬性,<屬性選項>中指定了要修改的屬性。例如,設為READ_ONLY時用戶可以從數據庫讀取數據,但不能修改數據庫。其他屬性請參考SQL Server聯機叢書。

2. 文件組可更新選項

<文件組可更新選項>定義為:

  {
        { READONLY | READWRITE }
        { READ_ONLY | READ_WRITE }
  }

(1)READONLY和READ_ONLY選項:用于將文件組設為只讀。

(2)READWRITE和READ_WRITE選項:將文件組設為讀/寫模式。

一般使用READ_ONLY和READ_WRITE,另外兩個選項在以后的版本中將不再使用。

【例2.7】假設已經創建了數據庫test1,它只有一個主數據文件,其邏輯文件名為test1_data,大小為5 MB,最大為50 MB,增長方式為按10%增長。

要求:修改數據庫test1現有數據文件test1_data的屬性,將主數據文件的最大容量改為100 MB,增長方式改為按每次5 MB增長。

在“查詢分析器”窗口中輸入如下T-SQL語句:

  ALTER DATABASE  test1
     MODIFY FILE
     (
         NAME ='test1_data',
         MAXSIZE =100 MB,         / *將主數據文件的最大改為100 MB* /
         FILEGROWTH = 5 MB        / *將主數據文件的增長方式改為按5 MB增長* /
     )
  GO

單擊“執行”按鈕執行輸入的T_SQL語句,右鍵單擊“對象資源管理器”中的“數據庫”,選擇“刷新”菜單項,之后右鍵單擊數據庫test1的圖標,選擇“屬性”菜單項,在“文件”頁上查看修改后的數據文件。

注意

GO命令不是T-SQL語句,但它是SSMS代碼編輯器可識別的命令。SQL Server實用工具將GO命令解釋為應該向SQL Server實例發送當前批T-SQL語句的信號。當前批語句由上一個GO命令后輸入的所有語句組成,如果是第一條GO命令,則由會話或腳本開始后輸入的所有語句組成。

GO命令和T-SQL語句不能在同一行中,否則運行時會發生錯誤。

【例2.8】先為數據庫test1增加數據文件test1bak,然后刪除該數據文件。

  ALTER DATABASE  test1
     ADD FILE
     (
         NAME = 'test1bak',
         FILENAME = 'E:\Data\test1bak.ndf',
         SIZE = 10 MB,
         MAXSIZE = 50 MB,
         FILEGROWTH = 5%
     )

通過查看“數據庫屬性”窗口中的文件屬性來觀察數據庫test1是否增加數據文件test1bak。

刪除數據文件test1bak的命令如下:

  ALTER DATABASE test1
     REMOVE FILE test1bak
  GO

【例2.9】為數據庫test1添加文件組fgroup,并為此文件組添加兩個大小均為10 MB的數據文件。

在“查詢分析器”中輸入如下T-SQL語句并執行:

  ALTER DATABASE test1
      ADD FILEGROUP fgroup
  GO
  ALTER DATABASE test1
      ADD FILE
      (
          NAME = 'test1_data2',
          FILENAME = 'E:\Data\test1_data2.ndf',
          SIZE = 10 MB
      ),
      (
          NAME = 'test1_data3',
          FILENAME = 'E:\Data\test1_data3.ndf',
          SIZE = 10 MB
      )
      TO FILEGROUP  fgroup
  GO

【例2.10】從數據庫中刪除文件組,將添加到test1數據庫中的文件組fgroup刪除。

注意

被刪除的文件組中的數據文件必須先刪除,且不能刪除主文件組。

在“查詢分析器”中輸入如下T-SQL語句并執行:

  ALTER DATABASE  test1
      REMOVE FILE  test1_ data2
  GO
  ALTER DATABASE  test1
      REMOVE FILE  test1_ data3
  GO
  ALTER DATABASE  test1
      REMOVE FILEGROUP   fgroup
  GO

【例2.11】為數據庫test1添加一個日志文件。

在“查詢分析器”中輸入如下T-SQL語句并執行:

  ALTER DATABASE  test1
      ADD LOG FILE
      (
          NAME = 'test1_log2',
          FILENAME = 'E:\Data\test1_log2.ldf',
          SIZE = 5 MB,
          MAXSIZE =10 MB,
          FILEGROWTH = 1 MB
      )
  GO

【例2.12】從數據庫TEST1中刪除一個日志文件,將日志文件TEST1_LOG2刪除。

將數據庫test1的名改為just_test。進行此操作時必須保證該數據庫此時沒有被其他任何用戶使用。

在“查詢分析器”中輸入如下T-SQL語句并執行:

  ALTER DATABASE TEST1
      REMOVE FILE TEST1_LOG2
  GO
  ALTER DATABASE  test3
      MODIFY NAME = just_test3
  GO

注意

不能刪除主日志文件。

2.3.3 刪除數據庫:DROP DATABASE

刪除數據庫使用DROP DATABASE命令。

語法格式:

  DROP DATABASE數據庫名......

其中,“數據庫名”是要刪除的數據庫名。例如,要刪除數據庫test2,使用命令:

  DROP DATABASE test2
  GO

注意

使用DROP DATABASE語句不會出現確認信息,所以要小心使用。另外,不能刪除系統數據庫,否則將導致服務器無法使用。

2.3.4 數據庫快照:AS SNAPSHOT

數據庫快照就是指數據庫在某一指定時刻的情況,數據庫快照提供了源數據庫在創建快照時刻的只讀、靜態視圖。雖然數據庫在不斷變化,但數據庫快照一旦創建就不會改變了。多個快照可以位于一個源數據庫中,并且可以作為數據庫始終駐留在同一服務器實例上。創建快照時,每個數據庫快照在事務上與源數據庫一致。在被數據庫所有者顯式刪除之前,快照始終存在。

快照可用于報表。另外,如果源數據庫出現用戶錯誤,還可將源數據庫恢復到創建快照時的狀態。丟失的數據僅限于創建快照后數據庫更新的數據。

創建數據庫快照也使用CREATE DATABASE命令。語法格式如下:

  CREATE DATABASE數據庫快照名
      ON(
          NAME = 邏輯文件名,
          FILENAME = '操作系統文件名'
      )  [,  ...   ]
      AS SNAPSHOT OF源數據庫名

說明

(1)數據庫快照名:數據庫快照的名稱,這個名稱在SQL Server實例中必須唯一且符合標識符規則。

(2)ON子句:若要創建數據庫快照,要在源數據庫中指定文件列表。若要使快照工作,則必須分別指定所有數據文件。其中,NAME是數據庫“行數據”文件對應的邏輯名,FILENAME是物理文件名(包含路徑)。日志文件不允許用于數據庫快照。

(3)AS SNAPSHOT OF子句:指定要創建的快照為“源數據庫名”指定的數據庫的快照。數據庫快照必須與源數據庫處于同一實例中。

注意

創建了數據庫快照之后,快照的源數據庫就會存在一些限制。如不能對數據庫刪除、分離或還原;源數據庫性能會受到影響;不能從源數據庫或其他快照上刪除文件;源數據庫必須處于在線狀態。

【例2.13】創建test1數據庫的快照test1_s1。

  CREATE DATABASE test1_s1
      ON
      (
          NAME=test1_data,
          FILENAME ='E:\Data\test1_s1.mdf'
      )
      AS SNAPSHOT OF test1
  GO

命令執行成功之后,在“對象資源管理器”窗口中刷新“數據庫”菜單欄,在“數據庫”中展開“數據庫快照”,就可以看見剛剛創建的數據庫快照test1_s1了。

刪除數據庫快照的方法和刪除數據庫的方法完全相同,可以使用界面方式刪除,也可以使用命令方式刪除,例如:

  DROP DATABASE test1_s1;
主站蜘蛛池模板: 华宁县| 海兴县| 上饶市| 利津县| 商都县| 航空| 金乡县| 边坝县| 嫩江县| 东明县| 敦化市| 武宣县| 莱西市| 罗田县| 旅游| 迭部县| 格尔木市| 历史| 化州市| 广州市| 赤壁市| 建平县| 曲沃县| 平遥县| 延庆县| 云林县| 龙州县| 修水县| 苍山县| 辉南县| 明光市| 南和县| 哈巴河县| 鹤峰县| 拜城县| 什邡市| 南城县| 肃南| 那坡县| 即墨市| 京山县|