微軟總是試圖使它的軟件安裝盡可能地簡單順暢,SQL Server 2000的安裝也不例外。你從安裝光盤的x86 etup文件夾啟動setupsql.exe、在安裝對話框中填入一些細節(jié)后,幾分鐘內(nèi),安裝將在沒有用戶介入的情況下繼續(xù)執(zhí)行。你甚至可以成功的安裝SQL Server 2000而不用明白那些選擇意味著什么——只需在大多數(shù)安裝對話框中點擊“下一步”。然而,我強烈建議你不要如此輕率地對待安裝;留意每一個選項并且確保你完全理解你所作的每個選擇的影響。一些低劣的決定,比如錯誤的排序規(guī)則設置,可能很難被修復;其他的,比如接受默認的身份驗證模式,可能創(chuàng)建了安全漏洞。
實例 當你開始安裝時,經(jīng)常執(zhí)行標準安裝(與遠程或無人值守安裝相比)。你調(diào)用setupsql.exe程序來啟動安裝向?qū)АT陂_始的兩個對話框——歡迎和機器名——之后,你需要對你的實例配置作選擇。SQL Server 2000支持在一臺機器上安裝多個SQL Server的實例。安裝程序顯示兩個對話框來給你安裝實例的選項。 首先,安裝選擇對話框顯示了讓你選擇是否安裝一個新的實例或者升級一個已經(jīng)存在的安裝。如果你選擇安裝一個新的實例,你將看到“實例名對話框”顯示出來。你可以指明一個實例名或選擇默認來安裝一個默認實例——如果默認實例還未安裝在機器上。 在做有關(guān)安裝實例的選擇時你需要考慮幾件事。如果機器上沒有默認實例、你打算在同一臺機器上使用SQL Server 2000和7.0,確信你沒有將SQL Server 2000作為默認實例安裝。SQL Server 7.0不支持命名實例,所以它必須成為默認實例。除了卸載和重新安裝SQL Server,你不能把命名實例改為默認實例或者相反。你同樣也不能在實例安裝后更改實例名。然而,你可以在安裝SQL Server 2000后再安裝SQL Server 7.0——如果你還沒有安裝一個默認實例的話。 如果一個SQL Server 7.0的安裝已經(jīng)存在,你可以將它升級——通過在安裝選擇對話框中選擇升級路徑并在后一個對話框中說明你想要升級默認實例。然而,SQL Server 2000將成為默認實例,SQL Server 7.0在這臺機器上將不復存在。要兩個版本都保留,把SQL Server 2000作為一個命名實例來安裝。 安裝完SQL Server 2000后,你可以使用備份和恢復、分離和連接、數(shù)據(jù)轉(zhuǎn)換服務或者復制數(shù)據(jù)庫向?qū)戆裇QL Server 7.0的數(shù)據(jù)庫調(diào)到SQL Server 2000中來。注意,當你升級一個先前的版本到SQL Server 2000時,無論選擇何種方式,你不能對數(shù)據(jù)庫同樣的拷貝指明超過一個的安裝,所以每個安裝必須維護它自己的每個數(shù)據(jù)庫拷貝。 另一個考慮涉及SQL Server 7.0被稱為“版本切換”的特性,它讓SQL Server 7.0與SQL Server 6.5共存于同一臺機器。但是,同時只有一個安裝可以是活動的,另一個是靜止的。當你調(diào)用版本控制,它激活靜止的安裝并使活動的那個停止活動。如果機器上包括一個SQL Server 6.5的安裝——它沒有以版本控制的形式和SQL Server 7.0共存,安裝程序要求你選擇兩個選項之一:升級SQL Server 6.5到SQL Server 2000的默認實例并且在兩個版本間保持一個版本控制;升級到SQL Server 2000的命名實例。和從SQL Server 7.0升級不同——它覆蓋了當前的安裝,6.5的安裝保留在電腦中——不管你為升級到2000選擇何種路徑。 如果7.0和6.5都已安裝并以“版本控制”的形式共存在同一臺機器中,而且你不想升級已存在的安裝,你可以安全地在同一臺機器上安裝2000的命名實例并且在同一臺機器上使用所有三個版本。然而,以版本控制形式共存的同時只有一個版本可以運行,而所有命名實例可以同時運行。 在說明了你的實例選項后,我們來到安裝類型對話框。
自定義安裝 在安裝類型對話框中,安裝向?qū)б竽阍?個安裝類型中作選擇:典型、最小和自定義。如果你選擇典型或者最小,SQL Server對組件和子組件、排序規(guī)則和網(wǎng)絡庫都使用默認選項。因為典型安裝會潛在地引起棘手的問題,我強烈建議始終選擇自定義——即使你認為默認滿足你的安裝需求。一些以前提及的選項——特別是排序規(guī)則——在安裝后如果發(fā)現(xiàn)不滿足需求是非常難以更改的。自定義安裝讓你再次檢查那些選項。
安全 在安裝過程中,你在2個對話框中說明和安全相關(guān)的信息:服務賬號和驗證模式。在服務賬號對話框里,你填入SQL Server和SQL Server Agent服務的服務賬號細節(jié)。每個服務使用在對話框中說明的賬號來被操作系統(tǒng)調(diào)入,并且在操作系統(tǒng)中運行于這個賬號的安全上下文里。比如:當你備份到一個磁盤設備,SQL Server檢查你用來登錄到SQL Server的登錄是否具有適當?shù)摹皞浞輸?shù)據(jù)庫”權(quán)限。然而,創(chuàng)建備份文件設備并寫入,SQL Server必須在磁盤或者網(wǎng)絡共享中創(chuàng)建一個文件,這個操作使用SQL Server服務賬號的安全上下文。 同樣的,SQL Server Agent服務在SQL Server Agent服務賬號的安全上下文下在SQL Server、操作系統(tǒng)或網(wǎng)絡中運行過程。雖然一個在本機不具有管理權(quán)限的賬號可以啟動SQL Server 服務,把SQL Server 服務賬號加入到本地管理員組是個好主意。否則,你需要額外地把所有所需的權(quán)限授權(quán)給該賬號,還需要授權(quán)該賬號合適的網(wǎng)絡權(quán)限。 而如果你試圖通過一個機器上不具有管理員權(quán)限的服務賬號來啟動SQL Server Agent,它甚至無法啟動。而且如果SQL Server Agent在網(wǎng)絡上的其他機器上執(zhí)行操作,比如復制或者多服務器工作,你應該使用一個在其他機器上具有適當權(quán)限的域賬號。比如在一個包含3臺SQL Server機器的單域多服務器環(huán)境中,一臺主服務器控制目標服務器上的自動活動。因為雙方(主服務器和目標服務器)需要相互通訊,你需要確保主服務器上的SQL Server Agent服務賬號在目標服務器上具有適當?shù)臋?quán)限,反之亦然。配置這樣一個環(huán)境的最簡便方法就是創(chuàng)建一個域賬號,使它在所有服務器上成為本地管理員組的成員,并且通過該賬號來調(diào)用所有的SQL Server Agent服務。 在身份驗證模式對話框中,你可以選擇是否只允許Windows身份驗證登錄(Windows身份驗證模式)或者Windows和SQL Server兩者登錄(混合模式)。你也可以為sa(System Administrator)的SQL Server登錄指定一個密碼。Windows身份驗證模式是默認的和最常用的推薦安全模式。然而,為安全起見,我建議你選擇混合模式并且為sa賬號提供一個密碼,在安裝完成和處理完一些其他的安全項目后,再把驗證模式改為Windows身份驗證模式。如果你選擇Windows身份驗證模式作為你的服務器的安全模式,安裝過程把sa登錄創(chuàng)建為無效并且沒有密碼(因為SQL Server身份驗證模式是無效的)。你可以在安裝后更改sa的密碼——我強烈建議你這么做——但是一開始就選擇Windows身份驗證模式是危險的,因為你可能忘了更改密碼或者使用空密碼,以為sa已經(jīng)失效。 無論你選擇何種模式,安裝程序都為BUILTIN\Administrators組創(chuàng)建一個Windows身份驗證的登錄,它映射到本地機器的管理員組。這個登錄的創(chuàng)建意味著所有本地管理員組的成員,包括域組域管理員,都是你的SQL Server的系統(tǒng)管理員(sysadmin)角色的成員。給予網(wǎng)絡和本地管理員在SQL Server上的毫無限制的權(quán)限并不總是一個好主意,因為這引入了安全風險,這樣一來你可能決定從SQL Server 的sysadmin角色中移除BUILTIN\Administrators,或者你可能從SQL Server中完全移去這些自動創(chuàng)建的登錄而為DBA成員組用sysadmin身份創(chuàng)建一個登錄——不是網(wǎng)絡管理員。 如果你決定遵從上述這些建議,這樣做就夠了:首先,為DBA成員組用sysadmin身份創(chuàng)建一個登錄,然后刪除BUILTIN\Administrators登錄。如果你的服務器的身份驗證模式時Windows而且你在為DBA創(chuàng)建登錄以前刪除所有具有sysadmin資格的登錄,你會發(fā)現(xiàn)你自己被鎖在了SQL Server之外,無法執(zhí)行管理任務——如:創(chuàng)建新的登錄。如果你落入了這個陷阱,你仍然可以通過把注冊表HKEY_LOCAL_MACHINE OFTWARE\Microsoft\Microsoft SQL Server\實例名\MSSQLServer\LoginMode的鍵值更改為2,來把SQL Server身份驗證的模式改為混合模式,修改好后重新啟動SQL Server服務即可。 雖然通過注冊表可以控制SQL Server的登錄模式是方便的,它也有個缺點。任何人只要具有編輯注冊表鍵值的權(quán)限,包括網(wǎng)絡和本地管理員,都可以更改SQL Server的身份驗證模式。如果你用Windows身份驗證模式來安裝SQL Server,sa是失效的但是仍然具有一個空白的密碼。如果接著你更改SQL Server身份驗證模式到混合模式(這就使sa登錄有效),任何人都可以作為sa登錄。所以,絕對確保你一完成安裝就更改sa密碼或者在安裝過程中選擇混合模式并且為sa提供一個密碼。
排序規(guī)則 接下來,你需要選擇排序規(guī)則設置。SQL Server 2000中的排序規(guī)則(Collation)設置用來管理和語言相關(guān)的行為、對象名稱和列的值的唯一性,以及排序規(guī)則(sorting rules)。在排序規(guī)則設置對話框里,你說明排序規(guī)則并在SQL Server排序規(guī)則和Windows排序規(guī)則兩者之間選擇其一。如果你需要和以前SQL Server版本的向后兼容性,選擇SQL Server排序規(guī)則——比如,如果你打算在一個早期版本的SQL Server和SQL Server 2000之間使用復制。否則,選擇Windows排序規(guī)則。SQL Server 2000的排序規(guī)則設置,不管是Windows或是SQL Server,合并了在先前版本中的3個獨立的設置:字符集,排序次序和Unicode排序規(guī)則。除了整合舊的3個設置到一起外,SQL Server 2000在排序規(guī)則中還提供了比以前版本更為強大的靈活性。 在你安裝SQL Server 2000時選擇的排序規(guī)則決定了系統(tǒng)數(shù)據(jù)庫的排序規(guī)則設置。要在安裝后更該系統(tǒng)數(shù)據(jù)庫的排序規(guī)則設置,你需要腳本化所有你的系統(tǒng)對象(比如:登錄,消息,工作)并且運行rebuildm.exe,它用新的排序規(guī)則重建了所有的系統(tǒng)數(shù)據(jù)庫。然而,你不必先導出用戶數(shù)據(jù)庫中的所有數(shù)據(jù)再在運行完rebuildm.exe后把他們再導入——就像你再SQL Server 7.0中所作的那樣。你只須重新連接用戶數(shù)據(jù)庫到SQL Server。你可以用不同于默認服務器的排序規(guī)則(這是模板系統(tǒng)數(shù)據(jù)庫的)的排序規(guī)則配置你的用戶數(shù)據(jù)庫,或者甚至用不同于服務器設置的排序規(guī)則連接或恢復一個數(shù)據(jù)庫。你可以以后修改用戶數(shù)據(jù)庫的默認排序規(guī)則。對于特定的一列,你可以指定不同于默認的數(shù)據(jù)庫排序規(guī)則的一種排序規(guī)則;你甚至可以稍后修改列的排序規(guī)則——如果該列上沒有創(chuàng)建索引的話。 雖然在排序規(guī)則方面SQL Server 2000是靈活的,不要低估了你在安裝時作的選擇。正如我前面所言,服務器的排序規(guī)則應用到所有的系統(tǒng)數(shù)據(jù)庫并且決定了記錄在系統(tǒng)數(shù)據(jù)庫中所有對象(如登錄名,數(shù)據(jù)庫名)的排序規(guī)則。進一步而言,tempdb的排序規(guī)則也是你在安裝過程中選擇的服務器排序規(guī)則。當你創(chuàng)建一個臨時表,表的列使用tempdb的排序規(guī)則——除非你在每列的定義里指明COLLATE 數(shù)據(jù)庫默認。
網(wǎng)絡庫 在說明了排序規(guī)則設置后,你來到了網(wǎng)絡庫對話框。網(wǎng)絡庫是客戶機應用程序用來和SQL Server通訊的協(xié)議。客戶機和SQL Server都必須有至少一個匹配的網(wǎng)絡庫,通過它兩者可以通訊。在網(wǎng)絡庫對話框中,你設置SQL Server將會用來和客戶機通訊的網(wǎng)絡庫。 在SQL Server 6.5中,只有命名管道和多協(xié)議允許Windows身份驗證;所有其他網(wǎng)絡庫只允許SQL Server身份驗證。這樣一來,對于SQL Server 6.5來說,你想要支持的登錄類型時你選擇網(wǎng)絡庫的一個因素。進一步來說,只有多協(xié)議允許數(shù)據(jù)加密,所以如果你SQL Server 6.5支持數(shù)據(jù)加密,你就不得不選擇這個網(wǎng)絡庫。在SQL Server 7.0中,所有網(wǎng)絡庫支持Windows身份驗證,在這個意義上你就更加靈活,但是多協(xié)議仍然是唯一允許數(shù)據(jù)加密的網(wǎng)絡庫。 在SQL Server 2000里,你可以通過使用SQL Server 網(wǎng)絡工具和SQL Server客戶機網(wǎng)絡工具的安全套接字層(Secure Socket Layer,SSL)來對所有網(wǎng)絡庫強制加密,這樣一來,加密因素不再決定網(wǎng)絡庫的選擇。同樣,在SQL Server 2000里,多協(xié)議不支持命名實例方案(服務器名\實例名),這樣的話,當你使用命名實例時,多協(xié)議也不是個好的選擇。SQL Server 2000中最通用的網(wǎng)絡庫大概是TCP/IP套接字吧。它提供了良好的性能,允許Windows身份驗證,而且你可以在需要時對它進行強制SSL加密。 大多數(shù)使用SQL Server早期版本的用戶知道SQL Server的默認TCP端口是端口1433。當使用默認端口時,客戶機連接除了服務器名或者IP地址不需要提供端口號。然而,SQL Server 2000支持多個實例,這無法統(tǒng)統(tǒng)使用同樣的端口號。所以當你安裝一個命名實例時,安裝程序建議把0作為端口號。端口號為0意味著當SQL Server第一次啟動時,它動態(tài)地選擇一個空閑的端口號并且把它永久保留或者直到你稍后手工修改它為止。那么客戶機連接如何繼續(xù)通過僅僅提供服務器名稱/IP地址+實例名而不用指定端口號找到SQL Server呢?SQL Server 2000中的一個監(jiān)聽器服務監(jiān)聽端口1433上的客戶機請求,然后通過檢測請求中的實例名并把它和實例的端口號匹配,再把該請求重定向到適當?shù)膶嵗?/p>
無人值守和遠程安裝 現(xiàn)在我們的標準安裝已經(jīng)完成,讓我們討論一下無人值守安裝。Setupsql.exe程序讓你記錄下一個應答文件,它包括了你在安裝程序?qū)υ捒蛑谐_x的對于各種安裝選項的所有回答。稍后,你能夠通過調(diào)用以該應答文件作為參數(shù)的setupsql.exe命令來運行一個安裝。這種無需任何用戶干預的安裝類型被稱為無人值守安裝。 要準備應答文件,先啟動安裝程序,在安裝選擇對話框中選擇高級選項,在對話框中選擇選取“記錄無人值守.ISS文件”。安裝程序會指導你完成常規(guī)的安裝對話框,其中你可以填入所有你想要記錄的選項。當你完成后,安裝程序在\WINNT文件夾下創(chuàng)建一個名為setup.iss的文件。 要啟動一個無人值守安裝,運行setupsql.exe程序,用-s作為執(zhí)行安靜安裝的參數(shù)、-fl參數(shù)指定一個應答文件。例如,要啟動一個安靜的、無人值守的安裝——安裝完成后不通知你,你可以使用以下命令: <path> etupsql.exe –s –fl <path> etup.iss 如果你想在安裝完成時得到通知,從命令行執(zhí)行如下setupsql.exe程序,或者把它寫入一個批處理文件中: start /wait <path> etupsql.exe -s –fl <path> etup.iss 直到安裝結(jié)束,控制才會傳遞到下一條命令。當你從批處理文件啟動安裝,而這個文件又包括其他依賴于安裝的行為時,使用start /wait選項是特別重要的。例如,假設你要為一個名為INST1的命名實例執(zhí)行無人值守安裝來創(chuàng)建批處理文件,然后啟動SQL Server服務,再運行一個用來創(chuàng)建數(shù)據(jù)庫及其對象(如:表、存儲過程)的sql腳本。這個批處理文件看起來可能像這樣: start /wait D:\X86 etup etupsql.exe –s –fl C:\WINNT etup.iss net start MSSQL$INST1 OSQL /E /I “c:\data cripts\createappdb.sql” 如果你不使用start /wait選項,控制從安裝一開始就移到了批處理文件的第二條命令,而這條NET START命令試圖啟動一個還不存在的服務。 對一個無人值守安裝進行故障排除要比對待標準安裝的故障排除更需要慎重對待。標準安裝往往在安裝程序遇到問題時通過顯示一個包含出錯信息的對話框(并伴有響亮的警告聲)來通知你。而無人值守安裝只是簡單地終止,且沒有交互的通知。 要了解如何對無人值守安裝進行故障排除,讓我們來看一組我遇到過的問題。假設你已經(jīng)在服務器上完成了另一個產(chǎn)品的安裝,然后你試圖執(zhí)行一個SQL Server的無人值守安裝。安裝程序檢測到在前一個安裝結(jié)束后服務器尚未重啟,于是放棄安裝,同時沒有任何信息提示。如果你保持任務管理器窗口打開,你會注意到setupsql.exe 程序不活動,所以SQL Server沒有被安裝。你也應該檢查日志文件。一旦安裝成功,\WINNT etup.log文件應該顯示0作為出錯代碼;然而,在我描述的情景中,他很可能顯示-1,這表示一個基本錯誤。你也應該看一下出錯信息。 當執(zhí)行無人值守安裝時,我遇到過多次的另一個錯誤是“對話框次序紊亂”。在我調(diào)用安裝程序后不久我就意識到這一問題的存在——那是在我打開任務管理器并看到setupsql.exe雖然在運行但是沒有像正常的無人值守安裝那樣調(diào)用和釋放進程。同時,安裝程序通常在\Program Files\Microsoft SQL Server下創(chuàng)建的文件夾也沒有被創(chuàng)建。Setupsql.exe程序看來并沒有占用CPU或者I/O資源,只是在大約10分鐘后消失了。Setup.log文件顯示一個-12的錯誤代碼而sqlstp.log文件顯示沒有錯誤——實際上,它看來還未完成。Sqlstp包含了不完整的注意事項,只是一條消息——Begin Action:DialogShow<dialogname>。BOL顯示了以下有關(guān)錯誤代碼-12的信息:“對話框次序紊亂。這是一個常見錯誤,由在安裝初始化文件(Setup.iss)文件中的一個對話框次序紊亂所引起。這是由于Setup.iss文件創(chuàng)建過程中的系統(tǒng)問題所產(chǎn)生?!弊阋源_認,在我重新對Setup.iss文件排序后,無人值守安裝成功完成。 除了完全安裝,你還可以執(zhí)行SQL Server 2000服務包的無人值守安裝。要把服務包應用到默認實例上,從服務包的安裝目錄調(diào)用setupsql.exe程序,指明應答文件為位于服務包安裝目錄根目錄下的sql2kdef.iss。例如:如果服務包安裝文件位于c: ql2ksq2下,執(zhí)行入下命令: start /wait c: ql2ksp2\x86 etup etupsql.exe –s –fl c: ql2ksp2 ql2kdef.iss 要把服務包應用到命名實例上,使用sql2knm.iss應答文件,但是首先修改文件中的下列兩行來對應正確的命名實例: InstanceName = INSTANCE_NAME NMPPipeName=\\.\pipe\MSSQL$INSTANCE_NAME ql\query 另一個高級選項——遠程安裝——讓你在一臺遠程的電腦上安裝SQL Server 2000。你可以從一臺本地的電腦上手工記錄下一個setup.iss文件,把它復制到遠程電腦上,在激活setupsql.exe程序和在遠程電腦上的setup.iss文件。然而,你可以替自己省些麻煩——通過在本地電腦上運行setupsql.exe程序,在電腦名對話框中選擇遠程電腦,指明你想要安裝到的電腦名。當你點擊下一步時,遠程安裝信息對話框會顯示出來。 首先你要提供賬號細節(jié)(用戶、密碼、域),到目標文件夾的UNC路徑和源安裝文件的UNC路徑。接下來,安裝程序?qū)⒅敢阃瓿沙R?guī)安裝對話框并根據(jù)你的選擇記錄下setup.iss文件。接著,程序復制setup.iss文件到目標電腦的\WINNT文件夾下,再用復制的setup.iss文件來激活setupsql.exe。 如果你在目標電腦上打開任務管理器,你會看到setupsql.exe進程在安裝過程中調(diào)用和釋放其他進程。在本地電腦上,安裝程序顯示遠程安裝正在進行中,并且會在完成時通知你。 最后的話 雖然基本安裝看來簡單,你仍需隊與你所選擇的安裝選項給予密切注意,并且完全理解它們。良好的安裝選擇為運行和管理SQL Server提供了一個堅實的基礎(chǔ)。而如果你認為執(zhí)行無人值守安裝和遠程安裝聽起來復雜的話,我希望這篇文章有助于你對它們加深了解。 |