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

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

ردیابی تغییرات در اوراکل (Oracle): راهنمای جامع لاگ‌ها و بازگردانی داده‌ها

مقدمه: ردیابی تغییرات در پایگاه داده اوراکل (Oracle) چه اهمیتی دارد؟

ردیابی تغییرات در پایگاه داده اوراکل (Oracle) یک مهارت ضروری برای هر DBA است.

از ممیزی (Auditing) تا بازگردانی داده‌ها با Flashback و استفاده از تریگرها (Triggers)، هر روش برای یک هدف خاص طراحی شده است.

در این مقاله آموزش اوراکل، تمام روش‌های ردیابی تغییرات اوراکل را به همراه مثال‌های عملی معرفی می‌کنیم.

اگر می خواهید در مورد نحوه نصب اوراکل روی لینوکس آشنا بشید نوشته زیر را مطالعه کنید:

در این نوشته شما می خوانید

ممیزی اوراکل (Oracle Auditing)

Standard Auditing (ممیزی استاندارد)

Standard Auditing یکی از روش‌های اصلی برای ثبت تغییرات کاربران در اوراکل است.

فعالسازی ممیزی استاندارد:
				
					ALTER SYSTEM SET audit_trail = DB,EXTENDED SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

				
			
ایجاد قانون ممیزی برای یک جدول خاص:
				
					AUDIT INSERT, UPDATE, DELETE ON employees BY ACCESS;
				
			
مشاهده گزارش‌های ممیزی:
				
					SELECT username, action_name, object_name, timestamp 
FROM DBA_AUDIT_TRAIL 
WHERE object_name = 'EMPLOYEES';
				
			

Unified Auditing (ممیزی یکپارچه – از اوراکل ۱۲c به بعد)

ایجاد یک سیاست ممیزی (Audit Policy):
				
					CREATE AUDIT POLICY emp_audit_policy
ACTIONS INSERT, UPDATE, DELETE ON employees;
AUDIT POLICY emp_audit_policy;

				
			
مشاهده گزارش‌های ممیزی یکپارچه:
				
					SELECT event_timestamp, dbusername, action_name, object_name 
FROM UNIFIED_AUDIT_TRAIL 
WHERE object_name = 'EMPLOYEES';

				
			

Flashback در اوراکل (Flashback Technology)

Flashback Query (مشاهده داده‌ها در زمان گذشته)

				
					SELECT * 
FROM employees 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
				
			

Flashback Versions Query (مشاهده نسخه‌های مختلف یک رکورد)

				
					SELECT versions_starttime, versions_endtime, versions_operation, salary
FROM employees VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL '1' DAY AND SYSTIMESTAMP
WHERE employee_id = 101;
				
			

تریگرها در اوراکل (Oracle Triggers) برای ثبت تغییرات سفارشی

ایجاد جدول ثبت تغییرات و تریگر روی جدول employees:

				
					CREATE TABLE emp_audit (
  audit_id NUMBER PRIMARY KEY,
  employee_id NUMBER,
  operation_type VARCHAR2(10),
  old_salary NUMBER,
  new_salary NUMBER,
  change_date DATE,
  changed_by VARCHAR2(100)
);

CREATE SEQUENCE emp_audit_seq START WITH 1 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER trg_emp_audit
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
BEGIN
  INSERT INTO emp_audit (
    audit_id, employee_id, operation_type, old_salary, new_salary
    , change_date, changed_by
  ) VALUES (
    emp_audit_seq.NEXTVAL,
    :OLD.employee_id,
    CASE 
      WHEN INSERTING THEN 'INSERT'
      WHEN UPDATING THEN 'UPDATE'
      WHEN DELETING THEN 'DELETE'
    END,
    :OLD.salary,
    :NEW.salary,
    SYSDATE,
    USER
  );
END;
/

				
			

LogMiner در اوراکل (Oracle LogMiner) برای تحلیل تغییرات لاگ‌ها

افزودن لاگ‌ها به LogMiner:

				
					BEGIN
  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME => '/path/to/redo01.log',
    OPTIONS     => DBMS_LOGMNR.NEW
  );
END;
/
				
			

شروع فرآیند تحلیل لاگ‌ها:

				
					BEGIN
  DBMS_LOGMNR.START_LOGMNR(
    STARTTIME => TO_DATE('2025-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),
    ENDTIME   => TO_DATE('2025-02-17 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
  );
END;
/
				
			

نمایش تغییرات ثبت‌شده:

				
					SELECT scn, timestamp, operation, seg_name, username 
FROM v$logmnr_contents 
WHERE seg_name = 'EMPLOYEES';
				
			

ممیزی دقیق با FGA (Fine-Grained Auditing) در اوراکل

ایجاد سیاست FGA برای ردیابی تغییرات بالای ۱۰,۰۰۰ در حقوق:

				
					BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema   => 'HR',
    object_name     => 'EMPLOYEES',
    policy_name     => 'SALARY_AUDIT',
    audit_condition => 'salary > ۱۰۰۰۰',
    statement_types => 'SELECT, UPDATE'
  );
END;
/

				
			

مشاهده لاگ‌های ثبت‌شده توسط FGA:

				
					SELECT policy_name, object_name, sql_text, db_user, os_user 
FROM DBA_FGA_AUDIT_TRAIL;
				
			

نمایش تغییرات ثبت‌شده:

				
					SELECT scn, timestamp, operation, seg_name, username 
FROM v$logmnr_contents 
WHERE seg_name = 'EMPLOYEES';
				
			

مقایسه روش‌های ردیابی تغییرات در اوراکل

روش مزایا معایب
Standard Auditing آسان و سریع، مناسب برای ثبت فعالیت‌های عمومی نیاز به فضای زیاد برای لاگ
Unified Auditing یکپارچه و بهینه، مناسب برای نسخه‌های جدید اوراکل نیازمند نسخه‌های جدید
Flashback Query بازیابی داده‌های حذف‌شده بدون نیاز به ریستور وابسته به فضای UNDO
Flashback Versions نمایش تاریخچه تغییرات رکوردها به صورت کامل محدود به UNDO_RETENTION
Triggers امکان ثبت تغییرات با جزئیات دلخواه افزایش سربار سیستم
LogMiner تحلیل کامل تاریخچه تغییرات از طریق Redo Logs پیچیدگی در راه‌اندازی
FGA (Fine-Grained Auditing) ممیزی هدفمند و قابل تنظیم با شرایط خاص نیاز به پیکربندی پیشرفته

سوالات متداول درباره Anti Join در اوراکل (Oracle Anti Join)

  • Standard Auditing برای ثبت دستورات SQL اجرایی
  • Unified Auditing برای ممیزی یکپارچه از نسخه ۱۲c به بعد
  • Flashback Technology برای مشاهده وضعیت داده‌ها در گذشته
  • Oracle Triggers برای ثبت تغییرات در یک جدول لاگ سفارشی
  • LogMiner برای تحلیل Redo Logs و بررسی تغییرات
  • Fine-Grained Auditing (FGA) برای ممیزی دقیق و سطح بالا
  • Flashback Query امکان مشاهده داده‌های یک جدول در یک زمان مشخص در گذشته را فراهم می‌کند.
  • Flashback Versions Query تاریخچه کاملی از تغییرات یک رکورد را نمایش می‌دهد، شامل INSERT, UPDATE و DELETE.

می‌توان از تریگر (Trigger) برای ثبت تغییرات در یک جدول لاگ استفاده کرد:

CREATE OR REPLACE TRIGGER trg_emp_audit
AFTER UPDATE OR DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO emp_audit (employee_id, operation_type, old_salary, new_salary, change_date, changed_by)
VALUES (:OLD.employee_id, CASE WHEN UPDATING THEN ‘UPDATE’ WHEN DELETING THEN ‘DELETE’ END,
:OLD.salary, :NEW.salary, SYSDATE, USER);
END;

این تریگر تمام تغییرات در حقوق (salary) را ثبت می‌کند.

می‌توان از LogMiner برای بررسی تغییرات پایگاه داده بدون نیاز به تریگرها استفاده کرد.

این ابزار Redo Logs را تحلیل کرده و تغییرات اعمال‌شده را استخراج می‌کند:

SELECT scn, timestamp, operation, seg_name, username
FROM v$logmnr_contents
WHERE seg_name = ‘EMPLOYEES’;

بهترین روش به نیاز شما بستگی دارد:

  • اگر به ثبت تمام دستورات کاربران نیاز دارید: از Unified Auditing استفاده کنید.
  • اگر نیاز به مشاهده داده‌های گذشته دارید: از Flashback Query یا Flashback Versions Query استفاده کنید.
  • اگر می‌خواهید تغییرات خاصی را ثبت کنید: تریگرها (Triggers) بهترین گزینه هستند.
  • اگر نیاز به تحلیل تغییرات از لاگ‌ها دارید: از LogMiner استفاده کنید.
  • اگر به ممیزی پیشرفته برای داده‌های حساس نیاز دارید: FGA (Fine-Grained Auditing) بهترین انتخاب است.

نتیجه‌گیری

برای ثبت و ردیابی تغییرات در اوراکل، هر یک از روش‌های ممیزی (Auditing)، Flashback، تریگرها (Triggers)، LogMiner و FGA دارای مزایا و کاربردهای خاص خود هستند.

به‌عنوان یک DBA، استفاده ترکیبی از این ابزارها باعث ارتقای امنیت، بهبود مدیریت تغییرات و افزایش قابلیت بازیابی داده‌ها می‌شود.

این راهنما به شما کمک می‌کند تا بهترین روش را متناسب با نیاز خود انتخاب و پیاده‌سازی کنید.

📢 اگر شما هم تجربه ایی در ثبت و ردیابی تغییرات در اوراکل دارید در بخش کامنت‌ها آن را به اشتراک بگذارید! 🚀

میثم راد

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

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

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