คำสั่ง SHRINKFILE dbcc และ SHRINKDATABASE อาจไม่มีการทำงานเนื่องจากของข้อความ sparsely populated, ntext หรือคอลัมน์ของรูปภาพ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 324432 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

อาการ

คำสั่ง SHRINKFILE DBCC และ SHRINKDATABASE DBCC จะไม่ย้ายข้อมูล และลดขนาดแฟ้มถ้าการEstimatedPagesค่าเท่ากับMinimumSizeค่าที่รายงานเมื่อคำสั่งเสร็จสมบูรณ์ เนื่องจากการสอบถามการปรับเปลี่ยนข้อมูลในตารางที่มีวัตถุมีขนาดใหญ่ไบนารี (BLOB) ข้อมูลชนิด(ข้อความ,ntext,รูปภาพ), คุณจะสามารถมีหลายอย่างสม่ำเสมอ extents ปันส่วนที่ sparsely บรรจุข้อมูล (ตัวอย่างเช่น เพียง 1 หน้า 8 ที่ควบคุมส่วนขยายมีการปันส่วน), ซึ่งจะทำให้เกิด SHRINKFILE DBCC และ SHRINKDATABASE DBCC over-estimate หมายเลขของคำสั่งEstimatedPagesและคำสั่งห้ามทำการดำเนินการย่อขนาด โดยทั่วไป ในกรณีซึ่งพบลักษณะการทำงานนี้ ขนาดของการสำรองข้อมูลเต็มรูปแบบการฐานข้อมูลได้จนถึง 8 ครั้งขนาดเล็กกว่าขนาดของแฟ้มฐานข้อมูลหลังจากที่คุณเรียกใช้แบบ SHRINKFILE DBCC บนแฟ้มฐานข้อมูล

การแก้ไข

ถ้าตารางที่ได้รับผลกระทบยังไม่ได้เป็นอย่างต่อเนื่องออนไลน์ในขณะที่คุณแก้ไขสถานการณ์นี้ คุณสามารถใช้หนึ่งในการแก้ไขปัญหาต่อไปนี้เพื่อแก้ไขปัญหานี้:
  • ใช้กับคำสั่ง SELECT ลงในการถ่ายโอนทั้งตารางกับตารางใหม่ในฐานข้อมูลเดียวกัน ลบตารางต้นฉบับ และเรียกใช้คำชี้แจงสิทธิ์ DBCC SHRINKFILE เปลี่ยนชื่อตารางใหม่ที่ชื่อของตารางต้นฉบับ
  • ใช้กับคำสั่ง SELECT ลงในการถ่ายโอนทั้งตารางกับตารางใหม่ในฐานข้อมูลที่แตกต่างกัน ตัดทอนในตารางต้นฉบับ และเรียกใช้คำชี้แจงสิทธิ์ DBCC SHRINKFILE ถ่ายโอนข้อมูลกลับไปตารางต้นฉบับ
  • ใช้โปรแกรมจะคัดลอกขนาดใหญ่เพื่อคัดลอกตารางไม่อยู่ในโหมดเนทิฟ สคริปต์ออกจากตาราง และลบตารางที่มีอยู่แล้ว เรียกใช้คำชี้แจงสิทธิ์ DBCC SHRINKFILE สร้างตารางใหม่ และจากนั้น ใช้โปรแกรมจะคัดลอกขนาดใหญ่เพื่อคัดลอกข้อมูลกลับไปยังตาราง
  • ใช้บริการแปลงข้อมูล (DTS) การถ่ายโอนฐานข้อมูลทั้งหมดไปยังฐานข้อมูลใหม่ บริการของ sql Server 7.0 ข้อมูลแปลงอาจไม่ถ่ายโอนข้อความและรูปข้อมูลยาวที่ไม่ใช่กิโลไบต์ 64 อย่างถูกต้อง ปัญหานี้ไม่ได้ใช้บริการการแปลงข้อมูลรุ่น SQL Server 2000สำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
    257425การแก้ไข: DTS วัตถุ Transfer ไม่ถ่ายโอนข้อมูล BLOB มากกว่า 64
    คุณสามารถค้นหาข้อความและรูปคอลัมน์ที่ใหญ่กว่า 64 กิโลกับแบบสอบถามต่อไปนี้:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    ถ้าข้อมูลข้อความและรูปภาพมากกว่า 64 กิโล การโอนย้าย truncates ข้อมูล และไม่เพิ่มข้อผิดพลาดใด ๆ ยกเว้นใน DTS ในแฟ้มบันทึก ถ้าคุณมีข้อความหรือรูปข้อมูลมากกว่า 64 กิโล ใช้ข้อมูลในรายการแสดงหัวข้อย่อยสามสำหรับตารางที่มีข้อมูลข้อความหรือรูปภาพ ขั้นตอนถัดไป ใช้ DTS สำหรับส่วนที่เหลือของสินค้าในฐานข้อมูล
ถ้าฐานข้อมูลต้องเป็นแบบออนไลน์ หรือขนาดของฐานข้อมูลขนาดใหญ่เกินกว่าที่จะย้ายข้อมูลเข้าไปในแฟ้มข้อมูลภายนอกหรือฐานข้อมูลอื่น คุณสามารถใช้คำสั่ง SHRINKFILE 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. ถ้าคุณมีแพร่กระจายฐานข้อมูลไปยังแฟ้มหลาย ๆ แฟ้มสำหรับการตัดสินค้าจากคลังเนื้อที่ว่างบนไดรฟ์หรือเหตุผลประสิทธิภาพ สร้าง 1 หรือมากกว่าแฟ้มเพิ่มเติมในฐานข้อมูล โดยใช้คำสั่งฐานข้อมูลที่มีการเปลี่ยนแปลงกับขนาดทั้งหมดที่ comparable กับผลลัพธ์ของแบบสอบถามต่อไปนี้
    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
    หมายเหตุ:: แบบสอบถามก่อนหน้านี้ใช้ตารางที่ถูกสร้างขึ้น โดยการสอบถามในส่วน "ข้อมูลเพิ่มเติม" ของบทความนี้ นอกจากนี้ ผลรวมของขนาดแฟ้มที่แบ่งย่อยตาม filegroup

  4. รันการสอบถาม SHRINKFILE DBCC ด้วยอ็อพชัน EMPTYFILE เป็นพารามิเตอร์ตัวที่สอง บนแต่ละแฟ้มที่มี sparsely บรรจุ blob extents ที่สม่ำเสมอ
  5. คุณสามารถติดตามความคืบหน้าของการdbcc srhinkfileคำสั่ง ด้วยการสร้างตารางอย่าง น้อยหนึ่งกับ schema เดียวกันเป็นextentinfoตารางจากส่วน "ข้อมูลเพิ่มเติม" ของบทความนี้ เรียกใช้ "INSERT .. execimport_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]
    นอกจากนี้ คุณสามารถใช้แบบสอบถามต่อไปนี้เพื่อติดตามเมื่อมีการรันคำสั่ง EXTENTINFO DBCC ถ้าตารางเริ่มการทำงานกับรูปแบบเดียวกันของตัวอักษร และสร้างใกล้กับเวลาที่เป็นคำสั่ง EXTENTINFO DBCC:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. เมื่อแบบสอบถาม SHRINKFILE DBCC เสร็จสมบูรณ์ ALTER การรันการสอบถามฐานข้อมูลเพื่อเอาแฟ้มที่เก่าออกจากฐานข้อมูล
  7. คุณอาจสามารถลบเนื้อที่ว่างเพิ่มเติมได้ ด้วยการรันการสอบถาม SHRINKFILE DBCC ด้วยอ็อพชัน TRUNCATEONLY บนแฟ้มใหม่ที่สร้างขึ้นในขั้นตอนที่ 3
  8. ถ้าคุณกำลังเรียกใช้ Microsoft SQL Server 7.0 ปิดที่สถานะการสืบค้นกลับที่คุณเปิดไว้ในขั้นตอนที่ 1 หรือ 2

ข้อมูลเพิ่มเติม

คุณสามารถเรียกใช้แบบสอบถาม Transact SQL ต่อไปนี้จากเครื่องมือใด ๆ แบบสอบถาม เช่นตัววิเคราะห์คำถาม ถ้าคุณเข้าสู่ระบบในฐานะผู้ใช้ที่มีsysadminสิทธิการ คุณสามารถรันการสอบถาม Transact SQL บน SQL Server เพื่อตรวจสอบว่า คำสั่ง SHRINKDATABASE DBCC และ SHRINKFILE DBCC ที่คำสั่งไม่สามารถย่อแฟ้มได้เนื่องจาก sparsely บรรจุ BLOB extents ที่สม่ำเสมอ

หมายเหตุ:: คุณต้องปรับปรุงสตริ ' <database name=""> ' กับชื่อของฐานข้อมูลของปัญหา และใส่ชื่อในอัญประกาศเดี่ยว</database>

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 ฐานข้อมูลนี้ได้ extents BLOB sparsely populated และสามารถจะลดขนาด โดยวิธีการอธิบายไว้ในส่วน "การแก้ปัญหา" ของบทความนี้

หมายเหตุ:: แบบสอบถามนี้ใช้ฟังก์ชันการทำงานของ EXTENTINFO DBCC คำสั่ง ไม่สามารถใช้คำสั่ง EXTENTINFO DBCC นอกสถานการณ์เช่นนี้ได้เนื่องจากการทำงานอาจเปลี่ยนแปลง หรือแม้กระทั่งถูกเอาออกจาก Microsoft SQL Server รุ่นต่อ ๆ ไป

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความด้านล่างนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
272220การแก้ไข: ข้อความ/รูปข้อมูลที่เก็บพื้นที่ไม่ได้เรียกคืนได้อย่างถูกต้อง
308627การแก้ไข: SHRINKDATABASE DBCC หรือ SHRINKFILE DBCC อาจขยายฐานข้อมูล ด้วยข้อความหรือข้อมูลรูป

คุณสมบัติ

หมายเลขบทความ (Article ID): 324432 - รีวิวครั้งสุดท้าย: 19 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbprb kbmt KB324432 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:324432

ให้ข้อเสนอแนะ

 

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