SQLSERVER啟動不起來(錯誤9003)的解決方法分享
先說一下環(huán)境
客戶環(huán)境:Windows2003企業(yè)版SP2 32位 SQL2005企業(yè)版 32位 SP4
自己筆記本電腦環(huán)境:Windows7 SP1 32位 SQL2005個人開發(fā)者版 32位
我的筆記本電腦的計算機名:joe
客戶電腦的計算機名:hs
客戶那邊的master數(shù)據(jù)庫大小:幾MB
業(yè)務(wù)系統(tǒng)是winform系統(tǒng)
客戶的環(huán)境是單機系統(tǒng)沒有使用到域
網(wǎng)絡(luò)環(huán)境:客戶那邊的網(wǎng)速比較慢,用遠程協(xié)助的時候比較卡
為什麼要說明我自己筆記本電腦的環(huán)境呢?請大家繼續(xù)耐心看下去
檢查
先打開SQLSERVER配置管理器,啟動SQLSERVER,發(fā)現(xiàn)SQLSERVER啟動不起來
于是我打開Windows EventLog,發(fā)現(xiàn)了下面錯誤
SQLSERVER 錯誤9003:LSN無效(日志掃描號無效)
"傳遞給數(shù)據(jù)庫 'master' 中的日志掃描操作的日志掃描號 (2806:120:1) 無效。
此錯誤可能指示數(shù)據(jù)損壞,或者日志文件(.ldf)與數(shù)據(jù)文件(.mdf)不匹配。
如果此錯誤是在復(fù)制期間出現(xiàn)的,請重新創(chuàng)建發(fā)布。否則,如果該問題導(dǎo)致啟動期間出錯,請從備份還原。
于是我就在自己的電腦上百度了一下這個錯誤
搜索到這篇文章:sql server 錯誤9003:LSN無效(日志掃描號無效),對數(shù)據(jù)庫的修復(fù)
這篇文章里的數(shù)據(jù)庫是用戶數(shù)據(jù)庫,用rebuild log,dbcc checkdb解決了問題
悲催的是客戶那邊損壞的是master數(shù)據(jù)庫
想辦法
作為一個好的數(shù)據(jù)庫工程師,一定要快速知道有哪些方法可以解決當(dāng)前客戶的問題
這些方法有什么利弊,因為延遲一秒鐘,就會造成客戶更多的損失,客戶的業(yè)務(wù)系統(tǒng)無法正常運作,后果可想而知
由下面幾個因素,我作出了一個選擇
網(wǎng)速比較慢,不方便在客戶的電腦上寫SQL語句
業(yè)務(wù)系統(tǒng)是winform系統(tǒng)
選擇:以前項目經(jīng)理教我的一個方法,遇到SQLSERVER啟動不起來
可以用剛剛安裝好的SQLSERVER的master數(shù)據(jù)庫替換掉客戶那邊的master數(shù)據(jù)庫
這種方法有下面的弊端
(1)你所用的數(shù)據(jù)庫版本一定要和客戶的一樣
(2)將SQLSERVER2012的master數(shù)據(jù)庫給客戶是不行的
(3)服務(wù)器觸發(fā)器,證書,鏈接服務(wù)器,登錄用戶等信息會丟失
為什麼會有這些弊端,大家可以看一下下面的文章
SQL Server 2008中的Service SID 介紹
【SERVICE SID的引入】
NT SERVICE\MSSQL$KATMAI, NT SERVICE\SQLAgent$KATMAI和NT SERVICE\ClusSvc 其實都是Service SID所對應(yīng)的名字。
Service SID的引入,是為了解決多個Service可能同用一個service帳號所帶來的安全隱患。
如IIS 使用Network Service帳號,可能其他服務(wù)也使用Network Service帳號。
為了使得IIS能夠連接到SQL Server, 我們可能會把Network Service作為SQL Server的login, 但是這是不安全的。
因為其他服務(wù)如果以Network Service做為啟動帳號的話,也能訪問SQL Server。
為了解決這個問題,在SQL Server 2008/Windows Server 2008及以后,
我們有了SID這個概念,這樣,不同的服務(wù),即使服務(wù)啟動帳號是相同的,它們的SID也是不同的。
因為登錄用戶的機制在SQLSERVER2008的時候發(fā)生了變化,所以你所用的數(shù)據(jù)庫版本不和客戶的一樣是不行的
但是就算一樣,也有弊端,客戶的登錄用戶原本是下面的樣子
builtin\administrators
hs\administrators
hs\SQLServer2005MSFTEUser$hs$MSSQLSERVER
hs\SQLServer2005MSSQLUser$hs$MSSQLSERVER
hs\SQLServer2005SQLAgentUser$hs$MSSQLSERVER
但是如果我把自己的master數(shù)據(jù)庫給客戶的話,就會變成下面的樣子
如果客戶的業(yè)務(wù)系統(tǒng)是B/S系統(tǒng),會用到IIS,或者客戶的環(huán)境是域環(huán)境,
登錄SQLSERVER需要使用Windows登錄驗證不是SQL登錄驗證,那么這樣做就很麻煩了
還有一個我自己電腦的SQLSERVER是個人開發(fā)者,客戶的是企業(yè)版,不過之前也這樣做過,發(fā)現(xiàn)沒有什么問題
開始實施
弊端說完了,開始實施了
第一步:先把我自己筆記本電腦上的SQLSERVERD 所有用戶數(shù)據(jù)庫全部分離,
刪除一些安裝時候沒有的登錄用戶只保留默認的登錄用戶,停止自己電腦的SQL服務(wù),然后把master.mdf和mastlog.ldf復(fù)制出來,發(fā)給客戶
第二步:使用遠程協(xié)助,把客戶電腦里的master數(shù)據(jù)庫master.mdf文件改名為master22.mdf
mastlog.ldf文件改名為mastlog22.ldf
然后把發(fā)過來的master數(shù)據(jù)庫放進去data文件夾里
第三步:啟動SQLSERVER,由于當(dāng)時沒有截圖,這里就不放截圖了,這時候可以發(fā)現(xiàn)SQLSERVER成功啟動了
第四步:把我們的業(yè)務(wù)庫重新附加進來
第五步:刪除原來業(yè)務(wù)庫里的那個數(shù)據(jù)庫用戶gxhtsyrain
第六步:新建登錄用戶gxhtsyrain并且映射到我們的業(yè)務(wù)庫
第七步:禁用sa用戶
由于不是替換msdb數(shù)據(jù)庫,所以維護計劃沒有丟失
錯誤日志
我查看SQL ERRORLOG,發(fā)現(xiàn)了下面的錯誤
無法啟用數(shù)據(jù)庫 "msdb" 中的 Service Broker,因為master與msdb 的 Service Broker 的ID不一樣
NT AUTHORITY\SYSTEM登錄失敗
由于我們沒有用到 Service Broker技術(shù),所以“無法啟用數(shù)據(jù)庫 "msdb" 中的 Service Broker”這個錯誤可以忽略
而NT AUTHORITY\SYSTEM登錄失敗,在文章SQL Server 2008中的Service SID 介紹中說到
但是我們也不能認為有這幾個SID的帳號,就能隨便把其他的登錄如NT AUTHORITY\SYSTEM給刪除。
某些應(yīng)用,如VSS Writer,Windows自動更新等,還是需要用服務(wù)啟動帳號來進行處理。
如果客戶那邊有做SQLSERVER的系統(tǒng)數(shù)據(jù)庫備份
我會這樣做:
第一步:先備份我自己筆記本電腦里的master數(shù)據(jù)庫出來
第二步:將客戶那邊的master.bak拿到自己的電腦里
第三步:還原客戶的master.bak到自己的SQLSERVER
第四步:停止SQL服務(wù),然后把master.mdf和mastlog.ldf復(fù)制出來發(fā)送給客戶
第五步:把客戶電腦里的master數(shù)據(jù)庫master.mdf文件改名為master22.mdf,mastlog.ldf文件改名為mastlog22.ldf
第六步:然后把發(fā)過來的master數(shù)據(jù)庫放進去data文件夾里
第七步:啟動SQLSERVER
總結(jié)
其實除了備份用戶數(shù)據(jù)庫之外,系統(tǒng)數(shù)據(jù)庫的備份也是很重要的
我們需要備份master和msdb這兩個數(shù)據(jù)庫
我們當(dāng)時部署業(yè)務(wù)系統(tǒng)的時候沒有備份系統(tǒng)數(shù)據(jù)庫,其實也是一個反面教材
我的方法是基于我們的業(yè)務(wù)系統(tǒng)使用到SQLSERVER的功能就只有維護計劃,所以作出上面的的解決方法
如果用到很多SQLSERVER的相關(guān)技術(shù)的話,可能我的解決方法不是最好的
我也希望大家能夠提出您的意見和見解,或者您使用的方法比我還要好,更快速
相關(guān)文章
Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達式)的遞歸查詢使用
公用表表達式(CTE)具有一個重要的優(yōu)點,那就是能夠引用其自身,從而創(chuàng)建遞歸 CTE接下來詳細介紹下:CTE 的基本語法結(jié)構(gòu),在使用CTE時注意事項以及實例操作2013-03-03解析SQL Server中datetimeset轉(zhuǎn)換datetime類型問題
這篇文章主要介紹了SQL Server中datetimeset轉(zhuǎn)換datetime類型問題淺析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12sql to sqlalchemy 轉(zhuǎn)換的小例子
sql to sqlalchemy 轉(zhuǎn)換的小例子,需要的朋友可以參考一下2013-05-05必須會的SQL語句(五) NULL數(shù)據(jù)處理和類型轉(zhuǎn)換
這篇文章主要介紹了sqlserver中NULL數(shù)據(jù)處理和類型轉(zhuǎn)換方法,需要的朋友可以參考下2015-01-01Sql Server 壓縮數(shù)據(jù)庫日志文件的方法
Sql Server 日志 _log.ldf文件太大,數(shù)據(jù)庫文件有500g,日志文件也達到了500g,占用磁盤空間過大,且可能影響程序性能,需要壓縮日志文件,下面小編給大家講解下Sql Server 壓縮數(shù)據(jù)庫日志文件的方法,感興趣的朋友一起看看吧2022-11-11SQL Server 存儲過程遇到“表 ''''#TT'''' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯誤
這篇文章主要介紹了SQL Server 存儲過程遇到“表 '#TT' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯誤 的相關(guān)資料,需要的朋友可以參考下2016-07-07MSSQL 檢查所使用的語句是否符合標(biāo)準(zhǔn)
標(biāo)準(zhǔn)SQL和T-SQL之間有很多區(qū)別——太多了,這里就不說了。還有,如果你在SQL Server上工作, 那么使用這些私有的擴展是有好處的。2009-11-11