亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

如何恢復SQL Server 2000損壞的數據庫文件

2024-08-31 01:01:51
字體:
來源:轉載
供稿:網友

SQL Server2000中,如果數據庫文件(非系統數據庫文件)遇到錯誤的時候,我們該怎么辦。以下是筆者以前的筆記。僅適用于非master,msdb的數據庫。

說明如下:

1 建一個測試數據庫test(數據庫類型為完全)
2 建一個表,插入點記錄

create table a(c1 varchar(2))
go
insert into a values('aa')
go
insert into a values('bb')
go

3 作完全備份,到文件test_1.bak
4 在作一點修改

insert into a values('cc')
go
create table b(c1 int)
go
insert into b values(1)
go
insert into b values(2)
go

5 shutdown 數據庫服務器
6 用ultraedit編輯數據庫文件test_data.mdf,隨便修改點字節內容,相當于數據庫遭到致命的損壞。
7 啟動數據庫,并且運行企業管理器,點開數據庫,看到test變成灰色,而且顯示置疑。
8 運行isql -SLocalhost -Usa -P
1> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP
est_2.bak' WITH NO_TRUNCATE
2>go

已處理 2 頁,這些頁屬于數據庫 'test' 的文件 'TEST_Log'(位于文件 1 上)。
BACKUP LOG 操作成功地處理了 2 頁,花費了 0.111 秒(0.087 MB/秒)。

9 進行恢復最老的完全備份

1> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL
BACKUP est_1.bak' WITH NORECOVERY
2> go

已處理 96 頁,這些頁屬于數據庫 'test' 的文件 'TEST_Data'(位于文件 1 上)。
已處理 1 頁,這些頁屬于數據庫 'test' 的文件 'TEST_Log'(位于文件 1 上)。
RESTORE DATABASE 操作成功地處理了 97 頁,花費了 0.107 秒(7.368 MB/秒)。

10 恢復最近的日志

1> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU
P est_2.bak' WITH RECOVERY
2> go

已處理 2 頁,這些頁屬于數據庫 'test' 的文件 'TEST_Log'(位于文件 1 上)。
RESTORE LOG 操作成功地處理了 2 頁,花費了 0.056 秒(0.173 MB/秒)。

數據已經完全恢復了,可以使用了。

select * from a
go

總結,DBA應該有一個完善的數據庫備份計劃。本例中,如果沒有一個完全備份的話,數據庫的恢復就不可能

當sql server數據庫崩潰時如何恢復?

  任何數據庫系統都無法避免崩潰的狀況,即使你使用了clustered,雙機熱備……仍然無法完全根除系統中的單點故障,何況對于大部分用戶來說,無法承受這樣昂貴的硬件投資。所以,在系統崩潰的時候,如何恢復原有的寶貴數據就成為一個極其重要的問題了。

  在恢復的時候,最理想的情況就是你的數據文件和日志文件都完好無損了,這樣只需要sp_attach_db,把數據文件附加到新的數據庫上即可,或者在停機的時候把所有數據文件(一定要有master等)都copy到原有路徑下也行,不過一般不推薦這樣的做法,sp_attach_db比較好,雖然麻煩許多。

  但是呢,一般數據庫崩潰的時候系統是未必能有時間把未完成的事務和臟頁等寫入磁盤的,這樣的情況sp_attach_db就會失敗。那么,寄期望于dba制定了一個良好的災難恢復計劃吧。按照你的恢復計劃,還原最新的完全備份,增量備份或者事務日志備份,然后如果你的活動事務日志還能讀得出來的話,恭喜你!你可以還原到崩潰前的狀態。

  一般的單位都是沒有專職的dba的,如果沒有可用的備份,更可能是最近一次備份的時間過于久遠而導致不可接受的數據損失,而且你的活動事務日志也處于不可用的狀態,那就是最麻煩的情況了。

  不幸的很的是,一般數據庫崩潰都是由于存儲子系統引起的,而這樣的情況是幾乎不可能有可用的日志用于恢復的。那么就只好試一下這些方案了。當然,是要求至少你的數據文件是存在的,要是數據文件、日志文件和備份都沒有了的話,別找我,你可以到樓頂上去唱“神啊,救救我吧”。

  首先,你可以試一下sp_attach_single_file_db,試著恢復一下你的數據文件,雖然能恢復的可能性不大,不過假如這個數據庫剛好執行了一個checkpoint的話,還是有可能成功的。

  如果你沒有好到有摸彩票的手氣,最重要的數據庫沒有像你期盼的那樣attach上去,不要氣餒,還是有別的方案的。

  我們可以試著重新建立一個log,先把數據庫設置為emergency mode,sysdatabases的status為32768 就表示數據庫處于此狀態。

  不過系統表是不能隨便改的,設置一下先

  use master
  go
  sp_configure 'allow updates', 1
  reconfigure with override
  go

  然后
  update sysdatabases set status = 32768 where name = ''
  現在,祈求滿天神佛的保佑吧,重新建立一個log文件。成功的機會還是相當大的,系統一般都會認可你新建立的日志。如果沒有報告什么錯誤,現在就可以松一口氣了。

  雖然數據是恢復了,可是別以為事情就算完成了,正在進行的事務肯定是丟失了,原來的數據也可能受到一些損壞。

  先把sql server 重新啟動一下,然后檢查你的數據庫吧。
  先設置成單用戶模式,然后做dbcc

  sp_dboption '', 'single user', 'true'
  dbcc checkdb('')

  如果沒有什么大問題就可以把數據庫狀態改回去了,記得別忘了把系統表的修改選項關掉。

  update sysdatabases set status = 28 where name = '' --當然你的數據庫狀態可能不是這個,自己改為合適的值吧。也可以用sp_resetstatus
  go
  sp_configure 'allow updates', 0
  reconfigure with override
  go

  checkdb的時候可能報告有一些錯誤,這些錯誤的數據你可能就只好丟棄了。
  checkdb有幾種修復選項,自己看著用吧,不過最后你可能還是得用repair_allow_data_loss,完成所有修復。
  chekcdb并不能完成所有的修復,我們需要更進一步的修復,用dbcc checktable對每一個表做檢查吧。


  表的列表可以用sysobjects里面得到,把objectproperty是istable的全部找出來檢查一下吧,這樣能夠基本上解決問題了,如果還報告錯誤,試著把數據select into到另一張表檢查一下。
  這些都做完了之后,把所有索引、視圖、存儲過程、觸發器等重新建立一下。dbcc dbreindex也許可以幫你一些忙。


數據庫日志文件丟失時的恢復步驟,描述我誤刪除了數據庫的事務日志文件(.ldf)之后,如何經過各種嘗試恢復數據庫的。

但是不少網友在處理“數據庫置疑”的實踐過程中,又產生了許多新的疑問。
我還是總結一下出現的幾種情況,以供參考。

2.Zach的靈驗腳本

Zach說他每次遇到這種數據庫置疑情況,就運行下面這個腳本,屢試不爽:
======================================================
--before running any script, run the following to set the
master database to allow updates
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO

--Run the following script
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = 'Database_Name'

--Run the following script
exec SP_resetstatus Database_Name

--stop and start the MSDTC at this stage

--After the procedure is created, immediately disable
updates to the system tables:
exec sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
=====================================

從上面可以看出,處理置疑的基本步驟還是我那篇文章中說的(注意我使用的字體顏色):
執行 sp_configure 以允許對系統表進行更新,然后用 RECONFIGURE WITH OVERRIDE 語句強制實施該配置;
數據庫重置緊急模式;
執行sp_resetstatus關閉數據庫的置疑標志,但是原封不動地保持數據庫的其它選項(只有系統管理員才能執行)。執行該過程后,立即重啟 SQL Server服務;
執行 sp_configure 以禁止對系統表進行更新,然后用 RECONFIGURE WITH OVERRIDE 語句強制實施該配置。

status ^ 256的意思就是:
Constant  Value  Description
SQLDMODBStat_Suspect  256  Database integrity is suspect for the referenced database.


不同的是,有時候丟失了數據庫日志文件,額外需要以下步驟:
 把應用數據庫設置為Single User模式;
 做DBCC CHECKDB;
才可以。

但是幾位網友的實踐結果就是這個DBCC CHECKDB執行失敗。一位網友yang說:“但是 DBCC CHECKDB就是執行不了,總是說“該數據庫處于回避恢復模式”。我已經試了很多次了,就是改變不了這個狀態。”
還有一位Rui執行DBCC CHECKDB時報錯:“Server: Msg 943, Level 14, State 1, Line 1 Database 'his_yb' cannot be opened because its version (539) is later than the current server version (515).”

對于Yang,可能他沒有一步一步做,。我的切身體會是,把應用數據庫設置為Single User模式后就可以做DBCC CHECKDB。之后呢,也許SQL Server重啟后自動檢查數據庫是否正常。但是數據應該是可以讀出來的,至少可以被DTS Wizard讀出來的。這時候的數據庫還存在問題,比如我的組件使用數據庫時,報告說:“發生錯誤:-2147467259,未能在數據庫 'XXX' 中運行 BEGIN TRANSACTION,因為該數據庫處于回避恢復模式。”

對于Rui,他碰到的那個錯誤
Server: Msg 943, Level 14, State 1, Line 2
Database 'XXXX' cannot be opened because its version (536) is later than
the current server version (515).
這表明Rui正試圖:
從一個SQL Server 2000(version 539,536之類的)的數據庫備份恢復到一個SQL Server 7.0中
或者
把一個SQL Server 2000(version 539,536之類的)的數據庫attach到一個SQL Server 7.0中,
這是不允許的。如果你必須使用這個SQL Server 2000的數據備份,那么請您首先把這個備份倒入SQL Server 2000,最后用DTS把數據庫從SQL Server 2000上transfer到SQL Server 7.0上。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女免费精品视频在线观看| 色噜噜狠狠狠综合曰曰曰88av| 91国内揄拍国内精品对白| 亚洲毛片在线看| 日本一区二区在线播放| 国产欧美日韩亚洲精品| 国产精品久久久久久av| 欧美黄色三级网站| 亚洲国产日韩欧美在线图片| 欧美午夜激情在线| 97人洗澡人人免费公开视频碰碰碰| 米奇精品一区二区三区在线观看| 亚洲国产天堂久久综合网| 亚洲毛片在线观看| 按摩亚洲人久久| 欧美日韩在线视频首页| 亚洲国产成人精品女人久久久| 国产精品国内视频| 日韩在线观看电影| 色视频www在线播放国产成人| 久久精品国产99国产精品澳门| 国产99视频精品免视看7| 成人高h视频在线| 欧美理论电影网| 国产成人涩涩涩视频在线观看| 久久久久久久久久久久av| 日韩av高清不卡| 日韩av综合网站| 日韩亚洲第一页| 国产日本欧美一区二区三区在线| 一夜七次郎国产精品亚洲| 国产精品人成电影在线观看| 国产在线一区二区三区| 57pao国产成人免费| 久久久久久久久久久成人| www.亚洲免费视频| 日韩亚洲一区二区| 欧美成人四级hd版| 久久香蕉国产线看观看av| 麻豆国产精品va在线观看不卡| 国产视频丨精品|在线观看| 欧美成年人视频网站| 日本不卡高字幕在线2019| 国产精品爽爽ⅴa在线观看| 亚洲欧洲在线免费| 亚洲精品av在线播放| 欧美一区二粉嫩精品国产一线天| 日韩成人中文字幕在线观看| 精品福利免费观看| 欧美午夜久久久| 亚洲国产精彩中文乱码av在线播放| 国产精品中文字幕在线观看| 国产日韩欧美日韩| 精品国产精品自拍| 丁香五六月婷婷久久激情| 亚洲第一福利视频| 亚洲网在线观看| 久久精品99无色码中文字幕| 亚洲亚裔videos黑人hd| 亚洲成人网在线| 国产日韩欧美夫妻视频在线观看| 国产精品久久久久久久久借妻| 亚洲天堂免费观看| 欧美巨大黑人极品精男| 欧美有码在线观看视频| 色婷婷av一区二区三区久久| 欧美激情一区二区三区在线视频观看| 日韩精品一区二区三区第95| 久久视频在线直播| 国内精品久久久久久影视8| 日韩免费观看在线观看| 色妞在线综合亚洲欧美| 国产一区二区黑人欧美xxxx| 91沈先生在线观看| 久久久久国产一区二区三区| 国产成人精品久久亚洲高清不卡| 欧美极品少妇与黑人| 亚洲第一视频网| 成人激情春色网| 亚洲国产精品久久久| 国产91在线高潮白浆在线观看| 91精品国产综合久久久久久久久| 国产精品91在线观看| 亚洲一区久久久| 国产91精品视频在线观看| 亚洲精品国偷自产在线99热| 精品久久久国产精品999| 欧美午夜性色大片在线观看| 国产精品一区二区三区久久| 91亚洲精品在线| 2021久久精品国产99国产精品| 久久久www成人免费精品张筱雨| 色香阁99久久精品久久久| 国产日韩欧美在线观看| 亚洲欧美国产日韩中文字幕| 欧美乱人伦中文字幕在线| 欧美日韩视频免费播放| 欧美激情一区二区三区高清视频| 91在线观看免费高清| 日韩av免费一区| 欧美成人亚洲成人| 国产91精品网站| 亚洲国产成人精品久久| 亚洲激情 国产| 91精品国产综合久久香蕉的用户体验| 国产精品精品久久久久久| 亚洲一区二区日本| 欧美性生交大片免费| 国产精品日韩欧美综合| 疯狂蹂躏欧美一区二区精品| 97国产精品久久| 久久久久中文字幕2018| 欧美激情第1页| 国产精品吴梦梦| 欧美日韩精品在线观看| 欧美电影免费看| 亚洲免费影视第一页| 国产精品成人播放| 国产精品久久精品| 亚洲韩国青草视频| 久久久久久有精品国产| 国产激情久久久| 国产一区二区三区在线观看视频| 欧美精品videos性欧美| 欧美裸身视频免费观看| 丁香五六月婷婷久久激情| 国产成人短视频| 日韩在线播放一区| 热99精品里视频精品| 欧美裸身视频免费观看| 亚洲国产精品人人爽夜夜爽| 久久综合电影一区| 亚洲人av在线影院| 8090成年在线看片午夜| 亚洲va电影大全| 在线日韩av观看| 97国产精品视频人人做人人爱| 在线观看不卡av| 久久天堂电影网| 亚洲japanese制服美女| 亚洲黄色av网站| 91sao在线观看国产| 欧美亚洲在线播放| 日韩欧美国产高清91| 欧美性xxxx极品高清hd直播| 国产日韩在线亚洲字幕中文| 日韩欧美精品网址| 国产美女精品免费电影| 亚洲一区二区三区乱码aⅴ| 97色在线视频观看| 日韩中文字在线| 国产日韩欧美在线视频观看| 日日骚久久av| 国产精品av在线| 欧美亚洲第一页| 国产精品久久久久久久久| 欧美日本精品在线| 亚洲人成电影在线播放| 国产精品日韩专区| 日韩av电影在线播放| 亚洲国产精品va在线看黑人| 岛国精品视频在线播放| 亚洲欧美日韩在线高清直播| 精品国产一区二区三区在线观看|