ข้อความแสดงข้อผิดพลาดการแก้ไข: เมื่อคุณพยายามที่จะใส่ข้อมูลในสมาชิกของการจำลองแบบผสานใน SQL Server 2005: "ข่าวสารเกี่ยวกับ 548 ระดับ 16 สถานะ 2 บรรทัด 1 แทรกล้มเหลว"

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 953481 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
bug #: 50002854 (โปรแกรมแก้ไขด่วนของ SQL)
Microsoft กระจายแก้ไข Microsoft SQL Server 2005 เป็นแฟ้มเดียวที่สามารถดาวน์โหลดได้ เนื่องจากการแก้ไขสะสม แต่ละรุ่นที่ใหม่ที่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และแก้ไขการแก้ไขการรักษาความปลอดภัยทั้งหมดที่มาพร้อมกับ SQL Server 2005 ก่อนหน้าออก
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

พิจารณาสถานการณ์ต่อไปนี้: ใน SQL Server 2005 กำหนดค่าสิ่งพิมพ์ผสาน คุณเพิ่มตารางที่ประกอบด้วยการประกาศการผสานคอลัมน์รหัสประจำตัว แล้ว คุณใส่ข้อมูลลงในตารางบนผู้เผยแพร่ คุณซิงโครไนส์ข้อมูลระหว่างสมาชิกที่ผู้เผยแพร่ และจากนั้น คุณพยายามที่จะใส่ข้อมูลเพิ่มเติมบนผู้เผยแพร่ ในสถานการณ์สมมตินี้ คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้บนผู้เผยแพร่:
msg 548 ระดับ 16 สถานะ 2 บรรทัด 1
แทรกล้มเหลว มัน conflicted ด้วยการจำกัดการตรวจสอบช่วงรหัสประจำตัวในฐานข้อมูล 'DatabaseName', การจำลองแบบตาราง 'เค้าร่าง.TableName', คอลัมน์ 'ColumnName'. หากโดยอัตโนมัติคอลัมน์ identity ถูกจัดการ โดยการจำลองแบบ ปรับปรุงช่วงเป็นดังนี้: ผู้เผยแพร่ ดำเนิน sp_adjustpublisheridentityrange สำหรับสมาชิก เรียกใช้ตัวแทนการแจกจ่ายหรือตัวแทนการผสาน
ถ้าคุณพยายาม เรียกใช้ sp_adjustpublisheridentityrange ที่เก็บกระบวนการในผู้เผยแพร่ตามที่กล่าวถึงในข้อความแสดงข้อผิดพลาด ไม่สามารถแก้ไขปัญหานี้

ปัญหานี้เกิดขึ้นเมื่อบริษัทตัวแทนการผสานหลายซิงโครไนส์ข้อมูลในเวลาเดียวกันสำหรับการประกาศเวียนเดียวกัน ปัญหานี้สามารถถูก exacerbated ถ้าคุณมีสมาชิกมากในการประกาศการผสาน

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจากค่ารหัสประจำตัวปัจจุบันของตารางในผู้เผยแพร่ที่ไม่ได้อยู่ในช่วงของข้อมูลเฉพาะตัวของข้อจำกัดการตรวจสอบช่วงรหัสประจำตัว ลักษณะการทำงานนี้เกิดขึ้นเมื่อบริษัทตัวแทนผสานหลายพยายามที่จะเพิ่มช่วงรหัสประจำตัวในเวลาเดียวกันได้ โดยการสร้างช่วงถัดไปของข้อมูลเฉพาะตัวของผู้เผยแพร่

การแก้ไข

โปรแกรมแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ในการปรับปรุงที่สะสม 8 ครั้งแรก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับนี้แพคเกจโปรแกรมปรับปรุงที่สะสมสำหรับ SQL Server 2005 Service Pack 2 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
951217แพคเกจโปรแกรมปรับปรุงที่สะสม 8 สำหรับ SQL Server 2005 Service Pack 2
หมายเหตุ:เนื่องจาก builds สะสม แต่ละรุ่นใหม่ของโปรแกรมแก้ไขด่วนประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และแก้ไขการแก้ไขการรักษาความปลอดภัยทั้งหมดที่มาพร้อมกับ SQL Server 2005 ก่อนหน้าออก Microsoft แนะนำว่า คุณควรพิจารณาถึงการใช้โปรแกรมแก้ไขด่วนรุ่นล่าสุดที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
937137สร้าง SQL Server 2005 ที่หลังจากที่มีการนำออกใช้ SQL Server 2005 Service Pack 2
โปรแกรมแก้ไขด่วนของ Microsoft SQL Server 2005 ถูกสร้างสำหรับการระบุของ sql server เซอร์วิสแพ็ค คุณต้องใช้โปรแกรมแก้ไขด่วนของ SQL Server 2005 Service Pack 2 ให้การติดตั้ง SQL Server 2005 Service Pack 2 โดยค่าเริ่มต้น hotfix ที่ให้ไว้ใน service pack ของ SQL Server จะรวมอยู่ใน service pack ถัดไปของ SQL Server

การหลีกเลี่ยงปัญหา

เมื่อต้องการแก้ไขปัญหานี้ คุณต้องป้องกันจะผสานกันหลาย เมื่อต้องการทำเช่นนี้ เซ็ตmax_concurrent_mergeคุณสมบัติในสิ่งพิมพ์เวียนโดยการเรียกใช้คำสั่งต่อไปนี้:
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
หมายเหตุ:หลังจากที่คุณใช้วิธีแก้ปัญหานี้ อาจลดประสิทธิภาพการทำงานหากคุณมีสมาชิกมากสำหรับการประกาศ ลักษณะการทำงานนี้เกิดขึ้นเนื่องจากสมาชิกได้เพียงหนึ่งสามารถปรับข้อมูลในครั้งเดียว

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "การใช้งาน"

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

วิธีการตรวจสอบว่า คุณกำลังประสบปัญหานี้

การตรวจสอบว่า คุณกำลังประสบปัญหานี้ ดำเนินการดังต่อไปนี้:
  1. ตรวจสอบว่า ค่ารหัสประจำตัวปัจจุบันมีขนาดเล็กกว่าขอบล่างของช่วงรหัสประจำตัวแรกของข้อจำกัดการตรวจสอบช่วงรหัสประจำตัว

    การขอรับข้อมูลเฉพาะค่าปัจจุบัน เรียกใช้คำสั่งต่อไปนี้:
    SELECT IDENT_CURRENT ('<TableName>')
    ช่วงข้อมูลเฉพาะตัวของข้อจำกัดการตรวจสอบช่วงรหัสประจำตัวการรับ เรียกใช้อย่างใดอย่างหนึ่งคำสั่งต่อไปนี้:
    คำสั่งที่ 1
    sp_helpconstraint '<TableName>'
    คำสั่งที่ 2
    select * from MSmerge_identity_range
    where is_pub_range <>1
    AND artid IN 
     (select artid from sysmergearticles where name='<TableName>')
    AND subid in 
     (select subid from sysmergesubscriptions  MS
    join sysmergepublications MP 
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )
    
  2. ใช้การสืบค้นกลับของ SQL Server Profiler เพื่อกำหนดว่า executions interleaved ของกระบวนการ sp_MSsetup_publisher_idrange ที่เก็บไว้จะเริ่มต้น โดยรอบเวลาของบริษัทตัวแทนการผสานแยกต่างหากสำหรับการประกาศที่เหมือนกัน

    อย่างไรก็ตาม executions interleaved ของกระบวนการ sp_MSsetup_publisher_idrange ที่เก็บไว้ไม่เสมอระบุว่า คุณกำลังประสบปัญหานี้ นี่คือการได้เนื่องจากถูกไม่มีการรัน SQL Server Profiler เมื่อ occurance เดิมของการซิงโครไนส์ผสานข้อความแสดงข้อผิดพลาดแรกที่สร้างขึ้น อย่างไรก็ตาม executions interleaved ของกระบวนการ sp_MSsetup_publisher_idrange เก็บเพิ่มความเป็นไปได้ของประสบปัญหานี้
  3. คุณสามารถค้นหาจะผสานซ้อนทับกันอยู่ที่เกิดขึ้นเมื่อคุณได้รับข้อความแสดงข้อผิดพลาด "548" เกิดขึ้น เมื่อต้องการทำเช่นนี้ คุณสามารถตรวจทานประวัติการเวียนในฐานข้อมูลการกระจาย เมื่อต้องการทำเช่นนี้ เรียกใช้คำสั่งต่อไปนี้:
    Use distribution
    GO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.* 
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes
    

วิธีการแก้ไขที่มีอยู่ระบุช่วงสำหรับตารางที่ปัญหาที่เสียหาย

หลัง จากที่คุณติดตั้งการปรับปรุงที่สะสม หรือหลัง จากที่คุณใช้วิธีการที่อธิบายไว้ในส่วนการแก้ปัญหา มีช่วงรหัสประจำตัวที่เสียหายที่มีอยู่ในตารางจะไม่แก้ไข คุณจะได้รับข้อความแสดงข้อผิดพลาด "548" ยังคงหากคุณพยายามแทรกข้อมูลลงในตาราง และซิงโครไนส์ข้อมูลในสมาชิก ดังนั้น คุณต้องด้วยตนเองแก้ไขช่วงรหัสประจำตัวที่เสียหายกับตาราง โดยให้ทำตามขั้นตอนต่อไปนี้:

หมายเหตุ:ขั้นตอนเหล่านี้เกี่ยวข้องด้วยตนเองแทนเมล็ดค่าปัจจุบันของข้อมูลเฉพาะสำหรับตารางถูกต้อง reseed ข้อมูลเฉพาะค่าที่ผู้เผยแพร่ ในสถานะที่เสียหาย การระบุมูลค่าปัจจุบันมีขนาดเล็กกว่าช่วงรหัสประจำตัวแรกในการตรวจสอบจำกัดผสานการช่วงข้อมูลเฉพาะตัวจำลองแบบ ขั้นตอนการเพิ่มค่า identity อยู่ในที่อยู่ภายในช่วงของข้อมูลเฉพาะที่กำหนดไว้ ด้วยการกาเครื่องหมายจำกัดผสานการช่วงข้อมูลเฉพาะตัวจำลองแบบ ด้วยตนเอง These steps assume that identities are configured in an ascending manner and that the identity increment is configured to increase by a value of 1.
  1. Confirm that the identity increment value is 1 and that the identity proceeds in ascending manner. You can obtain the identity increment value by running the following statement on the publisher:
    SELECT IDENT_INCR( '<TableName>')
  2. Run the following statement on the publisher to find the current identity value on the problematic identity column:
    DBCC CHECKIDENT ('<TableName>')
    After you receive the result, note thecurrent identity valuevalue for comparison in the later steps. สังเกตว่า การcurrent column valuevalye may be either larger or smaller than thecurrent identity valueค่า

    ถ้าการcurrent column valuevalue is larger than thecurrent identity valuevalue, the column value may have originated at other replications in the topology and merged successfully with the publisher replication. ถ้าการcurrent column valuevalue is smaller than thecurrent identity valuevalue, the values may have been inserted on the publisher at a earlier time by using the SET IDENTITY_INSERT ON statement before the merge replication configuration.
  3. Run the following statements on the publisher to determine the current identity ranges of the identity range check constraint for the problematic table:
    Use <PublishedDatabaseName>
    GO
    sp_helpconstraint '<TableName>'
    GO
    
    After you receive the result, note the value of theconstraint_keyscolumn of the record where the value of theconstraint_namecolumn is "repl_identity_range_guid". The GUID value corresponds to the value of theartidcolumn for the article in the sysmergearticles system table. To obtain the GUID, run the following statement:
    select artid from sysmergearticles where name = '<TableName>'
    The identity range check constraint spans two separate ranges. The two sets of ranges do not have to be contiguous. For example, the value of theconstraint_keyscolumn can be as follows:
    ([ColumnName]>(1001) AND [ColumnName]<=(2001)></=(2001)>
    OR [ColumnName] > (9001) AND [ColumnName]<>
    หมายเหตุ:This article uses this example to present code in the rest of steps.

    In this example, the ranges each span 1,000 values. 1,000 is the default range size. However, you can change the identity range size by using one of the following methods:
    • Specify the@pub_identity_rangeparameter when you run the sp_addmergearticle stored procedure.
    • Change theขนาดของช่วงสมาชิกได้คุณสมบัติสำหรับบทความในนั้นบทความคุณสมบัติกล่องโต้ตอบ
  4. ถ้าคุณประสบปัญหาที่อธิบายไว้ในส่วน "อาการ" มูลค่าปัจจุบันรหัสประจำตัวที่คุณบันทึกไว้ในขั้นตอนที่ 2 ควรน้อยกว่าขอบล่างของช่วงรหัสประจำตัวแรกของข้อจำกัดกาเครื่องหมายช่วงรหัสประจำตัวที่คุณบันทึกไว้ในขั้นตอนที่ 3

    ถ้าค่ารหัสประจำตัวปัจจุบันในขั้นตอนที่ 2 มีขนาดใหญ่กว่าขอบบนของช่วงรหัสประจำตัวที่สอง ของช่วงรหัสประจำตัวตรวจสอบข้อจำกัด แก้ไขปัญหา โดยใช้วิธีที่แนะนำในข้อความข้อผิดพลาด ดังนั้น คุณควรรันกระบวนการ sp_adjustpublisheridentityrange ที่เก็บไว้ในผู้เผยแพร่

    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการ sp_adjustpublisheridentityrange เก็บ แวะไปที่เว็บไซต์ของ Microsoft สำหรับนักพัฒนาเครือข่าย (MSDN) ต่อไปนี้:
    http://msdn.microsoft.com/en-us/library/ms181527.aspx
  5. เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดว่า แถวใดอยู่ในช่วงรหัสประจำตัวปัจจุบันของข้อจำกัดการตรวจสอบช่วงรหัสประจำตัว:
    SELECT COUNT(*) FROM TableName WHERE 
    ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))
    
    หมายเหตุ
    • ถ้าคำสั่งที่ส่งกลับค่า 0 แถวไม่มีอยู่ในช่วงรหัสประจำตัวปัจจุบัน ในกรณีนี้ ไปยังขั้นตอนที่ 6
    • ถ้าคำสั่งที่ส่งกลับค่าที่มากกว่า 0 เรียกใช้คำสั่งต่อไปนี้เพื่อดูค่าข้อมูลเฉพาะที่มากที่สุดในช่วงรหัสประจำตัวปัจจุบัน:
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE 
      ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))
      
      บันทึกค่าส่งคืน และจากนั้น ไปที่ขั้นตอนที่ 7
  6. ด้วยตนเอง reseed รหัสประจำตัวปัจจุบันสำหรับตารางปัญหาที่อยู่ในที่อยู่ภายในช่วงที่ถูกต้อง

    reseed รหัสประจำตัวปัจจุบันค่าต่ำสุดของช่วงรหัสประจำตัวปัจจุบันบวก 1 ตัวอย่างเช่น ถ้าค่าต่ำสุดของช่วงรหัสประจำตัวปัจจุบัน 1001 ค่าในช่วงที่เป็นไปได้แรกจะ 1002 เนื่องจากขีดจำกัดด้านล่างของช่วงของข้อจำกัดการตรวจสอบช่วงรหัสประจำตัวที่ใช้สูงกว่าเครื่องหมาย (>) เมื่อต้องการทำเช่นนี้ การเรียกใช้คำสั่งต่อไปนี้บนผู้เผยแพร่ และไปที่ขั้นตอนที่ 8 แล้ว:
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. ด้วยตนเอง reseed รหัสประจำตัวปัจจุบันสำหรับตารางปัญหาที่อยู่ในที่อยู่ภายในช่วงที่ถูกต้อง

    สมมติว่า เพิ่มรหัสประจำตัวคือ 1 reseed รหัสประจำตัวปัจจุบันเป็นค่าที่คุณบันทึกไว้ในขั้นตอนที่ 5 และเพิ่ม 1 แล้ว ตัวอย่างเช่น ถ้าค่าที่คุณบันทึกไว้ในขั้นตอนที่ 5 1507, reseed รหัสประจำตัวปัจจุบันเพื่อ 1508 เมื่อต้องการทำเช่นนี้ เรียกใช้คำสั่งต่อไปนี้บนผู้เผยแพร่:
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. ทำการทดสอบเพื่อตรวจสอบว่า แถวใหม่สามารถถูกแทรกลงในตารางในฐานข้อมูลของผู้เผยแพร่ โดยไม่มีข้อผิดพลาด 548 เกิด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแฟ้มใดถูกเปลี่ยนแปลง และข้อมูลเกี่ยวกับข้อกำหนดเบื้องต้นใด ๆ เพื่อนำแพคเกจโปรแกรมปรับปรุงที่สะสมที่ประกอบด้วยโปรแกรมแก้ไขด่วนที่อธิบายไว้ในบทความฐานความรู้ของ Microsoft นี้ คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
951217Cumulative update package 8 for SQL Server 2005 Service Pack 2

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

For more information about the list of builds that are available after SQL Server Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base:
937137สร้าง SQL Server 2005 ที่หลังจากที่มีการนำออกใช้ SQL Server 2005 Service Pack 2
For more information about the Incremental Servicing Model for SQL Server, click the following article number to view the article in the Microsoft Knowledge Base:
935897มีแบบจำลองให้บริการแบบเพิ่มหน่วยจะพร้อมใช้งานจากทีม SQL Server จะจัดส่งโปรแกรมแก้ไขด่วนสำหรับการรายงานปัญหา
For more information about how to obtain SQL Server 2005 Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base:
913089วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server 2005
For more information about the new features and the improvements in SQL Server 2005 Service Pack 2, visit the following Microsoft Web site:
http://go.microsoft.com/fwlink/?LinkId=71711
For more information about the naming schema for SQL Server updates, click the following article number to view the article in the Microsoft Knowledge Base:
822499แบบแผนการตั้งชื่อใหม่สำหรับแพคเกจโปรแกรมปรับปรุงซอฟต์แวร์ของ Microsoft SQL Server
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำศัพท์ของการปรับปรุงซอฟต์แวร์ ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
824684คำอธิบายของคำศัพท์มาตรฐานที่ใช้เพื่ออธิบายปรับปรุงซอฟต์แวร์ของ Microsoft

คุณสมบัติ

หมายเลขบทความ (Article ID): 953481 - รีวิวครั้งสุดท้าย: 16 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL 2005 Server Workgroup
Keywords: 
kbfix kbPubTypeKC kbqfe kbexpertiseadvanced kbHotfixServer kbautohotfix kbsql2005repl kbmt KB953481 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:953481

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

 

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