TCL (زبان مدیریت تراکنش)
Transaction control language یا به اختصار TCL از مجموعه زبان های کامپیوتری و همچنین زیر مجموعه ی زبان SQL محسوب می شود که فرایندهای تراکنشی را در یک پایگاه داده را مدیریت می کند. دستورات این زبان در واقع تغییرات اعمال شده توسط دستورات DML را اداره می کند.
Transaction یا تراکنش چیست؟
Transaction یک مجموعه از دستورات SQL است که oracle به عنوان یک واحد درنظر گرفته و با آن برخورد می کند؛ بدین معنا که یا کل دستورات با موفقیت اجرا می شوند و یا هیچ یک از آن ها.
به منظور کنترل تراکنش، oracle هیچ یک از دستورات DML را ماندگار نمی کند، مگر اینکه تراکنش را به طور کامل اجرا و ثبت کنید. اگر transaction به طور کامل انجام نشود، برای مثال حین آن برق برود یا سیستم دچار مشکل و از کار افتادگی شود، تمامی تراکنش ها و تغییرات انجام شده به حالت اولیه باز
گشته و لغو می شود.
دستورات پرکاربرد TCL که در Oracle بکار می ورد، به شرح زیر می باشد.
- دستور COMMIT : تغییرات اعمال شده در طی تراکنش را ماندگار و دائمی می کند.
- ROLLBACK : تمامی تغییرات یک تراکنش را به حالت اول برمی گرداند (لغو می کند).
- SAVEPOINT (نقطه ی ثبت) : یک نقطه در transaction مشخص می کند که تغییرات را در آینده می توان به آن بازگرداند. این دستور یک تراکنش را به بخش های کوچکتر تبدیل می کند، سپس با تعیین breakpoint هایی امکان لغو جزئی (تغییرات) را فراهم می آورد. Savepoint این امکان را فراهم می آورد که تنها بخشی از یک تراکنش لغو شود و نه همه ی بخش های آن.
دستور COMMIT
برای ماندگار کردن تغییرات اعمال شده در یک تراکنش، از دستور COMMIT استفاده می کنیم.
نحوه و ساختار استفاده از این دستور به شکل زیر می باشد.
COMMIT [WORK] [COMMENT ‘your comment’];
استفاده از WORK و COMMENT اختیاری می باشد.
از COMMENT زمانی استفاده می کنیم که بخواهیم این تراکنش را در data dictionary شناسایی و تعریف کنید.
دیكشنری داده ها (Data Catalog) یكی از امكاناتی است كه در سيستم پايگاه داده در اختيار DBA قرار می گیرد. دیكشنری داده ها كه به آن راهنمای سیستم نیز می گویند يک metadata است يعنی اطلاعاتی درباره خود پايگاه داده و داده های ذخیره شده در آن را نگهداری می کند.
دیکشنری داده تعيين می کند چه داده ای موجود است و چه معنی دارد، داده چگونه ذخیره می شود و در کجا قرار دارد، مالک آن چه کسی است و چه کسانی اجازه دسترسی به داده را دارند و نیز تاریخچه و آمار استفاده از اطلاعات را دربردارد.
مثال:
insert into emp (empno,ename,sal) values (101,’Abid’,2300);
commit;
دستور ROLLBACK
جهت بازگردانی و لغو تغییرات اعمال شده در یک تراکنش، دستور rollback را بکار می بریم. دستور مزبور وضعیت یک پایگاه داده را به آخرین commit point بازمی گرداند.
مثال:
delete from emp;
rollback; /* undo the changes */
دستور SAVEPOINT
یک نقطه ی ثبت مشخص می کند که می توان وضعیت پایگاه داده را به آن بازگرداند.
مثال:
insert into emp (empno,ename,sal) values (109,’Sami’,3000);
savepoint a;
insert into dept values (10,’Sales’,’Hyd’);
savepoint b;
insert into salgrade values (‘III’,9000,12000);
حال اگر دستور زیر را صادر کنید.
rollback to a;
سطر متعلق به جدول salgrade و debt به حالت اولیه ی خود باز خواهد گشت. اکنون می توانید یا سطر جدید درج شده در جدول emp را ماندگار و ثبت کنید و یا به طور کل تراکنش را به حالت قبل برگردانید.
اگر دستور زیر را بدهید:
rollback to b;
پیرو آن برای سطر وارد شده در جدول salgrade، دستور roll back اجرا می شود. حال سه گزینه پیش رو دارید: می توانید سطر وارد شده در جدول dept و emp را ثبت کنید یا آن را به نقطه ی ثبت تعیین شده بازگردانید و یا به طور کلی تراکنش را به حالت اولیه برگردانید.
اگر دستور زیر را صادر کنید.
rollback;
کل تراکنش به حالت قبلی باز می گردد.
و اگر دستور زیر را بدهید.
commit;
پیرو این دستور کل transaction (تمامی تغییرات وارد شده هنگام تراکنش) ثبت گردیده و کلیه ی نقاط ثبت (savepoint) حذف می گردند.