SQL Server 數(shù)據(jù)庫恢復(fù)日志功能(2)_Mssql數(shù)據(jù)庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:怎樣使用SQL2000將現(xiàn)有代碼作為Web服務(wù)提供
      SQL Server 2000 的 XML 功能可以簡化將現(xiàn)有代碼作為 Web 服務(wù)提供的任務(wù)。本文集中討論了傳入和傳出 Transact SQL 代碼的數(shù)據(jù)與 XML 消息(在 Web 服務(wù)客戶機(jī)和服務(wù)器之間使用)之間的轉(zhuǎn)換。 評估現(xiàn)有代碼是否適合于作為 Web 服務(wù)提供時(shí),本文討論的數(shù)據(jù)轉(zhuǎn)換

      方法二

      沒有效果的恢復(fù)步驟

      附加數(shù)據(jù)庫

      _Rambo講過被刪除日志文件中不存在活動(dòng)日志時(shí),可以這么做來恢復(fù):

      1,分離被置疑的數(shù)據(jù)庫,可以使用sp_detach_db

      2,附加數(shù)據(jù)庫,可以使用sp_attach_single_file_db

      但是,很遺憾,執(zhí)行之后,SQL Server質(zhì)疑數(shù)據(jù)文件和日志文件不符,所以無法附加數(shù)據(jù)庫數(shù)據(jù)文件。

      DTS數(shù)據(jù)導(dǎo)出

      不行,無法讀取XXX數(shù)據(jù)庫,DTS Wizard報(bào)告說“初始化上下文發(fā)生錯(cuò)誤”。

      緊急模式

      怡紅公子講過沒有日志用于恢復(fù)時(shí),可以這么做:

      1,把數(shù)據(jù)庫設(shè)置為emergency mode

      2,重新建立一個(gè)log文件

      3,把SQL Server 重新啟動(dòng)一下

      4,把應(yīng)用數(shù)據(jù)庫設(shè)置成單用戶模式

      5,做DBCC CHECKDB

      6,如果沒有什么大問題就可以把數(shù)據(jù)庫狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項(xiàng)關(guān)掉

      我實(shí)踐了一下,把應(yīng)用數(shù)據(jù)庫的數(shù)據(jù)文件移走,重新建立一個(gè)同名的數(shù)據(jù)庫XXX,然后停掉SQL服務(wù),把原來的數(shù)據(jù)文件再覆蓋回來。之后,按照怡紅公子的步驟走。

      但是,也很遺憾,除了第2步之外,其他步驟執(zhí)行非常成功。可惜,重啟SQL Server之后,這個(gè)應(yīng)用數(shù)據(jù)庫仍然是置疑!

      不過,讓我欣慰的是,這么做之后,倒是能夠Select數(shù)據(jù)了,讓我大出一口氣。只不過,組件使用數(shù)據(jù)庫時(shí),報(bào)告說:“發(fā)生錯(cuò)誤:-2147467259,未能在數(shù)據(jù)庫 'XXX' 中運(yùn)行 BEGIN TRANSACTION,因?yàn)樵摂?shù)據(jù)庫處于回避恢復(fù)模式。”

      最終成功恢復(fù)的全部步驟

      設(shè)置數(shù)據(jù)庫為緊急模式

      停掉SQL Server服務(wù);

      把應(yīng)用數(shù)據(jù)庫的數(shù)據(jù)文件XXX_Data.mdf移走;

      重新建立一個(gè)同名的數(shù)據(jù)庫XXX;

      停掉SQL服務(wù);

      把原來的數(shù)據(jù)文件再覆蓋回來;

      運(yùn)行以下語句,把該數(shù)據(jù)庫設(shè)置為緊急模式;

      運(yùn)行“Use Master

      Go

      sp_configure 'allow updates', 1

      reconfigure with override

      Go”

      執(zhí)行結(jié)果:

      DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請與系統(tǒng)管理員聯(lián)系。

      已將配置選項(xiàng) 'allow updates' 從 0 改為 1。請運(yùn)行 RECONFIGURE 語句以安裝。

      接著運(yùn)行“update sysdatabases set status = 32768 where name = 'XXX'”

      執(zhí)行結(jié)果:

      (所影響的行數(shù)為 1 行)

      重啟SQL Server服務(wù);

      運(yùn)行以下語句,把應(yīng)用數(shù)據(jù)庫設(shè)置為Single User模式;

      運(yùn)行“sp_dboption 'XXX', 'single user', 'true'”

      執(zhí)行結(jié)果:

      命令已成功完成。

      ü 做DBCC CHECKDB;

      運(yùn)行“DBCC CHECKDB('XXX')”

      執(zhí)行結(jié)果:

      'XXX' 的 DBCC 結(jié)果。

      'sysobjects' 的 DBCC 結(jié)果。

      對象 'sysobjects' 有 273 行,這些行位于 5 頁中。

      'sysindexes' 的 DBCC 結(jié)果。

      對象 'sysindexes' 有 202 行,這些行位于 7 頁中。

      'syscolumns' 的 DBCC 結(jié)果。

      ………

      ü 運(yùn)行以下語句把系統(tǒng)表的修改選項(xiàng)關(guān)掉;

      運(yùn)行“sp_resetstatus "XXX"

      go

      sp_configure 'allow updates', 0

      reconfigure with override

      Go”

      執(zhí)行結(jié)果:

      在 sysdatabases 中更新數(shù)據(jù)庫 'XXX' 的條目之前,模式 = 0,狀態(tài) = 28(狀態(tài) suspect_bit = 0),

      沒有更新 sysdatabases 中的任何行,因?yàn)橐颜_地重置了模式和狀態(tài)。沒有錯(cuò)誤,未進(jìn)行任何更改。

      DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請與系統(tǒng)管理員聯(lián)系。

      已將配置選項(xiàng) 'allow updates' 從 1 改為 0。請運(yùn)行 RECONFIGURE 語句以安裝。

      重新建立另外一個(gè)數(shù)據(jù)庫XXX.Lost;

      DTS導(dǎo)出向?qū)?/p>

      運(yùn)行DTS導(dǎo)出向?qū)?

      復(fù)制源選擇EmergencyMode的數(shù)據(jù)庫XXX,導(dǎo)入到XXX.Lost;

      選擇“在SQL Server數(shù)據(jù)庫之間復(fù)制對象和數(shù)據(jù)”,試了多次,好像不行,只是復(fù)制過來了所有表結(jié)構(gòu),但是沒有數(shù)據(jù),也沒有視圖和存儲(chǔ)過程,而且DTS向?qū)ё詈髨?bào)告復(fù)制失敗;

      所以最后選擇“從源數(shù)據(jù)庫復(fù)制表和視圖”,但是后來發(fā)現(xiàn),這樣總是只能復(fù)制一部分表記錄;

      于是選擇“用一條查詢指定要傳輸?shù)臄?shù)據(jù)”,缺哪個(gè)表記錄,就導(dǎo)哪個(gè);

      視圖和存儲(chǔ)過程是執(zhí)行SQL語句添加的。

      維護(hù)Sql Server中表的索引

      在使用和創(chuàng)建數(shù)據(jù)庫索引中經(jīng)常會(huì)碰到一些問題,在這里可以采用一些另類的方法解決…

      --第一步:查看是否需要維護(hù),查看掃描密度/Scan Density是否為100%

      declare @table_id int

      set @table_id=object_id('表名')

      dbcc showcontig(@table_id)

      --第二步:重構(gòu)表索引

      dbcc dbreindex('表名',pk_索引名,100)

      --重做第一步,如發(fā)現(xiàn)掃描密度/Scan Density還是小于100%則重構(gòu)表的所有索引

      --并不一定能達(dá)100%

      dbcc dbreindex('表名','',100)

      分享:詳解SQL Server中數(shù)據(jù)庫快照的工作原理
      數(shù)據(jù)庫快照是怎樣工作的 可以使用典型的數(shù)據(jù)庫命令CREATE DATABASE語句來生成一個(gè)數(shù)據(jù)庫快照,在聲明中有一個(gè)源數(shù)據(jù)庫快照的附加說明。當(dāng)快照被建立時(shí),同時(shí)生成一個(gè)稀疏文件。這個(gè)文件(只能使用在NTFS卷中)在初始化的時(shí)候并沒有磁盤空間分配給它盡管你可能

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫教程/更新時(shí)間:2009-03-04
      相關(guān)Mssql數(shù)據(jù)庫教程