sql2000附加損壞的mdf文件和dbcc修復(fù)數(shù)據(jù)庫
廣告:
sql2000附加損壞的mdf文件和dbcc修復(fù)數(shù)據(jù)庫
1 可用高版本如sqlserver 2008 r2來附加,找出mdf和log所在原始的目錄位置。(但是不能附加成功)
2 再在sql2000企業(yè)管理員新建同名數(shù)據(jù)庫,位置要和原始路徑一一對(duì)應(yīng)。用損壞的mdf替換新建的mdf文件,再啟動(dòng)服務(wù)
3 進(jìn)入查詢分析器(不要選擇數(shù)據(jù)庫進(jìn)入,會(huì)提示sa登錄失。
use master
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='test' --緊急修復(fù)模式
會(huì)提示:未啟用對(duì)系統(tǒng)目錄的特殊更新。系統(tǒng)管理員必須重新配置 SQL Server 以允許這種操作。
運(yùn)行:
sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
可檢查 dbcc checkdb('test') with no_infomsgs --只顯示錯(cuò)誤信息
sp_dboption 'test', 'single user', 'true'
會(huì)提示:
未處理修復(fù)語句。數(shù)據(jù)庫需要處于單用戶模式下。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
再運(yùn)行:
use master
sp_dboption 'test', 'single user', 'true'
再運(yùn)行:
use master
sp_dboption 'test', 'single user', 'true'
dbcc checkdb('test',REPAIR_ALLOW_DATA_LOSS)
會(huì)提示:未能讀取并閂鎖頁 (1:199)(用閂鎖類型 SH)。sysindexes 失敗。
由于數(shù)據(jù)移動(dòng),未能繼續(xù)以nolock方式掃描
恢復(fù)正常模式:
update sysdatabases set status =28 where name='test'
處理sql腳本:
osql -S HAO-PC\SQL2001 -U sa -P 123456 -d test_3 -i G:\temp\4.sql
SQL Server已創(chuàng)建表 'XXXX,但其最大行大。10438)超過了每行的最大字節(jié)數(shù)(8060)
"警告: 已創(chuàng)建表 'XXXX,但其最大行大。10438)超過了每行的最大字節(jié)數(shù)(8060)。如果結(jié)果行長度超過 8060 字節(jié),則此表中行的 INSERT 或 UPDATE 將失敗。"
解決: 設(shè)計(jì)表特別是 varchar(7000) 改成 varchar(5000)
USE MASTER; GO; SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='AIS2015' --sql2000不需要 Go sp_dboption 'AIS2015', 'single user', 'true' Go DBCC CHECKDB('AIS2015') DBCC CHECKDB(AIS2015,REPAIR_ALLOW_DATA_LOSS) --sql2000查詢分析器不支持,ssms 2012支持 Go update sysdatabases set status =28 where name='AIS2015' Go sp_configure 'allow updates', 0 reconfigure with override Go sp_dboption 'AIS2015', 'single user', 'false' Go
DBCC REBUILD_LOG ('hkdyf', 'G:\temp\20250121\hkdyf_log') --重新生成日志
以上命令如果出錯(cuò),請(qǐng)一行一行執(zhí)行。 查詢分析器里面執(zhí)行。
sql2000查詢分析器不支持 REPAIR_ALLOW_DATA_LOSS
提示:未能在數(shù)據(jù)庫 ' ' 中運(yùn)行 BEGIN TRANSACTION,因?yàn)樵摂?shù)據(jù)庫處于回避恢復(fù)模式
SQL Server 2000 不支持 REPAIR_ALLOW_DATA_LOSS 選項(xiàng)。SQL Server 2000 的數(shù)據(jù)庫修復(fù)模式中不存在允許數(shù)據(jù)丟失的修復(fù)選項(xiàng)。在 SQL Server 2000 中,最接近 REPAIR_ALLOW_DATA_LOSS 的選項(xiàng)是 REPAIR_REBUILD,但它也不能保證數(shù)據(jù)不丟失。
但是 ssms 2012連接數(shù)據(jù)庫支持上面的語句。
DBCC CHECKTABLE('table_name')
DBCC REINDEX
DBCC dbREINDEX(sql2000)
重新生成日志:
USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='LPark' Go DBCC REBUILD_LOG ('LPark', 'G:\temp\20250126-166\LPark_log.ldf') --重新生成日志
廣告: