由于全盤(pán)數(shù)據(jù)庫(kù)備份耗時(shí)太大, 我現(xiàn)在想做一個(gè)定時(shí)的數(shù)據(jù)庫(kù)差異備份。 但是,我不知道怎么恢復(fù)差異備份。 比如: 我最初第一次備份在12-15號(hào),生成一個(gè)MyDB_bak.bak這個(gè)完整的備份。 2008-12-16我做一個(gè)差異備份生成MyDB_diff_bak_081216.bak。 2008-12-17我做一個(gè)差異備份生成MyDB_diff_bak_081217.bak。 2008-12-18我做一個(gè)差異備份生成MyDB_diff_bak_081218.bak。 現(xiàn)在,我怎么恢復(fù)一個(gè)完整的到2008-12-18的數(shù)據(jù)庫(kù)呢? 不懂這個(gè)差異備份是怎么回事? 是不是我的MyDB_diff_bak_081216.bak是與MyDB_diff_bak_081217.bak的數(shù)據(jù)庫(kù)差異備份? 相關(guān)帖子推薦:
|
回復(fù)次數(shù):19 |
#1 得分:0 回復(fù)于: 2008-12-19 09:45:28 還原 完整備份..再還原12-18號(hào)的差異備份即可.. | |
#2 得分:0 回復(fù)于: 2008-12-19 09:46:29 SQL code?
| |||
#3 得分:0 回復(fù)于: 2008-12-19 09:47:31 差異備份和還原(轉(zhuǎn)) 作者:8LY8Apollo (阿波羅) 差異備份只創(chuàng)建數(shù)據(jù)庫(kù)中自上一次數(shù)據(jù)庫(kù)備份之后修改過(guò)的所有頁(yè)的復(fù)本。差異日志主要用于使用頻繁的系統(tǒng),一旦這類(lèi)系統(tǒng)中的數(shù)據(jù)庫(kù)發(fā)生故障,必須盡快使其重新聯(lián)機(jī)。差異備份比完整數(shù)據(jù)庫(kù)備份小,因此對(duì)正在運(yùn)行的系統(tǒng)影響較小。 例如,某個(gè)站點(diǎn)在星期天晚上執(zhí)行完整數(shù)據(jù)庫(kù)備份。在白天每隔 4 小時(shí)制作一個(gè)事務(wù)日志備份集,并用當(dāng)天的備份重寫(xiě)頭一天的備份。每晚則進(jìn)行差異備份。如果數(shù)據(jù)庫(kù)的某個(gè)數(shù)據(jù)磁盤(pán)在星期四上午 9:12 出現(xiàn)故障,則該站點(diǎn)可以: 備份當(dāng)前事務(wù)日志。 還原從星期天晚上開(kāi)始的數(shù)據(jù)庫(kù)備份。 還原從星期三晚上開(kāi)始的差異備份,將數(shù)據(jù)庫(kù)前滾到這一時(shí)刻。 還原從早上 4 點(diǎn)到 8 點(diǎn)的事務(wù)日志備份,以將數(shù)據(jù)庫(kù)前滾到早上 8 點(diǎn)。 還原故障之后的日志備份。這將使數(shù)據(jù)庫(kù)前滾到故障發(fā)生的那一刻。 如何創(chuàng)建差異數(shù)據(jù)庫(kù)備份(企業(yè)管理器) 創(chuàng)建差異數(shù)據(jù)庫(kù)備份 展開(kāi)服務(wù)器組,然后展開(kāi)服務(wù)器。 展開(kāi)"數(shù)據(jù)庫(kù)"文件夾,右擊數(shù)據(jù)庫(kù),指向"所有任務(wù)"子菜單,再單擊"備份數(shù)據(jù)庫(kù)"命令。 在"名稱(chēng)"框內(nèi),輸入備份集名稱(chēng)。在"描述"框中輸入備份集的描述(可選)。 在"備份"框下選擇"數(shù)據(jù)庫(kù) — 差異"。 在"目的"下,單擊"磁帶"或"磁盤(pán)",然后指定備份目的地。 如果沒(méi)有出現(xiàn)目的地,單擊"添加"以添加現(xiàn)有的備份設(shè)備或創(chuàng)建新的備份設(shè)備。 在"重寫(xiě)"下執(zhí)行下列操作之一: 單擊"追加到媒體",將備份追加到備份設(shè)備上任何現(xiàn)有的備份中。 單擊"重寫(xiě)現(xiàn)有媒體",將重寫(xiě)備份設(shè)備中任何現(xiàn)有的備份。 選擇"調(diào)度"復(fù)選框調(diào)度備份操作以后執(zhí)行或定期執(zhí)行。(可選) 單擊"選項(xiàng)"選項(xiàng)卡,然后執(zhí)行下列一項(xiàng)或多項(xiàng)操作:(可選) 選擇"完成后驗(yàn)證備份"復(fù)選框,在備份時(shí)驗(yàn)證備份。 選擇"備份后彈出磁帶"復(fù)選框,在備份操作完成后彈出磁帶。該選項(xiàng)只適用于磁帶設(shè)備。 選擇"檢查媒體集名稱(chēng)和備份集到期時(shí)間"復(fù)選框,檢查備份媒體以防意外重寫(xiě)。在"媒體集名稱(chēng)"框中,輸入將用于備份操作的媒體的名稱(chēng)。如果僅指定備份集到期時(shí)間,則將其保留為空。 如果是第一次使用備份媒體,或者要更改現(xiàn)有的媒體標(biāo)簽,則在"媒體集標(biāo)簽"框下選擇"初始化并標(biāo)識(shí)媒體"復(fù)選框,然后輸入媒體集名稱(chēng)和媒體集描述。只有在重寫(xiě)媒體時(shí)才能對(duì)其進(jìn)行初始化和標(biāo)識(shí)設(shè)置。 如何還原差異數(shù)據(jù)庫(kù)備份(企業(yè)管理器) 說(shuō)明 如果要還原差異數(shù)據(jù)庫(kù)備份,而在 msdb 數(shù)據(jù)庫(kù)中存儲(chǔ)的備份歷史記錄中沒(méi)有列出此差異數(shù)據(jù)庫(kù)備份的任何備份集信息,例如在另一臺(tái)服務(wù)器上創(chuàng)建的差異數(shù)據(jù)庫(kù)備份,請(qǐng)參閱如何從備份設(shè)備還原備份。 還原差異數(shù)據(jù)庫(kù)備份 展開(kāi)服務(wù)器組,然后展開(kāi)服務(wù)器。 展開(kāi)"數(shù)據(jù)庫(kù)"文件夾,右擊數(shù)據(jù)庫(kù),指向"所有任務(wù)"子菜單,然后單擊"還原數(shù)據(jù)庫(kù)"命令。 在"還原為數(shù)據(jù)庫(kù)"框中,如果要還原的數(shù)據(jù)庫(kù)名稱(chēng)與顯示的默認(rèn)數(shù)據(jù)庫(kù)名稱(chēng)不同,請(qǐng)?jiān)谄渲羞M(jìn)行輸入或選擇。 單擊"數(shù)據(jù)庫(kù)"。 在"要還原的第一個(gè)備份"列表中,選擇要還原的備份集。 在"還原"列表中,單擊要還原的差異備份。 單擊"選項(xiàng)"選項(xiàng)卡,然后執(zhí)行下列操作之一:(可選) 單擊"使數(shù)據(jù)庫(kù)可以繼續(xù)運(yùn)行,但無(wú)法還原其它事務(wù)日志",如果沒(méi)有其它要應(yīng)用的事務(wù)日志備份。 單擊"使數(shù)據(jù)庫(kù)不再運(yùn)行,但能還原其它事務(wù)日志",如果要應(yīng)用其它事務(wù)日志備份。 | |
2 2 | #4 得分:0 回復(fù)于: 2008-12-19 09:48:17 SQL code?
| ||
|
#5 得分:0 回復(fù)于: 2008-12-19 09:48:44 差異備份是備份自最近一次完整備份后所做的更改的備份..所以你只需要還原最近的一次差異備份即可. | |
|
#6 得分:0 回復(fù)于: 2008-12-19 09:49:05 日志備份和差異備份還原中的常見(jiàn)問(wèn)題示例 --創(chuàng)建測(cè)試 CREATE DATABASE db GO --正常備份 BACKUP DATABASE db TO DISK='c:\1.bak' WITH FORMAT BACKUP LOG db TO DISK='c:\2.bak' WITH FORMAT BACKUP LOG db TO DISK='c:\3.bak' WITH FORMAT BACKUP DATABASE db TO DISK='c:\4.bak' WITH FORMAT BACKUP DATABASE db TO DISK='c:\5.bak' WITH FORMAT,DIFFERENTIAL BACKUP LOG db TO DISK='c:\6.bak' WITH FORMAT GO --下面是用于日志備份和差異備份還原中易犯的錯(cuò)誤 --1. 恢復(fù)時(shí)使用錯(cuò)誤的日志順序 IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:\3.bak' /*--收到信息 服務(wù)器: 消息 4305,級(jí)別 16,狀態(tài) 1,行 5 此備份集中的日志開(kāi)始于 LSN 6000000002800001,該 LSN 太晚,無(wú)法應(yīng)用到數(shù)據(jù)庫(kù)。包含 LSN 6000000002500001 的較早的日志備份可以還原。 --*/ GO --2. 恢復(fù)時(shí),將日志備份應(yīng)用于錯(cuò)誤的完全備份 IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:\2.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 4326,級(jí)別 16,狀態(tài) 1,行 5 此備份集中的日志終止于 LSN 6000000002800001,該 LSN 太早,無(wú)法應(yīng)用到數(shù)據(jù)庫(kù)。包含 LSN 6000000003000001 的較新的日志備份可以還原。 --*/ GO --3. 將日志備份用于RESTORE DATABASE IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\2.bak' WITH NORECOVERY /*--收到錯(cuò)誤信息 服務(wù)器: 消息 3135,級(jí)別 16,狀態(tài) 2,行 4 文件 'c:\2.bak' 中的備份集是由 BACKUP LOG 創(chuàng)建的,無(wú)法用于此還原操作。 --*/ GO --4. 將差異備份用于RESTORE LOG IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:\5.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 3135,級(jí)別 16,狀態(tài) 2,行 3 文件 'c:\5.bak' 中的備份集是由 BACKUP DATABASE WITH DIFFERENTIAL 創(chuàng)建的,無(wú)法用于此還原操作。 --*/ GO --5. 將差異備份用于RESTORE LOG IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:\5.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 3135,級(jí)別 16,狀態(tài) 2,行 3 文件 'c:\5.bak' 中的備份集是由 BACKUP DATABASE WITH DIFFERENTIAL 創(chuàng)建的,無(wú)法用于此還原操作。 --*/ GO --6. 將差異備份用于錯(cuò)誤的完全備份中 IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY RESTORE DATABASE db FROM DISK='c:\5.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 3136,級(jí)別 16,狀態(tài) 1,行 3 無(wú)法將設(shè)備 'c:\5.bak' 上的備份應(yīng)用于數(shù)據(jù)庫(kù) 'db'。 --*/ GO --7. 直接使用日志備份或者差異備份還原 IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\5.bak' RESTORE LOG db FROM DISK='c:\2.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 913,級(jí)別 16,狀態(tài) 8,行 3 未能找到 ID 為 65535 的數(shù)據(jù)庫(kù)。可能該數(shù)據(jù)庫(kù)尚未激活,也可能正在轉(zhuǎn)換過(guò)程中。 --*/ GO --8. 還原完全備份時(shí),未使用NORECOVERY,導(dǎo)致不能正確還原日志備份或者差異備份 IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\1.bak' RESTORE LOG db FROM DISK='c:\2.bak' /*--收到錯(cuò)誤信息 服務(wù)器: 消息 4306,級(jí)別 16,狀態(tài) 1,行 4 先前的還原操作未指定 WITH NORECOVERY 或 WITH STANDBY。請(qǐng)?jiān)诔詈蟛襟E之外的所有其他步驟中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新啟動(dòng)該還原序列。 --*/ GO --刪除測(cè)試 IF DB_ID('db') IS NOT NULL DROP DATABASE db | |
|
| #7 得分:0 回復(fù)于: 2008-12-19 09:54:42 SQL code?
| ||
|
| #8 得分:0 回復(fù)于: 2008-12-19 09:56:06 我如果要恢復(fù)2008-12-17的數(shù)據(jù)庫(kù),是不是只有結(jié)合: MyDB_bak.bak和MyDB_diff_bak_081217.bak才行? 怎么才能確定file = n? 這個(gè)n呢? |
|
#9 得分:0 回復(fù)于: 2008-12-19 09:59:11 | |
|
| #10 得分:0 回復(fù)于: 2008-12-19 10:16:49 謝謝樓上的各位星星們! 還有一個(gè)問(wèn)題: 2008-12-16我做一個(gè)差異備份生成MyDB_diff_bak_081216.bak。 2008-12-17我做一個(gè)差異備份生成MyDB_diff_bak_081217.bak。 2008-12-18我做一個(gè)差異備份生成MyDB_diff_bak_081218.bak。 MyDB_diff_bak_081217.bak是不是和MyDB_diff_bak_081216.bak的差異? 這樣結(jié)合MyDB_bak.bak 和 MyDB_diff_bak_081217.bak 好像恢復(fù)不了完整的17號(hào)的數(shù)據(jù)庫(kù)哦? 因?yàn)镸yDB_diff_bak_081216.bak的變化被忽略了。 |
|
#11 得分:0 回復(fù)于: 2008-12-19 10:20:31 看我5樓的. --------------------- MyDB_diff_bak_081217.bak是不是和MyDB_diff_bak_081216.bak的差異? -------------------- 不是.每個(gè)差異備份都是對(duì)最近一次完整備份的差異.. 所以你要還原到12-17號(hào).還原完整備份后.再還原12-17的差異備份..其中12-16號(hào)的所做的操作不會(huì)被忽略..因?yàn)槎加涗浀?2-17號(hào)的差異備份那了. | |
|
#12 得分:0 回復(fù)于: 2008-12-19 10:29:15 SQL code?
| |||
|
#13 得分:0 回復(fù)于: 2008-12-19 10:30:02 你可以根據(jù)我的測(cè)試自己試試... | |
|
| #14 得分:0 回復(fù)于: 2008-12-19 10:34:57 還真沒(méi)這樣做過(guò)。學(xué)習(xí)了。。。。 |
|
| #15 得分:0 回復(fù)于: 2008-12-19 11:16:49 小梁寫(xiě)的測(cè)試很好!謝謝! |
|
| #16 得分:0 回復(fù)于: 2008-12-19 11:35:46 還有一個(gè)疑問(wèn): 因?yàn)椴町悅浞菔墙⒃谏洗瓮暾麄浞莸幕A(chǔ)上。 假設(shè)我第一次建立了一個(gè)基準(zhǔn)的完整數(shù)據(jù)庫(kù)備份test.bak, 然后我用SQL 語(yǔ)句在這個(gè)基準(zhǔn)上進(jìn)行了若干次修改,產(chǎn)生了若干個(gè)差異備份: test_diff_00.bak;test_diff_01.bak; test_diff_02.bak 后來(lái)我又在SQL SERVER 2005的Management Studio里面使用用界面操作的方式對(duì)數(shù)據(jù)庫(kù)test做了一個(gè)完整的備份, 生成一個(gè)新的完整數(shù)據(jù)庫(kù)備份test_newbak.bak 往表tb插入了1條新記錄。 然后我又用SQL SERVER的你上面的備份語(yǔ)句對(duì)test進(jìn)行了1次差異備份, 生成: test_diff_03.bak 這樣我如果用test.bak 結(jié)合 test_diff_03.bak 是不是就恢復(fù)不了最新的數(shù)據(jù)庫(kù)了?? 這種情況如何辦呢??? 定時(shí)器并不能阻止用戶(hù)通過(guò)界面的方式對(duì)數(shù)據(jù)庫(kù)test做完整的備份??? |
|
#17 得分:0 回復(fù)于: 2008-12-19 11:42:42 用老的完整備份+新的差異備份當(dāng)然不可以.. 你直接使用最新的完整備份+最新的差異備份就可以了. | |
|
| #18 得分:0 回復(fù)于: 2008-12-19 11:46:45 小梁: 我問(wèn)這個(gè)問(wèn)題的原因是想我每天對(duì)數(shù)據(jù)庫(kù)做一個(gè)自動(dòng)備份。 最初建立一個(gè)基準(zhǔn)數(shù)據(jù)庫(kù)備份, 然后開(kāi)始一個(gè)作業(yè),每天只做差異備份。 需要恢復(fù)的時(shí)候,用最初的基準(zhǔn)數(shù)據(jù)庫(kù)備份+具體哪一天的差異備份就可以了。 但是,如果有人在某一天又對(duì)數(shù)據(jù)庫(kù)做了一個(gè)完整備份的話(huà), 我用這個(gè)差異備份恢復(fù)就必然失敗了啊。 不知道數(shù)據(jù)庫(kù)每天自動(dòng)備份的標(biāo)準(zhǔn)做法該怎么做呢?? |
|
#19 得分:0 回復(fù)于: 2008-12-19 12:22:08 授予一個(gè)專(zhuān)用的賬戶(hù)對(duì)這個(gè)數(shù)據(jù)庫(kù)進(jìn)行備份..其它用戶(hù)就不給予備份該數(shù)據(jù)庫(kù)的權(quán)限.. | |
聯(lián)系客服