1. 程式人生 > >[數據庫]Sql server 數據庫的備份和還原____還原數據庫提示“介質集有2個介質簇,但只提供了1個。必須提供所有成員”

[數據庫]Sql server 數據庫的備份和還原____還原數據庫提示“介質集有2個介質簇,但只提供了1個。必須提供所有成員”

安裝目錄 data 任務 最好 保存 過程 alt 結構 導入數據

在對數據庫備份與還原的過程中,我遇到一個問題“介質集有2個介質簇,但只提供了1個。必須提供所有成員”,下面詳細的介紹一下遇到問題的經過與問題解決的方法!

一、備份與還原遇到的問題描述與解決方法:

前兩天用戶測試我們做的評教系統小軟件,有點問題我們過去看了看,想將他們的測試數據備份一下,以便我們修改軟件測試使用。

我是這樣備份的,數據庫備份默認有一個路徑:C\...,而我又添加了一個新路徑,沒將默認路徑刪除,而是選中新路徑,我就理所當然的認為數據庫中的數據備份到我新加的路徑下了。

技術分享圖片

今天還原數據庫時,我只選擇了D盤備份文件"YZTeacherEvaluate",提示這樣一個錯誤:還原對於服務器“192.168.24.101”失敗。 其他信息:System.Data.SqlClient.SqlError: 介質集有 2 個介質簇,但只提供了 1 個。必須提供所有成員。 (Microsoft.SqlServer.Smo) 。詳情見圖片:

技術分享圖片

我想讓用戶重新給我備份一下發過來,結果他操作過程中,將數據庫給刪除了,然後將C盤數據庫備份文件給我發了過來,我誤以為是他重新備份的,附加一下依然提示上述錯誤。突然想起來,將這兩個文件一起還原,應該就沒事了。

接下來,我重新還原數據庫,將C盤和D盤備份的數據庫文件同時附加上,還原成功了,數據還在,萬幸啊!

技術分享圖片

二、數據庫備份與還原需要註意的地方:

1.在做數據庫的備份時,註意備份的“目標”中,最好是只有一個路徑,如果多個路徑,在還原時,則需要提供多個bak文件才能成功還原,否則還原失敗,並提示“介質集有2個介質簇,但只提供了1個。必須提供所有成員”;備份目標只有一個路徑,備份成功後,該路徑生成一個bak文件,該文件是數據文件不包括該數據庫的結構信息,如果在備份時“選項”中是選中“追加到現有的備份集”那麽該文件並不是說一個文件就只存了一次備份的數據,而是保存著所有的備份信息,在你想還原的時候,會列出來供你選擇哪一個版本是你想還原的;如果“選項”選中的是“覆蓋所有現有的備份集”,那麽就只有一份最新的了,也就是說一旦數據發生結構性變化時,比如增加或者刪除了一個表的字段,那麽很可能就還原不成功了。

技術分享圖片

技術分享圖片

2. 還有一個註意的地方,就是數據庫備份只能是備份到本機

3. 還原時,有兩種方式,一種是“數據庫還原”,系統會在安裝目錄中找到該數據庫的那份“最新”的備份;一種是“文件”還原,也就是可以通過數據文件bak來還原;不管是通過哪種方式來還原,有可能會出現以下錯誤“因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權”,解決方法:重啟數據庫服務器;

4.以上是數據的備份還原,如果是要涉及數據庫結構的備份,比如表結構,存儲過程。。。。。的備份,有兩種方法:一種就用“附加”mdf文件,這種方法當然會附帶所有的信息,包括數據,但是在拿不到mdf的情況下,比如你要復制的數據庫是別人的服務器的,而你的權限拿不到mdf的,就只能用以下這種方法,也就是另一種方法:首先對源數據庫生成腳本(任務-生成腳本)從而得到該數據庫的結構,再“導入數據”。

[數據庫]Sql server 數據庫的備份和還原____還原數據庫提示“介質集有2個介質簇,但只提供了1個。必須提供所有成員”