master db壞真的好麻煩, 處理方法都不同, 不過它只是SQL的結構資料, 相信不會有多大改動, 找到一個近期的backup已經不作考慮data lost問題, 直接restore吧, 如果其他database壞就不會用以下的方法, 因為SQL能online, 方法可以好簡單
我的解決方法是重新安裝一台相同版本,相同機名, 相同Instance的SQL, 然後將master.bak那台SQL上還原, 原因是這台SQL的single mode都進入不到
Production是SQL 2008 R2 10.50.4000
Restore的是SQL 2008 R2 10.50.1600(原來是Patch版本都要一樣), 全新沒有數據
Part 1: Restore master db
master.bak已經抄到Restore的SQL Server, Instance是MSSQLSERVER
net stop MSSQLSERVER
net start MSSQLSERVER /m
sqlcmd -S localhost\MSSQLSERVER
RESTORE DATABASE master FROM DISK ='C:\master.bak'
WITH REPLACE
GO
以下這個是因為版本不一
以下是成功例子
這時master.mdf & mastlog.ldf已經還原了, 可以抄到Production裏使用
Part 2: 將沒有權限的User加入為sysadmin
不過我還是不安心, 我將所有資料庫抄到Restore裏測試一下, 結果估計我這個Windows administrator在Production裏是沒有權限, 而且我沒有sa密碼, 再次進入single mode增加administrator為sysadmin
net stop MSSQLSERVER
net start MSSQLSERVER /m
sqlcmd -S localhost\MSSQLSERVER
EXEC sp_addsrvrolemember 'DOMAIN\administrator', 'sysadmin';
GO
然後所有資料都真的可以看到了