Autonomous Transactions একটি শক্তিশালী বৈশিষ্ট্য যা PL/SQL প্রোগ্রামিং এ ডেটাবেস অপারেশনগুলোকে একে অপর থেকে বিচ্ছিন্ন করার সুযোগ দেয়। এর মাধ্যমে, আপনি একটি স্বতন্ত্র (independent) ট্রানজেকশন তৈরি করতে পারেন যা মূল ট্রানজেকশন থেকে আলাদা থাকে এবং কোনো ডেটাবেস পরিবর্তন সম্পাদন করতে পারে, যেমন একটি লগ বা অডিট ইনসার্ট করা, যেটি মূল ট্রানজেকশন-এর সফলতা বা ব্যর্থতার ওপর নির্ভরশীল নয়।
এটি বিশেষ করে তখন কাজে আসে যখন আপনি একটি কার্যকরী প্রক্রিয়া বা লগিং মেকানিজম তৈরি করতে চান যা মূল কার্যক্রমের সফলতা বা ব্যর্থতা থেকে পৃথকভাবে কার্যকর হয়।
Autonomous Transaction কি?
একটি Autonomous Transaction এমন একটি PL/SQL ট্রানজেকশন যা একটি আলাদা ডেটাবেস পরিবেশে চলতে থাকে এবং এটি মূল ট্রানজেকশন থেকে স্বাধীনভাবে পরিচালিত হয়। অর্থাৎ, এই ট্রানজেকশনের কার্যক্রম শেষ হওয়ার পরও, মূল ট্রানজেকশনের সফলতা বা ব্যর্থতার কোনো প্রভাব Autonomous Transaction এর উপর পড়বে না। Autonomous Transaction মূল ট্রানজেকশনের COMMIT বা ROLLBACK এর সাথে সম্পর্কিত নয়।
Autonomous Transaction ব্যবহারের সুবিধা:
- আলাদা ট্রানজেকশন: একটি অ্যাকশন সম্পাদিত হওয়ার পরও এটি মূল ট্রানজেকশনের ফলাফলের ওপর নির্ভরশীল নয়।
- লগিং এবং অডিটিং: Autonomous Transaction সাধারণত ব্যবহৃত হয় লগিং বা অডিটিং এর জন্য, যেখানে মূল ট্রানজেকশন এক্সিকিউট হতে থাকলেও সেই সময় একটি আলাদা লগ রেকর্ড করা হয়।
- ডেটাবেস ট্যাগিং: কোনো ট্রানজেকশনের পুরোপুরি ফলাফল না জানলেও আলাদা ভাবে প্রয়োজনীয় ডেটাবেস কাজ সম্পাদন করা সম্ভব হয়।
Autonomous Transaction এর Syntax:
Autonomous Transaction ব্যবহার করতে, PRAGMA AUTONOMOUS_TRANSACTION কমান্ডটি ব্যবহার করা হয়। এটি একটি বিশেষ কমান্ড যা PL/SQL ব্লকের মধ্যে Autonomous Transaction চালু করতে সহায়তা করে।
Syntax:
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
-- এখানে Autonomous Transaction এর কাজ করা হবে
-- সাধারণভাবে INSERT, UPDATE, DELETE অপারেশন করা হয়
INSERT INTO audit_log (log_message, log_date)
VALUES ('Transaction started', SYSDATE);
-- Commit the autonomous transaction
COMMIT;
-- Main transaction এর কার্যক্রম
UPDATE employees
SET salary = salary + 500
WHERE department_id = 10;
COMMIT;
END;
ব্যাখ্যা:
- PRAGMA AUTONOMOUS_TRANSACTION লাইনের মাধ্যমে আমরা একটি আলাদা ট্রানজেকশন শুরু করি।
- এখানে, আমরা একটি অডিট লগ টেবিলে ইনসার্ট করছি (যা মূল ট্রানজেকশন থেকে আলাদা থাকবে) এবং সেই লগ ইনসার্ট হওয়ার পরেই COMMIT করছি।
- এই
COMMITটি শুধুমাত্র Autonomous Transaction এর জন্য কার্যকরী, মূল ট্রানজেকশন যা পরবর্তীUPDATEঅপারেশন করবে তা আলাদা ভাবে চলবে।
Autonomous Transaction এর কার্যপ্রণালী:
- Autonomous Transaction এর প্রভাব: যখন আপনি Autonomous Transaction তৈরি করেন, তখন এটি মূল ট্রানজেকশনের বাহিরে একটি আলাদা ট্রানজেকশন হিসেবে আচরণ করে। অর্থাৎ, একে যদি COMMIT বা ROLLBACK করেন, তা অন্য ট্রানজেকশন থেকে আলাদা থাকে।
- Principle: Autonomous Transaction এর কাজের মধ্যে COMMIT বা ROLLBACK করলে তার পরিবর্তন মূল ট্রানজেকশনের অবস্থা পরিবর্তন করবে না। অন্য কথায়, মূল ট্রানজেকশন যখন শেষ হবে, তখন Autonomous Transaction এর কাজ সম্পূর্ণ হতে পারে বা বাতিল হতে পারে।
Autonomous Transaction এর ব্যবহার:
১. লগিং এবং অডিটিং: যখন কোনো গুরুত্বপূর্ণ প্রক্রিয়া ঘটছে, তখন সেই প্রক্রিয়া সম্পাদন হওয়ার পরেও যদি কোনো ধরনের ত্রুটি ঘটতে থাকে, তবে সেই সকল ত্রুটি বা কার্যক্রম লগ করা প্রয়োজন হতে পারে। এক্ষেত্রে Autonomous Transaction ব্যবহার করা হয় যাতে লগিং বা অডিটিং করা হয় কিন্তু প্রধান ট্রানজেকশন বা লজিক এ প্রভাব না পরে।
২. আরেকটি উদাহরণ: একটি ফাইন্যান্সিয়াল ট্রানজেকশনে আপনি চাইলে একটি ফান্ড ট্রান্সফার অপারেশনের লগ রাখতে পারেন যা মূল ট্রানজেকশন থেকে আলাদা থাকবে। এটি Autonomous Transaction এর সাহায্যে করা সম্ভব।
Autonomous Transaction এর উদাহরণ:
ধরা যাক, একটি ফিনান্সিয়াল অ্যাপ্লিকেশন তৈরি করা হয়েছে যেখানে একটি ফান্ড ট্রান্সফার পরিচালনা করা হচ্ছে। আপনি চান যে, মূল ট্রানজেকশনের জন্য যখনই কোনো ফান্ড ট্রান্সফার হয়, সেই সময় একটি অডিট লগ তৈরি হোক এবং তা মূল ট্রানজেকশনের ফলাফল ছাড়াই হোক। এজন্য আপনি Autonomous Transaction ব্যবহার করতে পারেন।
CREATE OR REPLACE PROCEDURE transfer_funds (
p_from_account IN NUMBER,
p_to_account IN NUMBER,
p_amount IN NUMBER
) IS
PRAGMA AUTONOMOUS_TRANSACTION; -- Autonomous Transaction block
BEGIN
-- Log the fund transfer operation
INSERT INTO audit_log (from_account, to_account, amount, transfer_date)
VALUES (p_from_account, p_to_account, p_amount, SYSDATE);
-- Commit the log entry independently of the main transaction
COMMIT;
-- Main transaction: Transfer funds between accounts
UPDATE accounts
SET balance = balance - p_amount
WHERE account_id = p_from_account;
UPDATE accounts
SET balance = balance + p_amount
WHERE account_id = p_to_account;
COMMIT; -- Commit the main transaction
END;
এখানে:
audit_logটেবিলে ফান্ড ট্রান্সফার সম্পর্কিত লগ ইনসার্ট করা হয়েছে, এবং সেটি Autonomous Transaction হিসেবে কাজ করছে।- মূল ট্রানজেকশনটি তখনই COMMIT হবে, কিন্তু লগ ইনসার্টের COMMIT আগেই ঘটবে।
Autonomous Transaction এর সীমাবদ্ধতা:
- ফাইল I/O অপারেশন: Autonomous Transaction ব্যবহার করা যাবে না এমন কিছু অপারেশন রয়েছে, যেমন ফাইল সিস্টেমে ডেটা লেখা বা অপারেশন করা।
- একাধিক Autonomous Transaction: একাধিক Autonomous Transaction একত্রে ব্যবহারের সময় সতর্ক থাকতে হবে, কারণ একটির COMMIT অপরটির COMMIT এর সাথে অসামঞ্জস্যপূর্ণ হতে পারে।
- ডেটাবেস কানেকশন: Autonomous Transaction তৈরি করার জন্য আপনাকে নিশ্চিত হতে হবে যে এটি সম্পূর্ণরূপে কার্যকরী।
সারাংশ:
- Autonomous Transactions PL/SQL এ ব্যবহৃত হয় যখন আপনি ডেটাবেসের প্রধান ট্রানজেকশনের বাইরে কোনো পরিবর্তন বা লগ ইনসার্ট করতে চান, যা মূল ট্রানজেকশনের উপর প্রভাব ফেলবে না।
- এটি লগিং, অডিটিং, অথবা অপ্রত্যাশিত পার্শ্বপ্রতিক্রিয়ার ক্ষেত্রে খুবই উপকারী।
- Autonomous Transaction প্রধান ট্রানজেকশন থেকে আলাদা কার্যকরী একটি ইউনিট হিসেবে কাজ করে এবং COMMIT বা ROLLBACK মূল ট্রানজেকশনের সাথে সম্পর্কিত নয়।
Read more