目前SQL Server數(shù)據(jù)庫(kù)作為微軟一款優(yōu)秀的RDBMS,其本身啟動(dòng)的時(shí)候是很少出問(wèn)題的,我們?cè)谄綍r(shí)用的時(shí)候,很少關(guān)注起啟動(dòng)過(guò)程,或者很少了解其底層運(yùn)行過(guò)程,大部分的過(guò)程只關(guān)注其內(nèi)部的表、存儲(chǔ)過(guò)程、視圖、函數(shù)等一系列應(yīng)用方式,而當(dāng)有一天它運(yùn)行的正常的時(shí)候突然啟動(dòng)不起來(lái)了,這時(shí)候就束手無(wú)策了,能做的或許只能是重裝、配置、還原等,但這一個(gè)過(guò)程其實(shí)是一個(gè)非常耗時(shí)的過(guò)程,尤其當(dāng)我們面對(duì)是龐大的生產(chǎn)庫(kù)的時(shí)候,可能在這火燒眉毛的時(shí)刻,是不允許你再重搭建一套環(huán)境的。

所以作為一個(gè)合格的數(shù)據(jù)庫(kù)使用者,我們要了解其啟動(dòng)、運(yùn)行過(guò)程的事情,一旦發(fā)生問(wèn)題,我們也能及時(shí)定位,迅速解決。

閑言少敘,我們進(jìn)入本篇的正題。

SQL Server本身就是一個(gè)Windows服務(wù),每一個(gè)實(shí)例對(duì)應(yīng)的就是一個(gè)sqlserver.exe進(jìn)程。這是一個(gè)可執(zhí)行的文件,默認(rèn)就放在SQL Server的安裝目錄下,當(dāng)我們啟動(dòng)的時(shí)候,就是直接調(diào)用這個(gè)文件,然后啟動(dòng)這個(gè)服務(wù)。

第一部分、SQL Server實(shí)例啟動(dòng)的方法和啟動(dòng)所發(fā)生的問(wèn)題

SQL Server實(shí)例分為下面幾種啟動(dòng)方法:

(1)在Windows服務(wù)控制臺(tái)里手動(dòng)啟動(dòng),或者自動(dòng)啟動(dòng)(默認(rèn)),這個(gè)也是最常用的方式

(2)第二種方式是SQL Server本身自己提供的啟動(dòng)方式,我們這里可以手動(dòng)啟動(dòng)

(3)在SQL Server的SSMS里面手動(dòng)啟動(dòng)它,這個(gè)方式一般大部分利用這種方式進(jìn)行手動(dòng)重啟

(4)通過(guò)Windows命令窗口,用’net start’命令手動(dòng)啟動(dòng),這種方法也可以用

以上這幾種方式都可以啟動(dòng)SQL Sever,并且都會(huì)在SQL 日志信息中有所記錄。

第二部分、SQL Server實(shí)例啟動(dòng)的詳細(xì)過(guò)程以及所發(fā)生的問(wèn)題項(xiàng)

第一步、檢查注冊(cè)表項(xiàng)

當(dāng)一個(gè)sqlserver.exe文件開(kāi)始啟動(dòng)的時(shí)候,首先要干的第一件事就是先檢查它的配置信息存放于注冊(cè)表的值項(xiàng)

比較重要的幾個(gè)鍵值有下面幾個(gè):

這里的

AuditLevel:其實(shí)就是SQL 如何記錄用戶登錄記錄;

LoginMode:是SQL Server服務(wù)器身份驗(yàn)證方式等;

BackupDirectory:默認(rèn)的備份路徑等信息;

關(guān)于注冊(cè)表信息簡(jiǎn)要了解即可,不建議做任何修改,當(dāng)然這些值的信息默認(rèn)在SQL Server中都能設(shè)置:

在不修改注冊(cè)表的情況下,一般這一步的啟動(dòng)順序一般不會(huì)出現(xiàn)問(wèn)題,當(dāng)然出現(xiàn)問(wèn)題了也通常沒(méi)有辦法解決,大部分的解決方式只有重裝了。

但這一步驟,通常出現(xiàn)以下兩個(gè)個(gè)問(wèn)題通常是可以解決的:

<1>啟動(dòng)賬號(hào)權(quán)限問(wèn)題

如果我們啟動(dòng)SQL Server的進(jìn)程使用的賬號(hào)連讀注冊(cè)表的權(quán)限都沒(méi)有,那這個(gè)服務(wù)是怎么也啟動(dòng)不了的,通常這時(shí)候連SQL 的錯(cuò)誤日志都沒(méi)有能力生成出來(lái)。

這時(shí)候我們?cè)撊绾伟l(fā)現(xiàn)呢,雖然這時(shí)候它沒(méi)有能力創(chuàng)建SQL 的錯(cuò)誤日志,但是它在Windows層面留下了痕跡,我們來(lái)看:

我將服務(wù)啟動(dòng)賬號(hào)設(shè)置成gust來(lái)賓賬號(hào),來(lái)啟動(dòng)該服務(wù)

這時(shí)候會(huì)產(chǎn)生以下錯(cuò)誤信息:

在Windows的日志信息里也會(huì)產(chǎn)生一條錯(cuò)誤日志記錄:

這里的拒絕訪問(wèn)指的就是拒絕訪問(wèn)注冊(cè)表信息了。

解決方法:

此問(wèn)題的解決方式就很簡(jiǎn)單了,只需要將當(dāng)然的用戶提權(quán)到SQL Server服務(wù)的啟動(dòng)賬號(hào)就行了,提權(quán)的方式也很簡(jiǎn)單,只需要添加到SQL的本地用戶的啟動(dòng)服務(wù)組就可以了。

當(dāng)然,也可以直接換一個(gè)更高級(jí)別的用戶登錄。一般默認(rèn)都用的超級(jí)管理員賬戶。

<2>訪問(wèn)日志和文件夾出現(xiàn)問(wèn)題

默認(rèn)在SQL Server啟動(dòng)的時(shí)候會(huì)創(chuàng)建一個(gè)啟動(dòng)日志文件,記錄所有正確的日志信息,當(dāng)然也包括錯(cuò)誤的日志信息,如果這時(shí)候找不到這個(gè)日志信息的路徑,或者已經(jīng)存在一個(gè)日志,但是日志被鎖定了(某些NB的殺毒軟件擅長(zhǎng)干這個(gè)),這時(shí)候這個(gè)服務(wù)也是啟動(dòng)不了的,同樣也創(chuàng)建不出SQL Server的日志文件,這時(shí)候我們還得借助于Windows平臺(tái)本身,來(lái)解決。

SQL Server啟動(dòng)的創(chuàng)建的日志文件路徑,同樣存在于注冊(cè)表項(xiàng)里,我們來(lái)看這個(gè)參數(shù):

這里我們故意改成一個(gè)錯(cuò)誤的路徑,來(lái)啟動(dòng)下看看:

會(huì)產(chǎn)生以下錯(cuò)誤

系統(tǒng)的錯(cuò)誤日志信息

錯(cuò)誤說(shuō)明的很清楚。

解決方法:

這個(gè)問(wèn)題解決起來(lái)也很簡(jiǎn)單,只需要檢查好該路徑,確保路徑下的文件正確就可以。

不過(guò)有一點(diǎn)需要注意,當(dāng)SQL Server還沒(méi)啟動(dòng)起來(lái)的時(shí)候,有部分錯(cuò)誤信息日志需要檢查Windows平臺(tái)下的系統(tǒng)日志。

第二步、檢查系統(tǒng)配置環(huán)境,包括硬盤(pán)、內(nèi)存與CPU等

當(dāng)我們進(jìn)行完第一步的時(shí)候,SQL Server已經(jīng)讀取完注冊(cè)表信息,完成了它的errorlog文件的創(chuàng)建,然后開(kāi)始進(jìn)行第二步的進(jìn)行,這一步驟所有的信息就會(huì)按照順序依次記錄到errorlog文件中,我們可以通過(guò)查看該文件來(lái)詳細(xì)跟蹤這一步驟的進(jìn)行,根據(jù)上一步的注冊(cè)表信息,我們先來(lái)手動(dòng)清空下這個(gè)日志,然后重啟一下SQL Server服務(wù),查看下這個(gè)日志記錄

我們簡(jiǎn)單大致分了以下幾大步驟:

一、首先檢查系統(tǒng)的軟件環(huán)境,包括OS版本、電腦信號(hào)、內(nèi)存、硬盤(pán)、注冊(cè)表基礎(chǔ)配置項(xiàng)是否正確等

二、啟動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)master

三、開(kāi)始利用服務(wù)用戶登錄系統(tǒng)、啟動(dòng)系統(tǒng)資源數(shù)據(jù)庫(kù)、檢查數(shù)據(jù)庫(kù)版本信息等

四、啟動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)model

五、開(kāi)始網(wǎng)絡(luò)配置進(jìn)行連接,對(duì)外提供服務(wù),使用的默認(rèn)的1433端口

我們接著分析下面的日志:

六、其實(shí)完成上面的第五步之后,也就開(kāi)始啟動(dòng)msdb系統(tǒng)數(shù)據(jù)庫(kù)

七、這時(shí)候開(kāi)始真正的啟動(dòng)用戶數(shù)據(jù)庫(kù),并且完整各個(gè)庫(kù)的完整性校驗(yàn),并且在啟動(dòng)用戶數(shù)據(jù)庫(kù)之前,先將系統(tǒng)庫(kù)的tempdb進(jìn)行清空

八、在搭建完成之后,才開(kāi)始啟系統(tǒng)的另外一個(gè)數(shù)據(jù)庫(kù)tempdb

 

上面的整個(gè)SQL Server系統(tǒng)啟動(dòng)的過(guò)程產(chǎn)生了詳細(xì)的日志記錄,我們下面會(huì)依次按照該步驟進(jìn)行詳細(xì)的進(jìn)行逐步分析。

在檢查系統(tǒng)軟硬件環(huán)境的過(guò)程中,基本不會(huì)發(fā)生什么致命錯(cuò)誤。比較常見(jiàn)的問(wèn)題就是內(nèi)存配置問(wèn)題,其實(shí)在上面的日志記錄中有一句特別重要,它反映的就是SQL Server利用內(nèi)存的情況,我們來(lái)看:

這句話的意思是將所有的數(shù)據(jù)頁(yè)鎖定到內(nèi)存中,作為大部分?jǐn)?shù)據(jù)庫(kù)而言,內(nèi)存就是生命線,SQL Server同樣也是,如果系統(tǒng)(64bit中)沒(méi)有內(nèi)存壓力的情況下,才能將數(shù)據(jù)頁(yè)正常的鎖定到內(nèi)存中,如果內(nèi)存壓力過(guò)大,系統(tǒng)內(nèi)存是不允許將數(shù)據(jù)頁(yè)也加入到內(nèi)存中,而這樣導(dǎo)致的問(wèn)題就是SQL Server嚴(yán)重的性能問(wèn)題。

很多用戶希望限制SQL Server內(nèi)存使用,并且有些客戶機(jī)將它限制到服務(wù)都不能啟動(dòng)的情況,這時(shí)候在SQL Server的日志中是這樣展現(xiàn)的,我們來(lái)看:

可以看到,該錯(cuò)誤的原因還是挺清楚的,修復(fù)該錯(cuò)誤的解決方法也很簡(jiǎn)單,將內(nèi)存配置調(diào)大就可以。

跟內(nèi)存有關(guān)的還有一種特殊的情況,就是SQL Server的啟動(dòng)賬號(hào)在服務(wù)器上沒(méi)有Lock page in memory的權(quán)限,如果沒(méi)有這個(gè)權(quán)限,在明細(xì)日志中查看不到上面的日志記錄,該問(wèn)題的解決方法也很簡(jiǎn)單,只需要將需要權(quán)限加上就可,加權(quán)限的方式如下:

經(jīng)過(guò)上面的步驟基本,完成數(shù)據(jù)的軟硬件檢測(cè)過(guò)程。

第三步、啟動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)master

master數(shù)據(jù)庫(kù)是SQL Server系統(tǒng)啟動(dòng)過(guò)程中的第一個(gè)系統(tǒng)庫(kù),是非常關(guān)鍵的數(shù)據(jù)庫(kù)。如果這個(gè)庫(kù)不能被正常打開(kāi),則SQL Server就不能正常啟動(dòng)。

和其它數(shù)據(jù)庫(kù)一樣,master數(shù)據(jù)庫(kù)也分為數(shù)據(jù)文件和日志文件,啟動(dòng)的過(guò)程是依次打開(kāi),然后做恢復(fù)動(dòng)作,如果這個(gè)過(guò)程沒(méi)問(wèn)題的話,在Errorlog日志文件中,我們會(huì)看到如下的這句話:

如果這個(gè)過(guò)程出現(xiàn)了任何問(wèn)題,SQL Server的啟動(dòng)過(guò)程都會(huì)被中斷,啟動(dòng)過(guò)程失敗。

而這個(gè)過(guò)程發(fā)生的錯(cuò)誤,無(wú)非就集中以下幾種情況,我們來(lái)分析一下:

<1>在指定的路徑找不到master數(shù)據(jù)的數(shù)據(jù)文件或日志文件

關(guān)于這個(gè)SQL Server的最主要的系統(tǒng)數(shù)據(jù)庫(kù)的路徑,它是以注冊(cè)表形式存在的,在一下注冊(cè)表項(xiàng),可以看到

如果在該路徑下找不到這個(gè)系統(tǒng)數(shù)據(jù)庫(kù)的話,服務(wù)是啟動(dòng)不了的,并且會(huì)產(chǎn)生相應(yīng)的錯(cuò)誤日志信息,我們來(lái)模擬下,關(guān)掉服務(wù),將這兩個(gè)文件移除走,然后啟動(dòng)看一下:

首先,該服務(wù)是啟動(dòng)失敗的

我們來(lái)看一下系統(tǒng)日志

看Errorlog的日志信息

可以看到,該問(wèn)題提示錯(cuò)誤信息還是挺詳細(xì)的。我們來(lái)看第二種情況

<2>文件找到了,但是沒(méi)有權(quán)限訪問(wèn),或者不能以排他的方式打開(kāi)該文件(默認(rèn)的是獨(dú)占鎖進(jìn)行文件打開(kāi)的)

此種情況也是有可能產(chǎn)生的,比如某些NB的殺毒軟件就可以干這個(gè)事,讓你的系統(tǒng)庫(kù)無(wú)法訪問(wèn),這樣同樣也是啟動(dòng)不了的,我們這樣來(lái)看,提示的錯(cuò)誤的信息有哪些:

來(lái)看Errorlog的錯(cuò)誤記錄:

<3>文件找到了,訪問(wèn)權(quán)限也有,但是文件有問(wèn)題,就是說(shuō)是數(shù)據(jù)庫(kù)損壞了

這個(gè)問(wèn)題也經(jīng)常出現(xiàn),比如磁盤(pán)壞掉了,恢復(fù)后發(fā)現(xiàn)文件有問(wèn)題,不能正常打開(kāi),這種問(wèn)題我們來(lái)看錯(cuò)誤信息:

日志中的信息

關(guān)于master系統(tǒng)庫(kù)的啟動(dòng)過(guò)程,基本就是上面的三種錯(cuò)誤,關(guān)于這三種問(wèn)題,我們?cè)撊绾谓鉀Q呢?

解決方法:首先如果根據(jù)錯(cuò)誤日志定位出問(wèn)題的性質(zhì),如果是前兩種問(wèn)題其實(shí)是挺好解決的,比如文件沒(méi)找到、權(quán)限項(xiàng)不對(duì)等,這些問(wèn)題相應(yīng)的去解決就可以,最棘手的就是第三種情況,出現(xiàn)這種情況最理想的情況是master數(shù)據(jù)庫(kù)進(jìn)行了備份,通過(guò)備份文件進(jìn)行恢復(fù)就可以,一切就可以正常,當(dāng)然通過(guò)暴力的停掉服務(wù),拷貝文件進(jìn)去也可以解決。

最揪心的就是這個(gè)庫(kù)就沒(méi)備份,那該如何解決呢?這種方式的解決就得借助SQL Server的安裝程序,進(jìn)行重建master數(shù)據(jù)了,但是這種方式重建的master數(shù)據(jù)庫(kù)會(huì)導(dǎo)致以前的SQL Server的設(shè)定全部清空掉。

清空的信息包括:所有的賬戶信息(意味著需要重建)、msdb中的所有job信息等(也需要重建)、用戶數(shù)據(jù)庫(kù)信息(必須全部重新附加attch上)

而這一系列過(guò)程如果是一個(gè)生產(chǎn)庫(kù),可能會(huì)是一個(gè)非常大的工作量!

第四步、啟動(dòng)系統(tǒng)資源數(shù)據(jù)庫(kù),并檢查數(shù)據(jù)版本信息

資源數(shù)據(jù)庫(kù)是SQL Server2005中引入的邏輯數(shù)據(jù)庫(kù),在實(shí)例下是看不到的,但是有它的物理文件,主數(shù)據(jù)庫(kù)默認(rèn)名稱為:mssqlsystemresource.mdf、日志名稱為:mssqlsystemresource.ldf

如果該數(shù)據(jù)庫(kù)啟動(dòng)的過(guò)程中也出現(xiàn)了問(wèn)題,那SQL Server也不能正常啟動(dòng)。

這個(gè)系統(tǒng)數(shù)據(jù)庫(kù)比較特別,它是一個(gè)只讀數(shù)據(jù)庫(kù),完全由SQL Server自己維護(hù),用戶是不能更改的,所以我們只要保證它的是數(shù)據(jù)庫(kù)文件和日志完好就可以,不需要對(duì)它進(jìn)行任何的跟蹤和維護(hù)。

當(dāng)然如果非要看這個(gè)數(shù)據(jù)庫(kù),可以通過(guò)單用戶的DAC方式進(jìn)行連接。

所以這個(gè)數(shù)據(jù)庫(kù)在一般情況下不會(huì)發(fā)生意外,基本上是能正常啟動(dòng),不過(guò)特殊情況下,不能啟動(dòng)的情況就以下兩種:

<1>數(shù)據(jù)庫(kù)文件不存在,無(wú)法訪問(wèn),或者文件壞掉了

其實(shí)它的報(bào)的錯(cuò)誤信息,類似于上面的master數(shù)據(jù)庫(kù),我來(lái)截個(gè)圖,看一下:

這個(gè)是errorlog記錄的錯(cuò)誤信息

在windows層面也有它自己的錯(cuò)誤日志信息:

<2>資源數(shù)據(jù)庫(kù)的版本和SQL Server的版本不一致

這個(gè)有可能是人為的更改了這個(gè)資源數(shù)據(jù)庫(kù),導(dǎo)致現(xiàn)有的資源數(shù)據(jù)庫(kù)文件和數(shù)據(jù)庫(kù)版本不一致,這樣的話也會(huì)導(dǎo)致錯(cuò)誤的形成

windwos平臺(tái)也記錄下了該錯(cuò)誤的信息,看下面的圖片:

解決方法:

關(guān)于資源庫(kù)的這兩個(gè)問(wèn)題解決方法,非常的簡(jiǎn)單。只要找到和這臺(tái)服務(wù)器上的SQL Server的版本一致的數(shù)據(jù)庫(kù),拷貝過(guò)來(lái)就行。

當(dāng)然最好的預(yù)防措施是:每當(dāng)安裝完SQL Server或者打完補(bǔ)丁之后,就及時(shí)的備份這個(gè)兩個(gè)文件,放在安全的地方,用的時(shí)候拷貝過(guò)來(lái)就行,備份是數(shù)據(jù)庫(kù)管理員的天職

當(dāng)然有時(shí)候在緊急的情況下,找不到相同版本的數(shù)據(jù)庫(kù),理論上這個(gè)庫(kù)是只讀的,所以不會(huì)發(fā)生任何改變,我們隨便找一臺(tái)機(jī)器,安裝一下同版本數(shù)據(jù)庫(kù),然后拷貝過(guò)來(lái)就行,當(dāng)然一定注意的是這里面是相同版本。

第五步、啟動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)model

model系統(tǒng)數(shù)據(jù)庫(kù)同樣也是SQL Server啟動(dòng)過(guò)程中用到的一個(gè)非常關(guān)鍵的數(shù)據(jù)庫(kù),如果這個(gè)庫(kù)損壞,SQL Server啟動(dòng)也會(huì)失敗,關(guān)于model數(shù)據(jù)不能啟動(dòng)的原因基本和master的類似,同樣也是兩種:1、數(shù)據(jù)庫(kù)文件早不到或者不能訪問(wèn);2、數(shù)據(jù)庫(kù)文件能訪問(wèn)但是是損壞的文件。

診斷此種問(wèn)題的方式也和上面的兩種方式一樣,查看啟動(dòng)過(guò)程產(chǎn)生的errorlog文件或者windows系統(tǒng)日志,這里我們就不重現(xiàn)該問(wèn)題了。

我們只給出此種問(wèn)題的解決方法:

1、如果該庫(kù)我們已經(jīng)做過(guò)備份,那最直接也是最有效的解決方式就是直接還原,這里的還原方式可能和普通庫(kù)的還原方式不一樣,因?yàn)镾QL Server實(shí)例還沒(méi)有啟動(dòng),我們恢復(fù)過(guò)程采取以下過(guò)程:

a.用參數(shù)啟動(dòng)SQL Server,在命令提示行中執(zhí)行以下命令,這樣的話SQL Server啟動(dòng)就會(huì)跳過(guò)model數(shù)據(jù)庫(kù)恢復(fù)這一步

net start MSSQLSERVER /f /m /T3608

b.現(xiàn)在恢復(fù)model數(shù)據(jù)庫(kù),打開(kāi)SSMS,直接輸入

RESTORE DATABASE model FROM DISK ='G:\data\model.bak'
WITH 
MOVE 'modeldev' TO 'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.mdf'
MOVE 'modellog' TO 'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.ldf'
,replace

c.恢復(fù)成功后,直接重啟SQL Server既可以。

2、將SQL Server關(guān)閉,然后直接采取暴力的方式將model數(shù)據(jù)文件拷貝回來(lái)就可以,這種方式簡(jiǎn)單有效,但是非常規(guī)操作

3、還有一種方式是利用setup安裝文件,重建該數(shù)據(jù)庫(kù),過(guò)程緩慢,稍顯復(fù)雜,很不推薦。

第六步、開(kāi)始網(wǎng)絡(luò)配置進(jìn)行連接,對(duì)外提供服務(wù),使用的默認(rèn)的1433端口

當(dāng)上面的幾個(gè)重要的系統(tǒng)庫(kù)都已經(jīng)啟動(dòng)完成之后,下一步就是開(kāi)始檢查網(wǎng)絡(luò)環(huán)境,進(jìn)行網(wǎng)絡(luò)服務(wù)的配置,對(duì)外進(jìn)行提供服務(wù)了,一般來(lái)講,在SQL Server中利用的網(wǎng)絡(luò)啟動(dòng)協(xié)議有三種:Shared Memory、Named Pope和TCP/IP,其實(shí)在日常我們最常用的就是TCP/IP這種方式了,并且默認(rèn)開(kāi)啟的是1433端口。

我們來(lái)看一下正常啟動(dòng)過(guò)程中,該部分的詳細(xì)日志:

這里面的Shared Memory是專供本地連接通過(guò)LPC(Local Procedure Call)技術(shù)向SQL Server做的連接。它不走網(wǎng)絡(luò)層,所以他是速度最快的連接方式。正常啟動(dòng)后會(huì)顯示上面的正常日志。

Named Pipe方式正常啟動(dòng),也會(huì)顯示出上面的日志??梢钥吹健?

這其中我們最常用的TCP/IP這種方式,也正常的啟動(dòng)了,并且指定了兩種訪問(wèn)方式,ipv4/ipv6,然后后面加上了1433端口號(hào)。

在這個(gè)過(guò)程中最常出現(xiàn)的問(wèn)題就是,1433端口被其它程序占用,這樣就導(dǎo)致TCP/IP協(xié)議無(wú)法正常啟動(dòng),這樣我們會(huì)看到如下日志信息

并且在windows 系統(tǒng)日志中也會(huì)有記錄

解決方法:

其實(shí)這里出現(xiàn)的問(wèn)題還是挺好解決的,只需要找到占用這個(gè)端口的應(yīng)用程序,采取措施讓它把這個(gè)端口給讓出來(lái)就可以。

當(dāng)然出現(xiàn)這些問(wèn)題就意味著客戶端已經(jīng)無(wú)法通過(guò)TCP/IP這種遠(yuǎn)程連接的方式進(jìn)行連接訪問(wèn)了。

這時(shí)候一般管理員可以采用SQL Server給其提供的“專用管理員連接”(DAC)進(jìn)行連接,這種方式我們以后再介紹。

當(dāng)然,在SQL Server啟動(dòng)的過(guò)程中,一般出現(xiàn)這種網(wǎng)絡(luò)問(wèn)題,或者協(xié)議不能成功加載,SQL Server會(huì)報(bào)出錯(cuò)誤信息,但是一般情況下是不會(huì)影響SQL Server的正常啟動(dòng)的。受影響的可能只是出問(wèn)題的那種協(xié)議功能。

我們只需要根據(jù)日志,定位問(wèn)題,然后解決掉,重新啟動(dòng)就可以了。

第七步、開(kāi)始啟動(dòng)msdb系統(tǒng)數(shù)據(jù)庫(kù)

關(guān)于msdb這個(gè)系統(tǒng)數(shù)據(jù)庫(kù),它是被安排在系統(tǒng)庫(kù)中接近最后一個(gè)了,除了用戶數(shù)據(jù)庫(kù)和臨時(shí)庫(kù)tempdb之外,當(dāng)啟動(dòng)過(guò)程中已經(jīng)進(jìn)行到這一步的時(shí)候,其實(shí)我們的實(shí)例就已經(jīng)啟動(dòng)起來(lái)了,并且能夠連接。

我們知道m(xù)sdb這個(gè)庫(kù)中主要的存儲(chǔ)的信息是應(yīng)用各個(gè)庫(kù)的備份信息,各種job的歷史跑批信息等,其實(shí)諸多的都是來(lái)自于用戶數(shù)據(jù)庫(kù)所產(chǎn)生的一些客觀數(shù)據(jù)。

我們來(lái)看一下這個(gè)庫(kù)出現(xiàn)了問(wèn)題會(huì)產(chǎn)生什么現(xiàn)象:

我將這個(gè)庫(kù)文件移除走,然后重新啟動(dòng)服務(wù),啟動(dòng)過(guò)程中沒(méi)有報(bào)任何錯(cuò)誤,并且能夠順利啟動(dòng),我們用SSMS直接連接過(guò)去,也可以正常連接

但是當(dāng)我們點(diǎn)擊開(kāi)數(shù)據(jù)的時(shí)候,其實(shí)是看不到任何用戶數(shù)據(jù)庫(kù)的,并且會(huì)產(chǎn)生一個(gè)錯(cuò)誤提示:

看來(lái)是不能使用的,我們來(lái)查看一下錯(cuò)誤日志:

雖然這個(gè)庫(kù)的重要性比起master之類的庫(kù)重要性要稍顯差一些,但是缺少了它我們的SQL Server雖然能啟動(dòng),但是依然不能使用。

解決方法:

要解決這個(gè)問(wèn)題其實(shí)方式就很多種了,因?yàn)榈酱宋覀兊腟QL Server實(shí)例已經(jīng)能夠正常啟動(dòng)了,我們可以采取:

1、利用備份還原該庫(kù),參考文章前面的方式(推薦)

2、關(guān)掉服務(wù),利用暴力的拷貝文件的方式進(jìn)行恢復(fù),簡(jiǎn)單有效,非常規(guī)操作

3、找臺(tái)相同的環(huán)境,找到相同的文件,直接拷貝過(guò)來(lái)使用

4、利用安裝文件進(jìn)行恢復(fù)(不推薦)

第八步、啟動(dòng)用戶數(shù)據(jù)庫(kù),并且完整各個(gè)庫(kù)的完整性校驗(yàn),并且在啟動(dòng)用戶數(shù)據(jù)庫(kù)之前,先將系統(tǒng)庫(kù)的tempdb進(jìn)行清空

本步驟所遇到的問(wèn)題層出不窮,各種樣式,我打算再重新組織一篇文章,專門(mén)列舉,此篇就不介紹了。

但有一點(diǎn)需要記?。涸谶@一步之前SQL Server會(huì)將tempdb這個(gè)系統(tǒng)庫(kù)清空掉,也就是說(shuō),每次的重啟操作,系統(tǒng)都會(huì)將tempdb清空,然后重建,這一步一般不會(huì)發(fā)生異常,成功之后會(huì)出現(xiàn)以下日志信息:

第九步、開(kāi)始重建系統(tǒng)的另外一個(gè)數(shù)據(jù)庫(kù)tempdb

tempdb這個(gè)庫(kù)比較特殊,每次重啟的時(shí)候都是重新創(chuàng)建的,SQL Server會(huì)根據(jù)master數(shù)據(jù)庫(kù)里的記錄的信息以model數(shù)據(jù)庫(kù)為版本進(jìn)行創(chuàng)建。所以只要我們保證model數(shù)據(jù)庫(kù)沒(méi)有問(wèn)題,然后硬盤(pán)沒(méi)有問(wèn)題,tempdb的數(shù)據(jù)庫(kù)文件就應(yīng)該沒(méi)有問(wèn)題。

關(guān)于temdb這個(gè)庫(kù)的所有配置信息是存儲(chǔ)于master的數(shù)據(jù)庫(kù)中的,里面的內(nèi)容信息是存儲(chǔ)于model系統(tǒng)庫(kù)中的

這樣就帶來(lái)了一個(gè)問(wèn)題,有時(shí)候我們的master的庫(kù)是從別的機(jī)器下面?zhèn)浞菹聛?lái)的,所以它里面會(huì)記錄這個(gè)tempdb這個(gè)庫(kù)在原來(lái)機(jī)器上的路徑,這樣在啟動(dòng)創(chuàng)建的時(shí)候就會(huì)報(bào)錯(cuò)。

所以我們需要執(zhí)行以下命令更改這個(gè)庫(kù)路徑

a、用參數(shù)啟動(dòng)SQL Server

net start MSSQLSERVER /f  /m  /T3608

b.修改數(shù)據(jù)文件和日志文件路徑

ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\right path....\temdb.mdf');
go
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\right path....\temdblog.ldf');
go

c.正常啟動(dòng)數(shù)據(jù)庫(kù)既可以

還有一種情況,就是創(chuàng)建該文件的時(shí)候,提供的硬盤(pán)空間不足,或者權(quán)限不夠,我們也是根據(jù)上面的方式,修改到一個(gè)正確的路徑,并且確保權(quán)限正確。

也可以更改temp文件的大小,默認(rèn)是4M,代碼如下:

ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,SIZE=100MB);
go
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,SIZE=100MB);
go

至此,如果上面的整個(gè)過(guò)程都沒(méi)出問(wèn)題的話,一個(gè)正常的SQL Server就可以啟動(dòng)成功的。

結(jié)語(yǔ)

本篇文章到此結(jié)束了…..此篇耗時(shí)三天…..為了盡可能的呈現(xiàn)出所有的問(wèn)題現(xiàn)象,我對(duì)本地的SQL Server進(jìn)行了多種無(wú)情的蹂躪、各種的摧殘,力求能夠重顯各種不同的應(yīng)用場(chǎng)景問(wèn)題現(xiàn)象,然后盡可能的找到合適的解決方案,當(dāng)然還有很多的情況沒(méi)有展現(xiàn)出來(lái),后續(xù)遇到,會(huì)一一補(bǔ)充進(jìn)來(lái),當(dāng)然有遇到不能解決的,也可以留言,我們一起分析解決。

關(guān)于用戶數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程,這個(gè)過(guò)程是一個(gè)問(wèn)題較易發(fā)生的步驟,神馬質(zhì)疑、恢復(fù)中、不可用等等現(xiàn)象,我后續(xù)的文章中列舉分析。

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。