Sqlserver系統資料庫和使用者資料庫日誌檔案全部丟失的恢復
系統資料庫和使用者資料庫日誌都丟失的情況下,資料庫無法啟動,需要先重建系統資料庫日誌檔案以便把sqlserver service拉起來,再重建使用者資料庫
試過但是行不通的辦法
1、-mClient單使用者模式下啟動資料庫並重建系統資料庫日誌,即使用net start "SQL Server (MSSQLSERVER)" -m"Microsoft SQL Server Management Studio - Query"進入資料庫重建系統資料庫日誌,出現報錯,系統資料庫日誌不允許重建
System databases master, model, and tempdb cannot have their logs rebuilt.
2、設定啟動項-T3608,即在SQL Server Configuration Manager裡面對應的sqlserver service服務新增啟動項引數-T3608,sqlserver service伺服器還是起不來
-T3608 禁止 SQL Server 自動啟動和恢復除 master 資料庫之外的任何資料庫。
3、使用安裝包repair現有sqlserver例項,行不通,因為repair其實是需要sqlserver例項有startup handle,而系統資料庫日誌都丟失的情況下,sqlserver例項壓根無法啟動,也就麼有startup handle的概念,所以repair一個沒有系統資料庫日誌的sqlserver例項會報錯:Could not find the Database Engine startup handle
4、完全解除安裝,再重新安裝,這個時候是可以把資料庫拉起來的,不過master庫的東西和msdb庫的東西都丟失了,不過可以重建msdb庫,重建msdb的前提是master和model庫必須正常,也就是一個資料庫能用,必須保證master和model庫正常,因為一個sqlserver 例項能否使用必須有tempdb,而tempdb依賴model,model依賴master
Sqlserver系統資料庫和使用者資料庫日誌檔案丟失的恢復方法
1、系統資料庫有備份的話,可以把系統資料庫以重新命名的方式當成使用者資料庫恢復到其他例項,但是必須保證恢復後的資料檔案和日誌檔案的名稱和之前一樣,再把恢復後的資料檔案和日誌檔案複製回出問題的例項。比如A例項的系統資料庫master的日誌檔案丟失了,可以把A例項的master庫恢復到B例項master_test庫,但是必須保證B的master_test庫的資料檔案和日誌檔名稱和A庫的master庫的資料檔案和日誌檔名稱一致,再把B的master_test庫的資料檔案和日誌檔名稱複製回A例項master庫對應的目錄,這樣A例項就可以啟動了
2、如果系統資料庫沒有備份,則在其他例項上建立一個資料庫,資料檔案和日誌檔名稱和丟失的系統資料庫一樣,再把新建的資料庫offline,把這個新建資料庫的資料檔案和日誌檔案改名或複製到其他目錄,再把丟失日誌的系統資料庫資料檔案複製到這個新建資料庫的對應的目錄,再執行rebuild log,這樣這個資料檔案就自動生成了日誌檔案,再把這個系統資料庫資料檔案和日誌檔案複製回丟失系統資料庫日誌檔案的目錄,這時這個曾經丟失了系統資料庫日誌檔案的sqlserver例項就可以啟動了,參見如下示例
假如A例項的master和model和msdb的日誌檔案都丟了
2.1、在B例項建立和master、model、msdb同名資料庫檔案FILENAME的使用者資料庫master_test、model_test、msdb_test
CREATE DATABASE [master_test] ON PRIMARY(NAME = N'master', FILENAME = N'E:\master.mdf') LOG ON (NAME = N'mastlog', FILENAME = N'E:\mastlog.ldf') GO CREATE DATABASE [model_test] ON PRIMARY(NAME = N'modeldev', FILENAME = N'E:\model.mdf') LOG ON (NAME = N'modellog', FILENAME = N'E:\modellog.ldf') GO CREATE DATABASE [msdb_test] ON PRIMARY(NAME = N'MSDBData', FILENAME = N'E:\msdbdata.mdf') LOG ON (NAME = N'MSDBLog', FILENAME = N'E:\MSDBLog.ldf') GO
2.2、在B例項對這三個使用者資料庫master_test、model_test、msdb_test進行offline離線操作
alter database [master_test] set offline alter database [model_test] set offline alter database [msdb_test] set offline
2.3、再在B例項把master_test、model_test、msdb_test資料檔案和日誌檔案複製到其他目錄或改名,再把A例項的master、model、msdb資料檔案複製到B例項master_test、model_test、msdb_test資料庫對應目錄,再執行REBUILD LOG,這樣A例項的master、model、msdb資料檔案其實就有日誌檔案,把這些資料檔案和日誌複製會A例項對應目錄,A例項就可以啟動了
ALTER DATABASE [master_test] REBUILD LOG ON (NAME=master_log, FILENAME='E:\mastlog.ldf'); ALTER DATABASE [model_test] REBUILD LOG ON (NAME=modellog, FILENAME='E:\modellog.ldf'); ALTER DATABASE [msdb_test] REBUILD LOG ON (NAME=MSDBLog, FILENAME='E:\msdblog.ldf');
會有如下警告,說明生成了新的日誌檔案
Warning: The log for database 'master_test' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
Warning: The log for database 'model_test' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
Warning: The log for database 'msdb_test' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
3、再回到A例項,在A例項執行如下語句,把生成的語句再執行一遍就可以rebuild 使用者資料庫的日誌檔案,並設定資料庫的訪問限制為多使用者
select 'ALTER DATABASE ['+db_name(database_id)+'] REBUILD LOG ON (NAME='+name+', FILENAME='''+physical_name+''');' from master.sys.master_files where type_desc='LOG' and database_id>4 select 'ALTER DATABASE ['+db_name(database_id)+'] SET MULTI_USER WITH NO_WAIT' from master.sys.master_files where type_desc='LOG' and database_id>4
備註:目前官方文件沒有ALTER DATABASE REBUILD LOG的操作,sqlserver不推薦這種操作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2777662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 丟失已歸檔日誌檔案下恢復資料庫資料庫
- oracle歸檔日誌丟失後的資料庫恢復Oracle資料庫
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- 解決Oracle資料庫日誌檔案丟失恢復問題Oracle資料庫
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- RMAN恢復案例:丟失全部資料檔案恢復
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- MongoDB資料庫報錯,資料庫檔案丟失資料恢復案例MongoDB資料庫資料恢復
- 資料庫資料恢復—MongoDB資料庫檔案丟失,啟動報錯的資料恢復案例資料庫資料恢復MongoDB
- 恢復案例:歸檔模式下丟失全部資料檔案的恢復模式
- 完全恢復之所有資料庫檔案丟失資料庫
- 資料庫各種檔案丟失恢復大全。資料庫
- oracle 線上日誌全部丟失的資料恢復Oracle資料恢復
- Sql Server資料庫檔案丟失的恢復方法SQLServer資料庫
- SQL Server 2005資料庫日誌丟失的恢復SQLServer資料庫
- RMAN恢復案例:丟失非系統資料檔案恢復
- 丟失一個控制檔案並恢復資料庫資料庫
- 資料檔案丟失的恢復
- 【資料庫資料恢復】LINUX EXT3檔案系統下ORACLE資料庫誤操作導致資料丟失的資料恢復案例資料庫資料恢復LinuxOracle
- DATA GUARD主庫丟失資料檔案的恢復(2)
- DATA GUARD主庫丟失資料檔案的恢復(3)
- DATA GUARD主庫丟失資料檔案的恢復(1)
- 【伺服器資料恢復】xfs檔案系統資料丟失的資料恢復案例伺服器資料恢復
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- 【資料庫資料恢復】mdb_catalog.wt檔案丟失的MongoDB資料恢復案例資料庫資料恢復MongoDB
- 恢復案例:無歸檔,丟失全部控制檔案、日誌檔案恢復案例
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- 【北亞資料恢復】vmfs還原快照操作導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- 資料檔案丟失如何恢復
- 【原創】模擬控制檔案丟失的資料庫恢復資料庫
- 【恢復】Redo日誌檔案丟失的恢復
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle
- 【北亞資料恢復】誤操作分割槽損壞導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- 記一次oracle資料庫redolog全部丟失的恢復Oracle資料庫
- 恢復archivelog模式下丟失的系統資料檔案Hive模式
- SQLServer 2000日誌檔案缺失只有MDF恢復資料庫的辦法SQLServer資料庫
- 【資料庫資料恢復】EXT3檔案系統下MYSQL資料庫恢復案例資料庫資料恢復MySql