




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ISBN978-7-111-50122-0第5章
數(shù)據(jù)庫操作數(shù)據(jù)庫是數(shù)據(jù)庫管理系統(tǒng)的最重要、最基本組成。本章主要介紹SQLServer2012數(shù)據(jù)庫的概念、分類,以及數(shù)據(jù)庫的創(chuàng)建、修改和刪除等操作。5.1數(shù)據(jù)庫基本概念如第1章所講,SQLServer2012數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫,就是存放、管理SQLServer2012系統(tǒng)數(shù)據(jù)的倉庫。對于SQLServer2012系統(tǒng)的數(shù)據(jù)庫有兩種觀點(diǎn),即數(shù)據(jù)庫管理員觀點(diǎn)和用戶觀點(diǎn),因此可以將數(shù)據(jù)庫分為物理數(shù)據(jù)庫和邏輯數(shù)據(jù)庫兩類。5.1.1物理數(shù)據(jù)庫1.頁和區(qū)頁是SQLServer中數(shù)據(jù)存儲的基本單位。為數(shù)據(jù)庫中的數(shù)據(jù)文件分配的磁盤空間可以從邏輯上劃分成頁(從0到n連續(xù)編號,1頁大小為8K)。也就是說,SQLServer讀取或?qū)懭胨袛?shù)據(jù)頁。區(qū)是八個物理上連續(xù)的頁的集合,用來有效地管理頁。所有頁都存儲在區(qū)中。區(qū)是管理空間的基本單位。一個區(qū)是8個物理上連續(xù)的頁(即64KB)。這意味著SQLServer數(shù)據(jù)庫中每MB有16個區(qū)。2.數(shù)據(jù)庫文件SQLServer2012將數(shù)據(jù)庫映射到一組操作系統(tǒng)文件上,文件類型通常分為三種:主數(shù)據(jù)文件、次要數(shù)據(jù)文件和日志文件。也可以分為數(shù)據(jù)文件和日志文件兩種。在SQLServer2012中,將主數(shù)據(jù)文件、次要數(shù)據(jù)文件類型顯示為行數(shù)據(jù),將日志文件類型顯示為日志。3.文件組文件組(FileGroup)是命名的文件集合,用于幫助數(shù)據(jù)布局和管理任務(wù)。通??梢詾橐粋€磁盤驅(qū)動器創(chuàng)建一個文件組,將多個數(shù)據(jù)庫文件集合起來形成一個整體。通過文件組,可以將特定的數(shù)據(jù)庫對象與該文件組相關(guān)聯(lián),那么對數(shù)據(jù)庫對象的操作都將在該文件組中完成,可以提高數(shù)據(jù)的查詢性能。5.1.2邏輯數(shù)據(jù)庫用戶觀點(diǎn)認(rèn)為,SQLServer2012數(shù)據(jù)庫是存儲數(shù)據(jù)的容器,即數(shù)據(jù)庫是一個存放數(shù)據(jù)的表和支持這些數(shù)據(jù)的存儲、檢索、安全性和完整性的邏輯成分所組成的集合。組成數(shù)據(jù)庫的邏輯成分稱為數(shù)據(jù)庫對象。SQLServer2012的邏輯數(shù)據(jù)庫以及對象,在SQLServerManagementStudio的“對象資源管理器”窗口中都能看到。如圖所示。這些數(shù)據(jù)庫以及數(shù)據(jù)庫對象名稱都是邏輯名,即在操作系統(tǒng)下看不到以這個名稱命名的文件,只能在SQLServerManagementStudio看到。5.1.2邏輯數(shù)據(jù)庫數(shù)據(jù)庫對象主要包括表、視圖、索引、約束、存儲過程和觸發(fā)器等,見表5-1。表5-1SQLServer2012數(shù)據(jù)庫常用對象數(shù)據(jù)庫對象說
明表由行和列構(gòu)成的集合,用來存儲數(shù)據(jù)鍵表中的列數(shù)據(jù)類型定義列或變量的數(shù)據(jù)類型視圖由表或其他視圖導(dǎo)出的虛表索引為數(shù)據(jù)提供快速檢索的支持約束用于定義表中列的完整性規(guī)則存儲過程存放與服務(wù)器端預(yù)先編譯好的一組T-SQL語句觸發(fā)器一種特殊的存儲過程,當(dāng)條件滿足時,自動執(zhí)行默認(rèn)值為列提供的默認(rèn)值5.1.2邏輯數(shù)據(jù)庫用戶在操作這些對象時,需要給出對象的名字,這些對象的名字由用戶直接使用。用戶可以給出兩種對象名,即完全限定對象名和部分限定對象名。1)完全限定對象名由4個標(biāo)識符組成:服務(wù)器名稱(server)、數(shù)據(jù)庫名稱(database)、所有者名稱(schema_name)和對象名稱(object_name)。其語法格式為:[[[server.][database].][schema_name].]object_name在SQLServer2012中創(chuàng)建的每個對象都必須有一個惟一的完全限定對象名。5.1.2邏輯數(shù)據(jù)庫2)服務(wù)器、數(shù)據(jù)庫和所有者的名稱即所謂的對象名稱限定符。在引用對象時,通常不需要標(biāo)明服務(wù)器、數(shù)據(jù)庫和所有者,可以用句點(diǎn)標(biāo)記它們的位置來省略限定符。省略了部分或全部的對象名稱限定符,這種對象名稱為部分限定對象名。部分限定對象名的有效格式包括以下幾種:server.database..object_name /*省略所有者名稱*/server..schema_name.object_name /*省略數(shù)據(jù)庫名稱*/server...object_name /*省略數(shù)據(jù)庫和所有者名稱*/database.schema_name.object_name /*省略服務(wù)器名稱*/database..object_name /*省略服務(wù)器和所有者名稱*/schema_name.object_name /*省略服務(wù)器和數(shù)據(jù)庫名稱*/object_name /*省略服務(wù)器、數(shù)據(jù)庫和所有者名稱
*/5.1.3SQLServer2012的系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫SQLServer2012數(shù)據(jù)庫分為三類:系統(tǒng)數(shù)據(jù)庫、用戶數(shù)據(jù)庫和示例數(shù)據(jù)庫。1.系統(tǒng)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫存儲有關(guān)SQLServer2012的系統(tǒng)信息,是系統(tǒng)管理的依據(jù),由master、model、msdb、tempdb,以及隱藏的resource數(shù)據(jù)庫組成。見表5-2。表5-2SQLServer2005系統(tǒng)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫名說
明master記錄SQLServer實(shí)例的所有系統(tǒng)級信息,包含了登錄賬號、系統(tǒng)配置、數(shù)據(jù)庫位置及數(shù)據(jù)庫錯誤信息等,用于控制用戶數(shù)據(jù)庫和SQLServer的運(yùn)行model為SQLServer實(shí)例中創(chuàng)建的所有數(shù)據(jù)庫提供模板msdb用于SQLServer代理計劃警報和作業(yè)tempdb為臨時表和臨時存儲過程提供存儲空間,用于保存臨時對象或中間結(jié)果集resource一個只讀數(shù)據(jù)庫,包含SQLServer包括的系統(tǒng)對象。系統(tǒng)對象在物理上保留在Resource數(shù)據(jù)庫中,但在邏輯上顯示在每個數(shù)據(jù)庫的sys架構(gòu)中。5.1.3SQLServer2012的系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫安裝SQLServer2012時,安裝程序會自動創(chuàng)建系統(tǒng)數(shù)據(jù)庫的主數(shù)據(jù)文件和日志文件。常用的系統(tǒng)數(shù)據(jù)庫文件名見表5-3。表5-3SQLServer2012系統(tǒng)數(shù)據(jù)庫文件resource數(shù)據(jù)庫由于隱藏,所以在默認(rèn)目錄下看不到。SQLServer不支持用戶直接更新系統(tǒng)數(shù)據(jù)庫對象(如系統(tǒng)表、系統(tǒng)存儲過程和目錄視圖)中的信息。但提供了一整套管理工具(如SQLServerManagementStudio),使用戶可以充分管理系統(tǒng)和數(shù)據(jù)庫中的所有用戶和對象。SQLServer不支持對系統(tǒng)表定義觸發(fā)器,因?yàn)橛|發(fā)器可能會更改系統(tǒng)的操作,也不要使用T-SQL語句直接查詢系統(tǒng)表。所以,建議用戶不要修改、刪除系統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù),以免影響系統(tǒng)的運(yùn)行。系統(tǒng)數(shù)據(jù)庫名主文件名日志文件名mastermaster.mdfmastlog.ldfmodelmodel.mdfmodellog.ldfmsdbMSDBdata.mdfMSDBlog.ldftempdbtempdb.mdftemplog.ldf5.1.3SQLServer2012的系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫2.用戶數(shù)據(jù)庫用戶數(shù)據(jù)庫就是由用戶自己創(chuàng)建的數(shù)據(jù)庫。創(chuàng)建一個數(shù)據(jù)庫就是創(chuàng)建一個用戶數(shù)據(jù)庫。3.示例數(shù)據(jù)庫SQLServer2012有示例數(shù)據(jù)庫,需要另行安裝,用來給初學(xué)者做實(shí)例練習(xí)用。這里就不再介紹。5.1.4報表服務(wù)器和報表數(shù)據(jù)庫除了系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫之外,還有兩個數(shù)據(jù)庫:ReportServer(報表服務(wù)器數(shù)據(jù)庫)和ReportServerTempDB(報表服務(wù)器臨時數(shù)據(jù)庫)。報表服務(wù)器是一種無狀態(tài)服務(wù)器,它使用SQLServer數(shù)據(jù)庫引擎來存儲元數(shù)據(jù)和對象定義。為了將永久性數(shù)據(jù)存儲與臨時存儲要求分開,ReportingServices安裝使用以上兩個數(shù)據(jù)庫。這兩個數(shù)據(jù)庫一起創(chuàng)建,并按名稱綁定。這兩個數(shù)據(jù)庫的表結(jié)構(gòu)已經(jīng)針對服務(wù)器操作進(jìn)行了優(yōu)化,因此不應(yīng)對其進(jìn)行修改或調(diào)整。其中,ReportServer數(shù)據(jù)庫主要存儲報表服務(wù)器所管理的項以及與這些項關(guān)聯(lián)的所有屬性和安全設(shè)置,訂閱和計劃定義,報表快照(包括查詢結(jié)果)和報表歷史記錄,報表執(zhí)行日志數(shù)據(jù)等。ReportServerTempDB數(shù)據(jù)庫主要用一些與使用相關(guān)的臨時數(shù)據(jù)庫來存儲報表服務(wù)器生成的會話和執(zhí)行數(shù)據(jù)、緩存報表以及工作表。普通用戶一般不要使用這兩個數(shù)據(jù)庫。5.2創(chuàng)建數(shù)據(jù)庫作為存放數(shù)據(jù)的主體,首先要創(chuàng)建數(shù)據(jù)庫,即創(chuàng)建用戶數(shù)據(jù)庫。SQLServer2012提供了兩種方式創(chuàng)建數(shù)據(jù)庫,一種是管理工具界面方式創(chuàng)建,另一種是命令行方式創(chuàng)建。通常,管理工具界面方式方便、快捷、直觀。命令行方式嚴(yán)謹(jǐn)、通用。5.2.1管理工具界面方式創(chuàng)建數(shù)據(jù)庫SQLServer2012使用SQLServerManagementStudio管理工具進(jìn)行界面方式創(chuàng)建數(shù)據(jù)庫。1.SQLServerManagementStudio界面布局5.2.1管理工具界面方式創(chuàng)建數(shù)據(jù)庫2.創(chuàng)建新數(shù)據(jù)庫5.2.1管理工具界面方式創(chuàng)建數(shù)據(jù)庫【例5-1】
新建一個名為“NewDB”的數(shù)據(jù)庫。該數(shù)據(jù)庫有兩個文件:主數(shù)據(jù)文件和日志文件。主數(shù)據(jù)文件初始大小為10M,文件大小可以不受限制的增長,但每次增長20%。日志文件初始大小為5M,文件大小也不受限制的增長,但文件每次增長1M。都不指定文件組。最后按照系統(tǒng)默認(rèn)路徑存盤。5.2.1管理工具界面方式創(chuàng)建數(shù)據(jù)庫【例5-2】
新建一個名為“NewTest”的數(shù)據(jù)庫,數(shù)據(jù)庫文件都存盤于C盤的DB文件夾下。該數(shù)據(jù)庫有4個文件:1個主數(shù)據(jù)文件、2個次要數(shù)據(jù)文件和1個日志文件。主數(shù)據(jù)文件初始大小為50M,文件大小也不受限制的增長,每次增長10M。兩個次要數(shù)據(jù)文件初始大小都為20M,文件大小也不受限制的增長,但文件每次增長20%。新建1個名為“NGroup”文件組,并將次要數(shù)據(jù)文件放入該文件組。日志文件初始大小為10M,文件大小也不受限制的增長,但文件每次增長5M。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫在SQLServer2012中,還可以利用命令行方式創(chuàng)建數(shù)據(jù)庫。在SQLServerManagementStudio的“查詢編輯器”窗口中使用T-SQL語句編程創(chuàng)建數(shù)據(jù)庫(詳細(xì)的T-SQL編程將在第7章介紹),與界面方式操作效果一樣。鼠標(biāo)選擇工具欄中的“新建查詢”按鈕,即新建一個“查詢編輯器”窗口?;蛘哌x擇用戶數(shù)據(jù)庫,選擇右鍵菜單“新建查詢”選項,也將新建一個“查詢編輯器”窗口。如圖所示。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫在“查詢編輯器”窗口中輸入T-SQL語句,選擇工具欄上的“執(zhí)行”按鈕,或選擇“查詢”菜單的“執(zhí)行”選項,或選擇右鍵菜單“執(zhí)行”選項,或直接按鍵盤的F5鍵,即可執(zhí)行。如圖所示。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫查詢編輯器是一個功能強(qiáng)大的編輯器。它不僅僅是一個T-SQL語句的輸入窗口,還可以說是學(xué)習(xí)T-SQL語言的好助手。用戶在“查詢編輯器”窗口中輸入T-SQL語句,可以通過窗口中字母、數(shù)字等文本信息的顏色顯示,系統(tǒng)自動生成的下劃線標(biāo)識等信息,來判斷語句的語法及格式是否正確。如果運(yùn)行失敗后,還有詳細(xì)的失敗提示。當(dāng)然,用戶也可以根據(jù)自己的愛好,重新配置查詢編輯器,例如字體顏色、大小等。選擇“工具”菜單的“選項”選項,在“選項”對話框中設(shè)置用戶需要的顯示效果。如圖所示。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫T-SQL提供了CREATEDATABASE語句,該語句的功能是創(chuàng)建一個新數(shù)據(jù)庫及存儲該數(shù)據(jù)庫的文件,創(chuàng)建一個數(shù)據(jù)庫快照,或從先前創(chuàng)建的數(shù)據(jù)庫的已分離文件中附加數(shù)據(jù)庫。CREATEDATABASE語句參數(shù)很多,本書只介紹創(chuàng)建數(shù)據(jù)庫功能。其語法格式如下:CREATEDATABASEdatabase_name[ON[<filespec>[,...n]][,<filegroup>[,...n]]][LOGON{<filespec>[,...n]}][COLLATEcollation_name][WITH<external_access_option>][FOR{ATTACH|ATTACH_REBUILD_LOG}]5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫說明:本書在介紹T-SQL語句格式時,為了標(biāo)識標(biāo)準(zhǔn)規(guī)范,使用一些語法格式約定符號,其中的中括號[]、豎線|、大括號{}在T-SQL語句中不要輸入。約定符號見表5-4。表5-4本書T-SQL語法格式約定符號的說明約定符號說
明大寫T-SQL關(guān)鍵字小寫非關(guān)鍵字|分隔括號或大括號中的語法項,只能選擇其中一項{}必選語法項[]可選語法項[,…n]指示前面的項可以重復(fù)n次,每一項用逗號分隔[…n]指示前面的項可以重復(fù)n次,每一項用空格分隔[;]可選的T-SQL語句終止符<label>::=語句塊名稱。此約定符號用于對可在語句中多個位置使用的過長語法段或語法單元進(jìn)行分組和標(biāo)記。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫T-SQL語句不區(qū)分大小寫。本書為強(qiáng)調(diào)起見,關(guān)鍵字都用大寫,以后各章都是這樣。CREATEDATABASE語句語法說明:1)database_name是所創(chuàng)建數(shù)據(jù)庫的邏輯名。2)ON子句指定數(shù)據(jù)庫主數(shù)據(jù)庫文件、輔助數(shù)據(jù)文件和文件組屬性,顯式地定義用來存儲數(shù)據(jù)庫數(shù)據(jù)部分的操作系統(tǒng)文件。3)該關(guān)鍵字后跟以逗號分隔的<filespec>項列表,<filespec>項用以定義主文件組的數(shù)據(jù)文件。<filespec>格式為:<filespec>::=[PRIMARY]([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]4)主文件組的文件列表后可跟以逗號分隔的<filegroup>項列表(可選),<filegroup>項用以定義用戶文件組及其文件。<filegroup>格式為:<filegroup>::=FILEGROUP文件組名<filespec>[,...n]n是占位符,表示可以為新數(shù)據(jù)庫指定多個文件。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫5)LOGON子句指定事務(wù)日志文件屬性,顯式地定義用來存儲數(shù)據(jù)庫事務(wù)日志的操作系統(tǒng)文件。6)COLLATEcollation_name子句用于指定數(shù)據(jù)庫的默認(rèn)排序規(guī)則。排序規(guī)則名稱既可以是Windows排序規(guī)則名稱,也可以是SQL排序規(guī)則名稱。7)WITH<external_access_option>子句用于控制外部與數(shù)據(jù)庫之間的雙向訪問。8)FORATTACH子句用于指定通過附加一組現(xiàn)有的操作系統(tǒng)文件來創(chuàng)建數(shù)據(jù)庫,使用FORATTACH時必須指定數(shù)據(jù)庫的主文件。9)FORATTACH_REBUILD_LOG子句用于指定通過附加一組現(xiàn)有的操作系統(tǒng)文件來創(chuàng)建數(shù)據(jù)庫,使用這一選項將不再需要所有日志文件。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫用戶在開始使用T-SQL語句創(chuàng)建數(shù)據(jù)庫之前,可以查看剛才使用界面方式創(chuàng)建的數(shù)據(jù)庫所對應(yīng)的T-SQL語句,以幫助學(xué)習(xí)使用CREATEDATABASE語句。以【例5-1】創(chuàng)建的NewDB數(shù)據(jù)庫為例,選擇“NewDB”數(shù)據(jù)庫,選擇右鍵菜單“編寫數(shù)據(jù)庫腳本為”選項的“CREATE到”子選項的“新查詢編輯器窗口”子選項,新生成一個查詢編輯器窗口。在該查詢編輯器窗口中可以查看使用界面方式創(chuàng)建數(shù)據(jù)庫時所自動生成的對應(yīng)的T-SQL語句。如圖所示。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫【例5-3】
使用CREATEDATABASE語句最簡單的方式,創(chuàng)建一個名為MyDB的數(shù)據(jù)庫。新建查詢編輯器窗口,輸入以下T-SQL語句:CREATEDATABASEMyDB /*創(chuàng)建數(shù)據(jù)庫*/說明:T-SQL語句中,用“/**/”符號包含的是注釋語句,用來注釋對應(yīng)的語句,不參與執(zhí)行。執(zhí)行結(jié)果數(shù)據(jù)庫創(chuàng)建成功,并且在查詢編輯器窗口下方“消息”窗口中提示。右鍵選擇“對象資源管理器”窗口中的“數(shù)據(jù)庫”選項,選擇菜單“刷新”選項,可以看到在“數(shù)據(jù)庫”中新建一個名為“MyDB”的數(shù)據(jù)庫。5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫【例5-4】
使用CREATEDATABASE語句,在C盤的DB文件夾下創(chuàng)建一個如【例5-2】一樣的MyTest數(shù)據(jù)庫。新建查詢編輯器窗口,輸入以下T-SQL語句:CREATEDATABASEMyTest /*數(shù)據(jù)庫名*/ONCREATEDATABASEMyTest /*數(shù)據(jù)庫名*/ONPRIMARY(NAME='MyTest_m', /*主數(shù)據(jù)文件邏輯名*/FILENAME='C:\DB\MyTest.mdf', /*主數(shù)據(jù)文件物理名*/SIZE=50MB, /*主數(shù)據(jù)文件初始大小*/MAXSIZE=UNLIMITED, /*主數(shù)據(jù)文件最大值*/FILEGROWTH=10MB /*主數(shù)據(jù)文件每次增長5MB*/),5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫FILEGROUPNGroup /*新增文件組*/(NAME='MyTest_n1', /*次要數(shù)據(jù)文件邏輯名*/FILENAME='C:\DB\MyTest1.ndf', /*次要數(shù)據(jù)文件物理名*/SIZE=20MB, /*次要數(shù)據(jù)文件初始大小*/MAXSIZE=UNLIMITED, /*次要數(shù)據(jù)文件最大值*/FILEGROWTH=20% /*次要數(shù)據(jù)文件每次增長10%*/),(NAME='MyTest_n2',FILENAME='C:\DB\MyTest2.ndf',SIZE=20MB,MAXSIZE=UNLIMITED,FILEGROWTH=20%)5.2.2命令行方式創(chuàng)建數(shù)據(jù)庫LOGON (NAME='MyTest_log', /*日志文件邏輯名*/FILENAME='C:\DB\MyTest.ldf', /*日志文件物理名*/SIZE=10MB, /*日志文件文件初始大小*/MAXSIZE=UNLIMITED, /*日志文件最大值*/FILEGROWTH=5MB /*日志文件每次增長5MB*/)GO5.3修改數(shù)據(jù)庫如果創(chuàng)建的數(shù)據(jù)庫需要修改,SQLServer2012也提供了管理工具界面和命令行兩種方式修改。5.3.1管理工具界面方式修改數(shù)據(jù)庫管理工具界面方式修改數(shù)據(jù)庫只能對已有數(shù)據(jù)庫進(jìn)行修改,修改包括以下幾項:增加或刪除數(shù)據(jù)文件改變數(shù)據(jù)文件的大小和增長方式改變?nèi)罩疚募拇笮『驮鲩L方式增加或刪除日志文件增加或刪除文件組重命名數(shù)據(jù)庫(只能修改數(shù)據(jù)庫邏輯名,文件名不能修改)5.3.1管理工具界面方式修改數(shù)據(jù)庫【例5-5】
使用SQLServerManagementStudio界面方式修改MyTest數(shù)據(jù)庫。選擇“MyTest”數(shù)據(jù)庫,選擇右鍵菜單“重命名”選項,對數(shù)據(jù)庫邏輯名重新命名。選擇“屬性”選項,進(jìn)入“數(shù)據(jù)庫屬性”對話框。在“文件”選項頁和“文件組”選項頁中,修改數(shù)據(jù)庫主要屬性,例如增加或刪除文件、修改文件的增長方式、增加或刪除文件組等。如圖所示。也可以在其他選項頁中修改數(shù)據(jù)庫其它屬性。5.3.2命令行方式修改數(shù)據(jù)庫命令行方式修改數(shù)據(jù)庫包括以下幾項:修改數(shù)據(jù)庫名稱增加或刪除數(shù)據(jù)文件改變數(shù)據(jù)文件的大小和增長方式改變?nèi)罩疚募拇笮『驮鲩L方式增加或刪除日志文件增加或刪除文件組5.3.2命令行方式修改數(shù)據(jù)庫T-SQL提供了ALTERDATABASE語句,該語句的功能是修改與數(shù)據(jù)庫關(guān)聯(lián)的文件和文件組。在數(shù)據(jù)庫中添加或刪除文件和文件組、更改數(shù)據(jù)庫或其文件和文件組的屬性。ALTERDATABASE語句功能強(qiáng)大,本書只介紹其最主要的功能。其語法格式如下:ALTERDATABASEdatabase_name{<add_or_modify_files>|<add_or_modify_filegroups>}[;]ALTERDATABASE語句語法說明:1)database_name是所修改數(shù)據(jù)庫的邏輯名。5.3.2命令行方式修改數(shù)據(jù)庫2)<add_or_modify_files>項列表用以修改各類文件。<add_or_modify_files>格式為:<add_or_modify_files>::={ADDFILE<filespec>[,...n][TOFILEGROUP{filegroup_name}]|ADDLOGFILE<filespec>[,...n]|REMOVEFILElogical_file_name|MODIFYFILE<filespec>}ADDFILE子句向數(shù)據(jù)庫添加數(shù)據(jù)文件。ADDLOGFILE子句向數(shù)據(jù)庫添加事務(wù)日志文件。REMOVEFILE子句從數(shù)據(jù)庫中刪除數(shù)據(jù)文件。MODIFYFILE子句修改數(shù)據(jù)庫的文件屬性。5.3.2命令行方式修改數(shù)據(jù)庫其中,<filespec>::=(NAME=logical_file_name[,NEWNAME=new_logical_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|%]][,OFFLINE])OFFLINE是將文件設(shè)置為脫機(jī)并使文件組中的所有對象都不可訪問。5.3.2命令行方式修改數(shù)據(jù)庫3)<add_or_modify_filegroups>項列表用以修改文件組。<add_or_modify_filegroups>格式為:<add_or_modify_filegroups>::={|ADDFILEGROUPfilegroup_name[CONTAINSFILESTREAM]|REMOVEFILEGROUPfilegroup_name|MODIFYFILEGROUPfilegroup_name{<filegroup_updatability_option>|DEFAULT|NAME=new_filegroup_name}}ADDFILEGROUP子句向數(shù)據(jù)庫添加文件組。CONTAINSFILESTREAM指定文件組在文件系統(tǒng)中存儲FILESTREAM二進(jìn)制大型對象(BLOB)。REMOVEFILEGROUP子句從數(shù)據(jù)庫中刪除文件組。如果需要刪除文件組,必需先將文件組中文件刪除,且不能刪除主文件組。5.3.2命令行方式修改數(shù)據(jù)庫MODIFYFILEGROUP通過將狀態(tài)設(shè)置為READ_ONLY或READ_WRITE、將文件組設(shè)置為數(shù)據(jù)庫的默認(rèn)文件組或者更改文件組名稱來修改文件組。其中,<filegroup_updatability_option>::={{READONLY|READWRITE}|{READ_ONLY|READ_WRITE}}對文件組設(shè)置只讀或讀/寫屬性。READ_ONLY|READONLY指定文件組為只讀,不允許更新其中的對象。READ_WRITE|READWRITE將該組指定為READ_WRITE,允許更新文件組中的對象。注意,以前修改數(shù)據(jù)庫邏輯名可以調(diào)用系統(tǒng)存儲過程sp_renamedb操作,但在后續(xù)版本的SQLServer將刪除該功能。請避免在新的開發(fā)工作中使用該功能,并應(yīng)該著手修改當(dāng)前還在使用該功能的應(yīng)用程序。請改用ALTERDATABASEMODIFYNAME直接給數(shù)據(jù)庫重命名。5.3.2命令行方式修改數(shù)據(jù)庫【例5-6】
使用ALTERDATABASE語句修改NewTest數(shù)據(jù)庫。其主數(shù)據(jù)文件初始大小改為100M,最大為500M,每次增長10%。新增1個次要數(shù)據(jù)文件,初始大小為10M,最大不受限制,每次增長10M。新建查詢編輯器窗口,輸入以下T-SQL語句:ALTERDATABASENewTest /*修改數(shù)據(jù)庫*/MODIFYFILE /*修改數(shù)據(jù)庫文件*/(NAME='NewTest', /*數(shù)據(jù)庫文件邏輯名*/SIZE=200MB, /*修改后的文件初始大小*/MAXSIZE=UNLIMITED, /*修改后的文件最大值*/FILEGROWTH=10% /*修改后的文件增長方式*/)GOALTERDATABASENewTest /*修改數(shù)據(jù)庫*/ADDFILE /*新增數(shù)據(jù)文件*/(NAME='N3', /*新增數(shù)據(jù)文件邏輯名*//*新增數(shù)據(jù)庫文件物理名*/FILENAME='C:\DB\N3.ndf',SIZE=10MB, /*新增數(shù)據(jù)文件初始大小*/MAXSIZE=UNLIMITED, /*文件增長不受限制*/FILEGROWTH=10MB /*新增數(shù)據(jù)文件增長方式*/)GO5.4刪除數(shù)據(jù)庫如果數(shù)據(jù)庫不需要了,可以刪除。SQLServer2012同樣提供了管理工具界面和命令行兩種方式刪除數(shù)據(jù)庫。不論哪種方式,一旦數(shù)據(jù)庫被刪除,就是被徹底刪除,包括在SQLServerManagementStudio中看到的邏輯數(shù)據(jù)庫和操作系統(tǒng)下的數(shù)據(jù)庫文件,文件不經(jīng)回收站直接刪除。如果沒有事先備份,數(shù)據(jù)庫中數(shù)據(jù)全部丟失,不能還原。所以刪除數(shù)據(jù)庫操作在使用時一定要小心。5.4刪除數(shù)據(jù)庫數(shù)據(jù)庫文件符號標(biāo)志變化為脫機(jī)符號,如圖5-22所示。如果想要將數(shù)據(jù)庫恢復(fù)為聯(lián)機(jī)狀態(tài),可以選擇“聯(lián)機(jī)”選項,如圖5-23所示。5.4刪除數(shù)據(jù)庫數(shù)據(jù)庫的狀態(tài)將影響對數(shù)據(jù)庫的刪除。執(zhí)行刪除操作時,如果數(shù)據(jù)庫或它的任意一個文件處于脫機(jī)狀態(tài),則不會刪除磁盤文件,必須在操作系統(tǒng)下手動刪除這些文件。不能刪除當(dāng)前正在使用的數(shù)據(jù)庫,包括本機(jī)和網(wǎng)絡(luò)用戶正在使用。這表示數(shù)據(jù)庫正處于打開狀態(tài),以供用戶讀寫。在刪除數(shù)據(jù)庫之前,必須將該數(shù)據(jù)庫上的所有數(shù)據(jù)庫快照都刪除。如果數(shù)據(jù)庫涉及日志傳送操作,請在刪除數(shù)據(jù)庫之前取消日志傳送操作。如果為事務(wù)復(fù)制發(fā)布了數(shù)據(jù)庫,或?qū)?shù)據(jù)庫發(fā)布或訂閱到合并復(fù)制,請從數(shù)據(jù)庫中刪除復(fù)制。無法刪除系統(tǒng)數(shù)據(jù)庫。5.4.1管理工具界面方式刪除數(shù)據(jù)庫【例5-7】
使用SQLServerManagementStudio刪除MyTest數(shù)據(jù)庫。右鍵選擇“MyTest”數(shù)據(jù)庫,選擇“刪除”選項,進(jìn)入“刪除對象”對話框。如果SQLServerManagementStudio啟動后沒有對“MyTest”數(shù)據(jù)庫進(jìn)行過其他操作,選擇“確定”按鈕即可刪除數(shù)據(jù)庫。如果在刪除操作之前,對該數(shù)據(jù)庫進(jìn)行過其他操作,一定要先選擇“關(guān)閉現(xiàn)有連接”選項,再選擇“確定”按鈕才能刪除數(shù)據(jù)庫。如圖所示。否則可能會提示刪除失敗,因?yàn)閿?shù)據(jù)庫正在被使用。5.4.2命令行方式刪除數(shù)據(jù)庫T-SQL提供了DROPDATABASE語句,該語句的功能是刪除一個或多個數(shù)據(jù)庫或數(shù)據(jù)庫快照。其語法格式如下:DROPDATABASE{database_name|database_snapshot_name}[,...n]DROPDATABASE語句語法說明:1)database_name是要刪除的數(shù)據(jù)庫的名稱。2)database_snapshot_name是要刪除的數(shù)據(jù)庫快照的名稱。3)可以一次刪除多個數(shù)據(jù)庫?!纠?-8】
使用DROPDATABASE語句刪除“NewDB”數(shù)據(jù)庫。新建查詢編輯器窗口,輸入以下T-SQL語句:DROPDATABASENewDBGO運(yùn)行前,和在界面方式刪除數(shù)據(jù)庫遇到的情況相同,必須保證被刪除數(shù)據(jù)庫不是當(dāng)前正在使用的數(shù)據(jù)庫。5.5數(shù)據(jù)庫的分離和附加數(shù)據(jù)庫操作除了上述基本操作外,還有分離數(shù)據(jù)庫和附加數(shù)據(jù)庫操作。SQLServer2012可以分離數(shù)據(jù)庫的數(shù)據(jù)和事務(wù)日志文件,然后將它們重新附加到同一或其他SQLServer實(shí)例。如果要將數(shù)據(jù)庫更改到同一計算機(jī)的不同SQLServer實(shí)例或要移動數(shù)據(jù)庫,分離和附加數(shù)據(jù)庫會很有用。5.5.1分離數(shù)據(jù)庫分離數(shù)據(jù)庫是指將數(shù)據(jù)庫從SQLServer數(shù)據(jù)庫管理系統(tǒng)中刪除,但不會從操作系統(tǒng)中刪除文件,而且數(shù)據(jù)庫在其數(shù)據(jù)文件和事務(wù)日志文件中保持不變。之后,就可以使用這些文件將數(shù)據(jù)庫附加到任何SQLServer數(shù)據(jù)庫管理系統(tǒng)中,包括分離該數(shù)據(jù)庫的服務(wù)器。但分離數(shù)據(jù)庫是有條件限制的。如果存在下列任何情況,則不能分離數(shù)據(jù)庫:1)已復(fù)制并發(fā)布數(shù)據(jù)庫。如果進(jìn)行復(fù)制,則數(shù)據(jù)庫必須是未發(fā)布的。必須通過調(diào)用sp_replicationdboption系統(tǒng)存儲過程禁用發(fā)布后,才能分離數(shù)據(jù)庫。2)數(shù)據(jù)庫中如果存在數(shù)據(jù)庫快照,必須首先刪除所有數(shù)據(jù)庫快照,然后才能分離數(shù)據(jù)庫。3)該數(shù)據(jù)庫正在某個數(shù)據(jù)庫鏡像會話中進(jìn)行鏡像。除非終止該會話,否則無法分離該數(shù)據(jù)庫。4)數(shù)據(jù)庫處于可疑狀態(tài),無法分離可疑數(shù)據(jù)庫。必須將數(shù)據(jù)庫設(shè)為緊急模式,才能對其進(jìn)行分離。5)該數(shù)據(jù)庫是系統(tǒng)數(shù)據(jù)庫。可以使用SQLServerManagementStudio的界面方式分離數(shù)據(jù)庫。也可以使用命令行方式,調(diào)用系統(tǒng)存儲過程分離數(shù)據(jù)庫。5.5.1分離數(shù)據(jù)庫【例5-9】
分離NewDB數(shù)據(jù)庫。在SQLServerManagementStudio中,右鍵選擇要分離的NewDB數(shù)據(jù)庫,選擇“任務(wù)”選項的“分離”子選項,進(jìn)入“分離數(shù)據(jù)庫”對話框。選擇“確定”按鈕即可分離數(shù)據(jù)庫。如圖所示。分離數(shù)據(jù)庫后,在SQLServerManagementStudio的“對象資源管理器”窗口中將看不到被分離的數(shù)據(jù)庫的邏輯名,但在操作系統(tǒng)下還可以查看到該數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件。5.5.1分離數(shù)據(jù)庫使用命令行方式,調(diào)用sp_detach_db系統(tǒng)存儲過程同樣可以分離數(shù)據(jù)庫。新建一個查詢窗口,輸入以下調(diào)用語句:EXECsp_detach_db'database_name'說明:1)EXEC是調(diào)用系統(tǒng)存儲過程命令。db_name是要分離的數(shù)據(jù)庫邏輯名。2)在分離時,需要擁有對數(shù)據(jù)庫的獨(dú)占訪問權(quán)限。如果要分離的數(shù)據(jù)庫正在使用時,則必須將其設(shè)置為SINGLE_USER模式,才能進(jìn)行分離操作??梢允褂孟旅嬲Z句對數(shù)據(jù)庫設(shè)置獨(dú)占訪問權(quán)限:USEmasterALTERDATABASEMyDBSETSINGLE_USERGO5.5.2附加數(shù)據(jù)庫分離后的數(shù)據(jù)庫可以通過附加數(shù)據(jù)庫操作,將其附加到某個SQLServer實(shí)例中。當(dāng)將包含全文目錄文件的數(shù)據(jù)庫附加到SQLServer2012服務(wù)器實(shí)例上時,會將目錄文件從其以前的位置與其他數(shù)據(jù)庫文件一起附加。附加數(shù)據(jù)庫時,所有數(shù)據(jù)文件(MDF文件和NDF文件)都必須可用。如果任何數(shù)據(jù)文件的路徑不同于首次創(chuàng)建數(shù)據(jù)庫或上次附加數(shù)據(jù)庫時的路徑,則必須指定文件的當(dāng)前路徑。如果附加的主數(shù)據(jù)文件是只讀的,則數(shù)據(jù)庫引擎假定數(shù)據(jù)庫也是只讀的。可以使用SQLServerManagementStudio的界面方式附加數(shù)據(jù)庫。也可以使用命令行方式,調(diào)用系統(tǒng)存儲過程附加數(shù)據(jù)庫。5.5.2附加數(shù)據(jù)庫【例5-10】附加MyDB數(shù)據(jù)庫。在SQLServerManagementStudio中,右鍵選擇“數(shù)據(jù)庫”選項,選擇“附加”選項,進(jìn)入“附加數(shù)據(jù)庫”對話框。添加要附加的數(shù)據(jù)庫主數(shù)據(jù)文件NewDatabase.mdf,選擇“確定”按鈕即可附加數(shù)據(jù)庫。如圖所示。成功附加數(shù)據(jù)庫后,用戶可以在SQLServerManagementStudio的“對象資源管理器”窗口中看到附加的數(shù)據(jù)庫。5.5.2附加數(shù)據(jù)庫還可以使用CREATEDATABASE創(chuàng)建數(shù)據(jù)庫命令附加數(shù)據(jù)庫。只要確定該數(shù)據(jù)庫文件存在的路徑,以及在最后加上FORATTACH子句?!纠?-11】
用T-SQL語句附加MyDB數(shù)據(jù)庫。在查詢窗口輸入以下命令:CREATEDATABASEMyDBON(FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL11.MSSQLSERVER\MSSQL\DATA\MyDB.mdf')FORATTACHGO執(zhí)行結(jié)果與【例5-10】相同。5.6數(shù)據(jù)庫的收縮由于SQLServer2012采用預(yù)先分配存儲空間的方式來創(chuàng)建數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件,這樣就會造成數(shù)據(jù)庫文件大小與實(shí)際使用有所差別。當(dāng)用戶創(chuàng)建的數(shù)據(jù)庫的數(shù)據(jù)增長到要超過它的配置空間時,必須增加數(shù)據(jù)庫的容量。反之,如果用戶配置的數(shù)據(jù)庫空間有大量的空余,則可以通過縮減數(shù)據(jù)庫來減少存儲空間的浪費(fèi)。SQLServer2012提供了數(shù)據(jù)庫的收縮功能,允許對數(shù)據(jù)庫中的每個文件進(jìn)行收縮,刪除已經(jīng)分配但沒有使用的頁。收縮操作前,用戶可以使用SQLServerManagementStudio查看數(shù)據(jù)庫文件空間使用情況。右鍵選擇“NewDatabase”數(shù)據(jù)庫,選擇“報表”選項的“標(biāo)準(zhǔn)報表”子選項,選擇“磁盤使用情況”選項。如圖所示。5.6.1手動收縮可以使用SQLServerManagementStudio的界面方式收縮數(shù)據(jù)庫。也可以使用命令行方式,調(diào)用系統(tǒng)存儲過程收縮數(shù)據(jù)庫。在SQLServerManagementStudio中,右鍵選擇要收縮的數(shù)據(jù)庫名,選擇“任務(wù)”選項的“收縮”子選項。如圖所示。如果對數(shù)據(jù)庫收縮,選擇“數(shù)據(jù)庫”選項,進(jìn)入“收縮數(shù)據(jù)庫”對話框。用戶可以通過設(shè)置“收縮后文件中的最大可用空間”設(shè)置收縮比例。如圖所示。5.6.1手動收縮如果對文件收縮,選擇“文件”選項。進(jìn)入“收縮文件”對話框。用戶可以通過設(shè)置文件組、文件名以及收縮操作來設(shè)置。5.6.1手動收縮還可以使用DBCCSHRINKDATABASE命令收縮數(shù)據(jù)庫。其語法格式如下:DBCCSHRINKDATABASE(database_name|database_id|0[,target_percent][,{NOTRUNCATE|TRUNCATEONLY}])[WITHNO_INFOMSGS]DBCCSHRINKDATABASE語句語法說明:1)database_name|database_id|0是要收縮的數(shù)據(jù)庫的名稱或ID。如果指定0,則使用當(dāng)前數(shù)據(jù)庫。2)target_percent是數(shù)據(jù)庫收縮后的數(shù)據(jù)庫文件中所需的剩余可用空間百分比。3)NOTRUNCATE通過將已分配的頁從文件末尾移動到文件前面的未分配頁來壓縮數(shù)據(jù)文件中的數(shù)據(jù)。target_percent是可選參數(shù)。文件末尾的可用空間不會返回給操作系統(tǒng),文件的物理大小也不會更改。因此,指定NOTRUNCATE時,數(shù)據(jù)庫看起來未收縮。NOTRUNCATE只適用于數(shù)據(jù)文件。日志文件不受影響。5.6.1手動收縮4)TRUNCATEONLY將文件末尾的所有可用空間釋放給操作系統(tǒng),但不在文件內(nèi)部執(zhí)行任何頁移動。數(shù)據(jù)文件只收縮到最近分配的區(qū)。如果與TRUNCATEONLY一起指定,將忽略target_percent。TRUNCATEONLY只適用于數(shù)據(jù)文件。日志文件不受影響。5)WITHNO_INFOMSGS取消嚴(yán)重級別從0到10的所有信息性消息。【例5-12】
對NewTest數(shù)據(jù)庫的空間縮減至可用剩余空間為60%。在查詢窗口輸入以下命令:DBCCSHRINKDATABASE('NewTest',60)5.6.2自動收縮為了防止用戶在不注意的情況下,由于數(shù)據(jù)變化而導(dǎo)致數(shù)據(jù)文件的不合理,可以設(shè)置SQLServer2012定期自動的收縮數(shù)據(jù)庫。在“數(shù)據(jù)庫屬性”對話框中,選擇“選項”,將“自動”子選項的“自動收縮”設(shè)置為“True”,就可以讓SQLServer2012定期自動的收縮數(shù)據(jù)庫。如圖5-34所示?;蛘呤褂肁LTERDATABASE將數(shù)據(jù)庫設(shè)置為自動收縮。其語法格式如下:ALTERDATABASEdatabase_nameSETAUTO_SHRINKON5.7移動數(shù)據(jù)庫如果存放數(shù)據(jù)庫文件的磁盤空間不足,可以使用下面的方法將數(shù)據(jù)庫中指定的文件移動到其他磁盤上。在SQLServerManagementStudio中無法移動數(shù)據(jù)庫文件,只能通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嗜酸性粒細(xì)胞炎癥病理機(jī)制與臨床管理
- 私立醫(yī)院護(hù)理服務(wù)特色
- 戲曲臉譜匯報課
- 物聯(lián)網(wǎng)安全技術(shù)體系
- 拼多多無貨源電商模式講解
- 2026屆廣西壯族自治區(qū)百色市田陽縣田陽高中化學(xué)高一第一學(xué)期期中達(dá)標(biāo)檢測模擬試題含解析
- 學(xué)校剪紙社團(tuán)匯報
- 外科手術(shù)醫(yī)院感染之我見
- 縣級人民醫(yī)院痔瘡診療體系
- 微地震監(jiān)測技術(shù)
- 境外考察服務(wù)合同協(xié)議
- 2025年初中語文八年級下冊試講稿(教師招聘面試)安塞腰鼓
- 2024年安全生產(chǎn)事故案例分析
- 2025-2030中國冷凍掃描電鏡(CryoSEM)行業(yè)供需狀況及發(fā)展痛點(diǎn)分析研究報告
- 網(wǎng)絡(luò)技術(shù)基礎(chǔ)知識單選題100道及答案
- 人力資源和社會保障局公務(wù)員考試真題及參考答案(滿分必刷)
- 江蘇無錫歷年中考作文題與審題指導(dǎo)(2002-2024)
- 2025年上半年北京廣播電視臺招聘140人筆試易考易錯模擬試題(共500題)試卷后附參考答案
- 《慢性阻塞性肺疾病與肺源性心臟病》課件
- 化工廠班組員工安全活動
- 酒店客房驗(yàn)收工程項目檢查表
評論
0/150
提交評論