程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> BCP恢復SQL Server 2000數據庫 二

BCP恢復SQL Server 2000數據庫 二

編輯:關於SqlServer

原始位置:http://soft.zdnet.com.cn/software_zone/2007/0918/512412.sHtml

BCP恢復SQL Server 2000數據庫二(1)

缺省情況下,SQL Server不允許修改status值。直接作update,系統提示服務器: 消息 259,級別 16,狀態 2,行 1未啟用對系統目錄的特殊更新。系統管理員必須重新配置 SQL Server 以允許這種操作。

所以先執行SQL腳本,讓SQL Server允許我們修改status值:

sp_configure ''allow updates'', 1

RECONFIGURE WITH OVERRIDE

修改status到32768(緊急模式),執行SQL腳本:

update SysDatabases

set status=32768

where name=''zytk''

在查詢分析器中執行SQL腳本,檢查數據庫完整性。

dbcc checkdb (''ZYTK'') with ALL_ERRORMSGS

執行結果有很多錯誤(具體執行結果見03CheckDB-ZYTK結果.txt),跟筆者估計一致,數據庫的索引出了大問題。下面摘錄其中一個錯誤:

對象 ''cw_Check_Detail'' 有 0 行,這些行位於 0 頁中。

服務器: 消息 8936,級別 16,狀態 1,行 1

表錯誤: 對象 ID 181575685,索引 ID 1。B 樹鏈的鏈接不匹配。(1:4987)->next = (1:2601),但 (1:2601)->Prev = (1:4947)。

在查詢分析器中執行SQL腳本,將數據庫ZYTK的status修改為16:

update SysDatabases

set status=16

where name=''zytk''

刷新數據庫,ZYTK(緊急模式)轉變為ZYTK。注意此時不能重新啟動SQL Server服務!否則數據庫ZYTK的狀態還會變成置疑。這時,數據庫處理算是成功一半!這個假正常模式(我的叫法)還是不能做數據庫備份的。否則會提示如圖5的錯誤。

靠BCP恢復SQL Server 2000數據庫二(1)

 

BCP恢復SQL Server 2000數據庫二(2)

不過這時可以看到那些可恨又可愛的表及表中的數據了。

在d:recovery下建立目錄BCP,再在d:recoveryBCP下建立error目錄。利用SQL Server數據庫的SysObjects表可以生成批量的BCP命令:

從數據庫中各表導出所有表的數據:

Use  %1

Select ''BCP  %1..'' + name +

'' out  d:recoveryBCP'' +name + ''.txt -c -S%2  -U%3 -P%4 >D:recoveryBCPerror out_''+name+''.txt'' from  sysobjects where type = ''U'' order by name

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved