DBCC 式] 和 [式命令可能無法運作是因為 sparsely 填入的文字、 ntext 或 image 資料行

文章翻譯 文章翻譯
文章編號: 324432 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

[DBCC 式] 和 [DBCC 式命令而不移動資料,而且如果 EstimatedPages 值等於 MinimumSize 值,會報告命令完成時,減少檔案大小。因為在二進位大型物件 (BLOB) 資料型別具有資料表上的資料修改查詢的 (文字ntext影像),則可能將許多制式的範圍配置 sparsely 填入資料 (比方說 8 頁配置範圍控制項的唯一 1),這將導致 DBCC 式和 DBCC 式命令 over-estimate EstimatedPages,數目,且指令並不會執行壓縮作業。 通常,在種情況下] 這種行為有經驗的地方完整資料庫備份的大小小於 8 次的資料庫檔案大小之後資料庫檔案上執行 DBCC 式。

解決方案

如果受影響的資料表沒有被持續線上,雖然修正這種情況下,您可以使用任何一種下列因應措施如果要解決這個問題:
  • 使用 SELECT INTO 陳述式轉移到新的資料表在同一個資料庫中的整個資料表。卸除原始的資料表,然後再執行 DBCC 式陳述式。重新命名新的資料表,以原始的資料表名稱。
  • 使用 SELECT INTO 陳述式轉移到不同的資料庫中的新資料表的整個資料表。截斷原始資料表,然後再執行 DBCC 式陳述式。傳送資料回到原始的資料表。
  • 使用大量複製程式複製的資料表,在原生模式。編寫表格及再卸除現有的資料表。執行 DBCC 式陳述式。建立新的資料表,然後使用 [將資料複製到資料表的 [大量複製程式。
  • 使用 「 資料轉換服務 」 (DTS) 來將整個資料庫傳輸至新的資料庫。SQL Server 7.0 資料轉換服務可能無法傳輸 text 與 image 資料較長的時間比 64KB 正確。這個問題並不會套用到 SQL Server 2000 版本的資料轉換服務。 如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
    257425FIX: DTS 物件傳輸並不傳送 BLOB 資料大於 64
    您可以尋找大於 64 KB,使用下列查詢的 text 與 image 資料行:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    如果文字與影像資料是大於 64 KB,傳輸會截斷資料,而且不會引發任何錯誤,但在 [DTS 記錄檔。如果您大於 64 KB 的文字或影像資料使用第三個項目符號項目中資訊具有文字或影像資料的資料表。接下來,使用 DTS 其餘部份的資料庫中的項目。
如果資料庫必須在線上,或是資料庫的大小太大,無法將資料移入外部檔案或另一個資料庫,DBCC 式命令可以使用 EMPTYFILE 選項。若要將這個解決請依照下列步驟執行:
  1. 如果您正在執行 Microsoft SQL Server 7.0 Service Pack 3,開啟 1180年和 1197年的追蹤旗標。
  2. 如果您執行 Microsoft SQL Server 7.0 Service Pack 3 建置 7.00.987 或更新版本,包括服務套件 4,開啟追蹤 1180年的旗標。
  3. 如果您有分配跨越數個檔案的磁碟機空間問題或效能原因資料庫,建立使用 ALTER 資料庫命令具有總大小相當於下列查詢的結果資料庫中的 1 或更多其他檔案
    select 'size in MB'=ceiling(sum(ei.pg_alloc)/128.000), sfg.groupname
    from extentinfo ei inner join sysfiles sf on ei.[file_id] = sf.fileid and ei.[file_id] != 1
     inner join sysfilegroups sfg on sf.groupid = sfg.groupid
    group by sfg.groupname
    注意: 先前的查詢使用由本文 < 其他資訊 > 一節中查詢所建立的資料表。此外,檔案大小總計會依細分檔案群組。

  4. 以做為第二個參數具有 sparsely 填入 BLOB (二進位大型物件) 制式的範圍每個檔案上的 [EMPTYFILE 選項執行 DBCC 式查詢。
  5. 您可以使用本文 < 其他資訊 > 一節中的 [extentinfo] 資料表的結構描述中建立一或多個資料表來追蹤進度的 DBCC SRHINKFILE 命令。然後執行 「 INSERT...EXEC import_extentinfo"查詢來填入資料到新的資料表。使用下列查詢來分析結果:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    此外,您可以使用下列查詢來追蹤如果資料表具有相同圖樣的字母開始,且建立附近時間為 DBCC EXTENTINFO 命令執行 DBCC EXTENTINFO 命令時:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. DBCC 式查詢完成時, 執行的改變資料庫查詢,以便從資料庫移除舊的檔案。
  7. 您可能可以在步驟 3 中建立新的檔案上的 [TRUNCATEONLY] 選項以執行 DBCC 式查詢來移除額外的空間。
  8. 如果您正在執行 Microsoft SQL Server 7.0,關閉您在步驟 1 或 2 中開啟的追蹤旗標。

其他相關資訊

如果您擁有 系統管理員 (sysadmin) 權限的使用者身分登入,您可以從這類的查詢分析的任何查詢工具執行下列的 Transact-SQL 查詢。您在 SQL Server,以判斷 DBCC 式命令和命令無法 sparsely 壓縮檔案,因為此 DBCC 式填入 BLOB 制式的範圍上執行 T-SQL 查詢。

注意: 您必須更新的問題的資料庫名稱的字串 '< 資料庫名稱 >' 並單引號括住名稱。

use pubs
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 8
begin 
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10)
   )
end
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 7
begin
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10),
   avg_used tinyint
   )
end
go
create procedure import_extentinfo as
dbcc extentinfo('<database name>')
go
insert extentinfo exec import_extentinfo
go

select [file_id],obj_id, index_id, ext_size, 'actual extent count'=count(*), 'actual page count'=sum(pg_alloc),
 'possible extent count'=ceiling(sum(pg_alloc)*1.0/ext_size),
 'possible extents / actual extents' = (ceiling(sum(pg_alloc)*1.00/ext_size)*100.00) / count(*)
 from extentinfo where ext_size != 1 and index_id = 255
 group by [file_id],obj_id, index_id, ext_size
 having count(*)-ceiling(sum(pg_alloc)*1.0/ext_size) > 0
 order by obj_id, index_id, [file_id]
如果您看到有 index_id 值 255,從最後一個查詢的結果資料列和 可能範圍 / 實際範圍 資料行是小於 75,此資料庫不會有 sparsely 填入 BLOB 範圍,並可以降低的大小,由本文 < 解決方案 > 一節中所述的方法。

注意: 這個查詢會依賴 DBCC EXTENTINFO 功能命令。因為功能可能會變更,或者甚至會從未來版本的 Microsoft SQL Server 移除,再使用這種情況之外 DBCC EXTENTINFO 命令。

?考

如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
272220FIX: TEXT/IMAGE 資料儲存體空間不正確地回收
308627FIX: DBCC 式或 DBCC 式可能會展開具有文字或影像資料的資料庫

屬性

文章編號: 324432 - 上次校閱: 2005年12月9日 - 版次: 5.1
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbmt kbprb KB324432 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:324432
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com