در مدیریت دیتابیسهای اوراکل (Oracle Database)، آرشیو لاگها (Archive Logs) نقش بسیار حیاتی در بازیابی اطلاعات و حفظ یکپارچگی پایگاه داده ایفا میکنند. در شرایط عادی، هنگام ریکاوری دیتابیس، RMAN (Recovery Manager) آرشیو لاگها را به مسیر پیشفرض آنها (معمولاً Fast Recovery Area یا FRA) ریستور میکند.
اما گاهی اوقات مدیران پایگاه داده (DBA) نیاز دارند تا آرشیو لاگها را برای اهدافی مانند استخراج اطلاعات (توسط LogMiner)، رفع Gap در محیطهای Data Guard، یا کمبود فضای دیسک در مسیر اصلی، در یک مسیر جایگزین و دلخواه روی دیسک ریستور کنند.
در این مقاله، به بررسی دقیق نحوه انجام این کار با استفاده از دستور SET ARCHIVELOG DESTINATION در محیط RMAN میپردازیم.
پیشنیازها
پیش از اجرای دستورات، اطمینان حاصل کنید که شرایط زیر فراهم است:
۱. دسترسی به RMAN: دسترسی ادمین به محیط RMAN دیتابیس مورد نظر.
۲. وجود بکاپ: بکاپ معتبر از آرشیو لاگهایی که قصد ریستور آنها را دارید، باید در دسترس RMAN باشد (روی دیسک یا Tape).
۳. دسترسی سیستمعامل: کاربر سیستمعامل (معمولاً کاربر oracle) باید سطح دسترسی خواندن و نوشتن (Read/Write) بر روی پوشه دلخواهی که به عنوان مقصد معرفی میکنید را داشته باشد. در غیر این صورت با خطای OS مواجه خواهید شد.
ساختار کلی دستورات در RMAN
برای تغییر مسیر پیشفرض ریستور، باید از یک بلاک RUN استفاده کنیم. دستور SET ARCHIVELOG DESTINATION به RMAN میگوید که به صورت موقت و فقط در طول اجرای همین بلاک RUN، فایلهای بازیابی شده را به مسیر تعیین شده منتقل کند.
ساختار کلی به شکل زیر است:
RUN {
SET ARCHIVELOG DESTINATION TO '/path/to/your/custom/directory';
RESTORE ARCHIVELOG [گزینههای فیلتر];
}
روشهای مختلف ریستور آرشیو لاگها
بسته به نیاز خود، میتوانید از سناریوهای مختلفی برای فیلتر کردن آرشیو لاگها استفاده کنید. در ادامه ۳ سناریوی پرکاربرد توضیح داده شده است:
سناریوی اول: ریستور کردن تمامی آرشیو لاگهای موجود در بکاپ
اگر به تمام آرشیو لاگهای بکاپگیری شده نیاز دارید، از کلمه کلیدی ALL استفاده کنید. (توجه: این کار ممکن است به فضای دیسک بسیار زیادی نیاز داشته باشد).
RUN {
SET ARCHIVELOG DESTINATION TO '/u01/custom_archivelogs';
RESTORE ARCHIVELOG ALL;
}
سناریوی دوم: ریستور بر اساس شماره توالی (Sequence)
معمولترین روش، ریستور کردن یک بازه مشخص از آرشیو لاگها بر اساس شماره Sequence آنهاست. این روش به ویژه برای برطرف کردن قطعیهای (Gap) مربوط به Data Guard بسیار کاربردی است.
RUN {
SET ARCHIVELOG DESTINATION TO '/u01/custom_archivelogs';
RESTORE ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 110;
}
نکته: میتوانید فقط از FROM SEQUENCE یا فقط از UNTIL SEQUENCE نیز استفاده کنید.
سناریوی سوم: ریستور بر اساس بازه زمانی (Time)
اگر میدانید که تغییرات مورد نظر شما در چه روز یا ساعتی رخ داده است، میتوانید آرشیو لاگها را بر اساس زمان بازیابی کنید.
RUN {
SET ARCHIVELOG DESTINATION TO '/u01/custom_archivelogs';
RESTORE ARCHIVELOG FROM TIME 'SYSDATE-2';
}
در این مثال، تمام آرشیو لاگهای مربوط به ۲ روز گذشته تا کنون در مسیر دلخواه ریستور میشوند. همچنین میتوانید از فرمتهای دقیقتر زمانی مانند TO_DATE('2023-10-25 14:00:00', 'YYYY-MM-DD HH24:MI:SS') استفاده کنید.
نکات مهم پس از اجرای عملیات
- بررسی لاگهای RMAN: پس از اجرای بلاک RUN، خروجی RMAN را به دقت مطالعه کنید تا مطمئن شوید فایلها با موفقیت خوانده شده و در مسیر جدید نوشته شدهاند.
- بررسی سطح سیستمعامل: یک ترمینال در سرور باز کنید و به مسیر تعیین شده بروید (cd /u01/custom_archivelogs) و با دستور ls -l صحت وجود فایلها و حجم آنها را بررسی کنید.
- عدم ثبت در دیتابیس به عنوان لاگ فعال: توجه داشته باشید فایلهایی که با این روش ریستور میشوند، صرفاً فایلهای فیزیکی روی دیسک هستند و دیتابیس آنها را به عنوان آرشیو لاگهای فعال خود برای فرآیندهای ریکاوری پیشفرض نمیشناسد (مگر اینکه به صورت دستی در RMAN کاتالوگ شوند: CATALOG START WITH '/u01/custom_archivelogs';).
نتیجهگیری
استفاده از ترکیب SET ARCHIVELOG DESTINATION در یک بلاک RUN، روشی امن و استاندارد برای استخراج آرشیو لاگها از فایلهای بکاپ است، بدون آنکه نظم و تنظیمات پیشفرض مسیر ریکاوری دیتابیس (FRA) دچار اختلال شود.