ترميم در پايگاه داده ها ) (Recovery مدرس : دکتر فاطمه احمدی آبکناری بهار 1392 ترميم سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که.

Download Report

Transcript ترميم در پايگاه داده ها ) (Recovery مدرس : دکتر فاطمه احمدی آبکناری بهار 1392 ترميم سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که.

Slide 1

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 2

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 3

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 4

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 5

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 6

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 7

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 8

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 9

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 10

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 11

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 12

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 13

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 14

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 15

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 16

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 17

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 18

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19


Slide 19

‫ترميم در پايگاه داده ها‬
‫)‪(Recovery‬‬

‫مدرس‪ :‬دکتر فاطمه احمدی آبکناری‬
‫بهار ‪1392‬‬

‫ترميم‬
‫سيستم مديريت پايگاه داده ها بايد دارای اين توانايی باشد که پس از بروز هر خرابی (‪ )Failure‬پايگاه را احياء‬
‫کرده و در شرايط سازگار (‪ )Consistent‬قرار دهد‪ .‬نکته ای که طراحی روال های ترميم را دچار چالش می نمايد‬
‫اين واقعيت است که در لحظه ی بروز خرابی‪ ،‬يک و يا چند تراکنش فعال بوده اند‪ .‬از اين رو نحوه ی برخورد روال‬
‫های ترميم (‪ )Recovery Procedure‬با تراکنش (های) فعال در لحظه بروز خرابی در صحت روال های ترميم و‬
‫احياء پايگاه داده از اهميت بااليی برخوردار است‪.‬‬
‫زمانی که سيستم پس از بروز خرابی دوباره آغاز بکار می نمايد سرويس های جاری شروع بکار نمی نمايند تا زمانی که‬
‫روال ترميم اجرا شده و پايگاه را در شرايط پايدار و سازگار قرار دهد‪ .‬روال ترميم توسط واحد مديريت ترميم که از‬
‫زير سيستم های سيستم مديريت پايگاه داده (‪ )DBMS‬است اجرا می گردد‪.‬‬
‫روال ترميم ممکن است تراکنش فعال در لحظه ی وقوع خرابی را به ادامه کار (‪ )Resume Execution‬وادارد‬
‫که به آن استراتژی پيشرو )‪ (Rollforward‬گفته می شود اما در حالت ديگر ممکن است روال ترميم تاثيرات‬
‫تراکنش فعال در لحظه وقوع خرابی را بی اثر (‪ )Undone‬کرده و سيستم پايگاه داده را به شرايط قبل از شروع‬
‫تراکنش مزبور ببرد که به آن‪ ،‬استراتژی پسرو (‪ )Rollback‬اطالق می شود‪.‬‬

‫‪2‬‬

‫خرابی (‪)Failure‬‬
‫خرابی ها به دو دسته ی کلی زير تقسيم می گردند‪:‬‬
‫‪Media Failure‬‬
‫(خرابی رسانه ای)‬

‫‪System Failure‬‬
‫(خرابی سيستمی)‬

‫اگرچه خاصيت ماندگاری (‪ )Durability‬تراکنش ها به محفوظ ماندن تاثير اجرای موفقيت آميز تراکنش در پايگاه‬
‫داللت دارد اما پايگاه داده بر روی ديسک ذخيره می شود و ديسک ها هم با انواعی از خرابی رو در رو هستند‪ .‬خرابی‬
‫رسانه ای به معنای خرابی در تمام و يا قسمتی از داده های ذخيره شده بر روی حافظه ماندگار ( ‪Nonvolatile‬‬
‫‪ )memory‬مانند ديسک سخت است و بر روی تراکنش هايی که در زمان وقوع خرابی در سيستم فعال بوده اند‬
‫تاثير می گذارد‪ .‬به اين نوع خرابی گاه خدشه ی سخت (‪ )Hard Crash‬اطالق می شود‪ .‬راه حل عمومی ترميم‬
‫خرابی رسانه ای استفاده از نسخه (های) پشتيبان است‪.‬‬

‫در خرابی سيستمی‪ ،‬داده های ذخيره شده در معرض خرابی نيستند اما تمام و يا تعدادی از تراکنش های فعال در‬
‫سيستم دستخوش آسيب می گردند‪ .‬به اين نوع خرابی گاه خدشه نرم (‪ )Soft Crash‬گفته می شود‪.‬‬

‫‪3‬‬

‫خرابی (‪)Failure‬‬
‫در يک رده بندی ديگر‪ ،‬می توان خرابی ها به دو دسته ی خرابی های موضعی (‪ )Local Failure‬و خرابی های‬
‫سراسری (‪ )Global Failure‬تقسيم کرد‪ .‬در خرابی موضعی که به خرابی تراکنش (‪)Transaction Failure‬‬
‫نيز موسوم است اجرای يک تراکنش دچار اختالل می گردد مانند حالتی که تراکنش دچار خطای محاسباتی می شود‬
‫مانند تقسيم بر صفر‪ .‬خرابی های موضعی عموما منجر به پايان نيمه کامل تراکنش مزبور (‪ )Abort‬می شوند‪.‬‬
‫خرابی سراسری زمانی پيش می آيد که در اجرای کل تراکنش ها اختالل پيش بيايد و اجرای کل برنامه متوقف شود‬
‫مانند خرابی در بافرهای نگهدارنده نتايج تراکنش ها‪ .‬اين نوع خرابی ممکن است سيستمی و يا رسانه ای باشد‪.‬‬

‫در دسته بندی ديگر‪ ،‬خرابی ها از نظر مدت زمان به سه دسته ی دائمی (‪ ،)Permanent‬دوره ای‬
‫(‪ )Intermittent‬و زودگذر (‪ )Transient‬تقسيم می شوند‪ .‬مثالی از خرابی دائمی‪ ،‬خرابی سخت افزار و باالخص‬
‫خرابی ديسک است در حاليکه سنگينی بار سيستم در زمانهای خاص پاسخگويی نمونه ای از خرابی دوره ای است‪.‬‬
‫خرابی زودگذر مانند کند بودن سرويس اينترنت برای مدت کوتاه (حداکثر چندساعت) برای برنامه های کاربردی‬
‫پايگاه داده تحت وب‪.‬‬

‫‪4‬‬

‫واحد مديريت ترميم‬
‫زير سيستم مديريت ترميم شامل واحد نرم افزاری مدير ترميم (‪ )Recovery Manager‬است که به اختصار به‬
‫‪ RM‬شهرت دارد‪ .‬طراحی واحد مديريت ترميم‪ ،‬بسيار دشوار و پرچالش است چراکه واحدی است که در زمان بروز‬
‫خرابی در سيستم فراخوانده شده و بايد با بکارگيری الگوريتم های کارآمد فرايند ترميم را به انجام برساند‪.‬‬
‫برای اجرای روال های ترميم‪ ،‬واحد مديريت ترميم با واحد های ديگری از سيستم مديريت پايگاه مانند مدير حافظه‬
‫نهان (‪ )Cache Manager‬که به اختصار به ‪ CM‬موسوم است و واحد زمان بندی اجرا که اجرای تراکنش های‬
‫فعال در لحظه خرابی را به صورت از سرگيری و يا اجرای دوباره به عهده دارد مرتبط است‪.‬‬
‫ارتباط مدير ترميم با مدير حافظه نهان در قالب دو درخواست واکش ی (‪ )Fetch‬يک صفحه از حافظه نهان و يا تخليه‬
‫يک صفحه از حافظه نهان (‪ )Flush‬که همان جايگزينی يک صفحه با صفحه ديگری است معنا می يابد‪ .‬بنابراين‬
‫مدير ترميم به منظور شروع به انجام عمليات ترميم ابتدا در يک فرايند تحليلی بايد تراکنش های فعال در لحظه بروز‬
‫خرابی را شناسايی کرده و سپس صفحات تغيير يافته (‪ )Dirty Pages‬در حافظه نهان را که شامل نتايج ميانی‬
‫تراکنش (های) فعال بوده اند و هنوز به ديسک منتقل نشده اند را شناسايی کند‪.‬‬

‫‪5‬‬

‫واحد مديريت ترميم‬
‫پس از انجام تحليل‪ ،‬الگوريتم ترميم بنا به تصميم واحد مديريت ترميم يکی از دوحالت زير را اجرا خواهد کرد‪:‬‬
‫عمل ‪UNDO‬‬

‫عمل ‪REDO‬‬

‫در صورت تصميم به اجرای عمل ‪ ،Redo‬عمليات انجام شده توسط تراکنش (های) تثبيت شده تکرار می گردد و در‬
‫صورت تصميم به انجام عمل ‪ Undo‬اثر اجرای ناقص تراکنش (های) نيمه کامل و يا طرد شده خنثی می گردد‪.‬‬
‫عموما روال ترميم بدون دخالت کاربر و تنها توسط مدير ترميم انجام می گيرد‪ .‬به منظور انجام هريک از دو عمل ذکر‬
‫شده‪ ،‬مدير ترميم از فايل ثبت (‪ )Log File‬استفاده می کند‪.‬‬

‫‪Log File‬‬

‫‪Database‬‬

‫‪Non‬‬
‫‪Volatile‬‬
‫‪Memory‬‬

‫‪Page: Unit of Transfer‬‬

‫‪Cache‬‬

‫‪Volatile‬‬
‫‪Memory‬‬
‫‪Include recently accessed pages‬‬

‫‪6‬‬

‫روش های تخليه حافظه نهان‬
‫تصميمات مدير ترميم در اجرای روال های ترميم بستگی به نحوه تخليه (‪ )Flush‬بافر نهان دارد‪ .‬وقتی تراکنش ی داده‬
‫ای را بهنگام می کند نتيجه ی ثبت شده در بافر نهان به دو حالت زير به پايگاه منتقل می شود‪:‬‬
‫‪Deferred Update‬‬
‫(بهنگام سازی با تاخير)‬

‫‪Immediate Update‬‬
‫(بهنگام سازی بالفاصله)‬

‫در روش بهنگام سازی با تاخير‪ ،‬صفحات تغيير يافته در حافظه نهان که نتايج اجرای تراکنش فعال را ذخيره کرده اند‬
‫فقط زمانی به پايگاه منتقل می شوند که تراکنش تثبيت شده باشد‪ .‬در روش بهنگام سازی بالفاصله‪ ،‬صفحات تغيير‬
‫يافته پيش از تثبيت تراکنش به پايگاه منتقل می شوند اما قبل از اين انتقال‪ ،‬داده های تغيير يافته در فايل ثبت‬
‫(‪ )Log File‬نوشته می شوند تا در صورت بروز خرابی‪ ،‬امکان تشخيص سهل تر تراکنش های فعال و داده های تغيير‬
‫يافته توسط آنها برای روال ترميم وجود داشته باشد‪.‬‬
‫مزيت روش بهنگام سازی بالفاصله‪ ،‬عدم نياز به حافظه زياد برای بافرهاست‪ .‬در راهکار تخليه اجباری ( ‪Forcing‬‬
‫‪ ،)Approach‬صفحات تغيير يافته توسط يک تراکنش بايد پس از تثبيت تراکنش بالفاصله به ديسک منتقل شوند‬
‫بنابراين‪ ،‬اگر صفحه ای توسط تعدادی تراکنش پی در پی بهنگام شود بايد چندين بار بر روی ديسک نوشته شود‪ .‬در‬
‫روش بهنگام سازی با تاخير عمدتا از روش تخليه غير اجباری استفاده می شود‪.‬‬

‫‪7‬‬

‫فايل ثبت‬
‫فايل ثبت (‪ )Log File‬که به آن فايل رويدادنگاری (‪ )Event Journaling‬نيز گفته می شود بر روی حافظه‬
‫ماندگار قرار داده می شود تا از آسيب مصون باشد‪ .‬گاه به منظور اطمينان از مصون ماندن اين فايل‪ ،‬چند نسخه از‬
‫آن نگهداری می شود‪.‬‬
‫ساختار هر رکورد در فايل ثبت ممکن است در سيستم های مختلف متفاوت باشد ولی فيلدهای مشترک آن شامل‬
‫موارد زير خواهد بود‪:‬‬
‫شناسه تراکنش (‪ ،)TID‬زمان انجام هر يک از عمليات(‪ ،)Time‬نوع عمل هر تراکنش در زمان ذکر شده (‪،)OP‬‬
‫شناسه ی داده ای که تراکنش بر روی آن انجام می شود (‪ ،)Data‬پيش تصوير که مقدار داده قبل از بهنگام سازی‬
‫است (‪ ،)Before Image: BI‬پس تصوير که مقدار داده بعد از بهنگام سازی است (‪،)After Image: AI‬‬
‫شماره سريال رکورد ثبت (‪ ،)Log Sequence Number: LSN‬اشاره گر به رکورد قبلی تراکنش ( ‪Previous‬‬
‫‪ ،)Pointer: PPTR‬اشاره گر به رکورد بعدی تراکنش (‪... ،)Next Pointer: NPTR‬‬

‫‪8‬‬

‫‪OP‬‬

‫‪TIME‬‬

‫‪NPTR‬‬

‫‪PPTR‬‬

‫‪TID‬‬

‫‪LSN‬‬

‫‪AI‬‬

‫‪BI‬‬

‫‪DATA‬‬

‫‪BEG‬‬

‫‪12:04‬‬

‫‪2‬‬

‫‪0‬‬

‫‪T1‬‬

‫‪1‬‬

‫‪12:08‬‬

‫‪4‬‬

‫‪1‬‬

‫‪T1‬‬

‫‪2‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪200‬‬

‫‪UP‬‬

‫‪8‬‬

‫‪0‬‬

‫‪T2‬‬

‫‪3‬‬

‫‪100‬‬

‫‪BEG‬‬

‫‪12:14‬‬

‫‪5‬‬

‫‪2‬‬

‫‪T1‬‬

‫‪4‬‬

‫‪new v.‬‬

‫‪old v.‬‬

‫‪COM‬‬

‫‪12:24‬‬

‫ثبت با نوشتن پيش رس‬
‫ثبت با نوشتن پيش رس (‪ ،)Write-Ahead Logging‬که روش متداول در استفاده از فايل ثبت در انجام فرايند ترميم است‬
‫در سيستم هايی مانند ‪ Oracle‬و يا ‪ Sybase‬بکار می رود و به دو صورت نوشتن پيش رس در بهنگام سازی بالفاصله و نوشتن‬
‫پيش رس در بهنگام سازی با تاخير بکار می رود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی بالفاصله با اين صورت است که پيش تصوير (‪ )Before Image‬قبل از نوشته شدن نتيجه‬
‫نهايی بهنگام سازی (پس تصوير (‪ ))After Image‬در پايگاه داده و در بافر‪ ،‬در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای‬
‫انجام عمليات ‪ Undo‬الزم است‪ .‬همچنين رکورد تثبيت و يا طرد تراکنش نيز در صورت پايان موفقيت آميز و يا نيمه کامل تراکنش‪،‬‬
‫در فايل ثبت نوشته می شود‪.‬‬
‫نوشتن پيش رس در بهنگام سازی با تاخير به اين صورت است که فقط پس تصوير (‪ )After Image‬و ساير اطالعات الزم قبل از‬
‫انتقال به پايگاه در فايل ثبت نوشته می شود‪ .‬اين نوشته شدن‪ ،‬برای انجام عمليات ‪ Redo‬الزم است‪ .‬همچنين رکورد تثبيت در‬
‫صورت پايان موفقيت آميز تراکنش‪ ،‬در فايل ثبت نوشته می شود‪.‬‬
‫فايل ثبت ممکن است فيزيکی يا ثبت مقدار (‪ )Value Logging‬بوده و يا منطقی يا ثبت عمليات (‪)Operation Logging‬‬
‫باشد‪ .‬مثال های مطرح شده در اساليد های قبل‪ ،‬نمونه ای از فايل ثبت فيزيکی است‪ .‬در فايل ثبت منطقی‪ ،‬نتايج توليد شده‬
‫توسط تراکنش ها ذخيره نمی شود بنابراين کوچکتر از فايل ثبت فيزيکی است‪ .‬اگرچه پيمايش آن سريع تر است ولی تفسير‬
‫رکوردهای آن برای مدير ترميم دشوارتر است و از اين رو کارايی سيستم کند می شود‪.‬‬

‫‪9‬‬

‫زباله روبی فايل ثبت‬
‫برای جلوگيری از رشد بيش از حد فايل ثبت بايد فضايی که در اختيار رکورد های ناالزم است بازپس گرفته شده و‬
‫مجددا مورد استفاده قرار گيرد که به اين کار زباله روبی فايل ثبت (‪ )Log Garbage Collection‬اطالق می‬
‫شود‪.‬‬

‫اگر <‪ >Ti, D, v‬يک رکورد در فايل ثبت باشد مدير ترميم به منظور زباله روبی در صورتی اين رکورد را حذف می‬
‫کند اگر‪:‬‬
‫‪ -1‬تراکنش ‪ Ti‬يک تراکنش طرد شده باشد‪.‬‬
‫‪ -2‬تراکنش ‪ Ti‬تثبيت شده باشد ولی تراکنش ديگری پس از تراکنش ‪ Ti‬يک مقدار جديد (’‪ )v‬برای داده ی ‪ D‬نوشته‬
‫باشد‪.‬‬
‫‪ -3‬نگهداری آخرين پس تصوير (‪ )AI‬و اولين پيش تصوير (‪ )BI‬برای هر صفحه تغيير يافته‬
‫‪ -4‬حذف رکوردهايي که فقط عمل خواندن انجام داده اند‪.‬‬

‫‪10‬‬

‫ايجاد نقطه وارس ی‬
‫مدير ترميم همانطور که قبال ذکر شد از فايل ثبت به منظور ترميم پايگاه استفاده می کند اما با توجه به حجم فايل‬
‫ثبت‪ ،‬سوال اين است که به منظور انجام عمليات ترميم‪ ،‬فايل ثبت در يک عمليات پويش وارون تا کجا بايد بررس ی‬
‫شود‪ .‬بنابراين به منظور تسريع در پويش و جستجو در فايل ثبت و احتراز از خطا در تشخيص تراکنش ها‪ ،‬نقاط وارس ی‬
‫(‪ )Checkpoint‬در فايل ثبت ايجاد می شود‪.‬‬
‫عموما برای ايجاد نقاط وارس ی در اکثر سيستم ها‪ ،‬روند اجرای تراکنش ها متوقف می شود اما در بعض ی از سيستم‬
‫ها مانند ‪ Oracle‬ايجاد نقاط وارس ی و اجرای تراکنش ها به صورت همروند انجام می گيرد‪ .‬ايجاد نقطه وارس ی هر‬
‫چند وقت يکبار به تشخيص مدير ترميم انجام می گيرد‪ .‬ايجاد يک نقطه وارس ی به اين صورت است که سيستم يک‬
‫رکورد به اسم ‪ Checkpoint‬به همراه ليستی از تراکنش های فعال در همان لحظه (<‪)>CHECKPOINT, L‬‬
‫در فايل ثبت می نويسد‪.‬‬
‫چندين روش برای ايجاد نقاط وارس ی وجود دارد‪ .‬در يک روش (‪ )Cache Consistent Checkpoint‬اجرای‬
‫تمام تراکنش ها متوقف شده‪ ،‬محتوای بافر شامل صفحات تغيير يافته‪ ،‬تخليه اجباری شده‪ ،‬رکورد نقطه وارس ی در‬
‫فايل ثبت ايجاد و اجرای تراکنش ها از سر گرفته می شود‪ .‬در يک روش ديگر ( ‪Commit Consistent‬‬
‫‪ )Checkpoint‬سيستم منتظر می ماند که تراکنش های فعال تثبيت و يا طرد شوند و به تراکنش جديد اجازه‬
‫شروع نمی دهد و صفحات تغيير يافته را بر روی ديسک می نويسد‪.‬‬

‫‪11‬‬

‫رکوردهای فعال در لحظه ی بروز خرابی‬
:‫ فايل ثبت را می توان به شکل زير بررس ی کرد‬،OP ‫با در نظر گرفتن فقط فيلد‬

U3

U5

A5

CK
T4
T1
T3

U1

U4

Key:
Ui: Update record for transaction Ti
Bi: Begin record for transaction Ti
Ci: Commit record for transaction Ti
Ai: Abort record for transaction Ti
CK: Checkpoint record

B6

C4

U6

U1

Time

Crash

T1 and T3 , T6 were active at the time of the crash.

12

‫روش های ترميم خرابی سيستمی‬
‫روش های ترميم در خرابی های سيستمی به صورت کلی در دو حالت ترميم در بهنگام سازی با تاخير و ترميم در بهنگام‬
‫سازی بالفاصله و برای محيط های تک کاربری و محيط های چند کاربری بررس ی می شوند‪.‬‬

‫از آنجا که اساسا الگوريتم های ترميم بر مبنای دو عمل ‪ Redo‬و ‪ Undo‬عمل می کنند چهار الگوريتم ترميم بر پايه‬
‫آنها به شرح زير وجود دارد‪:‬‬
‫‪ -1‬الگوريتم )‪Undo/Redo (U-R‬‬
‫‪ -2‬الگوريتم )‪Noundo /Redo (NU-R‬‬
‫‪ -3‬الگوريتم )‪Undo / Noredo (U-NR‬‬
‫‪ -4‬الگوريتم )‪Noundo /Noredo (NU-NR‬‬
‫در ادامه به بررس ی الگوريتم های ذکر شده می پردازيم‪:‬‬

‫‪13‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫از آنجا که در بهنگام سازی با تاخير تنها در صورتی داده ها به پايگاه منتقل می شود که تراکنش تثبيت شده باشد پس نيازی به‬
‫انجام عمل ‪ Undo‬نيست و تنها عمل ‪ Redo‬الزم است‪ .‬بنابراين الگوريتم ترميم در اين حالت ‪ Noundo/Redo‬است‪ .‬بنابراين‬
‫تراکنش های فعال را ناديده گرفته و تراکنش های تثبيت شده پس از نقطه وارس ی را ‪ Redo‬می نمايد‪ .‬در ادامه اين الگوريتم را‬
‫برای محيط تک کاربری بررس ی می کنيم‪.‬‬
‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪( :‬مقادير اوليه‪، B=2000 ، A=1000 :‬‬
‫‪)C=700‬‬
‫اگر خرابی پس از دستور )‪ W(C‬از تراکنش ‪T2‬‬
‫بروز کند چون هنوز تراکنش ‪ T2‬به ‪Commit‬‬
‫نرسيده است روال ترميم اين تراکنش را ناديده می‬
‫گيرد و مقدار ‪ C=700‬باقی می ماند‪ .‬اما تراکنش‬
‫‪ T1‬را که تثبيت شده بود ‪ Redo‬می کند پس‬
‫مقادير ‪ A‬و ‪ B‬به ترتيب ‪ 950‬و ‪ 2050‬خواهند‬
‫بود‪.‬‬

‫‪14‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی با تاخير‬
‫در بهنگام سازی با تاخير در محيط چند کاربری بديهی است که در لحظه بروز خرابی چند تراکنش با هم ممکن است در حال اجرا‬
‫باشند‪ .‬بنابراين برای بررس ی اين روش در محيط چند کاربری مانند حالت تک کاربری‪ ،‬ليست تراکنش های تثبيت شده پس از آخرين‬
‫نقطه وارس ی و ليست تراکنش های فعال در لحظه بروز خرابی بررس ی می شود‪ .‬پس از بررس ی فايل ثبت‪ ،‬عمليات نوشتن تراکنش‬
‫های تثبيت شده ‪ Redo‬شده و تراکنش های فعال ناديده گرفته می شوند تا در زمان ديرتری پس از اتمام روال ترميم‪ ،‬اجرای آنها‬
‫توسط کاربر و يا سيستم از سرگرفته شود‬

‫‪ -1‬تراکنش های ‪ T4‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی فعال بوده اند ناديده گرفته می شوند‪.‬‬
‫‪ -2‬تراکنش های ‪ T2‬و ‪ T3‬چون قبل از بروز خرابی‬
‫تثبيت شده اند بايد ‪ Redo‬شوند‪.‬‬
‫‪ -3‬تراکنش ‪ T1‬چون قبل از ايجاد نقطه وارس ی‬
‫تثبيت شده نياز به ‪ Redo‬ندارد ‪.‬‬

‫‪T2‬‬
‫‪T3‬‬
‫‪T4‬‬

‫‪T5‬‬
‫‪System Failure‬‬

‫‪15‬‬

‫‪T1‬‬

‫‪t1 Checkpoint‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫از آنجا که در بهنگام سازی بالفاصله‪ ،‬داده بهنگام شده بالفاصله و قبل از تثبيت در پايگاه نوشته می شود بنابراين مدير ترميم بايد‬
‫تراکنش های به تثبيت نرسيده را با استفاده از پيش تصوير که در فايل ثبت وجود دارد ‪ Undo‬کند و عمليات نوشتن تراکنش های‬
‫تثبيت شده را با استفاده از پس تصوير ‪ Redo‬کند‪ .‬پس در اين حالت از الگوريتم ‪ Undo / Redo‬استفاده می شود‪ .‬در ادامه‬
‫اين الگوريتم را برای محيط تک کاربری بررس ی می کنيم‪.‬‬

‫تراکنش های ‪ T1‬و ‪ T2‬در يک محيط تک کاربری به صورت سريال در اينجا )‪ (T1, T2‬اجرا می شوند‪ .‬اين دو تراکنش به صورت‬
‫زير هستند و محتويات بخش ی از فايل ثبت در باکس سوم از سمت چپ ديده می شود‪:‬‬
‫اگر خرابی پس از دستور )‪ W(B‬از تراکنش ‪ T1‬بروز کند‬
‫چون هنوز تراکنش ‪ T1‬به ‪ Commit‬نرسيده است روال‬
‫ترميم اين تراکنش را با استفاده از پيش تصوير ‪ Undo‬می‬
‫کند و مقادير ‪ A=1000‬و ‪ B=2000‬خواهند بود‪ .‬اگر‬
‫خرابی پس از دستور )‪ W(C‬از تراکنش ‪ T2‬بروز کند‬
‫تراکنش ‪ T2‬چون تثبيت نشده بود ‪ Undo‬می شود و‬
‫مقدار ‪ c=700‬می شود در حاليکه تراکنش ‪Redo ، T1‬‬
‫شده و با استفاده از پس تصوير مقادير ‪ A=950‬و‬
‫‪ B=2050‬می شود‪.‬‬

‫‪16‬‬

‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪‫>‪
‫‪T2‬‬
‫)‪R(C‬‬
‫‪C:=C-100‬‬
‫)‪W(C‬‬

‫‪T1‬‬
‫)‪R(A‬‬
‫‪A:=A-50‬‬
‫)‪W(A‬‬
‫)‪R(B‬‬
‫‪B:=B+50‬‬
‫)‪W(B‬‬

‫تکنيک های ترميم در بهنگام سازی بالفاصله‬
‫در اين قسمت اين الگوريتم برای محيط چند کاربری بررس ی می شود‪.‬‬
‫در يک محيط چند کاربری اجرای همروند پنج تراکنش به صورت زير در نظر گرفته می شود‪.‬‬
‫مدير ترميم تراکنش ها را به صورت زير مديريت‬
‫می کند‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬

‫‪ -1‬تراکنش ‪ T1‬در ترميم نقش ی ندارد‪.‬‬
‫‪ -2‬تراکنش های ‪ T3‬و ‪ T5‬چون در لحظه بروز‬
‫خرابی قعال بوده اند ‪ Undo‬می شوند‪.‬‬
‫‪ -3‬تراکنش های ‪ T2‬و ‪ T4‬چون قبل از بروز خرابی‬
‫تثبيت شده اند ‪ Redo‬می شوند‪.‬‬

‫‪T4‬‬
‫‪T5‬‬
‫‪System Failure‬‬

‫‪17‬‬

‫‪t1 Checkpoint‬‬

‫ساير الگوريتم های ترميم خرابی سيستمی‬
‫الگوريتم ‪ Undo / Noredo‬زمانی مورد استفاده قرار می گيرد که بهنگام سازی بالفاصله بوده و در فاصله ی بين‬
‫ايجاد نقطه وارس ی و لحظه ی بروز خرابی هيچ تراکنش تثبيت شده ای وجود نداشته باشد‪ .‬مانند شکل زير‪:‬‬

‫‪T1‬‬
‫‪T2‬‬
‫‪T3‬‬
‫‪System Failure‬‬

‫‪t1 Checkpoint‬‬

‫الگوريتم نادر ‪ Noundo / Noredo‬زمانی مورد استفاده قرار می گيرد که نتيجه ی اجرای تمام تراکنش های تثبيت‬
‫شده قبل از ايجاد آخرين نقطه ی وارس ی به پايگاه منتقل شده باشد و مدل بهنگام سازی بالفاصله نباشد‪.‬‬

‫‪18‬‬

‫برای مطالعه بيشتر‬

1- Database Systems An Application Oriented Approach
Chapter 22, Atomicity and Durability.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.

.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ ترميم پايگاه داده ها‬،‫فصل چهارم‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬

19