SQL Server應用開發概述
SQL Server是新一代的數據庫平台,集成了更多、更優秀的功能特性。本章主要對SQL Server概要介紹,主要介紹如何創建數據庫、如何管理權限、如何執行備份與恢復。
1 SQL Server簡介
SQL Server是微軟推出的新一代數據庫管理系統,支持企業應用的開發與數據存儲。本節對SQL Server進行簡單介紹。主要內容包括:
l 概述
l SQL Server工具簡介
1.1 概述
當今組織機構面臨着多項前所未有的數據技術挑戰:在整個企業范圍內實現數據與系統的高度分布;為內部員工、目標客戶與合作伙伴提供針對相關數據的持續訪問調用能力;以切實有效的信息資料武裝信息工作者,促進科學決策;在不必犧牲應用程序可用性、安全性或可靠性的前提下控制成本費用水平。
新一版SQL Server的設計目標正是幫助企業單位應對上述挑戰。作為Microsoft公司的新一代數據管理與分析軟件,SQL Server有助於簡化企業數據與分析應用的創建、部署和管理,並在解決方案伸縮性、可用性和安全性方面實現重大改進。
基於SQL Server 2000技術優勢構建的SQL Server將提供集成化信息管理解決方案,可幫助任何規模的組織機構:
l 創建並部署更具伸縮性、可靠性和安全性的企業級應用。
l 降低數據庫應用創建、部署與管理的復雜程度,進而實現IT效率最大化。
l 憑借可供創建更具安全保障之數據庫應用的豐富、靈活、現代化開發環境增強開發人員工作效能。
l 跨越多種平台、應用和設備實現數據共享,進而簡化內部系統與外部系統連接。
l 實現功能強勁的集成化商務智能解決方案,從而在整個企業范圍內推進科學決策,提高工作效率。
l 在不必犧牲性能表現、可用性或伸縮性的前提下控制成本費用水平。
在當今這個網絡互連無處不在的世界上,必須隨時隨地為用戶提供數據資料和數據管理系統。SQL Server將幫助機構中的用戶和IT專業人員從明顯縮短的應用故障時間、得到增強的伸縮能力與性能表現和牢固可靠的安全控制中獲益。SQL Server還將包含有助於組織機構和IT人員提高自身工作效率的新增和改進功能特性。基於SQL Server 2000所提供的靈活技術手段構建的SQL Server可為從千兆級(TB)數據倉庫到運行Microsoft SQL Server Windows CE Edition(SQL Server CE)之移動設備的一系列解決方案實現方式提供支持。
SQL Server針對企業數據管理實現的重大改進主要體現在以下幾方面:
l 可用性,在高度可用性技術、補充備份與恢復功能以及復制增強特性等方面的投資將有助於企業單位創建並部署高度可靠的應用解決方案。數據庫鏡像、故障轉移群集和改進聯機操作等具有創新意義的高度可用特性可將故障時間控制在最低限度,並有助於確保關鍵企業系統隨時接受訪問調用。
l 伸縮性,表分區、快照隔離和64位支持等伸縮改進特性將允許運用SQL Server創建並部署要求最為嚴苛的應用程序。針對大型數據表和索引的分區功能極大改進了超大型數據庫的查詢操作。
l 安全性,“缺省安全保障”設置、數據庫加密和改進安全模型等增強特性有助於為企業數據提供高度安全保障。
l 易管理性,新式管理工具套件、自我調節能力和功能強大的新式編程模型將允許數據庫管理員針對數據庫的日常運轉加以靈活掌控。針對SQL事件探查器及其它工具的改進還可幫助數據庫管理員將服務器調節至最佳性能狀態。這些改進特性將允許數據庫管理員從數據庫日常運轉工作中解脫出來,並集中精力從事數據庫體系結構設計等更具價值的任務。
l 交互操作能力,SQL Server實現的技術進步允許在日益擴展的企業范圍內將相對獨立應用程序和數據庫整合並連接起來,從而,實現新增和既有系統投資效益的最大化目標。SQL Server可面向行業標准、Web服務和Microsoft .NET Framework提供高水平支持,並在此基礎上實現與多種平台、應用和設備之間的交互操作能力。SQL Server與其它Microsoft軟件產品(從Microsoft Windows Server操作系統到Microsoft Visual Studio開發軟件包和Microsoft Office應用程序)高度集成,並可幫助您所在機構運用協同技術手段節省時間和金錢。
對於大規模在線事務處理、數據倉庫應用和電子商務應用,SQL Server是一個優秀的數據庫和數據分析平台。它主要包括以下幾種關鍵技術:
l SQL Server數據庫引擎,數據庫引擎是存儲、處理和維護數據安全的核心服務。它為企業應用提供了訪問控制能力和快速事務處理能力,從而能夠滿足大多數企業應用的需求。而且,數據庫引擎為維護高可用性,還提供了其他支持能力。
l 分析服務,分析服務為業務智能應用提供了聯機分析處理和數據開采功能特性。開發人員能夠設計、創建和管理多種數據源多多維數據結構,並且能夠設計、創建和可視化數據開采模型。
l 數據轉換服務(DTS),SQL Server 數據轉換服務是企業數據轉換和數據集成的解決方案,能夠幫助開發人員和數據庫管理員提取、轉換和集成數據。
l 復制,復制是一組解決方案,使您得以在企業范圍內復制、分發和可能修改數據。SQL Server 包括幾種用於設計、執行、監視和管理復制的方案和選項,這些選項提供了分發數據和維護數據一致性所需的功能和靈活性。
l 報表服務,報表服務是新的、基於服務器的報表平台,能夠創建、管理表格型、矩陣型、圖表型、自由形式的報表,這些報表可以包含來自多個關系和多維數據源的數據。所創建的報表能夠在Web上進行查看和管理。
l 通知服務,通知服務是用於開發、部署生成和發送通知的應用的平台。應用開發人員和管理員可以使用通知服務生成、發送通知給多個訂閱者,將消息發送給多種設備。
l 服務代理,服務代理是創建可靠的、大規模的、安全的數據庫應用的解決方案。它駐留在數據庫引擎中,提供隊列的本地支持。服務代理提供了一個基於消息的通信平台,能夠用於連接不用的應用構件,形成一個應用整體。
l 全文搜索,SQL Server包含了對表中對字符數據執行全文查詢對功能特性。全文查詢可以包含關鍵字和語句。
l SQL Server提供的其他工具,SQL Server提供了設計、開發、部署和管理關系數據庫、分析服務立方體、數據轉換包、復制拓撲結構、報表服務和通知服務的工具。
對於開發效率,長期以來,阻礙開發人員工作效率提高的一大關鍵因素就是缺乏用於數據庫開發和調試的集成化工具手段。SQL Server 2000實現了與Microsoft Visual Studio之間的高度集成,從而有助於消除上述障礙。而SQL Server則提供從根本上改變數據庫開發與部署方式的更多改進特性。具備豐富擴展標記語言(XML)支持特性並與.NET技術和Microsoft開發工具實現高度集成的SQL Server,促使開發人員工作效率和靈活性得到顯著提高。
針對開發人員工作效率的改進主要體現在以下幾方面:
l 得到改進的工具手段。開發人員將可為Transact-SQL、XML、多維表達式(MDX)和分析性XML(XML/A)使用單一開發工具。與Visual Studio開發環境的高度集成有助於提高專業和商務智能應用的開發與調試效率。
l 得到擴展的語言支持。開發人員可憑借基於數據庫引擎的通用語言運行時(CLR)特性從包括Transact-SQL、Microsoft Visual Basic .NET和Microsoft Visual C# .NET在內的多種數據庫應用開發語言中選擇自己最熟悉的一種。CLR托管特性將對用戶定義類型和函數加以運用,並在此基礎上增強開發人員的工作靈活性。此外,CLR還將創造利用第三方代碼加速數據庫應用開發的寶貴機遇。
l XML與Web服務。諸如Xquery和本地XML數據類型等改進特性有助於組織機構實現內部系統與外部系統之間的無縫化連接。SQL Server將為關系型數據和XML數據提供本地支持,從而使企業單位能夠以最適合自身需要的格式進行數據存儲、管理和分析。針對超文本傳輸協議(HTTP)、XML、簡單對象訪問協議(SOAP)、Xquery和XML架構定義(XSD)等既有和新興開放標准的支持能力還將為跨越日益擴展企業系統的信息交流提供便利。
商務智能的前景與挑戰都圍繞着在正確的時間為企業員工提供適當的信息這一課題展開。這種構想的實現依賴於全面完整、安全可靠、隨時可用並與運營系統高度集成的商務智能解決方案。SQL Server產品家族將憑借SQL Server幫助企業單位實現上述目標。
商務智能方面的改進主要包括:
l 集成化平台,基於SQL Server 2000構建的SQL Server將為端到端商務智能平台賦予包括聯機分析處理(OLAP),數據挖掘,提取、轉換與加載(ETL)工具,數據倉庫和報告功能等在內的集成化分析處理特性。這種高度綜合與集成的技術手段有助於組織機構在控制成本費用水平的同時,完成強大商務智能應用的無縫化創建與部署。
l 得到改進的決策過程,針對現有商務智能特性的改進(如OLAP與數據挖掘)和新型報告服務器的引入可賦予企業單位在從信息工作者到首席執行官(CEO)的所有組織層次上將信息資源轉化為優選業務決策的能力。
l 安全性和可用性,伸縮性、可用性和安全性方面的改進將為用戶提供針對商務智能應用和報告的不間斷訪問調用支持。
l 企業級分析能力,得到改進的ETL工具將允許組織機構以更加簡便快捷的方式對出自多種不同信息來源的數據資料進行集成化和分析處理。組織機構可基於一系列運營系統開展數據分析活動,並在此基礎上通過對自身業務的全面理解贏得寶貴的競爭優勢。
從以上幾個方面,SQL Server為企業用戶和開發人員提供了全新的體驗,將大大提高企業應用的整體特性。
1.2 SQL Server 工具簡介
SQL Server簡單易用,它提供了大量的圖形工具,能夠完成對SQL Server的管理和開發任務,主要工具包括:
l SQL Server管理控制台
l 業務智能開發工具
l SQL Profiler
l SQL 計算機管理器
l 數據庫調試建議工具
l 命令行工具
(1) SQL Server管理控制台
SQL Server將服務器管理和應用開發集成到單個環境中進行,這就是SQL Server管理控制台(SQL Server Management Studio)和業務智能開發工具(Business Intelligence Development Studio)。工具使用解決方案和工程進行管理和操作。它提供了完整的源代碼控制功能,能夠同Microsoft Visual Studio .NET集成,但並非是其一部分。控制台主要用於支持業務應用開發,能夠支持對SQL Server、SQL Server Mobile、分析服務、數據轉換服務和報表服務應用的開發,但是,無法創建自定義應用和更大的開發工程。SQL Server管理控制台是一個集成的開發環境,能夠訪問、配置、管理和維護SQL Server的所有工具。SQL Server管理控制台可以集成更多的圖形工具,提供對SQL Server控制的更多編輯環境。
(2) 業務智能開發工具
業務智能開發工具(Business Intelligence Development Studio),用於開發業務智能結構,如立方體、數據源、報表和數據轉換包。業務智能開發工具包括工程模板,為開發專用結構提供上下文。例如,如果希望創建包含立方體、維和開采模型的分析服務數據庫,可以選擇分析服務工程。
(3) SQL Profiler
SQL Profiler是用於捕獲來自服務器的SQL Server事件的工具。事件保存到跟蹤文件中,支持后續分析和問題重新演示。SQL Profiler能夠支持多種活動,例如:
l 深入問題查詢,發現問題原因;
l 診斷運行時間很長、速度很慢的查詢;
l 捕獲導致問題的SQL語句;
l 監視SQL Server 的性能,調試工作負載。
SQL Profiler還支持對SQL Server實例執行的活動進行審計。
(4) SQL 計算機管理器
SQL 計算機管理器(SQL Computer Manager)用於管理同SQL Server相關的服務,並能夠配置SQL Server使用的網絡協議。SQL 計算機管理器能夠添加到Microsoft管理控制台插件中。SQL計算機管理器集成了以下SQL Server 2000的工具:服務器網絡工具、客戶網絡工具和服務管理器。SQL計算機管理器和SQL Server管理控制台都使用Window管理工具(WMI)查看和修改服務器配置。WMI提供了訪問調用和管理服務器和客戶網絡工具功能的注冊表操作的統一方式。對計算機管理其插件的SQL服務提供操縱能力。使用SQL 計算機管理器,可以啟動、停止、暫停、恢復和配置其它計算機上的服務。SQL 計算機管理器能夠顯示如下服務:
l SQL Server
l SQL Server Agent
l Microsoft SQL Server分析服務
l 報表服務器
l Microsoft Search
l 分布式事務協調器(DTC)
l 全文搜索
同時,可以查看所選服務的屬性,包括:
l 名稱
l 描述
l 狀態(啟動、停止或者暫停)
l 啟動類型(手動、自動或者禁止)
l 登錄情況
l 最后啟動的時間
l 最后停止的時間
l PID——進程標識符
使用SQL計算機管理器可以修改SQL Server和SQL Server Agent服務所使用的賬號,也可以修改賬號的口令。除了修改賬號的名稱之外,SQL 計算機管理器還可以在Windows注冊表中配置權限。使用SQL計算機管理器,還可以配置服務器和客戶網絡協議,以及連接選項。在大多數情況下,不需要修改服務器網絡連接。但是,如果希望重新配置服務器連接,使得SQL Server能夠在特定網絡協議上進行偵聽,可以使用SQL計算機管理器。
(5) 數據庫調試建議工具
數據庫調試建議工具(Database Tuning Advisor Tool),可以幫助用戶選擇和創建索引、索引視圖和分區,並不要求用戶具有數據庫結構、工作負載和SQL Server內核的專業知識。
(6) 命令行工具
SQL Server提供了命令行工具,使用這些命令,如表1所示,可以同SQL Server進行交互。
表1 命令行工具
工具 |
說明 |
安裝位置 |
bcp 工具 |
用於在SQL Server實例之間復制數據 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
dtexec工具 |
用於配置和執行DTS服務包 |
x:\Program Files\Microsoft SQL Server\90\DTS\binn |
dtutil工具 |
用於管理數據轉換服務包 |
x:\Program Files\Microsoft SQL Server\90\DTS\Binn |
dta工具 |
用於分析工作負載 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
nscontrol工具 |
用於管理通知服務 |
x:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\bin |
sqlcmd工具 |
允許在命令行輸入Transact-SQL語句、系統過程、腳本文件 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
osql工具 |
允許在命令行輸入Transact-SQL語句、系統過程、腳本文件 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
復制分發代理 |
用於在命令行配置和啟動分布式代理 |
x:\Program Files\Microsoft SQL Server\90\COM |
復制日志閱讀器代理 |
用於配置和啟動日志閱讀器代理 |
x:\Program Files\Microsoft SQL Server\90\COM |
復制合並代理 |
用於配置和其他合並代理 |
x:\Program Files\Microsoft SQL Server\90\COM |
復制隊列閱讀器代理 |
用於配置和啟動復制隊列閱讀器代理 |
x:\Program Files\Microsoft SQL Server\90\COM |
復制快照代理 |
用於啟動和配置復制快照代理 |
x:\Program Files\Microsoft SQL Server\90\COM |
rs工具 |
用於運行用於管理報表服務的報表服務器的腳本 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
rsactivate工具 |
用於初始化一個報表服務器 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
rsconfig工具 |
用於配置報表服務器連接 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
rskeymgmt工具 |
用於在報表服務器上管理加密鍵 |
x:\Program Files\Microsoft SQL Server\90\Tools\Binn |
2 創建數據庫
SQL Server提供了多種方式創建、修改和刪除數據庫。本節主要介紹如何創建、修改和刪除數據庫。主要內容包括:
l 創建數據庫
l 修改數據庫
l 刪除數據庫
2.1 創建數據庫
在SQL Server中創建數據庫主要有兩種方法,第一種是在SQL Server Management Studio中使用向導創建數據庫;第二種是執行Transact-SQL語句創建數據庫。下面我們分別進行介紹。
(1)使用SQL Server Management Studio創建數據庫
在SQL Server Management Studio中,可以使用向導創建數據庫,步驟如下:
1. 打開SQL Server Management Studio,如圖1所示。
圖 1 SQL Server Management Studio
2. 右擊“數據庫”對象,在彈出式菜單中選擇“新建數據庫”菜單項,打開“新建數據庫”對話框,如圖2所示。
圖 2 “新建數據庫”向導
3. 在“常規”頁,可以定義數據庫的名稱為EAMS、數據庫文件、數據庫的所有者、排序規則、恢復模型,以及是否使用全文索引。
4. 在“選項”頁,可以定義數據庫的一些選項,包括自動選項、游標選項、混雜選項、恢復選項、行級版本選項和狀態選項,如圖3所示。
圖 3 “選項”頁
5. 在“文件組”頁,顯示文件組和文件的統計信息,同時還可以設置是否采用默認值,如圖4所示。
圖 4 “文件組”頁
6. 在“擴展屬性”頁,可以定義數據庫的一些擴展屬性,如圖5所示。
7. 當完成各個選項的定義之后,單擊【OK】按鈕,SQL Server數據庫引擎會創建所定義的數據庫。
(2)使用Transact-SQL創建數據庫
Transact-SQL提供了創建數據庫的語句:CREATE DATABASE,其語法格式如下:
CREATE DATABASE database_name [ ON [ <filespec> [ ,...n ] ] [ , <filegroup> [ ,...n ] ] ] [ [ LOG ON { <filespec> [ ,...n ] } ] [ COLLATE collation_name ] [ FOR { ATTACH [ WITH <service_broker_option> ] | ATTACH_REBUILD_LOG } ] [ WITH <external_access_option> ] ] [;] <filespec> ::= [ PRIMARY ] ( [ 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 | % ] ] ) [ ,...n ] <filegroup> ::= FILEGROUP filegroup_name <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 [;]
參數說明如下:
l database_name,新數據庫的名稱。數據庫名稱在服務器中必須唯一,並且符合標識符的規則。database_name 最多可以包含 128 個字符,除非沒有為日志指定邏輯名。如果沒有指定日志文件的邏輯名,則SQL Server會通過向 database_name 追加后綴來生成邏輯名。該操作要求 database_name 在 123 個字符之內,以便生成的日志文件邏輯名少於 128 個字符。
l ON,指定顯式定義用來存儲數據庫數據部分的磁盤文件(數據文件)。該關鍵字后跟以逗號分隔的 <filespec> 項列表,<filespec> 項用以定義主文件組的數據文件。主文件組的文件列表后可跟以逗號分隔的 <filegroup> 項列表(可選),<filegroup> 項用以定義用戶文件組及其文件。
l N,占位符,表示可以為新數據庫指定多個文件。
l LOG ON,指定顯式定義用來存儲數據庫日志的磁盤文件(日志文件)。該關鍵字后跟以逗號分隔的 <filespec> 項列表,<filespec> 項用以定義日志文件。如果沒有指定 LOG ON,將自動創建一個日志文件,該文件使用系統生成的名稱,大小為數據庫中所有數據文件總大小的 25%。
l FOR LOAD,支持該子句是為了與早期版本的 SQL Server 兼容。數據庫在打開 dbo use only 數據庫選項的情況下創建,並且將其狀態設置為正在裝載。
l FOR ATTACH,指定從現有的一組操作系統文件中附加數據庫。必須有指定第一個主文件的 <filespec> 條目。至於其它 <filespec> 條目,只需要與第一次創建數據庫或上一次附加數據庫時路徑不同的文件的那些條目。必須為這些文件指定 <filespec> 條目。附加的數據庫必須使用與 SQL Server 相同的代碼頁和排序次序創建。應使用 sp_attach_db 系統存儲過程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必須指定 16 個以上的 <filespec> 項目時,才需要使用 CREATE DATABASE FOR ATTACH。 如果將數據庫附加到的服務器不是該數據庫從中分離的服務器,並且啟用了分離的數據庫以進行復制,則應該運行 sp_removedbreplication 從數據庫刪除復制。
l collation_name,指定數據庫的默認排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。如果沒有指定排序規則,則將 SQL Server 實例的默認排序規則指派為數據庫的排序規則。
l PRIMARY,指定關聯的 <filespec> 列表定義主文件。主文件組包含所有數據庫系統表。還包含所有未指派給用戶文件組的對象。主文件組的第一個 <filespec> 條目成為主文件,該文件包含數據庫的邏輯起點及其系統表。一個數據庫只能有一個主文件。如果沒有指定 PRIMARY,那么 CREATE DATABASE 語句中列出的第一個文件將成為主文件。
l NAME,為由 <filespec> 定義的文件指定邏輯名稱。如果指定了 FOR ATTACH,則不需要指定 NAME 參數。
l logical_file_name,用來在創建數據庫后執行的 Transact-SQL 語句中引用文件的名稱。logical_file_name 在數據庫中必須唯一,並且符合標識符的規則。該名稱可以是字符或 Unicode 常量,也可以是常規標識符或定界標識符。
l FILENAME,為 <filespec> 定義的文件指定操作系統文件名。
l os_file_name,操作系統創建 <filespec> 定義的物理文件時使用的路徑名和文件名。os_file_name 中的路徑必須指定 SQL Server 實例上的目錄。os_file_name 不能指定壓縮文件系統中的目錄。如果文件在原始分區上創建,則 os_file_name 必須只指定現有原始分區的驅動器字母。每個原始分區上只能創建一個文件。原始分區上的文件不會自動增長;因此,os_file_name 指定原始分區時,不需要指定 MAXSIZE 和 FILEGROWTH 參數。
l SIZE,指定 <filespec> 中定義的文件的大小。如果主文件的 <filespec> 中沒有提供 SIZE 參數,那么 SQL Server 將使用 model 數據庫中的主文件大小。如果次要文件或日志文件的 <filespec> 中沒有指定 SIZE 參數,則 SQL Server 將使文件大小為 1 MB。
l Size,<filespec> 中定義的文件的初始大小。可以使用千字節 (KB)、兆字節 (MB)、千兆字節 (GB) 或兆兆字節 (TB) 后綴。默認值為 MB。指定一個整數,不要包含小數位。size 的最小值為 512 KB。如果沒有指定 size,則默認值為 1 MB。為主文件指定的大小至少應與 model 數據庫的主文件大小相同。
l MAXSIZE,指定 <filespec> 中定義的文件可以增長到的最大大小。
l max_size,<filespec> 中定義的文件可以增長到的最大大小。可以使用千字節 (KB)、兆字節 (MB)、千兆字節 (GB) 或兆兆字節 (TB) 后綴。默認值為 MB。指定一個整數,不要包含小數位。如果沒有指定 max_size,那么文件將增長到磁盤變滿為止。
l UNLIMITED,指定 <filespec> 中定義的文件將增長到磁盤變滿為止。
l FILEGROWTH,指定 <filespec> 中定義的文件的增長增量。文件的 FILEGROWTH 設置不能超過 MAXSIZE 設置。
l growth_increment,每次需要新的空間時為文件添加的空間大小。指定一個整數,不要包含小數位。0 值表示不增長。該值可以 MB、KB、GB、TB 或百分比 (%) 為單位指定。如果未在數量后面指定 MB、KB 或 %,則默認值為 MB。如果指定 %,則增量大小為發生增長時文件大小的指定百分比。如果沒有指定 FILEGROWTH,則默認值為 10%,最小值為 64 KB。指定的大小舍入為最接近的 64 KB 的倍數。
l <filegroup>,控制文件組的屬性。文件組不能在數據庫快照上定義。
l FILEGROUP,定義文件組的邏輯名。
l filegroup_name,表示在創建數據庫之后,在Transact-SQL語句中引用文件組的名稱。filegroup_name在數據庫中必須唯一,不能是系統提供的名稱,如PRIMARY和PRIMARY_LOG。名稱必須同標識符的規則保持一致。
l default,定義文件組為特定文件組類型的默認數據庫文件組。
l DB_CHAINING { ON | OFF },當設置為ON的時候,數據庫可以為交叉數據庫所有者關系鏈中的源或者目標。當設置為OFF的時候,數據庫不能參與交叉數據庫所有者關系鏈,對於用戶數據庫,可以修改這個選項,但是不能修改系統數據庫的該選項。默認值為OFF。
l TRUSTWORTHY { ON | OFF },當設置為ON的時候,數據庫模塊(如視圖、用戶自定義函數或者存儲過程)允許訪問數據庫外的資源。當設置為OFF的時候,數據庫模塊不能訪問數據庫之外的資源。默認值為OFF。
l <service_broker_options> ,當授予FOR ATTACH子句的時候,才能設置Service Broker選項。
l ENABLE_BROKER,定義數據庫是否啟用Service Broker。
l NEW_BROKER,在sys數據庫中和恢復數據庫中創建新的service_broker_guid。
l ERROR_BROKER_CONVERSATIONS,終止所有發生錯誤的會話。
l database_snapshot_name,定義新數據庫的快照名。
l ON (NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ] ,對於創建一個數據庫快照,在源數據庫中定義文件列表。
l AS SNAPSHOT OF source_database_name,定義創建的數據庫為一個源數據庫的數據庫快照。
創建企業信息平台數據庫的Transact-SQL語句如下所示。
CREATE DATABASE [EAMS] ON (NAME = N'Hotop100_Data', FILENAME = N'D:\Program Files\Microsoft SQL Server 2000\MSSQL\Data\EAMS_Data.MDF' , SIZE = 9, FILEGROWTH = 10%) LOG ON (NAME = N'Hotop100_Log', FILENAME = N'D:\Program Files\Microsoft SQL Server 2000\MSSQL\Data\EAMS_Log.LDF' , SIZE = 68, FILEGROWTH = 10%) COLLATE Chinese_PRC_CI_AS GO
2.2 修改數據庫
當創建數據庫之后,可能需要對原始定義進行修改,例如:
l 擴充分配給數據庫的數據或事務日志空間。
l 收縮分配給數據庫的數據或事務日志空間。
l 添加或刪除數據和事務日志文件。
l 創建文件組。
l 創建默認文件組。
l 更改數據庫的配置設置。
l 脫機放置數據庫。
l 附加新數據庫或分離未使用的數據庫。
l 更改數據庫名稱。
l 更改數據庫的所有者。
在更改數據庫之前,有時需要使數據庫退出正常操作模式。在這些情況下,需確定終止事務的適當方法。
(1)擴充數據庫
SQL Server可根據在創建數據庫時所定義的增長參數,自動擴充數據庫。通過在現有的數據庫文件上分配其它的文件空間,或者在另一個新文件上分配空間,還可以手動擴充數據庫。如果現有的文件已經充滿,則可能需要擴充數據或事務日志空間。如果數據庫已經用完分配給它的空間而又不能自動增長,則會出現 1105 錯誤。
擴充數據庫時,必須按至少 1 MB 增加該數據庫的大小。擴充數據庫的權限默認授予數據庫所有者,並自動與數據庫所有者身份一起傳輸。數據庫擴充后,數據或事務日志文件立即可以使用新空間,這取決於哪個文件進行了擴充。
如果事務日志沒有設置為自動擴充,則當數據庫內發生某些類型的活動時,該事務日志可能會用完所有空間。備份事務日志時,或者在數據庫使用簡單恢復模型的每個檢查點時,只清除事務日志中非活動(已提交)的部分。然后 SQL Server 可以重新使用該事務日志中被截取的、尚未使用的部分。在備份數據庫時,SQL Server 不會截斷事務日志。
在擴充數據庫時,建議指定文件的最大允許增長的大小。這樣做可以防止文件無限制地增大,以至用盡整個磁盤空間。若要指定文件的最大大小,請在使用SQL Server 企業管理器內的"屬性"對話框創建數據庫時,使用 CREATE DATABASE 語句的 MAXSIZE 參數或者"將文件增長限制為 (MB)"選項。
(2)收縮數據庫
SQL Server允許收縮數據庫中的每個文件以刪除未使用的頁。數據和事務日志文件都可以收縮。數據庫文件可以作為組或單獨地進行手工收縮。數據庫也可設置為按給定的時間間隔自動收縮。該活動在后台進行,並且不影響數據庫內的用戶活動。
當使用 ALTER DATABASE AUTO_SHRINK 選項(或 sp_dboption 系統存儲過程)將數據庫設置為自動收縮,且數據庫中有足夠的可用空間時,則會發生收縮。但是,如果不能配置要刪除的可用空間的百分比,則將刪除盡可能多的可用空間。若要配置將刪除的可用空間量,例如只刪除數據庫中當前可用空間的 50%,請使用SQL Server 企業管理器內的"屬性"對話框進行數據庫收縮。
不能將整個數據庫收縮到比其原始大小還要小。因此,如果數據庫創建時的大小為 10 MB,后來增長到 100 MB,則該數據庫最小能夠收縮到 10 MB(假定已經刪除該數據庫中所有數據)。但是,使用 DBCC SHRINKFILE 語句,可以將單個數據庫文件收縮到比其初始創建大小還要小。必須分別收縮每個文件,而不要試圖收縮整個數據庫。
事務日志文件可在固定的邊界內收縮。虛擬日志的大小決定可能減小的大小。因此,不能將日志文件收縮到比虛擬日志文件還小。另外,日志文件可以按與虛擬日志文件的大小相等的增量收縮。例如,一個初始大小為 1 GB 的較大事務日志文件可以包括五個虛擬日志文件(每個文件大小為 200 MB)。收縮事務日志文件將刪除未使用的虛擬日志文件,但會留下至少一個虛擬日志文件。因為此示例中的每個虛擬日志文件都是 200 MB,所以事務日志最小只能收縮到 200 MB,且每次只能以 200 MB的大小收縮。若要讓事務日志文件收縮得更小,可以創建一個更小的事務日志,並允許它自動增長,而不要創建一個較大的事務日志文件。
在 SQL Server中,DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 操作試圖立即將事務日志文件收縮到所要求的大小(以四舍五入的值為准)。在收縮文件之前應截斷日志文件,以減小邏輯日志的大小並將其標記為不包含邏輯日志任何部分的不活動的虛擬日志。
(3)添加和刪除數據和事務日志文件
可以添加數據和事務日志文件以擴充數據庫,或刪除它們以收縮數據庫。當添加文件時,數據庫可以立即使用該文件。SQL Server 在每個文件組內的所有文件上使用按比例填充的策略,根據文件中的可用空間按比例寫入數據量,並允許立即開始使用新文件。通過這種方式,所有文件幾乎在同一時間趨於充滿。但是,事務日志文件不能作為文件組的一部分;它們是相互獨立的。當事務日志增長時,使用填充后往下走的策略,而不是按比例填充策略,首先填充第一個日志文件,然后是第二個,依此類推。因此,當添加日志文件時,事務日志可能不能使用該文件,而需等到其它文件已經先填充。將文件添加到數據庫時,可以根據需要指定文件的大小(默認為 1 MB)、文件可以增長的最大大小(如果文件內的空間用完)、文件每次需要增長時所增長的數量(默認是 10%),以及文件所屬的文件組。
刪除數據或事務日志文件將從數據庫刪除該文件。僅當文件上不存在已有的數據或事務日志信息時才可能從數據庫刪除文件;文件必須完全為空后才能刪除。若要將數據從一個數據文件遷移到同一文件組中的其它文件中,請使用 DBCC SHRINKFILE 語句,並指定 EMPTYFILE 子句。SQL Server 即不再允許將數據置於文件上,從而通過使用 ALTER DATABASE 語句或 SQL Server 企業管理器內的屬性頁,使之能夠刪除。
通過將事務日志數據從一個日志文件遷移到另一個以刪除事務日志文件是不可能的。若要從事務日志文件清除非活動的事務,必須截斷或備份該事務日志。一旦事務日志文件不再包含任何活動或不活動的事務,該日志文件就可以從數據庫中刪除。
(4)創建文件組
在首次創建數據庫,或者以后將更多文件添加到數據庫時,可以創建文件組。但是,一旦將文件添加到數據庫,就不可能再將這些文件移到其它文件組。一個文件不能是多個文件組的成員。表格、索引以及 text、ntext 和 image 數據可以與特定的文件組相關聯。這意味着它們的所有頁都將從該文件組的文件中分配。有三種類型的文件組:
l 主文件組,這些文件組包含主數據文件以及任何其它沒有放入其它文件組的文件。系統表的所有頁都從主文件組分配。
l 用戶定義文件組,該文件組是用 CREATE DATABASE 或 ALTER DATABASE 語句中的 FILEGROUP 關鍵字,或在 SQL Server 企業管理器內的"屬性"對話框上指定的任何文件組。
l 默認文件組,默認文件組包含在創建時沒有指定文件組的所有表和索引的頁。在每個數據庫中,每次只能有一個文件組是默認文件組。如果沒有指定默認文件組,則默認文件組是主文件組。
(5)更改默認文件組
更改默認文件組時,最初沒有指定文件組的所有對象都被分配到新默認文件組中的數據文件。更改默認文件組可以防止不是專門在用戶定義的文件組上創建的用戶對象與系統對象和表競爭以獲得數據空間。
(6)設置數據庫選項
可以為每個數據庫都設置若干個決定數據庫特點的數據庫級選項。只有系統管理員、數據庫所有者以及 sysadmin 和 dbcreator 固定服務器角色和 db_owner 固定數據庫角色的成員才能修改這些選項。這些選項對於每個數據庫都是唯一的,而且不影響其它數據庫。可以使用 ALTER DATABASE 語句的 SET 子句、sp_dboption 系統存儲過程,或者在某些情況下使用 SQL Server 企業管理器設置數據庫選項。設置了數據庫選項之后,將自動發出一個檢查點,它會使修改立即生效。
若要更改新創建數據庫的任意數據庫選項的默認值,請更改 model 數據庫中的適當數據庫選項。例如對於隨后創建的任何新數據庫,如果希望 AUTO_SHRINK 數據庫選項的默認設置都為 ON,則將 model 的 AUTO_SHRINK 選項設置為 ON。
修改數據庫同創建數據庫類似,可以使用Transact-SQL命令ALTER DATABASE修改數據庫,其語法格式如下:
ALTER DATABASE database_name { ADD FILE <filespec> [ ,...n ] [ TO FILEGROUP { filegroup_name | DEFAULT } ] | ADD LOG FILE <filespec> [ ,...n ] | REMOVE FILE logical_file_name | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE <filespec> | MODIFY NAME = new_dbname | MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME = new_filegroup_name } | SET { { <optionspec> [ ,...n ] [ WITH <termination> ] } | ALLOW_SNAPSHOT_ISOLATION {ON | OFF } | READ_COMMITTED_SNAPSHOT {ON | OFF } [ WITH <termination> ] } | COLLATE collation_name } [ ; ] <filespec> ::= ( NAME = logical_file_name [ , OFFLINE ] [ , NEWNAME = new_logical_name ] [ , FILENAME = os_file_name' ] [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ]| UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | % ] ] ) <filegroup_updatability_option> ::= { { READONLY | READWRITE } | { READ_ONLY | READ_WRITE } } <optionspec> ::= { <database_availability_option> | <cursor_option> | <auto_option> | <sql_option> | <recovery_option> | <database_mirroring_option> | <supplemental_logging_option> | <service_broker_option> | <date_correlation_optimization_option> } <database_availability_option> ::= { <db_state_option> | <db_user_access_option> | <db_update_option> | <external_access_option> } <db_state_option> ::= { ONLINE | OFFLINE | EMERGENCY } <db_user_access_option> ::= { SINGLE_USER | RESTRICTED_USER | MULTI_USER } <db_update_option> ::= { READ_ONLY | READ_WRITE } <external_access_option> ::= DB_CHAINING { ON | OFF } | TRUSTWORTHY { ON | OFF } } <cursor_option> ::= { CURSOR_CLOSE_ON_COMMIT { ON | OFF } | CURSOR_DEFAULT { LOCAL | GLOBAL } } <auto_option> ::= { AUTO_CLOSE { ON | OFF } | AUTO_CREATE_STATISTICS { ON | OFF } | AUTO_SHRINK { ON | OFF } | AUTO_UPDATE_STATISTICS { ON | OFF } | AUTO_UPDATE_STATISTCS_ASYNC { ON | OFF } } <sql_option> ::= { ANSI_NULL_DEFAULT { ON | OFF } | ANSI_NULLS { ON | OFF } | ANSI_PADDING { ON | OFF } | ANSI_WARNINGS { ON | OFF } | ARITHABORT { ON | OFF } | CONCAT_NULL_YIELDS_NULL { ON | OFF } | NUMERIC_ROUNDABORT { ON | OFF } | QUOTED_IDENTIFIER { ON | OFF } | RECURSIVE_TRIGGERS { ON | OFF } } <recovery_option> ::= { RECOVERY { FULL | BULK_LOGGED | SIMPLE } | TORN_PAGE_DETECTION { ON | OFF } | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE } } <database_mirroring_option> ::= { <partner_option> | <witness_option> } <partner_option> ::= PARTNER { = 'partner_server' | FAILOVER | FORCE_SERVICE_ALLOW_DATA_LOSS | OFF | SUSPEND | RESUME | SAFETY { FULL | OFF } } <witness_option> ::= WITNESS { = 'witness_server' | OFF } <supplemental_logging_option> ::= SUPPLEMENTAL_LOGGING { ON | OFF } <service_broker_option> ::= { ENABLE_BROKER | DISABLE_BROKER | NEW_BROKER | ERROR_BROKER_CONVERSATIONS } <date_correlation_optimization_option> ::= { DATE_CORRELATION_OPTIMIZATION { ON | OFF } } <termination> ::= { ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT }
參數說明參考2.3節創建數據庫Transaction-SQL CREATE DATABASE語句的相關參數說明。
在SQL Server Management Studio中執行下面的腳本,將修改企業信息平台數據庫。
USE [master] GO EXEC [ZXXS].[dbo].[sp_fulltext_database] @action = 'enable' GO ALTER DATABASE [EAMS] MODIFY FILE ( NAME = N'ZXXS', SIZE = 102400KB ) GO ALTER DATABASE [EAMS] ADD FILEGROUP [SECONDERY] GO ALTER DATABASE [EAMS] ADD FILE ( NAME = N' EAMS ', FILENAME = N'd:\Program Files\Microsoft SQL Server 2000\MSSQL\data\ EAMS.ndf' , SIZE = 102400KB , FILEGROWTH = 10%) TO FILEGROUP [SECONDERY] GO ALTER DATABASE [EAMS] MODIFY FILE ( NAME = N' EAMS_log', SIZE = 102400KB ) GO
2.3 刪除數據庫
當不再需要數據庫,或如果它被移到另一數據庫或服務器時,即可刪除該數據庫。數據庫刪除之后,文件及其數據都從服務器上的磁盤中刪除。一旦刪除數據庫,它即被永久刪除,並且不能進行檢索,除非使用以前的備份。
刪除數據庫可以在SQL Server Management Studio中或者使用TRANSACT-SQL語句完成。
(1)在SQL Server Management Studio刪除數據庫
在SQL Server Management Studio刪除數據庫的操作很簡單,執行下面的操作:
1. 打開SQL Server Management Studio,如圖6所示。
圖 6 SQL Server Management Studio
2. 在“對象資源管理器”中展開“數據庫”文件夾,單擊鼠標右鍵,打開彈出式菜單,選擇“刪除”菜單項即可,如圖7所示。
圖 7 選擇“刪除”菜單項
3. 打開“刪除對象”對話框,如圖8所示。當確定刪除的時候,單擊“確定”按鈕。
圖 8 “刪除對象”對話框
(2)使用TRANSACT-SQL語句刪除數據庫
使用TRANSCT-SQL命令可以刪除一個或者多個數據庫及其數據庫快照,其語法格式如下:
DROP DATABASE { database_name | database_snapshot_name } [ ,...n ] [;]
參數說明如下:
l database_name,表示需要刪除的數據庫的名稱。
l database_snapshot_name,表示需要刪除的數據庫快照的名稱。
讀者可以使用Transact-SQL語句執行數據庫的刪除操作,腳本如下:
exec msdb.dbo.sp_delete_database_backuphistory N'EAMS' GO USE [master] GO USE [master] GO DROP DATABASE [EAMS] GO
3 企業信息平台數據庫權限管理
SQL Server包含大量的安全特性,可以幫助管理員實現更高程度的安全防御。本節主要內容如下:
l 權限管理基礎
l 創建登錄帳號
l 角色管理
l 權限管理
3.1 權限管理基礎
每個SQL Server的安全都同授予宿主的權限相關聯。表3顯示了權限應用於特定的安全對象。
表 3 權限應用於的安全對象
權限 |
應用於 |
SELECT |
同義詞 表 +列 表-值函數+列 視圖 + 列 |
UPDATE |
同義詞 表+ 列 視圖+ 列 |
REFERENCES |
標量或者聚集函數 服務代理隊列 表+ 列 表-值函數 + 列 視圖+ 列 |
INSERT |
同義詞 表+ 列 視圖+ 列 |
DELETE |
同義詞 表+ 列 視圖+ 列 |
EXECUTE |
過程 標量或者聚集函數 同義詞 |
RECEIVE |
服務代理隊列 |
VIEW DEFINITION |
過程 服務代理隊列 標量或者聚集函數 同義詞 表 表-值函數 視圖 |
ALTER |
過程 標量或者聚集函數 服務代理隊列 表 表-值函數 視圖 |
TAKE OWNERSHIP |
過程 標量或者聚集函數 同義詞 表 表-值函數 視圖 |
CONTROL |
過程 標量或者聚集函數 服務代理隊列 同義詞 表 表-值函數 視圖 |
SQL Server提供了權限信息視圖,如下所示,用戶可以查詢這些視圖,獲取權限信息。
l sys.database_principals,顯示數據庫中每個安全宿主對象(用戶、組、角色、應用角色等等)的信息。
l sys.server_role_members,顯示每個服務器角色的每個角色。
l sys.certificates,包含數據庫中創建的每個證書。
l sys.asymmetric_keys ,包含非對稱公鑰的信息。
l sys.crypt_properties ,包含同安全對象相關的密碼信息。
l sys.credentials,包含使用CREATE CREDENTIAL創建的每個證書。
l sys.symmetric_keys ,包含對稱公鑰的信息。
l sys.database_role_members,包含每個數據庫角色的成員信息。
l sys.sql_logins ,包含SQL登錄的每個安全宿主信息。
l sys.key_encryptions,包含使用CREATE SYMMETRIC KEY語句的ENCRYPTION BY子句定義的每個對稱公鑰的信息。
l sys.database_permissions ,包含每個數據庫級權限或者列異常權限的信息。
l sys.server_principals 包含服務器級的每個安全宿主的信息。
l sys.server_permissions,包含每個服務器級權限的信息。
同時,SQL Server提供了固定數據庫角色和服務器角色,從而引入更多的權限控制策略。固定服務器角色如表4所示。
表 4 固定服務器角色
固定數據庫角色 |
數據庫級權限 |
db_accessadmin |
授予的權限:ALTER ANY USER |
db_accessadmin |
使用CRANT選項授予的權限:CONNECT |
db_accessadmin |
授予的權限:CREATE SCHEMA |
db_backupoperator |
授予的權限:BACKUP DATABASE |
db_backupoperator |
授予的權限:BACKUP LOG |
db_backupoperator |
授予的權限:CHECKPOINT |
db_datareader |
授予的權限:SELECT |
db_datawriter |
授予的權限:DELETE |
db_datawriter |
授予的權限:INSERT |
db_datawriter |
授予的權限:UPDATE |
db_ddladmin |
授予的權限:ALTER ANY ASSEMBLY |
db_ddladmin |
授予的權限:ALTER ANY CERTIFICATE |
db_ddladmin |
授予的權限:ALTER ANY CONTRACT |
db_ddladmin |
授予的權限:ALTER ANY EVENT NOTIFICATION |
db_ddladmin |
授予的權限:ALTER ANY DATASPACE |
db_ddladmin |
授予的權限:ALTER ANY FULLTEXT CATALOG |
db_ddladmin |
授予的權限:ALTER ANY MESSAGE TYPE |
db_ddladmin |
授予的權限:ALTER ANY REMOTE SERVICE BINDING |
db_ddladmin |
授予的權限:ALTER ANY ROUTE |
db_ddladmin |
授予的權限:ALTER ANY SCHEMA |
db_ddladmin |
授予的權限:ALTER ANY SERVICE |
db_ddladmin |
授予的權限:ALTER ANY SYMMETRIC KEY |
db_ddladmin |
授予的權限:ALTER ANY TRIGGER |
db_ddladmin |
授予的權限:ALTER ANY XML SCHEMA COLLECTION |
db_ddladmin |
授予的權限:CHECKPOINT |
db_ddladmin |
授予的權限:CREATE AGGREGATE |
db_ddladmin |
授予的權限:CREATE ASSEMBLY |
db_ddladmin |
授予的權限:CREATE CONTRACT |
db_ddladmin |
授予的權限:CREATE DEFAULT |
db_ddladmin |
授予的權限:CREATE FUNCTION |
db_ddladmin |
授予的權限:CREATE MESSAGE TYPE |
db_ddladmin |
授予的權限:CREATE PROCEDURE |
db_ddladmin |
授予的權限:CREATE QUEUE |
db_ddladmin |
授予的權限:CREATE REMOTE SERVICE BINDING |
db_ddladmin |
授予的權限:CREATE ROUTE |
db_ddladmin |
授予的權限:CREATE RULE |
db_ddladmin |
授予的權限:CREATE SCHEMA |
db_ddladmin |
授予的權限:CREATE SERVICE |
db_ddladmin |
授予的權限:CREATE SYMMETRIC KEY |
db_ddladmin |
授予的權限:CREATE SYNONYM |
db_ddladmin |
授予的權限:CREATE TABLE |
db_ddladmin |
授予的權限:CREATE TYPE |
db_ddladmin |
授予的權限:CREATE VIEW |
db_ddladmin |
授予的權限:CREATE XML SCHEMA COLLECTION |
db_ddladmin |
授予的權限:REFERENCES |
db_denydatareader |
禁用的權限: SELECT |
db_denydatawriter |
禁用的權限: DELETE |
db_denydatawriter |
禁用的權限: INSERT |
db_denydatawriter |
禁用的權限: UPDATE |
db_owner |
使用CRANT選項授予的權限:CONTROL |
db_securityadmin |
授予的權限:ALTER ANY APPLICATION ROLE |
db_securityadmin |
授予的權限:ALTER ANY ROLE |
db_securityadmin |
授予的權限:CREATE SCHEMA |
db_securityadmin |
授予的權限:VIEW DEFINITION |
固定服務器角色如表5所示:
表 5 固定數據庫角色
固定服務器角色 |
對應的服務器級權限 |
bulkadmin |
授予的權限: ADMINISTER BULK OPERATIONS |
dbcreator |
授予的權限: CREATE DATABASE |
diskadmin |
授予的權限: ALTER RESOURCES |
processadmin |
授予的權限: ALTER SERVER STATE |
processadmin |
授予的權限: ALTER ANY CONNECTION |
securityadmin |
授予的權限: ALTER ANY LOGIN |
serveradmin |
授予的權限: ALTER SETTINGS |
serveradmin |
授予的權限: SHUTDOWN |
serveradmin |
授予的權限: CREATE ENDPOINT |
serveradmin |
授予的權限: ALTER SERVER STATE |
serveradmin |
授予的權限: ALTER ANY ENDPOINT |
serveradmin |
授予的權限: ALTER RESOURCES |
setupadmin |
授予的權限: ALTER ANY LINKED SERVER |
sysadmin |
帶GRANT 選項授予的權限:CONTROL SERVER |
在SQL Server權限體系結構中,授予特定的權限可能會隱式轉換其他權限。高級權限將覆蓋底層權限。
3.2 創建登錄帳號
管理SQL Server登錄主要包括以下內容:
l 創建登錄
l 修改登錄
l 刪除登錄
(1)創建登錄
SQL Server提供的用於創建登錄的Transact-SQL語句如下:
CREATE LOGIN login_name { WITH < option_list1 > | FROM < sources > } < sources >::= WINDOWS [ WITH windows_options [,...] ] | CERTIFICATE certname | ASYMMETRIC KEY asym_key_name < option_list1 >::= PASSWORD = ' password ' [ HASHED ] [ MUST_CHANGE ] [ , option_list2 [ ,... ] ] < option_list2 >::= SID = sid | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language | CHECK_EXPIRATION = { ON | OFF} | CHECK_POLICY = { ON | OFF} [ CREDENTIAL = credential_name ] < windows_options >::= DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language
其中:
l login_names,定義登錄名;
l WINDOWS,定義映射為Windows的登錄名;
l CERTIFICATE certname,定義同登錄相關的證書名;
l ASYMMETRIC KEY asym_key_name,定義同登錄相關的非對稱金鑰的名稱;
l PASSWORD = 'password',定義登錄的口令;
l HASHED,只用於SQL Server登錄;當PASSWORD參數被哈西處理之后,定義輸入的口令。如果沒有設置該選項,采用字符串格式存儲口令。
l MUST_CHANGE,只用於SQL Server登錄;如果定義了該選項,SQL Server將提示用戶在第一次登錄時修改口令;
l CREDENTIAL = credential_name,定義映射新的SQL Server登錄的身份;
l SID = sid,只用於SQL Server登錄。定義新SQL登錄的GUID;
l DEFAULT_DATABASE = database,定義該登錄支持的默認數據庫;
l DEFAULT_LANGUAGE = language,定義賦予登錄的默認語言;
l CHECK_EXPIRATION = { ON | OFF },只用於SQL Server登錄;定義使用對口令采用過期策略。默認為ON;
l CHECK_POLICY = { ON | OFF },只用於SQL Server登錄;定義SQL Server所運行的Windows口令策略是否用於該登錄。
(2)修改登錄
SQL Server提供的用於修改登錄的Transact-SQL語句如下:
ALTER LOGIN login_name { < status_option > | WITH set_option [ ,... ] } < status_option >::= ENABLE | DISABLE < set_option >::= PASSWORD = ' password ' [ OLD_PASSWORD = ' oldpassword ' | secadmin_pwd_option [ secadmin_pwd_option ] ] | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language | NAME = login_name | CHECK_POLICY = { ON | OFF } | CHECK_EXPIRATION = { ON | OFF } | CREDENTIAL = credential_name | NO_CREDENTIAL < secadmin_pwd_opt >::= MUST_CHANGE | UNLOCK
其中:
l login_name,需要修改的SQL Server登錄名;
l ENABLE | DISABLE,啟用或者禁用該登錄;
l PASSWORD = ' password ',定義新口令;
l OLD_PASSWORD = ' old password ',定義登錄的當前口令;
l MUST_CHANGE,,只用於SQL Server登錄;如果定義了該選項,SQL Server將提示用戶在第一次登錄時修改口令;
l DEFAULT_DATABASE = database,定義該登錄支持的默認數據庫;
l DEFAULT_LANGUAGE = language,定義賦予登錄的默認語言;
l NAME = login_name,新的登錄名;
l CHECK_EXPIRATION = { ON | OFF },只用於SQL Server登錄;定義使用對口令采用過期策略。默認為ON;
l CHECK_POLICY = { ON | OFF },只用於SQL Server登錄;定義SQL Server所運行的Windows口令策略是否用於該登錄。
l CREDENTIAL = credential_name,映射到該SQL Server登錄的身份證名,它必須在服務器中存在;
l NO_CREDENTIAL,刪除登錄到服務器身份證的映射;
l UNLOCK,定義加鎖登錄應當被解鎖。
(3)刪除登錄
刪除登錄的Transact-SQL語句較為簡單,具體如下:
DROP LOGIN login_name
其中:
l login_name,需要刪除的登錄名。
下面的代碼顯示如何創建一個服務器登錄“yjs”,並創建對應的數據庫用戶“yjs”。
CREATE LOGIN yjs WITH PASSWORD = '1111112221'; USE EAMS; CREATE USER yjs;
3.3 角色管理
角色是一個強大的工具,得以將用戶集中到一個單元中,然后對該單元應用權限。對一個角色授予、拒絕或廢除的權限也適用於該角色的任何成員。可以建立一個角色來代表單位中一類工作人員所執行的工作,然后給這個角色授予適當的權限。當工作人員開始工作時,只須將他們添加為該角色成員,當他們離開工作時,將他們從該角色中刪除。而不必在每個人接受或離開工作時,反復授予、拒絕和廢除其權限。權限在用戶成為角色成員時自動生效。
前面我們介紹了SQL Server提供的固定服務器角色和固定數據庫角色,用戶也可以使用Create ROLE Transact-SQL語句創建角色,其語法如下:
CREATE ROLE role_name [ AUTHORIZATION owner_name ]
其中:
l role_name,需要創建的角色名;
l AUTHORIZATION owner_name,擁有新角色的數據庫用戶名或者角色名。
當創建了角色之后,可以使用存儲過程sp_addrolemember將安全帳戶作為當前數據庫中現有 Microsoft SQL Server數據庫角色的成員進行添加,具體語法如下:
sp_addrolemember [ @rolename = ] ' role ' , [ @membername = ] ' security_account '
其中:
l [ @rolename = ] ' role ',當前數據庫中 SQL Server 角色的名稱。role 的數據類型為 sysname,沒有默認值。
l [@membername =] 'security_account',添加到角色的安全帳戶。security_account 的數據類型為 sysname,沒有默認值。security_account 可以是所有有效的 SQL Server 用戶、SQL Server 角色或是所有已授權訪問當前數據庫的 Microsoft Windows 用戶或組。當添加 Windows用戶或組時,請指定在數據庫中用來識別該 Windows用戶或組的名稱。
當需要從角色中刪除成員時,可以使用sp_droprolemember過程,其語法如下:
sp_droprolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account' |
其中:
l 'role',某個角色的名稱,將要從該角色刪除成員。role 的數據類型為 sysname,沒有默認值。role 必須已經存在於當前的數據庫中。
l 'security_account',正在從角色中刪除的安全帳戶的名稱。security_account 的數據類型為 sysname,沒有默認值。
當需要修改角色名時,可以執行ALTER ROLE語句,其語法如下:
ALTER ROLE role_name WITH NAME = new_name |
其中:
l role_name,需要修改的角色名;
l WITH NAME = new_name,定義角色新的名稱。
當需要刪除某個角色時,可以執行DROP ROLE語句,其語法如下:
DROP ROLE role_name |
其中:
l role_name,需要刪除的角色名。
下面的代碼說明如何創建一個數據庫角色:
USE EAMS; CREATE ROLE buyers AUTHORIZATION BenMiller; |
3.4 權限管理
管理SQL Server權限主要包括:
l 授予權限
l 拒絕權限
l 廢除權限
(1)授予權限
授予權限主要是授予允許用戶帳戶執行下列活動的語句權限和對象權限:
l 在當前數據庫中執行活動或處理數據。
l 限制它們執行某些活動或獲取某些信息,這些活動或信息都不是其預期功能的一部分。
SQL Server提供的授予權限的Transact-SQL語句是GRANT,其語法如下:
GRANT < permission > [ ,...n ] [ ON < scope > ] TO < principal > [ ,...n ] [ WITH GRANT OPTION ] [ AS { Windows_group | SQL_Server_login | database_user | database_role | application_role } ] < permission >::= ALL [ PRIVILEGES ] | permission_name [ ( column [ ,...n ] ) ] < scope >::= [ securable_class :: ] securable_name < securable_class >::= APPLICATION ROLE | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE | CONTRACT | DATABASE | ENDPOINT | FULLTEXT CATALOG | LOGIN | MESSAGE TYPE | OBJECT | REMOTE SERVICE BINDING | ROLE | ROUTE | SCHEMA | SERVER | SERVICE | SYMMETRIC KEY | TYPE | USER | XML SCHEMA COLLECTION < principal >::= Windows_login | SQL_Server_login | SQL_Server_login_mapped_to_certificate | SQL_Server_login_mapped_to_asymmetric_key | Database_user | Database_role | Application_role | Database_user_mapped_to_certificate | Database_user_mapped_to_asymmetric_key
其中:
l GRANT OPTION,表示給予了 security_account 將指定的對象權限授予其它安全帳戶的能力。WITH GRANT OPTION 子句僅對對象權限有效。
l TO Windows_login,定義將權限授予的Windows登錄。
l TO SQL_Server_login,定義將權限授予的SQL Server登錄。
l TO SQL_Server_login_mapped_to_certificate,定義將權限授予的證書映射SQL Server登錄。
l TO SQL_Server_login_mapped_to_asymmetric_key,定義將權限授予的非對稱金鑰映射的SQL Server登錄。
l TO Database_user,定義將權限授予的數據庫用戶。
l TO Database_role,定義將權限授予的數據庫角色。
l TO Database_user_mapped_to_certificate,定義將權限授予的證書映射數據庫用戶。
l TO Database_user_mapped_to_asymmetric_key,定義將權限授予的非對稱金鑰映射數據庫用戶。
l TO Application_role,定義將權限授予的應用角色。
l AS Windows_group,定義執行查詢的安全對象驅動權限授予的Windows組。
l AS SQL_Server_login,定義執行查詢的安全對象驅動權限授予的SQL Server登錄。
l AS Database_role,定義使用固定數據庫角色授予權限。
l AS Application_role,定義使用應用角色授予權限。
l TO Windows_group,定義將權限授予Windows組。
l TO SQL_Server_login,定義將權限授予SQL Server登錄。
l TO database_user,定義將權限授予數據庫用戶。
l TO database_role,定義將權限授予數據庫角色。
l TO Application_role,定義將權限授予應用角色。
l AS Windows_group,定義作為Windows組授予權限。
l AS SQL_Server_login,定義作為SQL Server登錄授予權限。
l AS Database_role,定義采用數據庫角色授權權限。
l AS Application_role,定義作為應用角色授予權限。
l ALL,表示授予所有可用的權限。
l PRIVILEGES,是可以包含在符合 SQL-92 標准的語句中的可選關鍵字。
l Securable_name,表示安全對象的名稱。
l Permission_name,是當前授予的權限。
l Column,是當前數據庫中授予權限的列名。
l securable_class,定義授予權限的安全對象類。
l APPLICATION ROLE,表示安全對象是一個應用角色。
l ASSEMBLY,assembly表示安全對象是一個集合。
l ASYMMETRIC KEY,表示安全對象是一個非對稱金鑰。
l CERTIFICATE,表示安全對象是一個證書。
l CONTRACT,表示安全對象是一個服務代理合同。
l DATABASE,表示安全對象是數據庫。
l ENDPOINT,表示安全對象是一個斷點。
l FULLTEXT CATALOG,表示安全對象是全文目錄。
l LOGIN,表示安全對象是SQL Server登錄。
l MESSAGE TYPE,表示安全對象是服務代理消息類型。
l OBJECT,表示安全對象是模式層對象。
l REMOTE BINDING,表示安全對象是服務代理遠程綁定。
l ROLE,表示安全對象是服務代理角色。
l ROUTE,表示安全對象是服務代理路由。
l SCHEMA,表示安全對象是模式。
l SERVER,表示安全對象是服務器。
l SERVICE,表示安全對象是服務代理服務。
l SYMMETRIC KEY,表示安全對象是對稱金鑰。
l TYPE,表示安全對象是類型。
l USER,表示安全對象是用戶。
l XML SCHEMA COLLECTION,表示安全對象是XML模式集合。
(2)拒絕權限
拒絕用戶帳戶上的權限,主要用於:
l 刪除以前授予用戶、組或角色的權限。
l 停用從其它角色繼承的權限。
l 確保用戶、組或角色將來不繼承更高級別的組或角色的權限。
SQL Server提供的拒絕權限的Transact-SQL語句語法如下:
DENY < permission > [ ,...n ] [ ON < scope > ] TO < principal > [ ,...n ] [ CASCADE ] [ AS { Windows_group | SQL_Server_login | database_role | application_role } ] < permission >::= ALL [ PRIVILEGES ] | permission_name [ ( column [ ,...n ] ) ] < scope >::= [ securable_class :: ] securable_name < securable_class >::= APPLICATION ROLE | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE | CONTRACT | DATABASE | ENDPOINT | FULLTEXT CATALOG | LOGIN | MESSAGE TYPE | OBJECT | REMOTE SERVICE BINDING | ROLE | ROUTE | SCHEMA | SERVER | SERVICE | SYMMETRIC KEY | TYPE | USER | XML SCHEMA COLLECTION < principal >::= Windows_login | SQL_Server_login | SQL_Server_login_mapped_to_certificate | SQL_Server_login_mapped_to_asymmetric_key | Database_user | Database_role | Application_role | Database_user_mapped_to_certificate | Database_user_mapped_to_asymmetric_key
具體參數說明參考GRANT語法的對應參數。
(3)廢除權限
廢除權限用於廢除以前授予或拒絕的權限。廢除類似於拒絕,因為二者都是在同一級別上刪除已授予的權限。但是,廢除權限是刪除已授予的權限,並不妨礙用戶、組或角色從更高級別繼承已授予的權限。因此,如果廢除用戶查看表的權限,不一定能防止用戶查看該表,因為已將查看該表的權限授予了用戶所屬的角色。
SQL Server提供用於廢除權限的Transact-SQL語句REVOKE,其語法如下:
REVOKE [ GRANT OPTION FOR ] < permission > [ ,...n ] [ ON < scope > ] { TO | FROM } < principal > [ ,...n ] [ CASCADE ] [ AS { Windows_group | SQL_Server_login | database_role | application_role } ] < permission >::= ALL [ PRIVILEGES ] | permission_name [ ( column [ ,...n ] ) ] < scope >::= [ < securable_class > :: ] securable_name < securable_class >::= APPLICATION ROLE | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE | CONTRACT | DATABASE | ENDPOINT | FULLTEXT CATALOG | LOGIN | MESSAGE TYPE | OBJECT | REMOTE SERVICE BINDING | ROLE | ROUTE | SCHEMA | SERVER | SERVICE | SYMMETRIC KEY | TYPE | USER | XML SCHEMA COLLECTION < principal >::= Windows_login | SQL_Server_login | SQL_Server_login_mapped_to_certificate | SQL_Server_login_mapped_to_asymmetric_key | Database_user | Database_role | Application_role | Database_user_mapped_to_certificate | Database_user_mapped_to_asymmetric_key
具體參數說明請參考GRANT語法的對應參數。
下面的示例給用戶 yjs授予多個語句權限。
GRANT CREATE DATABASE, CREATE TABLE TO yjs |
4 企業信息平台的備份與恢復
備份與恢復對於企業數據庫管理是非常重要的一個方面,本節主要討論如何執行備份與恢復。主要內容包括:
l 企業信息平台的數據庫備份
l 企業信息平台的數據庫恢復
4.1 企業信息平台的數據庫備份
今天,計算機軟件、硬件系統的可靠性都有很大改善,而且還可以采用磁盤陣列等設備來提高系統的容錯能力,這些技術提高了系統的可靠性。然而這些措施不可能是完美的,也無法保證系統安全做到萬無一失,它們只是在一定程度上減少了由於介質故障帶來的損失。然而,對於操作人員的意外操作或蓄意的破壞性操作、破壞性病毒的攻擊、自然災害帶來的原因所引起的系統故障,以上措施還是存在不足。定期進行數據庫備份是保證系統安全的一項重要措施。在意外情況發生時,可以依靠備份數據來恢復數據庫。
任何一個數據庫管理員應該認識到數據庫中數據的重要性和備份它們的重要性。有了備份可以在服務器崩潰之后迅速有效地恢復數據庫的備份產品。除了災難恢復之外,下述原因是數據備份的理由:
l 偶然地或惡意地修改或者刪除數據。
l 一些自然災難,像火災、水災或者風暴。
l 設備被盜或遭到破壞。
l 從一台機器到另一台機器所進行的數據傳輸。
l 永久的數據檔案。
總之,對於SQL Server的管理者來說,有許多理由要進行數據備份,而其中最主要的原因就是從數據災難中恢復。數據備份工作關系到數據災害發生后是否還會有工作。所以,備份是數據庫恢復中采用的基本技術。
SQL Server提供了備份整個數據庫、事務日志、一個或者多個文件和文件組的Transact-SQL語句。
備份整個數據庫的語法如下:
BACKUP DATABASE { database_name | @database_name_var } TO < backup_device > [ ,...n ] [ [ MIRROR TO < backup_device > [ ,...n ] ] [ ...m ] ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] { CHECKSUM | NO_CHECKSUM } ] [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] { FORMAT | NOFORMAT } ] [ [ , ] { INIT | NOINIT } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ =percentage ] ] [ [ , ] COPY_ONLY ] ]
備份特定文件或者文件組的語法如下:
BACKUP DATABASE { database_name | @database_name_var } < file_or_filegroup > [ ,...f ] TO < backup_device > [ ,...n ] [ [ MIRROR TO < backup_device > [ ,...n ] ] [ ...m ] ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] { CHECKSUM | NO_CHECKSUM } ] [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] FORMAT | NOFORMAT ] [ [ , ] { INIT | NOINIT } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ =percentage ] ] [ [ , ] COPY_ONLY ] ] --定義文件或者文件組 < file_or_filegroup > ::= { FILE = { logical_file_name | @logical_file_name_var } | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } | READ_WRITE_FILEGROUPS }
備份事務日志的語法如下:
BACKUP LOG { database_name | @database_name_var } { TO < backup_device > [ ,...n ] [ [ MIRROR TO < backup_device > [ ,...n ] ] [ ...m ] ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] { CHECKSUM | NO_CHECKSUM } ] [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ ,] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] { FORMAT | NOFORMAT } ] [ [ , ] { INIT | NOINIT } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] NO_TRUNCATE ] [ [ , ] { NORECOVERY | STANDBY = undo_file_name } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ =percentage ] ] [ [ , ] COPY_ONLY ] ] } < backup_device > ::= { { logical_backup_device_name | @logical_backup_device_name_var } | { DISK | TAPE } = { 'physical_backup_device_name' | @physical_backup_device_name_var } }
參數說明如下:
l DATABASE,指定一個完整的數據庫備份。假如指定了一個文件和文件組的列表,那么僅有這些被指定的文件和文件組被備份。
l { database_name| @database_name_var },指定了一個數據庫,從該數據庫中對事務日志、部分數據庫或完整的數據庫進行備份。如果作為變量 (@database_name_var) 提供,則可將該名稱指定為字符串常量 (@database_name_var = database name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
l TO,表示備份設備的協作集要么是非鏡像媒體集合,要么是鏡像媒體集中的一個鏡像。
l MIRROR TO,表示備份設備的協作集是一個鏡像媒體集合中的一個鏡像。備份設備必須是同一類型,設備的類型在TO子句中指定。在鏡像媒體集中,所有的備份設備必須具有相同的屬性。
l M,是一個占位符,表示BACKUP語句能夠包含最多三個MIRROR TO子句。
l < backup_device >,指定備份操作時要使用的邏輯或物理備份設備。
l { logical_backup_device_name | @logical_backup_device_name_var },是由 sp_addumpdevice 創建的備份設備的邏輯名稱,數據庫將備份到該設備中,其名稱必須遵守標識符規則。如果將其作為變量 (@logical_backup_device_name_var) 提供,則可將該備份設備名稱指定為字符串常量 (@logical_backup_device_name_var = logical backup device name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
l { DISK | TAPE } = { 'physical_backup_device_name' | @physical_backup_device_name_var },允許在指定的磁盤或磁帶設備上創建備份。在執行 BACKUP 語句之前不必存在指定的物理設備。如果存在物理設備且 BACKUP 語句中沒有指定 INIT 選項,則備份將追加到該設備。當指定 TO DISK 或 TO TAPE 時,請輸入完整路徑和文件名。例如,DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\Mybackup.dat' 或 TAPE = '\\.\TAPE0'。如果使用的是具有統一命名規則 (UNC) 名稱的網絡服務器或已重新定向的驅動器號,則請指定磁盤的設備類型。當指定多個文件時,可以混合邏輯文件名(或變量)和物理文件名(或變量)。但是,所有的設備都必須為同一類型(磁盤、磁帶或管道)。
l n,是表示可以指定多個備份設備的占位符。備份設備數目的上限為 64。
l DESCRIPTION = { 'text'| @text_variable },指定描述備份集的自由格式文本。該字符串最長可以有 255 個字符。
l DIFFERENTIAL,指定數據庫備份或文件備份應該與上一次完整備份后改變的數據庫或文件部分保持一致。差異備份一般會比完整備份占用更少的空間。對於上一次完整備份時備份的全部單個日志,使用該選項可以不必再進行備份。
l EXPIREDATE ={ date| @date_var },指定備份集到期和允許被重寫的日期。如果將該日期作為變量 (@date_var) 提供,則可以將該日期指定為字符串常量 (@date_var = date)、字符串數據類型變量(ntext 或 text 數據類型除外)、smalldatetime 或者 datetime 變量,並且該日期必須符合已配置的系統 datetime 格式。
l RETAINDAYS ={ days| @days_var },指定必須經過多少天才可以重寫該備份媒體集。假如用變量 (@days_var) 指定,該變量必須為整型。
l PASSWORD = { password | @password_variable },指定必須經過多少天才可以重寫該備份媒體集。假如用變量 (@days_var) 指定,該變量必須為整型。
l FORMAT,指定應將媒體頭寫入用於此備份操作的所有卷。任何現有的媒體頭都被重寫。FORMAT 選項使整個媒體內容無效,並且忽略任何現有的內容。
l NOFORMAT,指定媒體頭不應寫入所有用於該備份操作的卷中,並且不要重寫該備份設備除非指定了 INIT。
l INIT,指定應重寫所有備份集,但是保留媒體頭。如果指定了 INIT,將重寫那個設備上的所有現有的備份集數據。
l NOINIT,表示備份集將追加到指定的磁盤或磁帶設備上,以保留現有的備份集。NOINIT 是默認設置。
l NOSKIP,指示 BACKUP 語句在可以重寫媒體上的所有備份集之前先檢查它們的過期日期。
l SKIP,禁用備份集過期和名稱檢查,這些檢查一般由 BACKUP 語句執行以防重寫備份集。
l MEDIADESCRIPTION = { text | @text_variable },為整個備份媒體集指明媒體名,最多為 128 個字符。假如指定了 MEDIANAME,則它必須與以前指定的媒體名相匹配,該媒體名已存在於備份卷中。假如沒有指定 MEDIANAME,或指定了 SKIP 選項,將不會對媒體名進行驗證檢查。
l MEDIANAME = { media_name | @media_name_variable },為整個備份媒體集指明媒體名,最多為 128 個字符。假如指定了 MEDIANAME,則它必須與以前指定的媒體名相匹配,該媒體名已存在於備份卷中。假如沒有指定 MEDIANAME,或指定了 SKIP 選項,將不會對媒體名進行驗證檢查。
l MEDIAPASSWORD = { mediapassword | @mediapassword_variable },為媒體集設置密碼。MEDIAPASSWORD 是一個字符串。如果為媒體集定義了密碼,則在該媒體集上創建備份集時必須提供此密碼。另外,從該媒體集執行任何還原操作時也必須提供媒體密碼。只有通過格式化才能重寫受密碼保護的媒體。
l NAME ={ backup_set_name| @backup_set_var },指定備份集的名稱。名稱最長可達 128 個字符。假如沒有指定 NAME,它將為空。
l NORECOVERY,只與 BACKUP LOG 一起使用。備份日志尾部並使數據庫處於正在還原的狀態。當將故障轉移到輔助數據庫或在 RESTORE 操作前保存日志尾部時,NORECOVERY 很有用。
l STANDBY =undo_file_name,只與 BACKUP LOG 一起使用。備份日志尾部並使數據庫處於只讀或備用模式。撤消文件名指定了容納回滾更改的存儲,如果隨后應用 RESTORE LOG 操作,則必須撤消這些回滾更改。如果指定的撤消文件名不存在,SQL Server 將創建該文件。如果該文件已存在,則 SQL Server 將重寫它。
l NOREWIND,指定 SQL Server 在備份操作完成后使磁帶保持打開。NOREWIND 意即 NOUNLOAD。SQL Server 將保留磁帶驅動器的所有權,直到 BACKUP或 RESTORE 命令使用 REWIND 為止。
l REWIND,指定 SQL Server 將釋放磁帶和倒帶。如果 NOREWIND 和 REWIND 均未指定,則默認設置為 REWIND。
l CHECKSUM,驗證數據庫頁的頁效驗和。
l NO_CHECKSUM,顯式禁用備份效驗和。
l STOP_ON_ERROR,表示如果無法驗證效驗和,則指示BACKUP失敗。
l CONTINUE_AFTER_ERROR,表示當遇到錯誤,如非法效驗和時,BACKUP依舊繼續。
l NOUNLOAD,指定不在備份后從磁帶驅動器中自動卸載磁帶。設置始終為 NOUNLOAD,直到指定 UNLOAD 為止。該選項只用於磁帶設備。
l UNLOAD,指定在備份完成后自動倒帶並卸載磁帶。啟動新用戶會話時其默認設置為 UNLOAD。該設置一直保持到用戶指定了 NOUNLOAD 時為止。該選項只用於磁帶設備。
l STATS [ =percentage],每當另一個 percentage 結束時顯示一條消息,它被用於測量進度。如果省略 percentage,SQL Server 將每完成 10 個百分點顯示一條消息。
l < file_or_filegroup >,指定包含在數據庫備份中的文件或文件組的邏輯名。可以指定多個文件或文件組。
l COPY_ONLY,定義備份不會影響備份的正常序列,COPY_ONLY選項的影響對不同的備份類型式不同的。
l FILE ={ logical_file_name| @logical_file_name_var },給一個或多個包含在數據庫備份中的文件命名。
l FILEGROUP ={ logical_filegroup_name| @logical_filegroup_name_var },給一個或多個包含在數據庫備份中的文件組命名。
l READ_WRITE_FILEGROUPS,指定部分備份,包括主文件組和任何可讀寫輔助文件組。對於創建部分備份,必須定義該選項。
l F,是一個占位符,表示可以指定多個文件和文件組。對文件或文件組的最大個數沒有限制。
l LOG,指定只備份事務日志。該日志是從上一次成功執行了的 LOG 備份到當前日志的末尾。一旦備份日志,可能會截斷復制或活動事務不再需要的空間。
l NO_TRUNCATE,允許在數據庫損壞時備份日志。
下面的實例用於顯示對在線銷售管理系統數據庫EAMS進行差異備份。
BACKUP DATABASE EAMS TO EMAS_1 WITH INIT GO BACKUP DATABASE EAMS TO EMAS_1 WITH DIFFERENTIAL GO |
4.2 企業信息平台的數據庫恢復
SQL Server提供了3種恢復模型,分別是:
l 簡單恢復 ,允許將數據庫恢復到最新的備份。
l 完全恢復,允許將數據庫恢復到故障點狀態。
l 大容量日志記錄恢復,允許大容量日志記錄操作。
這些模型中的每個都是針對不同的性能、磁盤和磁帶空間以及保護數據丟失的需要。例如,當選擇恢復模型時,必須考慮下列業務要求之間的權衡:
l 大規模操作的性能(如創建索引或大容量裝載)。
l 數據丟失表現(如已提交的事務丟失)。
l 事務日志空間損耗
l 備份和恢復過程的簡化。
根據正在執行的操作,可以有多個適合的模型。選擇了恢復模型后,設計所需的備份和恢復過程。表6提供了三種恢復模型的優點和含義的概述。
表 6備份模型之間的比較
恢復模型 |
優點 |
工作損失表現 |
能否恢復到即時點? |
簡單 |
允許高性能大容量復制操作。 收回日志空間以使空間要求最小。 |
必須重做自最新的數據庫或差異備份后所發生的更改。 |
可以恢復到任何備份的結尾處。隨后必須重做更改。 |
完全 |
數據文件丟失或損壞不會導致工作損失。 可以恢復到任意即時點(例如,應用程序或用戶錯誤之前)。 |
正常情況下沒有。 如果日志損壞,則必須重做自最新的日志備份后所發生的更改。 |
可以恢復到任何即時點。 |
大容量日志記錄的 |
允許高性能大容量復制操作。大容量操作使用最少的日志空間。 |
如果日志損壞,或者自最新的日志備份后發生了大容量操作,則必須重做自上次備份后所做的更改。否則不丟失任何工作。 |
可以恢復到任何備份的結尾處。隨后必須重做更改。 |
簡單恢復所需的管理最少。在簡單恢復模型中,數據只能恢復到最新的完整數據庫備份或差異備份的狀態。不使用事務日志備份,而使用最小事務日志空間。一旦不再需要日志空間從服務器故障中恢復,日志空間便可重新使用。與完整模型或大容量日志記錄模型相比,簡單恢復模型更容易管理,但如果數據文件損壞,則數據損失表現會更高。
完全恢復和大容量日志記錄恢復模型為數據提供了最大的保護性。這些模型依靠事務日志提供完全的可恢復性,並防止最大范圍的故障情形所造成的工作損失。完全恢復模型提供最大的靈活性,可將數據庫恢復到更早的即時點。
大容量日志記錄模型為某些大規模操作(如創建索引或大容量復制)提供了更高的性能和更低的日志空間損耗。不過這將犧牲時點恢復的某些靈活性。很多數據庫都要經歷大容量裝載或索引創建的階段,因此可能希望在大容量日志記錄模型和完全恢復模型之間進行切換。
SQL Server支持單獨使用一種備份方式或組合使用多種備份方式。選擇的恢復模型將決定總體備份策略,包括可以使用的備份類型。表7說明適用於每種恢復模型的備份類型。
表 7 支持每種恢復模型的備份類型
模型 |
備份類型 |
|||
數據庫 |
數據庫差異 |
事務日志 |
文件或文件差異 |
|
簡單 |
必需 |
可選 |
不允許 |
不允許 |
完全 |
必需(或文件備份) |
可選 |
必需 |
可選 |
大容量日志記錄 |
必需(或文件備份) |
可選 |
必需 |
可選 |
下面的示例恢復創建的完全數據庫備份,並使用該備份實現數據庫恢復操作。
RESTORE DATABASE EAMS FROM EAMS_1 WITH NORECOVERY RESTORE DATABASE EAMS FROM EAMS_1 WITH FILE = 2