1. 程式人生 > >SQL Server 系統資料庫恢復

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 資料庫在複製配置和設定方面與釋出資料庫保持一致。