ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

بازیابی داده‌های حذف‌شده در Oracle با Flashback Query

آیا تا حالا در دیتابیس اوراکل (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
محدودیت زمانی اگر زمان زیادی گذشته باشد، داده‌ها قابل بازیابی نیستند
تأثیر بر منابع استفاده سنگین می‌تواند منابع سیستم را مصرف کند

🧾 Flashback برای بررسی آپدیت اشتباهی

فرض کن یکی همه‌ی حقوق‌ها رو صفر کرده:

				
					UPDATE employees SET salary = 0 WHERE department_id = 20;
COMMIT;

				
			

برای دیدن مقادیر قبلی:

				
					SELECT employee_id, salary
FROM employees
AS OF TIMESTAMP TO_TIMESTAMP
('۲۰۲۵-۰۷-۳۱ ۱۳:۳۰:۰۰', 'YYYY-MM-DD HH24:MI:SS')
WHERE department_id = 20;

				
			

⚙️ تنظیمات پیشنهادی برای DBAها

بررسی مدت نگهداری Undo:

				
					SHOW PARAMETER undo_retention;

				
			

افزایش زمان نگهداری Undo به ۳۰ دقیقه:

				
					ALTER SYSTEM SET UNDO_RETENTION = 1800;

				
			

📌 بررسی تراکنش‌های قبلی (پیشرفته)

اگر نیاز به ردیابی کامل تغییرات داری:

				
					SELECT xid, operation, undo_sql
FROM flashback_transaction_query
WHERE table_name = 'EMPLOYEES';

				
			

سوالات متداول درباره Flashback Query در Oracle

بستگی دارد به مدت زمان نگهداری داده‌ها در حافظه‌ی Undo.

این زمان توسط پارامتر UNDO_RETENTION مشخص می‌شود. به‌صورت پیش‌فرض ممکن است چند دقیقه یا چند ساعت باشد.

اگر مدت زیادی از حذف گذشته باشد و Undo پاک شده باشد، امکان بازیابی نیست.

بله. برای اجرای Flashback Query، کاربر باید مجوزهای زیر را داشته باشد:

  • FLASHBACK privilege
  • یا SELECT ANY TRANSACTION
    در محیط‌های production معمولاً این مجوزها فقط به DBA داده می‌شود.
  • TIMESTAMP: راحت‌تر برای انسان قابل درک است (تاریخ و ساعت).
  • SCN (System Change Number): دقیق‌تر است و Oracle به‌صورت داخلی از آن استفاده می‌کند. برای استفاده از SCN باید مقدار آن را بدانید (مثلاً از طریق V$DATABASE یا FLASHBACK_TRANSACTION_QUERY).

با Flashback Query فقط می‌توان آن رکورد را در حالت readonly مشاهده کرد.

اما اگر می‌خواهید آن را برگردانید، کافی است خروجی همان کوئری را در یک INSERT INTO ... SELECT استفاده کنید تا داده دوباره به جدول اضافه شود.

📦 جمع‌بندی

Flashback Query یکی از ابزارهای نجات‌دهنده در Oracle Database هست که باید توی جعبه ابزار هر DBA و توسعه‌دهنده باشه.

مزایای اصلی:

  • ✅ بدون نیاز به بکاپ یا restore
  • ✅ مناسب برای تولید (production)
  • ✅ قابلیت بررسی یا بازیابی داده‌های حذف‌شده یا تغییر‌یافته

📥 اگر سوالی داری در مورد Flashback Query در Oracle داری، در بخش کامنت‌ها بپرس.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *