配置SQL Server 2000選項(xiàng)[ 作者:松下客 來源:網(wǎng)絡(luò) 更新時(shí)間:2005-10-30 ]
SQL Server服務(wù)器的配置選項(xiàng)屬于那種人們了解較少且經(jīng)常誤用的選項(xiàng)。當(dāng)一個(gè)技術(shù)支持人員要求你按照某種方式調(diào)整一個(gè)選項(xiàng)、而另一個(gè)技術(shù)支持人員卻要求你按照另一種完全對(duì)立的方式調(diào)整同一個(gè)選項(xiàng)時(shí),你可能對(duì)這些選項(xiàng)的真正含義感到困惑。有關(guān)這些選項(xiàng)的資料很缺乏,至少可以說不夠詳細(xì)和清楚。在SQL Server 2000中,Microsoft減少了幾個(gè)配置選項(xiàng),讓SQL Server動(dòng)態(tài)配置它們,從而減少了幾個(gè)容易混淆的地方。同時(shí),Microsoft又為SQL Server 2000新增了兩個(gè)服務(wù)器配置選項(xiàng),調(diào)整了一些數(shù)據(jù)庫選項(xiàng),從而稍許簡化了數(shù)據(jù)庫管理員的工作。 新增的服務(wù)器選項(xiàng)就象訪問大多數(shù)企業(yè)版服務(wù)器的屬性一樣,我們不能在SQL Server Enterprise Manager中通過服務(wù)器屬性窗口訪問SQL Server 2000新增的兩個(gè)服務(wù)器選項(xiàng)。作為防止用戶由于不小心而錯(cuò)誤配置服務(wù)器的一個(gè)安全措施,Microsoft沒有把這些高級(jí)配置選項(xiàng)放入Enterprise Manager。相反,我們必須使用T-SQL/sp_configure系統(tǒng)存儲(chǔ)過程去訪問這些高級(jí)選項(xiàng)。我們可以用不帶參數(shù)運(yùn)行sp_configure的方法查看服務(wù)器的當(dāng)前配置。在執(zhí)行結(jié)果中,config_value是SQL Server從Master數(shù)據(jù)庫syscurconfigs表提取出來的數(shù)據(jù),它顯示了服務(wù)器的當(dāng)前配置;run_value列顯示了執(zhí)行sp_configure時(shí)SQL Server正在使用的選項(xiàng),SQL Server在sysconfigures表中存儲(chǔ)這些數(shù)據(jù)。修改某個(gè)選項(xiàng)之后,我們必須執(zhí)行RECONFIGURE命令(在大多數(shù)情況下,還要重新啟動(dòng)SQL Server)才能讓新的run_value顯示出來。本文所討論的所有選項(xiàng)都要求重新啟動(dòng)SQL Server。 服務(wù)器選項(xiàng)總共有36個(gè),默認(rèn)情況下,sp_configure存儲(chǔ)過程只顯示其中的10個(gè),顯示結(jié)果中不包含高級(jí)選項(xiàng),而且所有新的SQL Server配置選項(xiàng)都不會(huì)出現(xiàn)在這個(gè)精簡的清單中。然而,我們可以使用show advanced options命令參數(shù)讓SQL Server顯示出所有選項(xiàng)。要啟用show advanced options,我們使用如下命令格式: EXEC sp_configure ‘show advanced options‘, ‘1‘ RECONFIGURE 要安裝一個(gè)選項(xiàng),我們必須在使用sp_configure配置服務(wù)器之后運(yùn)行RECONFIGURE命令。上面命令的輸出結(jié)果如下: Configuration option ‘show advanced options‘ changed from 0 to 1. Run the RECONFIGURE command to install. 一旦能夠查看高級(jí)選項(xiàng),我們就可以看到兩個(gè)新的服務(wù)器選項(xiàng)。其中最重要的一個(gè)新選項(xiàng)是awe enabled選項(xiàng),它能夠讓SQL Server企業(yè)版提高服務(wù)器的內(nèi)存訪問能力。默認(rèn)情況下,SQL Server能夠使用的最大RAM是3GB。在Windows 2000上,應(yīng)用程序可以 使用Address Windowing Extensions(AWE)API訪問更多的RAM。例如,在Windows 2000 Advanced Server中,我們能夠使用多達(dá)8GB的內(nèi)存,只有Windows 2000 Datacenter Server支持64GB內(nèi)存才超過它。顯然,當(dāng)SQL Server擁有更多的可用內(nèi)存,它將能夠緩沖更多的數(shù)據(jù),改善查詢的響應(yīng)時(shí)間。 不過,啟用awe enabled選項(xiàng)也有副作用。啟用awe enabled選項(xiàng)之后,SQL Server不再動(dòng)態(tài)地分配內(nèi)存。由于缺乏內(nèi)存動(dòng)態(tài)分配功能,管理負(fù)擔(dān)隨之增加,因?yàn)槲覀儽仨氉屑?xì)地監(jiān)視RAM使用情況。另外,設(shè)置awe enabled選項(xiàng)之后,我們還必須設(shè)置max server memory選項(xiàng)。如果我們不設(shè)置max server memory選項(xiàng),服務(wù)器RAM又等于最低要求3GB,SQL Server將在啟動(dòng)的時(shí)候占據(jù)機(jī)器上幾乎所有的RAM,只給Windows和其他應(yīng)用留下128 MB的RAM。通過設(shè)置max server memory選項(xiàng),我們可以限制SQL Server使用的內(nèi)存總量。 awe enabled選項(xiàng)只能在SQL Server 2000 Enterprise Edition上使用,操作系統(tǒng)必須是Windows 2000 Advance Server或Datacenter。如果你在SQL Server的其他版本上使用這個(gè)選項(xiàng)(或者操作系統(tǒng)是WinNT),SQL Server將忽略這個(gè)選項(xiàng)。在某些服務(wù)器配置組合下,不適當(dāng)?shù)嘏渲眠@個(gè)選項(xiàng)將導(dǎo)致不可預(yù)知的結(jié)果。例如,如果我們?cè)赪indows 98操作系統(tǒng)、運(yùn)行SQL Server Personal Edition的機(jī)器上設(shè)置這個(gè)選項(xiàng),SQL Server可能報(bào)告它已經(jīng)停止(甚至是在它正在運(yùn)行的時(shí)候),而且它將拒絕停止SQL Server實(shí)例。 在SQL Server Enterprise Edition服務(wù)器上啟用AWE包括三個(gè)步驟。首先,我們必須確保啟動(dòng)SQL Server實(shí)例的賬號(hào)具有在內(nèi)存中鎖定頁的權(quán)限。SQL Server安裝時(shí)自動(dòng)把頁鎖定權(quán)限授予我們指定用來啟動(dòng)SQL Server服務(wù)的Windows賬號(hào);但是,如果后來這個(gè)賬號(hào)已經(jīng)改變,你應(yīng)該檢查一下已經(jīng)把哪些權(quán)限授予了啟動(dòng)SQL Server的用戶。檢查賬號(hào)的權(quán)限可以使用Windows 2000的組策略工具。第二個(gè)步驟是運(yùn)行sp_configure存儲(chǔ)過程,把a(bǔ)we enabled選項(xiàng)設(shè)置為1。然后,我們必須執(zhí)行RECONFIGURE,用手工方式重新啟動(dòng)SQL Server。配置命令的語法為:
注意,在Windows 2000或者NT上,如果要訪問高于4GB的物理內(nèi)存,我們還必須采取其他一些措施,即修改boot.ini文件,加入/pae選項(xiàng)。 第二個(gè)新的SQL Server 2000選項(xiàng)用來啟用C2級(jí)安全審核模式。C2是一個(gè)政府安全等級(jí),它保證系統(tǒng)能夠保護(hù)資源并具有足夠的審核能力。C2模式允許我們監(jiān)視對(duì)所有數(shù)據(jù)庫實(shí)體的所有訪問企圖。啟用SQL Server的C2審核功能的命令如下:
(要實(shí)現(xiàn)完整的C2級(jí)安全保證,Windows操作系統(tǒng)也必須提供相應(yīng)的支持)啟用C2審核模式并重新啟動(dòng)之后,SQL Server自動(dòng)在\MSSQL\Data目錄下面創(chuàng)建跟蹤文件。我們可以使用SQL Server Profiler查看這些監(jiān)視服務(wù)器活動(dòng)的跟蹤文件。 SQL Server以128KB大小的塊為單位把數(shù)據(jù)寫入跟蹤文件。因此,當(dāng)SQL Server非正常停止時(shí),我們最多可能丟失128 KB的日志數(shù)據(jù)??梢韵胂螅瑢徍诵畔⒌娜罩疚募⒁院芸斓乃俣仍龃?。例如,某次試驗(yàn)只訪問了三個(gè)表,跟蹤文件已經(jīng)超過了1MB。當(dāng)跟蹤文件超過200MB時(shí),C2審核將關(guān)閉舊文件并創(chuàng)建新文件。每次SQL Server啟動(dòng)的時(shí)候,它會(huì)創(chuàng)建一個(gè)新的跟蹤文件。如果磁盤空間不足,SQL Server將停止運(yùn)行,直至我們?yōu)閷徍巳罩踞尫懦鲎銐虻拇疟P空間并重新啟動(dòng)SQL Server實(shí)例。在SQL Server啟動(dòng)的時(shí)候,我們可以使用-f參數(shù)禁用審核。 減少的服務(wù)器選項(xiàng)在SQL Server 2000中,Microsoft減少了原有的幾個(gè)選項(xiàng),讓SQL Server 2000自動(dòng)配置這些選項(xiàng)。減少的選項(xiàng)中最引人注目的是max async IO選項(xiàng)。這個(gè)選項(xiàng)允許數(shù)據(jù)庫管理員指定在單一的數(shù)據(jù)庫文件上可以出現(xiàn)多少異步的磁盤讀取和寫入操作。SQL Server 7.0中的max async IO選項(xiàng)是人們了解最少的選項(xiàng)之一,它的默認(rèn)值是32,但很少有管理員去調(diào)整這個(gè)值。在SQL Server 2000中,這個(gè)異步IO選項(xiàng)隨著SQL Server接收的適配器反饋信息動(dòng)態(tài)地上升或者下降,SQL Server利用反饋算法確定服務(wù)器負(fù)載以及SQL Server系統(tǒng)能夠控制的數(shù)量。 數(shù)據(jù)庫選項(xiàng)在SQL Server 2000中,如果你曾經(jīng)查看過Enterprise Manager中數(shù)據(jù)庫的Options選項(xiàng)卡,你可能會(huì)對(duì)一些通用選項(xiàng)的消失感到困惑(要訪問Options選項(xiàng)卡,在Enterprise Manager中右擊數(shù)據(jù)庫然后選擇Properties)。Options選項(xiàng)卡中減少了trunc. log on chkpt.以及Select Into/Bulk Copy這兩個(gè)選項(xiàng),如圖1所示。為了清楚和向后兼容起見,這些通用選項(xiàng)現(xiàn)在稱為recovery model(恢復(fù)模型)選項(xiàng)。如果用SQL Server 2000的Enterprise Manager連接SQL Server 7.0數(shù)據(jù)庫,我們?nèi)耘f可以看到這些老選項(xiàng)。
以前,我們使用下面的命令為Northwind數(shù)據(jù)庫開啟trunc. log on chkpt.選項(xiàng): SP_DBOPTION Northwind ,‘trunc. log on chkpt.‘, true 設(shè)置好選項(xiàng)之后,我們可以通過Options選項(xiàng)卡或者下面的查詢檢查Northwind數(shù)據(jù)庫上這些選項(xiàng)設(shè)置是否成功: SELECT DATABASEPROPERTY (‘Northwind‘, ‘IsTruncLog‘) 結(jié)果為1表示選項(xiàng)設(shè)置成了true;結(jié)果為0表示選項(xiàng)設(shè)置成了false。如果結(jié)果為NULL,它表示我們或者選擇了一個(gè)錯(cuò)誤的選項(xiàng),或者數(shù)據(jù)庫不存在。 為了便于使用,Microsoft把trunc. log on chkpt.和Select Into/Bulk Copy選項(xiàng)換成了恢復(fù)模型設(shè)置。這種選項(xiàng)改變的目的在于確保數(shù)據(jù)庫管理員能夠充分理解在災(zāi)難恢復(fù)策略中恢復(fù)模型選項(xiàng)的意義。SQL Server 2000為我們提供了三種數(shù)據(jù)庫恢復(fù)模型:simple(簡單恢復(fù)),full(完全恢復(fù)),bulk_logged(大容量日志記錄恢復(fù))。 簡單恢復(fù)模型最容易操作,但它是最缺乏靈活性的災(zāi)難恢復(fù)策略。選擇簡單恢復(fù)模型等同于把trunc. log on chkpt.設(shè)置成true。在這種恢復(fù)模型下,我們只能進(jìn)行完全備份和差異備份(differential backup):這是因?yàn)槭聞?wù)日志總是被截?cái)?,事?wù)日志備份不可用。一般地,對(duì)于一個(gè)包含關(guān)鍵性數(shù)據(jù)的系統(tǒng),我們不應(yīng)該選擇簡單恢復(fù)模型,因?yàn)樗荒軌驇椭覀儼严到y(tǒng)還原到故障點(diǎn)。使用這種恢復(fù)模型時(shí),我們最多只能把系統(tǒng)恢復(fù)到最后一次成功進(jìn)行完全備份和差異備份的狀態(tài)。進(jìn)行恢復(fù)時(shí),我們首先要恢復(fù)最后一次成功進(jìn)行的完全備份,然后在此基礎(chǔ)上恢復(fù)差異備份(差異備份只能把自從數(shù)據(jù)庫最后一次完全備份之后對(duì)數(shù)據(jù)庫的改動(dòng)施加到數(shù)據(jù)庫上)。 完全恢復(fù)模型把trunc. log on chkpt.選項(xiàng)和Select Into/Bulk Copy選項(xiàng)都設(shè)置成false。完全恢復(fù)具有把數(shù)據(jù)庫恢復(fù)到故障點(diǎn)或特定即時(shí)點(diǎn)的能力。對(duì)于保護(hù)那些包含關(guān)鍵性數(shù)據(jù)的環(huán)境來說,這種模型很理想,但它提高了設(shè)備和管理的代價(jià),因?yàn)槿绻麛?shù)據(jù)庫訪問比較頻繁的話,系統(tǒng)將很快產(chǎn)生龐大的事務(wù)日志記錄。由于在這種模型中Select Into/Bulk Copy設(shè)置成了false,SQL Server將記錄包括大容量數(shù)據(jù)裝入在內(nèi)的所有事件。 最后一種恢復(fù)模型是大容量日志記錄恢復(fù),它把trunc. log on chkpt.設(shè)置成false,把Select Into/Bulk Copy設(shè)置成true。在大容量日志記錄恢復(fù)模型中,大容量復(fù)制操作的數(shù)據(jù)丟失程度要比完全恢復(fù)模型嚴(yán)重。完全恢復(fù)模型記錄大容量復(fù)制操作的完整日志,但在大容量日志記錄恢復(fù)模型下,SQL Server只記錄這些操作的最小日志,而且無法逐個(gè)控制這些操作。在大容量日志記錄恢復(fù)模型中,數(shù)據(jù)文件損壞可能導(dǎo)致要求手工重做工作。 下表比較了三種恢復(fù)模型的特點(diǎn)。
在數(shù)據(jù)庫的Options選項(xiàng)卡中,我們可以從Model下拉列表框選擇Simple把恢復(fù)模型改成簡單模型。另外,Microsoft擴(kuò)展了ALTER DATABASE命令,我們可以用它設(shè)置數(shù)據(jù)庫屬性。例如,用下面這個(gè)T-SQL命令可以把恢復(fù)模型設(shè)置為完全恢復(fù)模型:
SQL Server 2000提供了把數(shù)據(jù)庫轉(zhuǎn)入單用戶模式的許多選項(xiàng),它們都屬于那種最令人感興趣的隱藏選項(xiàng)。為了修正訛誤或其他數(shù)據(jù)問題,數(shù)據(jù)庫管理員常常要把數(shù)據(jù)庫轉(zhuǎn)入單用戶模式。當(dāng)數(shù)據(jù)庫處于這種模式時(shí),其它用戶將不能再訪問數(shù)據(jù),從而使得管理員能夠在用戶訪問損壞的數(shù)據(jù)之前修正數(shù)據(jù)問題。在SQL Server 7.0中,在把數(shù)據(jù)庫轉(zhuǎn)入單用戶模式之前,我們必須確保所有用戶都已經(jīng)斷開連接。對(duì)于一個(gè)高速OLTP數(shù)據(jù)庫系統(tǒng),比如電子商務(wù)系統(tǒng),斷開所有用戶的連接非常困難,因?yàn)榫驮谖覀償嚅_某個(gè)用戶的連接時(shí),其他用戶還會(huì)連接數(shù)據(jù)庫。SQL Server 2000極大地改進(jìn)了這個(gè)操作過程,我們可以給用戶一個(gè)指定的時(shí)間去完成他們的事務(wù),然后由SQL Server自動(dòng)斷開他們的連接。另外,我們也可以在不提供任何延遲時(shí)間的情況下斷開所有的連接。 把數(shù)據(jù)庫轉(zhuǎn)入單用戶模式的方法之一是在數(shù)據(jù)庫的Options選項(xiàng)卡選中Restrict Access檢查框,然后選擇Single user。另外,Microsoft擴(kuò)展了ALTER DATABASE命令,使它能夠把數(shù)據(jù)庫轉(zhuǎn)入單用戶模式,語法如下: ALTER DATABASE Northwind SET SINGLE_USER 執(zhí)行這個(gè)命令之后,SQL Server等待所有的數(shù)據(jù)庫連接,讓它們完成各自的事務(wù)。在這種狀態(tài)下,所有請(qǐng)求連接數(shù)據(jù)庫的用戶都將接收到圖2顯示的錯(cuò)誤信息,并被重定向到他們各自的默認(rèn)數(shù)據(jù)庫(通常是Master數(shù)據(jù)庫)。圖2的錯(cuò)誤信息意味著數(shù)據(jù)庫處于凍結(jié)狀態(tài),直至所有用戶斷開連接。如果目標(biāo)服務(wù)器或者發(fā)出命令的用戶沒有設(shè)置query timeout參數(shù),客戶端可能無限期地等待查詢完成,直至所有的連接被斷開。在Query Analyzer中,我們可以在Options屏幕(選擇菜單Tools,Options)的Connections選項(xiàng)卡里面指定超時(shí)秒數(shù)。在單用戶模式下,只有發(fā)出ALTER DATABASE命令的用戶可以保持連接。
另外,我們還可以用ROLLBACK IMMEDIATE命令斷開所有打開數(shù)據(jù)庫連接的用戶。但我們不能在Enterprise Manager中使用這個(gè)命令,而是應(yīng)該用Query Analyzer執(zhí)行,例如: ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE 執(zhí)行這個(gè)命令之后,SQL Server立即斷開所有的連接并回退它們的事務(wù)。所有正在執(zhí)行事務(wù)的用戶都會(huì)接收到一個(gè)連接錯(cuò)誤,而且他們不能再連接數(shù)據(jù)庫。 我們可以指定一個(gè)時(shí)間選項(xiàng),讓SQL Server在斷開用戶的連接之前等待用戶完成他們的事務(wù)。這個(gè)選項(xiàng)是可選的,它用ROLLBACK AFTER關(guān)鍵詞指定,如下面的命令所示: ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK AFTER 20 SECONDS 執(zhí)行這個(gè)命令之后,SQL Server先等待20秒鐘,然后斷開所有的連接并回退它們的事務(wù)。在這個(gè)過程中,SQL Server不再接受新的連接請(qǐng)求,它是一個(gè)數(shù)據(jù)庫級(jí)的服務(wù)器暫停。在這個(gè)20秒之內(nèi),所有企圖連接數(shù)據(jù)庫的新用戶都將接收到圖2顯示的錯(cuò)誤信息。如果執(zhí)行這個(gè)命令的時(shí)候不存在已經(jīng)連接的用戶,數(shù)據(jù)庫將立即轉(zhuǎn)入單用戶模式。 Enterprise Manager的數(shù)據(jù)庫Options選項(xiàng)卡中,最后一個(gè)新的配置選項(xiàng)是Compatibility Level,如圖1所示。要設(shè)置這個(gè)選項(xiàng),我們只需從Compatibility Level下拉框選擇一個(gè)合適的兼容級(jí)別。在這個(gè)下拉框中,SQL Server 2000由80代表,7.0由70代表,6.5由65代表。兼容級(jí)別選項(xiàng)決定了某些數(shù)據(jù)庫查詢操作的執(zhí)行方法。由于SQL Server的關(guān)系引擎在發(fā)展變化,某些查詢的結(jié)果在不同的版本之間可能不同。例如,如果我們執(zhí)行下面這個(gè)查詢: SELECT DATALENGTH(‘‘) 依賴于我們?yōu)閿?shù)據(jù)庫設(shè)置的兼容級(jí)別是SQL Server 2000、7.0或者6.5,上述查詢可能得到兩個(gè)不同的結(jié)果。對(duì)于SQL Server 2000或7.0數(shù)據(jù)庫,返回結(jié)果是0,因?yàn)镾QL Server 2000和7.0把空字符串視為真正的空;在SQL Server 6.5兼容模式下,返回結(jié)果是1,因?yàn)镾QL Server 6.5把空字符串視為一個(gè)空格。SQL Server 7.0也有這個(gè)兼容級(jí)別選項(xiàng),但它只能通過sp_dbcmptlevel存儲(chǔ)過程訪問。 綜上所述,在SQL Server 2000中,Microsoft對(duì)服務(wù)器和數(shù)據(jù)庫配置方法進(jìn)行了幾個(gè)實(shí)質(zhì)性的改動(dòng)。不要輕視所有本文討論的選項(xiàng)和其他SQL Server配置選項(xiàng)——即使是一個(gè)小小的改動(dòng),它也可能對(duì)性能產(chǎn)生重大的正面或負(fù)面影響。在調(diào)整SQL Server的配置選項(xiàng)時(shí),你最好使用Performance Monitor之類的服務(wù)器監(jiān)視工具,確保選項(xiàng)調(diào)整不會(huì)對(duì)服務(wù)器性能產(chǎn)生負(fù)面影響。 (松下客 2001年06月11日 21:11) |
|