روشهایی برای بازگرداندن جدول drop شده

در این مقاله به بررسی روش‌های مختلف بازیابی یک جدول از پشتیبان‌های RMAN در دیتابیس اوراکل پرداخته می‌شود. این فرآیند می‌تواند در مواردی مفید باشد که یک جدول به اشتباه حذف یا دچار آسیب شود. در اینجا، سه روش مختلف بازیابی یک جدول از RMAN توضیح داده خواهد شد، از جمله استفاده از Flashback Table، RMAN Point-in-Time Recovery (PITR) و Data Pump (exp/imp).

ابتدا یک کاربر به نام restoretable ایجاد می‌کنیم و به آن مجوزهای لازم برای ایجاد جدول و انجام عملیات‌های مرتبط را می‌دهیم:

 

CREATE USER restoretable IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO restoretable;
GRANT CREATE SESSION, CREATE TABLE, UNLIMITED TABLESPACE TO restoretable;

 

سپس با این کاربر به pdb مدنظر خود متصل می شوید و  یک جدول به نام t1 ایجاد می‌شود:

 

CREATE TABLE t1 (f1 NUMBER, f2 DATE DEFAULT SYSDATE);

 

پس از ایجاد جدول، 1001 داده به آن وارد می‌شود. در اینجا از دستور PL/SQL استفاده می‌کنیم تا 1000 رکورد شانسی وارد کنیم:

 

BEGIN
   FOR i IN 1..1001 LOOP
      INSERT INTO t1 (f1) 
      VALUES (TRUNC(DBMS_RANDOM.VALUE(1, 1000)));
   END LOOP;
   COMMIT;
END;
/

 

بازیابی جدول با استفاده از Flashback Table

روش اول برای بازیابی جدول حذف‌شده، استفاده از قابلیت Flashback Table در اوراکل است. این روش زمانی مفید است که undo موجود باشد و بتوان جدول را به حالت قبل از حذف بازیابی کرد. در صورتی که خود کاربر مجوز اجرای این دستور را داشته باشد، می تواند انجام دهد و در غیر اینصورت باید کاربر sys یا کاربری که مجوز را دارد انجام دهد. همچنین برای انجام این کار در صورتی که pdb هستید، باید به همان pdb متصل شوید.

برای انجام این کار، از دستور زیر استفاده می‌کنیم:

 

FLASHBACK TABLE RESTORETABLE.t1 TO BEFORE DROP;

 

پس از اجرای این دستور، جدول t1 به وضعیت قبل از حذف برمی‌گردد. می‌توانید با اجرای دستور زیر تعداد رکوردهای موجود در جدول را بررسی کنید:

 

SELECT COUNT(*) FROM RESTORETABLE.t1;

 

بررسی Recycle Bin:

همچنین، در صورتی که جدول در Recycle Bin قرار داشته باشد، می‌توانید از دستور زیر با استفاده از کاربر sys برای مشاهده آن استفاده کنید:

 

SELECT * FROM dba_recyclebin;

 

در اینجا می‌توانید نام اصلی جدول را مشاهده کرده و آن را بازیابی کنید. همچنین باید توجه داشته باشید که ایندکس‌ها و constraintها به طور خودکار با جدول بازیابی می‌شوند.

بازیابی جدول با استفاده از RMAN Point-in-Time Recovery (PITR)

در صورتی که undo کافی برای Flashback وجود نداشته باشد، می‌توان از روش RMAN Point-in-Time Recovery استفاده کرد. این روش به شما این امکان را می‌دهد که یک جدول خاص را از پشتیبان‌های RMAN بازیابی کنید و حتی آن را به نام دیگری ذخیره کنید.

برای این منظور، ابتدا دستور زیر را برای بازیابی جدول از RMAN اجرا می‌کنیم. با توجه به اینکه از cdb اجرا کردم، مشخصات pdb مدنظر را دادم.

 

 RECOVER TABLE RESTORETABLE.t1 OF PLUGGABLE DATABASE orclpdb
  UNTIL TIME "TO_DATE('20250804-024152','yyyymmdd-hh24miss')"
  AUXILIARY DESTINATION '/backup/'
  REMAP TABLE 'RESTORETABLE'.'T1':'T2';

 

این دستور باعث می‌شود که جدول t1 از پشتیبان‌های RMAN بازیابی شده و به نام t2 ذخیره شود. باید توجه کنید که این روش نیاز به فضای کافی در سیستم دارد.

در این فرآیند، یک instance کمکی به طور خودکار با یک SID تصادفی (مثلاً luDc) راه‌اندازی می‌شود و پشتیبان‌ها برای بازیابی داده‌ها استفاده می‌شوند.

بازیابی جدول با استفاده از Data Pump (exp/imp)

روش سوم برای بازیابی جدول خاص، استفاده از Data Pump است. این روش زمانی مفید است که شما از پشتیبان‌های Data Pump (exp/imp) استفاده کرده باشید. در این روش ابتدا از جدول مورد نظر Export گرفته شده و سپس از آن Import می‌شود.

برای بازیابی جدول با استفاده از Data Pump، دستور زیر را اجرا می‌کنیم

 

RMAN> RECOVER TABLE RESTORETABLE.t2 OF PLUGGABLE DATABASE orclpdb
  UNTIL TIME "TO_DATE('20250804-030129','yyyymmdd-hh24miss')"
  AUXILIARY DESTINATION '/backup/'
  DATAPUMP DESTINATION '/backup/'
  DUMPFILE 't2testrestore.dmp'
  NOTABLEIMPORT;

 

پس از بازیابی جدول، از دستور impdp برای وارد کردن داده‌ها به دیتابیس اصلی استفاده می‌کنیم:

 

impdp directory=backup dumpfile=t2testrestore.dmp logfile=imp_t2testrestore.log remap_table=restoretable.t2:t1

 

با انتقال دامپ می توانید این دستور را در هر سرور دیگری نیز استفاده کنید. من دایرکتوری backup را با مسیری که restore شده بود در دیتابیس اصلی ساختم

 

این روش امکان بازیابی جدول به نقطه خاصی از زمان را می‌دهد و همچنین می‌توان داده‌ها را به نام جدیدی وارد کرد.

در این مقاله، سه روش مختلف برای بازیابی یک جدول در دیتابیس اوراکل بررسی شد. این روش‌ها شامل:

  1. Flashback Table: استفاده از undo برای بازیابی جدول به حالت قبل از حذف.

  2. RMAN Point-in-Time Recovery: بازیابی جدول از پشتیبان‌های RMAN با امکان بازیابی به نام جدید.

  3. Data Pump: بازیابی جدول از پشتیبان‌های exp/imp به نقطه زمان خاص.

هر یک از این روش‌ها در شرایط مختلف کاربرد دارند و به شما این امکان را می‌دهند که جداول حذف‌شده یا آسیب‌دیده را به حالت قبلی بازیابی کنید.