SQL Server 系統數據庫恢復


標簽:SQL SERVER/MSSQL SERVER/數據庫/DBA/故障恢復/master

概述

     SQL Server 維護一組系統級數據庫(稱為“系統數據庫”),這些數據庫對於服務器實例的運行至關重要。每次進行大量更新后,都必須備份多個系統數據庫。必須備份的系統數據庫包括 msdbmastermodel。如果有任何數據庫在服務器實例上使用了復制,則還必須備份 distribution 系統數據庫。備份這些系統數據庫,就可以在發生系統故障(例如硬盤丟失)時還原和恢復 SQL Server 系統。

 

目錄

正文

系統數據庫說明

 

----1.resource
/*
包含SQLServer運行所需的關鍵系統表、元數、系統存儲過程,它只包含系統相關的信息不包含用戶相關的信息,在安裝補丁的過程中將更改該數據庫
*/
SELECT SERVERPROPERTY('ResourceVersion'),--返回數據庫的最新版本
SERVERPROPERTY('ResourceLastUpdateDateTime'),--返回數據庫的最后升級時間
SERVERPROPERTY('ProductUpdateReference')--返回升級的補丁信息

----2.master
/*
包含數據庫相關配置、登錄信息、實例相關配置信息
*/


----3.tempdb
/*
存儲用戶創建的臨時對象(臨時表、表變量等)、數據庫引擎所需的臨時對象、行版本信息等,tempdb數據庫性能非常重要如果條件可以的話可以將其配置到當地的存儲磁盤下,
ssd最佳。每次重啟時tempdb庫會重建。
*/

----4.model
/*
所有在實例上面新建的數據庫都會參考模板數據庫的相關配置進行創建(還原的數據庫除外),新建的數據庫相當於是copy一份model數據庫的副本,包括model數據庫的
數據庫屬性和數據庫中創建的對象都會復制到新建的數據庫中。
*/

----5.msdb
/*
包含SQL Server代理(作業、操作員、報警、策略以及作業歷史的全部信息)、日志傳輸、SSIS、備份還原信息等操作信息。
*/

 

單用戶啟動實例

方法1:在配置管理器中,右鍵實例在啟動參數中添加-m(注意是小寫的m),重新啟動服務,處理完之后記得把-m參數去除重新啟動服務。

方法2:在cmd中,使用net start mssqlserver /m,首先先停止所有相關的服務.

保持此窗口的情況下,數據庫實例是無法進行連接登入的,所有出來完之后需要再次重啟服務,重啟的時候把/m參數去除。

方法3:在cmd中先定位到數據庫安裝目錄“Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn”,輸入sqlservr.exe –c –m,然后打開msms直接點新建查詢使用管理員用戶進入。

補充:配置管理員專用鏈接

運行輸入cmd

輸入Sqlcmd -A -S 127.0.0.1 或者Sqlcmd -A -S IP 或者Sqlcmd -A -S 機器名

如果是命名實例那么要在后面加上實例名:Sqlcmd -A -S 機器名\實例名

通過新建查詢連接(文件-新建-數據庫引擎查詢)

ADMIN:IP或者ADMIN:127.0.0.1或者ADMIN:機器名

常用查詢語句

select * from sys.dm_exec_requests

SELECT * from sysprocesses

select * from sys.dm_os_memory_cache_counters

select * from sys.dm_exec_sessions

 

還原master數據庫

還原master的數據庫必須在單用戶啟動實例,然后使用管理員用戶進行還原。這也是文章前面講單用戶啟動實例的目的

使用方法1和方法3啟動實例之后,不要用往常登入的方式登入SQL管理工具,而是之間點擊新建查詢或者點擊文件菜單-新建-數據庫引擎查詢,然后輸入管理員權限的用戶進入,接下來就是還原數據庫了,還原語句很簡單例如:

RESTORE DATABASE [master] FROM  DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak' 
GO
如果失敗則加上WITH REPLACE
RESTORE DATABASE [master] FROM  DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak' 
WITH REPLACE

      方法2有一個要注意的地方就是,在單用戶啟動實例之后進入sqlcmd工具,執行use master之后每一步記得加上go,否則一直是光標閃動,還有方法2只能還原master數據庫無法還原其他數據庫。

     

    還原完之后再以正常的方式重新啟動服務就好。

    注意:如果重新生成master數據庫之后(這里的重新生成和還原備份是不一樣的,如果是還原最新的備份是不用再重新還原msdb和model數據庫),一定要重新還原msdb和model數據庫。

還原msdb數據庫  

還原 modelmsdb 數據庫與對用戶數據庫執行完整的數據庫還原相同。不能還原用戶正在訪問的數據庫。如果 SQL Server 代理正在運行,它可以訪問 msdb 數據庫。因此,在還原 msdb 之前,請先停止 SQL Server 代理。

msdb數據庫需要在單用戶模式下進行還原,這里說的單用戶跟前面的master的單用戶啟動實例不一樣,這里的單用戶只是獲取msdb數據庫的單獨訪問權限,所以可以用語句將數據庫設置成單用戶模式然后執行還原。

USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH NO_WAIT
GO
RESTORE DATABASE [msdb] FROM  DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\msdb.bak'
ALTER DATABASE [msdb] SET MULTI_USER WITH NO_WAIT

還原model數據庫

還原model數據庫與還原用戶數據庫的方法一樣,這里就不做介紹。  

還原Resource數據庫

這個系統數據庫無法進行備份還原,只能對文件進行備份;2008r2版本的sql的數據文件和日志文件在“D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn”路徑下。

備份還原復制數據庫

復制支持將復制的數據庫還原到從中創建備份的同一服務器和數據庫。 如果將復制數據庫的備份還原到其他服務器或數據庫,則無法保留復制設置。 在這種情況下,您必須在還原備份后重新創建所有發布和訂閱(如果正在使用日志傳送,則可以將復制數據庫還原到備用服務器)。

 

      應定期備份復制數據庫及其關聯系統數據庫。 備份下列數據庫:

 

  • 發布服務器上的發布數據庫

  • 分發服務器上的分發數據庫

  • 各個訂閱服務器上的訂閱數據庫

  • 發布服務器、分發服務器和所有訂閱服務器上的 mastermsdb 系統數據庫。 當備份這些數據庫中的一個數據庫或相關的復制數據庫時,應同時備份這些數據庫。 例如,應在備份發布數據庫的同時備份發布服務器上的 mastermsdb 數據庫。 如果還原發布數據庫,請確保 mastermsdb 數據庫在復制配置和設置方面與發布數據庫保持一致。

可以參照:https://msdn.microsoft.com/zh-cn/library/ms152560.aspx

 

 

總結

    總之系統數據庫對於實例是非常重要的,所以備份計划中一定不能少了系統數據庫的備份。 

 

 

備注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM