تصادم یا کانفلیکت در گلدن گیت که به صورت دوطرفه کانفیگ شده باشد(Bidirectional Replication)، به عنوان یک امر رایج تلقی می شود چون در هر لحظه ممکن است دو نفر بر روی جدول مشترکی که در دو بانک مختلف قرار دارند، عملیات مشابه و یا متصادی را انجام دهند که این عملیات همزمان، ممکن است سبب توقف عملیات Replication شود.
conflict ممکن است به شکلهای مختلفی رخ دهد، که نمونه هایی از آن را در قسمت زیر ملاحظه می کنید:
delete conflict: اگر فردی در یک بانک، رکوردی را حذف کند و در همان لحظه فرد دیگری بخواهد همان رکورد را در بانک دوم، اصلاح و یا حذف نماید، این نوع تصادم به وجود خواهد آمد.
update conflict: در صورتی که دو نفر به طور همزمان بخواهند یک سطر مشخص را در دو طرف update کنند، به این نوع از تصادم، برخواهند خورد.
uniqueness conflict: اگر دو نفر به طور همزمان با انجام یکی از عملیاتهای update یا insert، رکورد یکسانی را به یکی از ستونهای PK و یا unique در جداول دو طرف اضافه کنند uniqueness conflict رخ خواهد داد.
دو نکته زیر، می تواند مانع از رخ دادن تصادم های احتمالی شود:
1. تا جایی که ممکن است از تاخیر در یکسان سازی جلوگیری شود.
2. در صورت امکان، باید از درج اطلاعات تکراری در دو بانک توسط کاربران جلوگیری گردد.
در صورتی که تصادم ها درگلدن گیت غیر قابل جلوگیری باشند، باید آنها را با استفاده از CDR شناسایی کرده و در نهایت آنها را با CDR حل نمود. CDR مخفف Conflict Detection and Resolution می باشد و قابلیت حل موارد زیر را به ما خواهد داد:
1.رفع خطای uniqueness conflict که معمولا به جهت اجرای دستور INSERT رخ می دهد.
2.برطرف کردن خطای “no data found”. این خطا ممکن است به دلایل زیر رخ دهد:
ا. update بر روی سطری که قبلا حذف شده است.
ب. update بر روی سطری که وجود دارد ولی قبلا توسط session دیگری update شده است.
ج. DELTE بر روی سطری که موجود است اما در حین حذف، مقدار جاری آن تغییر کرده است.
د. DELETE بر روی سطری که وجود ندارد.
CDR برای انواع داده زیر قابل استفاده می باشد:
NUMERIC – DATE – TIMESTAMP – CHAR/NCHAR – VARCHAR/ NVARCHA
و همچنین CDR را نمی توان برای داده های زیر، استفاده کرد:
LOBs – ADT – UDT