top
Loading...
配置SQLServer2000選項

SQL Server服務器的配置選項屬于那種人們了解較少且經常誤用的選項。當一個技術支持人員要求你按照某種方式調整一個選項、而另一個技術支持人員卻要求你按照另一種完全對立的方式調整同一個選項時,你可能對這些選項的真正含義感到困惑。有關這些選項的資料很缺乏,至少可以說不夠詳細和清楚。在SQL Server 2000中,Microsoft減少了幾個配置選項,讓SQL Server動態配置它們,從而減少了幾個容易混淆的地方。同時,Microsoft又為SQL Server 2000新增了兩個服務器配置選項,調整了一些數據庫選項,從而稍許簡化了數據庫管理員的工作。

新增的服務器選項

就象訪問大多數企業版服務器的屬性一樣,我們不能在SQL Server Enterprise Manager中通過服務器屬性窗口訪問SQL Server 2000新增的兩個服務器選項。作為防止用戶由于不小心而錯誤配置服務器的一個安全措施,Microsoft沒有把這些高級配置選項放入Enterprise Manager。相反,我們必須使用T-SQL/sp_configure系統存儲過程去訪問這些高級選項。我們可以用不帶參數運行sp_configure的方法查看服務器的當前配置。在執行結果中,config_value是SQL Server從Master數據庫syscurconfigs表提取出來的數據,它顯示了服務器的當前配置;run_value列顯示了執行sp_configure時SQL Server正在使用的選項,SQL Server在sysconfigures表中存儲這些數據。修改某個選項之后,我們必須執行RECONFIGURE命令(在大多數情況下,還要重新啟動SQL Server)才能讓新的run_value顯示出來。本文所討論的所有選項都要求重新啟動SQL Server。

服務器選項總共有36個,默認情況下,sp_configure存儲過程只顯示其中的10個,顯示結果中不包含高級選項,而且所有新的SQL Server配置選項都不會出現在這個精簡的清單中。然而,我們可以使用show advanced options命令參數讓SQL Server顯示出所有選項。要啟用show advanced options,我們使用如下命令格式:

EXEC sp_configure 'show advanced options', '1' RECONFIGURE

要安裝一個選項,我們必須在使用sp_configure配置服務器之后運行RECONFIGURE命令。上面命令的輸出結果如下:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE command to install.

一旦能夠查看高級選項,我們就可以看到兩個新的服務器選項。其中最重要的一個新選項是awe enabled選項,它能夠讓SQL Server企業版提高服務器的內存訪問能力。默認情況下,SQL Server能夠使用的最大RAM是3GB。在Windows 2000上,應用程序可以 使用Address Windowing Extensions(AWE)API訪問更多的RAM。例如,在Windows 2000 Advanced Server中,我們能夠使用多達8GB的內存,只有Windows 2000 Datacenter Server支持64GB內存才超過它。顯然,當SQL Server擁有更多的可用內存,它將能夠緩沖更多的數據,改善查詢的響應時間。

不過,啟用awe enabled選項也有副作用。啟用awe enabled選項之后,SQL Server不再動態地分配內存。由于缺乏內存動態分配功能,管理負擔隨之增加,因為我們必須仔細地監視RAM使用情況。另外,設置awe enabled選項之后,我們還必須設置max server memory選項。如果我們不設置max server memory選項,服務器RAM又等于最低要求3GB,SQL Server將在啟動的時候占據機器上幾乎所有的RAM,只給Windows和其他應用留下128 MB的RAM。通過設置max server memory選項,我們可以限制SQL Server使用的內存總量。

awe enabled選項只能在SQL Server 2000 Enterprise Edition上使用,操作系統必須是Windows 2000 Advance Server或Datacenter。如果你在SQL Server的其他版本上使用這個選項(或者操作系統是WinNT),SQL Server將忽略這個選項。在某些服務器配置組合下,不適當地配置這個選項將導致不可預知的結果。例如,如果我們在Windows 98操作系統、運行SQL Server Personal Edition的機器上設置這個選項,SQL Server可能報告它已經停止(甚至是在它正在運行的時候),而且它將拒絕停止SQL Server實例。

在SQL Server Enterprise Edition服務器上啟用AWE包括三個步驟。首先,我們必須確保啟動SQL Server實例的帳號具有在內存中鎖定頁的權限。SQL Server安裝時自動把頁鎖定權限授予我們指定用來啟動SQL Server服務的Windows帳號;但是,如果后來這個帳號已經改變,你應該檢查一下已經把哪些權限授予了啟動SQL Server的用戶。檢查帳號的權限可以使用Windows 2000的組策略工具。第二個步驟是運行sp_configure存儲過程,把awe enabled選項設置為1。然后,我們必須執行RECONFIGURE,用手工方式重新啟動SQL Server。配置命令的語法為:

EXEC sp_configure 'awe enabled', '1' RECONFIGURE

注意,在Windows 2000或者NT上,如果要訪問高于4GB的物理內存,我們還必須采取其他一些措施,即修改boot.ini文件,加入/pae選項。

第二個新的SQL Server 2000選項用來啟用C2級安全審核模式。C2是一個政府安全等級,它保證系統能夠保護資源并具有足夠的審核能力。C2模式允許我們監視對所有數據庫實體的所有訪問企圖。啟用SQL Server的C2審核功能的命令如下:

EXEC sp_configure 'c2 audit mode', '1' RECONFIGURE

(要實現完整的C2級安全保證,Windows操作系統也必須提供相應的支持)啟用C2審核模式并重新啟動之后,SQL Server自動在MSSQLData目錄下面創建跟蹤文件。我們可以使用SQL Server Profiler查看這些監視服務器活動的跟蹤文件。SQL Server以128KB大小的塊為單位把數據寫入跟蹤文件。因此,當SQL Server非正常停止時,我們最多可能丟失128 KB的日志數據。可以想象,包含審核信息的日志文件將以很快的速度增大。例如,某次試驗只訪問了三個表,跟蹤文件已經超過了1MB。當跟蹤文件超過200MB時,C2審核將關閉舊文件并創建新文件。每次SQL Server啟動的時候,它會創建一個新的跟蹤文件。如果磁盤空間不足,SQL Server將停止運行,直至我們為審核日志釋放出足夠的磁盤空間并重新啟動SQL Server實例。在SQL Server啟動的時候,我們可以使用-f參數禁用審核。

減少的服務器選項

在SQL Server 2000中,Microsoft減少了原有的幾個選項,讓SQL Server 2000自動配置這些選項。減少的選項中最引人注目的是max async IO選項。這個選項允許數據庫管理員指定在單一的數據庫文件上可以出現多少異步的磁盤讀取和寫入操作。SQL Server 7.0中的max async IO選項是人們了解最少的選項之一,它的默認值是32,但很少有管理員去調整這個值。在SQL Server 2000中,這個異步IO選項隨著SQL Server接收的適配器反饋信息動態地上升或者下降,SQL Server利用反饋算法確定服務器負載以及SQL Server系統能夠控制的數量。

數據庫選項

在SQL Server 2000中,如果你曾經查看過Enterprise Manager中數據庫的Options選項卡,你可能會對一些通用選項的消失感到困惑(要訪問Options選項卡,在Enterprise Manager中右擊數據庫然后選擇Properties)。Options選項卡中減少了trunc. log on chkpt.以及Select Into/Bulk Copy這兩個選項,如圖1所示。為了清楚和向后兼容起見,這些通用選項現在稱為recovery model(恢復模型)選項。如果用SQL Server 2000的Enterprise Manager連接SQL Server 7.0數據庫,我們仍舊可以看到這些老選項。


圖1

以前,我們使用下面的命令為Northwind數據庫開啟trunc. log on chkpt.選項:

SP_DBOPTION Northwind ,'trunc. log on chkpt.', true

設置好選項之后,我們可以通過Options選項卡或者下面的查詢檢查Northwind數據庫上這些選項設置是否成功:

SELECT DATABASEPROPERTY ('Northwind', 'IsTruncLog')

結果為1表示選項設置成了true;結果為0表示選項設置成了false。如果結果為NULL,它表示我們或者選擇了一個錯誤的選項,或者數據庫不存在。

為了便于使用,Microsoft把trunc. log on chkpt.和Select Into/Bulk Copy選項換成了恢復模型設置。這種選項改變的目的在于確保數據庫管理員能夠充分理解在災難恢復策略中恢復模型選項的意義。SQL Server 2000為我們提供了三種數據庫恢復模型:simple(簡單恢復),full(完全恢復),bulk_logged(大容量日志記錄恢復)。

簡單恢復模型最容易操作,但它是最缺乏靈活性的災難恢復策略。選擇簡單恢復模型等同于把trunc. log on chkpt.設置成true。在這種恢復模型下,我們只能進行完全備份和差異備份(differential backup):這是因為事務日志總是被截斷,事務日志備份不可用。一般地,對于一個包含關鍵性數據的系統,我們不應該選擇簡單恢復模型,因為它不能夠幫助我們把系統還原到故障點。使用這種恢復模型時,我們最多只能把系統恢復到最后一次成功進行完全備份和差異備份的狀態。進行恢復時,我們首先要恢復最后一次成功進行的完全備份,然后在此基礎上恢復差異備份(差異備份只能把自從數據庫最后一次完全備份之后對數據庫的改動施加到數據庫上)。

完全恢復模型把trunc. log on chkpt.選項和Select Into/Bulk Copy選項都設置成false。完全恢復具有把數據庫恢復到故障點或特定即時點的能力。對于保護那些包含關鍵性數據的環境來說,這種模型很理想,但它提高了設備和管理的代價,因為如果數據庫訪問比較頻繁的話,系統將很快產生龐大的事務日志記錄。由于在這種模型中Select Into/Bulk Copy設置成了false,SQL Server將記錄包括大容量數據裝入在內的所有事件。

最后一種恢復模型是大容量日志記錄恢復,它把trunc. log on chkpt.設置成false,把Select Into/Bulk Copy設置成true。在大容量日志記錄恢復模型中,大容量復制操作的數據丟失程度要比完全恢復模型嚴重。完全恢復模型記錄大容量復制操作的完整日志,但在大容量日志記錄恢復模型下,SQL Server只記錄這些操作的最小日志,而且無法逐個控制這些操作。在大容量日志記錄恢復模型中,數據文件損壞可能導致要求手工重做工作。 下表比較了三種恢復模型的特點。

恢復模型優點工作損失表現能否恢復到即時點?
簡單允許高性能大容量復制操作。
收回日志空間,使得空間要求最小。
必須重做自最新的數據庫或差異備份后所發生的更改。可以恢復到任何備份的結尾處。隨后必須重做更改。
完全數據文件丟失或損壞不會導致工作損失。
可以恢復到任意即時點(例如,應用程序或用戶錯誤之前)。
正常情況下沒有。
如果日志損壞,則必須重做自最新的日志備份后所發生的更改。
可以恢復到任何即時點。
大容量日志記錄允許高性能大容量復制操作。
大容量操作使用最少的日志空間。
如果日志損壞,或者自最新的日志備份后發生了大容量操作,則必須重做自上次備份后所做的更改。 否則不丟失任何工作。可以恢復到任何備份的結尾處。隨后必須重做更改。

在數據庫的Options選項卡中,我們可以從Model下拉列表框選擇Simple把恢復模型改成簡單模型。另外,Microsoft擴展了ALTER DATABASE命令,我們可以用它設置數據庫屬性。例如,用下面這個T-SQL命令可以把恢復模型設置為完全恢復模型:

ALTER DATABASE Northwind SET RECOVERY FULL

SQL Server 2000提供了把數據庫轉入單用戶模式的許多選項,它們都屬于那種最令人感興趣的隱藏選項。為了修正訛誤或其他數據問題,數據庫管理員常常要把數據庫轉入單用戶模式。當數據庫處于這種模式時,其它用戶將不能再訪問數據,從而使得管理員能夠在用戶訪問損壞的數據之前修正數據問題。在SQL Server 7.0中,在把數據庫轉入單用戶模式之前,我們必須確保所有用戶都已經斷開連接。對于一個高速OLTP數據庫系統,比如電子商務系統,斷開所有用戶的連接非常困難,因為就在我們斷開某個用戶的連接時,其他用戶還會連接數據庫。SQL Server 2000極大地改進了這個操作過程,我們可以給用戶一個指定的時間去完成他們的事務,然后由SQL Server自動斷開他們的連接。另外,我們也可以在不提供任何延遲時間的情況下斷開所有的連接。

把數據庫轉入單用戶模式的方法之一是在數據庫的Options選項卡選中Restrict Access檢查框,然后選擇Single user。另外,Microsoft擴展了ALTER DATABASE命令,使它能夠把數據庫轉入單用戶模式,語法如下:

ALTER DATABASE Northwind SET SINGLE_USER

執行這個命令之后,SQL Server等待所有的數據庫連接,讓它們完成各自的事務。在這種狀態下,所有請求連接數據庫的用戶都將接收到圖2顯示的錯誤信息,并被重定向到他們各自的默認數據庫(通常是Master數據庫)。圖2的錯誤信息意味著數據庫處于凍結狀態,直至所有用戶斷開連接。如果目標服務器或者發出命令的用戶沒有設置query timeout參數,客戶端可能無限期地等待查詢完成,直至所有的連接被斷開。在Query Analyzer中,我們可以在Options屏幕(選擇菜單Tools,Options)的Connections選項卡里面指定超時秒數。在單用戶模式下,只有發出ALTER DATABASE命令的用戶可以保持連接。


圖2

另外,我們還可以用ROLLBACK IMMEDIATE命令斷開所有打開數據庫連接的用戶。但我們不能在Enterprise Manager中使用這個命令,而是應該用Query Analyzer執行,例如:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE

執行這個命令之后,SQL Server立即斷開所有的連接并回退它們的事務。所有正在執行事務的用戶都會接收到一個連接錯誤,而且他們不能再連接數據庫。

我們可以指定一個時間選項,讓SQL Server在斷開用戶的連接之前等待用戶完成他們的事務。這個選項是可選的,它用ROLLBACK AFTER關鍵詞指定,如下面的命令所示:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK AFTER 20 SECONDS

執行這個命令之后,SQL Server先等待20秒鐘,然后斷開所有的連接并回退它們的事務。在這個過程中,SQL Server不再接受新的連接請求,它是一個數據庫級的服務器暫停。在這個20秒之內,所有企圖連接數據庫的新用戶都將接收到圖2顯示的錯誤信息。如果執行這個命令的時候不存在已經連接的用戶,數據庫將立即轉入單用戶模式。

Enterprise Manager的數據庫Options選項卡中,最后一個新的配置選項是Compatibility Level,如圖1所示。要設置這個選項,我們只需從Compatibility Level下拉框選擇一個合適的兼容級別。在這個下拉框中,SQL Server 2000由80代表,7.0由70代表,6.5由65代表。兼容級別選項決定了某些數據庫查詢操作的執行方法。由于SQL Server的關系引擎在發展變化,某些查詢的結果在不同的版本之間可能不同。例如,如果我們執行下面這個查詢:

SELECT DATALENGTH('')

依賴于我們為數據庫設置的兼容級別是SQL Server 2000、7.0或者6.5,上述查詢可能得到兩個不同的結果。對于SQL Server 2000或7.0數據庫,返回結果是0,因為SQL Server 2000和7.0把空字符串視為真正的空;在SQL Server 6.5兼容模式下,返回結果是1,因為SQL Server 6.5把空字符串視為一個空格。SQL Server 7.0也有這個兼容級別選項,但它只能通過sp_dbcmptlevel存儲過程訪問。

綜上所述,在SQL Server 2000中,Microsoft對服務器和數據庫配置方法進行了幾個實質性的改動。不要輕視所有本文討論的選項和其他SQL Server配置選項——即使是一個小小的改動,它也可能對性能產生重大的正面或負面影響。在調整SQL Server的配置選項時,你最好使用Performance Monitor之類的服務器監視工具,確保選項調整不會對服務器性能產生負面影響。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗