日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL Server 系統架構損壞手動修復

admin
2025年1月9日 22:7 本文熱度 121

?


CS模式下,數據是放在客戶本地的服務器上。而大部分客戶并沒有專業能力去維護他們的SQL Server,老版本數據庫系統設置更是較舊。因此,總是遇到客戶反饋的損壞問題。客戶 alter 或 drop 某個存儲過程、或者打開存儲過程列表時,執行中止并提示“架構損壞”。

-- checkdb 中斷報錯DBCC CHECKDB(DBName)
-- 類似的,修復也報錯DBCC CHECKDB (dbname, REPAIR_ALLOW_DATA_LOSS);

CHECKDB 在數據庫 'dbname' 中發現 0 個分配錯誤和 0 個一致性錯誤。

DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。

消息 211,級別 23,狀態 16,第 1 行

可能發生了架構損壞。請運行 DBCC CHECKCATALOG。


除了這些錯誤信息,完全不知道哪些表有問題。又對這個庫的所有表都 checktable ,也無報錯。可以確認,當前的表結構及數據是沒問題的,斷定是當前數據庫的系統表出現了問題。


好吧,打開 Profiler 跟著(RPC:Startding、RPC:Completed、SP:Startding、SP:Completed、SP:StmtStartding、SP:StmtCompleted、SQL:…),甚至還跟蹤了鎖的請求及釋放(有點多余了)。然后刪除某報錯的存儲過程,跟蹤到以下SQL:

圖一

把以上跟蹤出現的涉及表查詢一遍:

select * from sys.all_objectsselect * from sys.database_principalsselect * from sys.sql_modulesselect * from sys.system_sql_modules

發現是系統視圖 sys.sql_modules 報錯!該視圖返回函數、視圖、存儲過程的定義。查看該視圖的定義:

sp_helptext 'sys.sql_modules'
--定義CREATE VIEW sys.sql_modules AS   SELECT object_id = o.id,    definition = object_definition(o.id),    uses_ansi_nulls = sysconv(bit, o.status & 0x40000),    -- OBJMOD_ANSINULLS    uses_quoted_identifier = sysconv(bit, o.status & 0x80000),   -- OBJMOD_QUOTEDIDENT    is_schema_bound = sysconv(bit, o.status & 0x20000),    -- OBJMOD_SCHEMABOUND    uses_database_collation = sysconv(bit, o.status & 0x100000),  -- OBJMOD_USESDBCOLL    is_recompiled = sysconv(bit, o.status & 0x400000),     -- OBJMOD_NOCACHE    null_on_null_input = sysconv(bit, o.status & 0x200000),   -- OBJMOD_NULLONNULL    execute_as_principal_id = x.indepid   FROM sys.sysschobjs o   LEFT JOIN sys.syssingleobjrefs x ON x.depid = o.id AND x.class = 22 AND x.depsubid = 0 -- SRC_OBJEXECASOWNER   WHERE o.pclass <> 100 -- x_eunc_Server    AND ((o.type = 'TR' AND has_access('TR', o.id, o.pid, o.nsclass) = 1)     OR (type IN ('P','V','FN','IF','TF','RF','IS') AND has_access('CO', o.id) = 1)     OR (type IN ('R','D') AND o.pid = 0))


可以看到2個系統視圖: sys.sysschobjs、sys.syssingleobjrefs但是,這2個系統視圖是無法直接查詢的,難道到這里就終止了嗎?不可能的!~


要查看這些系統視圖,我們需要以專用管理員連接(DAC) 訪問。添加 “-m” 到啟動參數,然后重啟服務。

圖二


直接點擊一個查詢窗口,以DAC管理員訪問:admin:<instancename>


圖三


好了,進入損壞的數據庫,查詢系統視圖:

select * from sys.sysschobjsselect * from sys.syssingleobjrefs

其實,這些系統視圖,等價于我們常看到的那些系統視圖。

Sysobjects = sys.sysschobjs
Syscolumns = sys.syscolpars
Sysindexes = sys.sysidxstats

廢話不多說,再執行視圖sys.sql_modules 的定義中的一部分sql:

SELECT object_id = o.id,  definition = object_definition(o.id)FROM sys.sysschobjs o  LEFT JOIN sys.syssingleobjrefs x ON x.depid = o.id AND x.class = 22 AND x.depsubid = 0

可以確認是 object_definition 獲取定義的函數出錯。回頭看看那個報錯的存儲過程,查看其定義:

select object_definition(id),id from sys.sysschobjs where name='usp_mytest'

果然是報錯的就是它,錯誤就是最開始的信息。但是,不確定是否其他對象也可能出錯,所以執行以下SQL,把所有輸出都執行一遍。

select concat('selelct object_definition(',id,')') from sys.sysschobjs

既然確定了該出錯的信息,那么就只能把該行數據刪掉了!那要刪除哪些表呢?以下這些表,可以都查看一遍,與對象id相關的,都可以查詢出來刪掉。

select id,name,type,concat('select * from sys.',name) from sys.sysschobjs WHERE NAME LIKE 'sys%' order by type,NAME


以下幾張表要刪除的:

select id from sys.sysschobjs where name='usp_mytest'
delete from sys.sysschobjs where id=xxxxxxxxxxxdelete from sys.syscolpars where id=xxxxxxxxxxxdelete from sys.syssoftobjrefs where depid=xxxxxxxxxxx

如果只刪除 sys.sysschobjs ,checkdb 的時候還是報以下錯誤,所以把其他相關表也刪除。

Attribute (parent_object_id=xxxxxxxxxxx) of row (object_id=xxxxxxxxxxx) in sys.objects does not have a matching row (object_id=xxxxxxxxxxx) in sys.objects.

再執行 checkdb,發現已經沒有錯誤了。上面提到的一些查詢也操作正常,SSMS存儲過程列表也可以打開了!

--    可創建原來的存儲過程--    Create procedure usp_mytest   ALTER DATABASE dbname SET EMERGENCY;GOALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE;GODBCC CHECKDB (dbname) WITH TABLOCKGOALTER DATABASE dbname SET MULTI_USER;GOALTER DATABASE dbname SET ONLINE;GO

此時,可以把啟動參數“-m”去掉,重啟服務!至此,完美解決。checkdb 無法修復的系統對象,通過手動修改解決了!


閱讀原文:原文鏈接


該文章在 2025/1/10 11:08:56 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲成aⅴ人的天堂在线观看女人 | 日韩欧美亚洲一中文字暮 | 日本免费一区二区三区在线看 | 欧美日韩国产网站 | 亚洲精品国产高清 | 夜夜看天天想人人爱 | 国产在线精品一区二 | 中文字幕日韩 | 免费播放婬乱男女婬视频国产 | 最近2025最新中文字幕免费看 | 91高清免费国产自产 | 欧洲乱码专区一区二区三区四区 | 国产在线精品一区二区高清 | 亚洲国产日韩a在线观看 | 亚洲国产欧美日韩精品一区二 | 亚美影院 | 日韩激情成 | 日本成a人片在线观看网址 国产精品蜜桃丝袜 | 亚洲天天做日日做天天谢日日欢 | 中文字幕永久在线日本高清dvd | 国产精品区二区三区日本 | 亚洲一区二区国产精品 | 美女人成大片免费视频看看 | 日韩亚射亚洲国产第一 | 欧美精品亚洲精品日韩 | 少女哔哩 | 视频三区 | 最新热播电影完整版 | 亚洲视频永久在线 | 成年福利片在线观看 | 狠狠狠狼鲁欧美综合网免费 | 国内视频一区在线播放 | 亚洲欧美国产国产一区二区三区 | 免费视频人 | www.99精品| 4日本国产vps私人大片 | 精品国产免费一区二区三区 | 美女视频在线永久免费观看 | 国产精品香蕉夜间视频免费播放 | 国产精品区一区二区三 | 欧美日韩国产亚洲一区二区 |