sql2000附加損壞的mdf文件和dbcc修復數據庫
廣告:
sql2000附加損壞的mdf文件和dbcc修復數據庫
1 可用高版本如sqlserver 2008 r2來附加,找出mdf和log所在原始的目錄位置。(但是不能附加成功)
2 再在sql2000企業管理員新建同名數據庫,位置要和原始路徑一一對應。用損壞的mdf替換新建的mdf文件,再啟動服務
3 進入查詢分析器(不要選擇數據庫進入,會提示sa登錄失敗)
use master
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='test' --緊急修復模式
會提示:未啟用對系統目錄的特殊更新。系統管理員必須重新配置 SQL Server 以允許這種操作。
運行:
sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
可檢查 dbcc checkdb('test') with no_infomsgs --只顯示錯誤信息
sp_dboption 'test', 'single user', 'true'
會提示:
未處理修復語句。數據庫需要處于單用戶模式下。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
再運行:
use master
sp_dboption 'test', 'single user', 'true'
再運行:
use master
sp_dboption 'test', 'single user', 'true'
dbcc checkdb('test',REPAIR_ALLOW_DATA_LOSS)
會提示:未能讀取并閂鎖頁 (1:199)(用閂鎖類型 SH)。sysindexes 失敗。
由于數據移動,未能繼續以nolock方式掃描
恢復正常模式:
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已創建表 'XXXX,但其最大行大小(10438)超過了每行的最大字節數(8060)
"警告: 已創建表 'XXXX,但其最大行大小(10438)超過了每行的最大字節數(8060)。如果結果行長度超過 8060 字節,則此表中行的 INSERT 或 UPDATE 將失敗。"
解決: 設計表特別是 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') --重新生成日志
以上命令如果出錯,請一行一行執行。 查詢分析器里面執行。
sql2000查詢分析器不支持 REPAIR_ALLOW_DATA_LOSS
提示:未能在數據庫 ' ' 中運行 BEGIN TRANSACTION,因為該數據庫處于回避恢復模式
SQL Server 2000 不支持 REPAIR_ALLOW_DATA_LOSS 選項。SQL Server 2000 的數據庫修復模式中不存在允許數據丟失的修復選項。在 SQL Server 2000 中,最接近 REPAIR_ALLOW_DATA_LOSS 的選項是 REPAIR_REBUILD,但它也不能保證數據不丟失。
但是 ssms 2012連接數據庫支持上面的語句。
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') --重新生成日志
廣告: