您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關SQLSERVER啟動不起來(錯誤9003)的解決方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
先說一下環境客戶環境:Windows2003企業版SP2 32位 SQL2005企業版 32位 SP4自己筆記本電腦環境:Windows7 SP1 32位 SQL2005個人開發者版 32位我的筆記本電腦的計算機名:joe客戶電腦的計算機名:hs
客戶那邊的master數據庫大小:幾MB業務系統是winform系統客戶的環境是單機系統沒有使用到域網絡環境:客戶那邊的網速比較慢,用遠程協助的時候比較卡為什麼要說明我自己筆記本電腦的環境呢?請大家繼續耐心看下去
檢查
先打開SQLSERVER配置管理器,啟動SQLSERVER,發現SQLSERVER啟動不起來
于是我打開Windows EventLog,發現了下面錯誤
代碼如下: SQLSERVER 錯誤9003:LSN無效(日志掃描號無效)"傳遞給數據庫 'master' 中的日志掃描操作的日志掃描號 (2806:120:1) 無效。此錯誤可能指示數據損壞,或者日志文件(.ldf)與數據文件(.mdf)不匹配。如果此錯誤是在復制期間出現的,請重新創建發布。否則,如果該問題導致啟動期間出錯,請從備份還原。
于是我就在自己的電腦上百度了一下這個錯誤搜索到這篇文章:sql server 錯誤9003:LSN無效(日志掃描號無效),對數據庫的修復這篇文章里的數據庫是用戶數據庫,用rebuild log,dbcc checkdb解決了問題悲催的是客戶那邊損壞的是master數據庫
想辦法作為一個好的數據庫工程師,一定要快速知道有哪些方法可以解決當前客戶的問題這些方法有什么利弊,因為延遲一秒鐘,就會造成客戶更多的損失,客戶的業務系統無法正常運作,后果可想而知
由下面幾個因素,我作出了一個選擇網速比較慢,不方便在客戶的電腦上寫SQL語句業務系統是winform系統
選擇:以前項目經理教我的一個方法,遇到SQLSERVER啟動不起來可以用剛剛安裝好的SQLSERVER的master數據庫替換掉客戶那邊的master數據庫
這種方法有下面的弊端
(1)你所用的數據庫版本一定要和客戶的一樣(2)將SQLSERVER2012的master數據庫給客戶是不行的(3)服務器觸發器,證書,鏈接服務器,登錄用戶等信息會丟失
為什麼會有這些弊端,大家可以看一下下面的SQL Server 2008中的Service SID 介紹
代碼如下: 【SERVICE SID的引入】NT SERVICE\MSSQL$KATMAI, NT SERVICE\SQLAgent$KATMAI和NT SERVICE\ClusSvc 其實都是Service SID所對應的名字。Service SID的引入,是為了解決多個Service可能同用一個service帳號所帶來的安全隱患。如IIS 使用Network Service帳號,可能其他服務也使用Network Service帳號。為了使得IIS能夠連接到SQL Server, 我們可能會把Network Service作為SQL Server的login, 但是這是不安全的。因為其他服務如果以Network Service做為啟動帳號的話,也能訪問SQL Server。為了解決這個問題,在SQL Server 2008/Windows Server 2008及以后,我們有了SID這個概念,這樣,不同的服務,即使服務啟動帳號是相同的,它們的SID也是不同的。
因為登錄用戶的機制在SQLSERVER2008的時候發生了變化,所以你所用的數據庫版本不和客戶的一樣是不行的但是就算一樣,也有弊端,客戶的登錄用戶原本是下面的樣子
代碼如下: builtin\administratorshs\administratorshs\SQLServer2005MSFTEUser$hs$MSSQLSERVERhs\SQLServer2005MSSQLUser$hs$MSSQLSERVERhs\SQLServer2005SQLAgentUser$hs$MSSQLSERVER
但是如果我把自己的master數據庫給客戶的話,就會變成下面的樣子如果客戶的業務系統是B/S系統,會用到IIS,或者客戶的環境是域環境,登錄SQLSERVER需要使用Windows登錄驗證不是SQL登錄驗證,那么這樣做就很麻煩了還有一個我自己電腦的SQLSERVER是個人開發者,客戶的是企業版,不過之前也這樣做過,發現沒有什么問題
開始實施
弊端說完了,開始實施了
第一步:先把我自己筆記本電腦上的SQLSERVERD 所有用戶數據庫全部分離,
刪除一些安裝時候沒有的登錄用戶只保留默認的登錄用戶,停止自己電腦的SQL服務,然后把master.mdf和mastlog.ldf復制出來,發給客戶
第二步:使用遠程協助,把客戶電腦里的master數據庫master.mdf文件改名為master22.mdf
mastlog.ldf文件改名為mastlog22.ldf
然后把發過來的master數據庫放進去data文件夾里
第三步:啟動SQLSERVER,由于當時沒有截圖,這里就不放截圖了,這時候可以發現SQLSERVER成功啟動了
第四步:把我們的業務庫重新附加進來
第五步:刪除原來業務庫里的那個數據庫用戶gxhtsyrain
第六步:新建登錄用戶gxhtsyrain并且映射到我們的業務庫
第七步:禁用sa用戶
由于不是替換msdb數據庫,所以維護計劃沒有丟失
錯誤日志
我查看SQL ERRORLOG,發現了下面的錯誤
無法啟用數據庫 "msdb" 中的 Service Broker,因為master與msdb 的 Service Broker 的ID不一樣
NT AUTHORITY\SYSTEM登錄失敗
由于我們沒有用到 Service Broker技術,所以“無法啟用數據庫 "msdb" 中的 Service Broker”這個錯誤可以忽略
而NT AUTHORITY\SYSTEM登錄失敗,在文章SQL Server 2008中的Service SID 介紹中說到
復制代碼 代碼如下: 但是我們也不能認為有這幾個SID的帳號,就能隨便把其他的登錄如NT AUTHORITY\SYSTEM給刪除。
某些應用,如VSS Writer,Windows自動更新等,還是需要用服務啟動帳號來進行處理。
如果客戶那邊有做SQLSERVER的系統數據庫備份
我會這樣做:
第一步:先備份我自己筆記本電腦里的master數據庫出來
第二步:將客戶那邊的master.bak拿到自己的電腦里
第三步:還原客戶的master.bak到自己的SQLSERVER
第四步:停止SQL服務,然后把master.mdf和mastlog.ldf復制出來發送給客戶
第五步:把客戶電腦里的master數據庫master.mdf文件改名為master22.mdf,mastlog.ldf文件改名為mastlog22.ldf
第六步:然后把發過來的master數據庫放進去data文件夾里
第七步:啟動SQLSERVER
其實除了備份用戶數據庫之外,系統數據庫的備份也是很重要的我們需要備份master和msdb這兩個數據庫,我們當時部署業務系統的時候沒有備份系統數據庫,其實也是一個反面教材。
看完上述內容,你們對SQLSERVER啟動不起來(錯誤9003)的解決方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。