
آیا تا حالا در دیتابیس اوراکل (Oracle Database) بهاشتباه یک رکورد مهم رو حذف یا آپدیت کردی؟
اگه جوابت مثبته، احتمالاً اولین چیزی که به ذهنت رسیده بازیابی بکاپ بوده؛ اما یه راه خیلی سادهتر، سریعتر و هوشمندانهتر هم وجود داره:
استفاده از Flashback Query در Oracle!
در این مقاله آموزش اوراکل در بخش آموزش اوراکل SQL با زبانی ساده و انسانی یاد میگیریم که چطور با استفاده از قابلیت Flashback Query در اوراکل، دادههایی که اشتباهی پاک یا تغییر دادن، رو ببینیم و حتی برگردونیم!
آیا میخواهید بدانید که در اوراکل با امکانات پیشرفته دستورات PVOT و UNPIVOT بیشتر آشنا بشید، پیشنهاد می شود نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
🔍 Flashback Query در Oracle چیست؟
Flashback Query یکی از ابزارهای هوشمند و قدرتمند Oracle Database هست که به شما اجازه میده وضعیت جدول رو در یک زمان مشخص در گذشته ببینید.
این ابزار بر اساس دادههای Undo عمل میکنه و بدون نیاز به ریستور بکاپ یا دان کردن سیستم، به شما اجازه میده به عقب برگردید.
🎯 کاربردهای Flashback Query
- 🧹 بازیابی رکوردهای حذفشده
- 🕵️ بررسی مقادیر قبل از آپدیت
- 📜 ممیزی فعالیتهای کاربران
- 🧪 آموزش یا تست حالتهای قبلی دادهها
🛠️ آموزش استفاده از Flashback Query (با مثال واقعی)
💡 سینتکس کلی:
SELECT *
FROM table_name
AS OF TIMESTAMP TO_TIMESTAMP
('YYYY-MM-DD HH24:MI:SS', 'YYYY-MM-DD HH24:MI:SS');
یا:
SELECT *
FROM table_name
AS OF SCN 123456789;
✅ SCN = System Change Number | نشاندهندهی لحظهی خاصی در دیتابیس
✅ مثال واقعی: برگرداندن رکورد حذفشده
فرض کن این دستور اشتباهی اجرا شده:
DELETE FROM employees WHERE employee_id = 101;
COMMIT;
حالا باید ببینیم این رکورد قبل از حذف چه شکلی بوده:
SELECT *
FROM employees
AS OF TIMESTAMP TO_TIMESTAMP
('۲۰۲۵-۰۷-۳۱ ۱۴:۰۰:۰۰', 'YYYY-MM-DD HH24:MI:SS')
WHERE employee_id = 101;
و برای بازیابی:
INSERT INTO employees
SELECT *
FROM employees
AS OF TIMESTAMP TO_TIMESTAMP
('۲۰۲۵-۰۷-۳۱ ۱۴:۰۰:۰۰', 'YYYY-MM-DD HH24:MI:SS')
WHERE employee_id = 101;
🧠 نکات مهم در استفاده از Flashback Query
| نکته | توضیح |
|---|---|
| مدت نگهداری Undo | وابسته به مقدار پارامتر UNDO_RETENTION |
| دسترسی لازم | نیاز به مجوز FLASHBACK یا SELECT ANY TRANSACTION |
| محدودیت زمانی | اگر زمان زیادی گذشته باشد، دادهها قابل بازیابی نیستند |
| تأثیر بر منابع | استفاده سنگین میتواند منابع سیستم را مصرف کند |
