چگونه برای شروع یک معامله در جی دی بی سی?

  • 2021-11-28

توجه: اگر این روش در طول یک معامله به نام, نتیجه پیاده سازی تعریف شده است.

این مطرح کردن سوال: چگونه می توانم شما شروع یک معامله در جی دی بی سی? روشن است که چگونه یک معامله را خاتمه دهیم اما نه اینکه چگونه شروع کنیم.

اگر یک اتصال در داخل شروع می شود در یک معامله, چگونه ما قرار است به استناد اتصال.جداسازی (بین المللی) خارج از یک معامله برای جلوگیری از رفتار پیاده سازی خاص?

از مشخصات جی دی بی سی 4.0 : "زمانی که برای شروع یک معامله جدید یک تصمیم به طور ضمنی توسط هر دو راننده جی دی بی سی و یا منبع داده های اساسی ساخته شده است. اگرچه برخی از منابع داده بیانیه صریح "شروع تراکنش" را پیاده سازی می کنند اما هیچ رابط کاربری جی دی بی سی برای انجام این کار وجود ندارد. به طور معمول, یک معامله جدید شروع شده است که در حال حاضر بیانیه اس کیو ال نیاز به یک و هیچ معامله در حال حاضر در محل وجود دارد. یا نه یک بیانیه اس کیو ال داده نیاز به یک معامله نیز توسط اس کیو ال مشخص:2003."

8 پاسخ 8

پاسخ به سوال خودم:

  • اتصالات جی دی بی سی با فعال بودن حالت تعهد خودکار شروع می شوند که هر عبارت اس کیو ال به طور ضمنی با یک تراکنش مشخص می شود.
  • کاربرانی که مایل به اجرای چندین عبارت در هر تراکنش هستند باید تعهد خودکار را خاموش کنند.
  • تغییر حالت تعهد خودکار باعث تعهد معامله فعلی می شود (در صورت فعال بودن). در صورت فعال بودن تعهد خودکار ممکن است در هر زمان فراخوانی شود.
  • اگر خودکار مرتکب غیر فعال است, اتصال.جداسازی انتقال () فقط ممکن است قبل یا بعد از معامله فراخوانی شود. فراخوانی در وسط یک معامله منجر به رفتار نامشخص می شود.

جی دی بی سی به طور ضمنی هر پرس و جو/به روزرسانی را که در ارتباط با یک معامله انجام می دهید مشخص می کند. شما می توانید این رفتار را با فراخوانی تنظیم خودکار(نادرست) برای خاموش کردن حالت تعهد خودکار و تماس با تعهد()/بازگشت() برای نشان دادن پایان معامله. پسودو کد

اکنون, یک نوع در روش شما نشان داده اند وجود دارد. این باید جداسازی انتقال(سطح بین المللی) باشد و برای علامت گذاری معامله نیست. این مدیریت چگونه/هنگامی که تغییرات ایجاد شده توسط یک عملیات به دیگر عملیات همزمان قابل مشاهده تبدیل, " من " در اسید (http://en. wikipedia. org/wiki/Isolation_(سیستم های پایگاه داده))

پاسخ شما نشان نمی دهد که چه زمانی استناد به جداسازی انتقال () ایمن است. چرا جوادوک خواندن "توجه داشته باشید: اگر این روش در طول یک معامله به نام, نتیجه پیاده سازی تعریف شده است."?

یک نکته دیگر: خوب باشید و حالت قبلی خودکارسازی را بازیابی کنید: بولی قبلی خودکارمجموعه = کان.گیتوکمیته (); سعی کنید<. >در نهایت

@وهو چرا بازگشت به کمیته خودکار قبلی? نزدیک (), به استخر برمی گردد و دفعه بعد که ارتباط از استخر برقرار می کنید درست می شود.

پیشنهاد می کنم این مطلب را بخوانید خواهید دید

بنابراین اولین فراخوان ستاتوکمیته (نادرست) و هر فراخوان تعهد () به طور ضمنی شروع معامله را علامت گذاری می کنند. معاملات را می توان قبل از انجام تماس با تماس لغو کرد

ویرایش:

اسناد رسمی در مورد معاملات جی دی بی سی را بررسی کنید

هنگامی که یک اتصال ایجاد می شود, در حالت تعهد خودکار است. این بدان معناست که هر بیانیه اس کیو ال فردی به عنوان یک معامله در نظر گرفته می شود و بلافاصله پس از اجرا به طور خودکار متعهد می شود. (به عبارت دقیق تر, پیش فرض این است که یک بیانیه اس کیو ال زمانی انجام شود که تکمیل شود, نه زمانی که اجرا شود. بیانیه ای کامل شده است زمانی که همه از مجموعه نتیجه خود را و تعداد به روز رسانی بازیابی شده است. اما تقریبا در همه موارد بیانیه بلافاصله پس از اجرا تکمیل می شود و بنابراین متعهد می شود.)

راه اجازه می دهد تا دو یا چند بیانیه به یک معامله گروه بندی می شود برای غیر فعال کردن حالت خودکار متعهد است. این در کد زیر نشان داده شده است که کان یک اتصال فعال است:

باهم ستاتوکمیته (نادرست);

من نمی توانم نقل قول فوق را در صفحه ای که پیوند داده اید پیدا کنم. علاوه بر این, من خیلی ترجیح می دهم پیدا کردن یک نقل قول در مشخصات جی دی بی سی به عنوان به برخی از نقل قول منبع نشده در برنامه نویس مخالف (فرض کنید که منابع نشده است, به این معنا که).

شروع, شما می توانید به صورت دستی اجرا یک معامله, اگر شما مایل به ترک اتصال خود را در "کمیته خودکار(درست)" حالت اما هنوز هم می خواهید یک معامله:

این راه حل خوب است اگر شما اظهارات متعدد در ندارد 1 معامله, در غیر این صورت با استفاده از روش های دیگر

دربی / جوادب به عنوان مثال نمی کند شروع / متعهد/عقبگرد, اما به طور کامل متکی بر روش های اتصال, که به سرور از طریق عناصر پروتکل های مختلف از اس کیو ال ابلاغ.

در واقع این صفحه از کتاب جی دی بی سی بهتر خوانده می شود. شما می توانید اتصال خود را دریافت کنید, تنظیم سطح انزوا خود را و سپس انجام به روز رسانی خود را پردازنده چیزهای و سپس یا مرتکب یا عقبگرد.

حتی نمایندگی ها هم به این موضوع توجه نمی کنند. این شامل برخی از جملات گیج کننده مانند: "توصیه می شود حالت تعهد خودکار را فقط در حالت معامله غیرفعال کنید."یک" حالت معامله " است?

می توانید از این روش ها برای معامله استفاده کنید:

  1. شما باید شی اتصال مانند باهم ایجاد
  2. باهم ستاتوکمیته (نادرست);
  3. پرس و جوهای شما
  4. اگر همه باهم درست است.متعهد();
  5. عقبگرد ();

مرتکب (); کاری ادامه داده اند/می افزاید: مربع برای اجرای در معامله شروع; و مرتکب; اظهارات (و یا رفتار در راه است که می تواند معادل در نظر گرفته), انجام دور با نیاز به کد به صراحت شامل خطوط برای این اظهارات. درست است?

در واقع, من این پاسخ را بیشتر دوست دارم زیرا یک نمای کلی از 'جریان عادی' را نشان می دهد, و نقطه ای (حداقل برای من) را به خانه می رساند که تنظیم خودکار(نادرست) زمینه را برای راننده فراهم می کند تا قبل از ارسال بیانیه بعدی شما معامله جدیدی را شروع کند .

شاید این به سوال شما پاسخ دهد: شما فقط می توانید یک معامله در هر اتصال داشته باشید. اگر کمیته خودکار است (به طور پیش فرض), هر را انتخاب کنید, به روز رسانی, حذف به طور خودکار شروع خواهد شد و مرتکب (یا عقبگرد) یک معامله. اگر تعهد خودکار را خاموش کنید یک تراکنش "جدید" را شروع می کنید (به این معنی است که تعهد یا بازگشت به عقب به طور خودکار اتفاق نمی افتد). پس از برخی از اظهارات, شما می توانید پاسخ متعهد و یا عقبگرد, که پس از اتمام معامله فعلی و به طور خودکار شروع می شود یکی از جدید. شما نمی توانید دو تراکنش فعالانه در یک اتصال جی دی بی سی در جی دی بی سی خالص داشته باشید.

با استفاده از یک اتصال برای معاملات متعدد (استفاده مجدد, ادغام و یا زنجیری شدن) برخی از مشکلات عجیب و غریب می تواند در خفا انجام دادن ایجاد مشکلات مردم باید با زندگی می کنند چرا که معمولا نمی تونم علل شناسایی.

سناریوهای زیر به ذهن خطور می کند:

  1. (دوباره-)با استفاده از یک اتصال با یک معامله در حال انجام / غیر متعهد
  2. اتصال ناقص پیاده سازی استخر
  3. پیاده سازی سطح جداسازی بالاتر در برخی از پایگاه های داده (به ویژه توزیع اس کیو ال و اس کیو ال یک)

نکته 1 مستقیم به جلو و قابل درک است. نقطه 2 اساسا به نقطه 1 یا (و) نقطه 3 منتهی می شود.

نکته 3 همه چیز در مورد سیستمی است که معامله جدید قبل از صدور اولین بیانیه شروع شده است. از دیدگاه پایگاه داده چنین معامله ای ممکن است مدتها قبل از صدور بیانیه واقعی 'اولین' شروع شده باشد. اگر مدل همزمانی بر اساس ایده عکس فوری است که فرد فقط می خواند ایالات / ارزش هایی که در نقطه معتبر بودند معامله شروع می شود اما هیچ تغییری که بعدا تغییر کرده است, بسیار مهم است که در مرتکب مجموعه کامل خواندن معامله فعلی نیز معتبر است.

پس از نوس کیو ال و سطوح انزوا خاص مانند عکس فوری کارشناسی ارشد اس کیو ال سرور اغلب خواندن مجموعه اعتبار نیست (در راه حق), همه شرط معمولا به چه انتظار می رود. در حالی که این یک مشکل همیشه در حال حاضر, این راه بدتر زمانی که یکی در برخورد با معاملات است که در گذشته مرتکب شروع و یا زمانی که اتصال مخلوط شد به جای اتصال که در واقع استفاده می شود, معمولا مهم است برای اطمینان از معامله در واقع شروع می شود زمانی که انتظار می رود برای شروع. (همچنین بسیار مهم است اگر یکی با استفاده از عقبگرد فقط خواندنی فقط معامله).

من با استفاده از قوانین زیر در هنگام برخورد با جی دی بی سی در جاوا:

  1. همیشه یک اتصال جی دی بی سی را قبل از استفاده برگردانید (همه چیز را از بین می برد و معامله جدیدی را شروع می کند), اگر شرکت از جی دی بی سی ساده همراه با هر مکانیزم ادغام استفاده می کند
  2. استفاده از هایبرنیت برای دست زدن به معامله حتی اگر تنها با استفاده از یک جلسه مدیریت اتصال جی دی بی سی برای اس کیو ال ساده. تا به حال هرگز با معاملات مشکلی نداشته است.
  3. استفاده از شروع / مرتکب / عقبگرد به عنوان مربع اظهارات (مانند قبلا ذکر شد). اکثر پیادهسازیها در صورتی شکست میخورند که در طول یک تراکنش فعال بیانیه ابتدایی صادر کنید (برای پایگاه دادهتان تست کنید و به یاد داشته باشید که پایگاه داده تست پایگاه داده تولید نیست و پیادهسازیهای سمت سرور و درایور جی دیبیسی میتوانند رفتاری با اجرای کنسول اس کیو ال روی سرور واقعی متفاوت باشند).
  4. استفاده 3 در داخل لفاف بسته بندی خود را برای یک نمونه اتصال جی دی بی سی. به این ترتیب دست زدن به معامله است که همیشه درست (اگر هیچ بازتاب استفاده شده است و ادغام اتصال ناقص نیست).

3 + 4 من فقط در صورتی استفاده می کنم که زمان پاسخ بسیار مهم باشد یا خواب زمستانی در دسترس نباشد. 4 اجازه می دهد تا برای استفاده از برخی از عملکرد پیشرفته تر (زمان پاسخ) الگوهای بهبود برای موارد خاص

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.