رفع خطای RMAN-06820 در بکاپ‌گیری از Physical Standby با Recovery Catalog

اگر در محیط اوراکل دیتا گارد (Data Guard) وظیفه مدیریت بکاپ‌ها را بر عهده دارید و تصمیم گرفته‌اید بار پردازشی بکاپ را روی دیتابیس Standby منتقل کنید، احتمالاً در اولین تلاش‌های خود با این هشدار مواجه شده‌اید:

RMAN-06820: warning: failed to archive current log at primary database

دیدن این هشدار معمولاً ادمین‌های پایگاه داده را نگران می‌کند. در این مقاله عملی، بر اساس یک سناریوی واقعی در دیتابیس نسخه 19c، بررسی می‌کنیم که چرا این هشدار رخ می‌دهد، چطور بر بکاپ شما تأثیر می‌گذارد و چگونه می‌توانید با پیکربندی صحیح Recovery Catalog و اتصالات شبکه، آن را برای همیشه برطرف کنید.

سناریو و محیط آزمایش ما

در این پیاده‌سازی، معماری ما شامل بخش‌های زیر بود:

  • سرور Standby (با نام dc1 - IP: 192.168.56.31): دیتابیس هدف ما برای بکاپ‌گیری با نام منحصربه‌فرد DB_UNIQUE_NAME = vahiddb.
  • سرور Primary (با نام dc2 - IP: 192.168.56.32): دیتابیس اصلی با نام منحصربه‌فرد DB_UNIQUE_NAME = vahiddbdc2.
  • سرور کاتالوگ (با نام oracle26ai - IP: 192.168.56.33): میزبان دیتابیس کاتالوگ PDB26 برای نگهداری متادیتاهای RMAN.

ریشه فنی خطا: RMAN پشت درهای Primary می‌ماند!

زمانی که شما دستور بکاپ‌گیری (به ویژه بکاپ از آرشیو لاگ‌ها) را روی دیتابیس Standby صادر می‌کنید، RMAN به صورت خودکار تلاش می‌کند به دیتابیس Primary متصل شود و دستور ALTER SYSTEM ARCHIVE LOG CURRENT را در آنجا اجرا کند. هدف از این کار، انتقال آخرین ردو لاگ‌های تولید شده روی Primary به سمت Standby و بکاپ‌گیری از آن‌هاست تا مطمئن شوید بکاپ شما تا آخرین لحظه کامل است.

اما اگر RMAN نتواند به دیتابیس اصلی وصل شود (به دلیل عدم وجود کاتالوگ، عدم تعریف اطلاعات شبکه یا خطای احراز هویت)، هشدار RMAN-06820 را صادر می‌کند.

یک نکته حیاتی: این پیام یک هشدار (Warning) است، نه خطا (Error). بکاپ شما متوقف نمی‌شود و از آرشیو لاگ‌های موجود روی Standby بکاپ گرفته می‌شود؛ اما فرآیند سوییچ لاگ روی Primary انجام نخواهد شد.

گام‌های عملی برای حل دائمی مشکل

برای حل این سناریو، ۵ گام زیر را به ترتیب طی کردیم:

۱. راه‌اندازی Recovery Catalog در دیتابیس کاتالوگ (oracle26ai)

ابتدا فضایی برای ذخیره اطلاعات RMAN در دیتابیس کاتالوگ ایجاد کردیم:

-- ورود به PDB26
ALTER SESSION SET CONTAINER=PDB26;

-- ساخت Tablespace اختصاصی کاتالوگ
CREATE TABLESPACE RMANCAT_TS;

-- ایجاد کاربر RMAN و تخصیص دسترسی‌ها
CREATE USER RMAN IDENTIFIED BY "StrongPasswordHere"
DEFAULT TABLESPACE RMANCAT_TS
QUOTA UNLIMITED ON RMANCAT_TS;

GRANT recovery_catalog_owner TO RMAN;
GRANT connect, resource TO RMAN;

پس با ابزار RMAN به این کاتالوگ متصل شده و ساختار کاتالوگ را ایجاد کردیم:

rman catalog rman/StrongPasswordHere@CATDB_PDB26

دستور زیر را بعد از اتصال اجرا می کنیمک

RMAN> create catalog;
recovery catalog created

۲. تنظیم فایل شبکه (tnsnames.ora) روی هر دو سرور

برای اینکه سرورها بتوانند یکدیگر را ببینند، تعریف‌های TNS زیر را در فایل شبکه اعمال کردیم. پیشنهاد میکنم نامهای مستقلی را برای این موضوع در نظر بگیرید:

VAHID_PRI =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.32)(PORT = 1521))
    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = vahiddb))
  )

VAHID_STBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.31)(PORT = 1521))
    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = vahiddb))
  )

CATDB_PDB26 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.33)(PORT = 1521))
    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = PDB26))
  )

۳. چالش سازگاری نسخه‌ها (خطای RMAN-06429)

در حین کار متوجه شدیم که اجرای کلاینت RMAN نسخه 23ai یا 26ai از روی سرور کاتالوگ به مقصد دیتابیس 19c با خطای ناسازگاری مواجه می‌شود:

RMAN-06429: TARGET database is not compatible with this version of RMAN

تجربه فنی: همیشه کلاینت RMAN را از روی سروری اجرا کنید که نسخه‌اش با دیتابیس Target (در اینجا 19c) یکسان باشد. بنابراین، تمام دستورات RMAN را از روی سرورهای dc1 و dc2 اجرا کردیم.


۴. ثبت دیتابیس (Register) و تعریف مسیرهای ارتباطی (Mapping)

برای اینکه کاتالوگ دیتابیس‌های ما را بشناسد، ابتدا از روی سرور Primary (dc2) دیتابیس را ثبت کردیم:

rman target / catalog rman/StrongPasswordHere@CATDB_PDB26

در rman:

RMAN> register database;

سپس از طریق کاتالوگ، به RMAN فهماندیم که برای هر یک از اعضای دیتا گارد از چه TNS Connection استفاده کند (تنظیم بسیار مهم برای حل خطای RMAN-06820):

CONFIGURE DB_UNIQUE_NAME 'vahiddbdc2' CONNECT IDENTIFIER 'VAHID_PRI';
CONFIGURE DB_UNIQUE_NAME 'vahiddb'    CONNECT IDENTIFIER 'VAHID_STBY';

۵. تست نهایی بکاپ بدون هشدار!

اشتباه رایج در این مرحله، اتصال به RMAN به صورت لوکال با استفاده از target / است. اگر با کاربر سیستم‌عامل متصل شوید، RMAN در زمان اتصال به دیتابیسِ دوردست (Primary)، اطلاعات کاربری (Credential) برای لاگین ندارد و باز هم هشدار RMAN-06820 رخ می‌دهد.

روش صحیح، اتصال با احراز هویت شبکه (رمز عبور SYS) است:

rman target sys@VAHID_STBY catalog rman/StrongPasswordHere@CATDB_PDB26

حالا دستور بکاپ را اجرا می‌کنیم:

RMAN> backup archivelog all;

نیتجه:

current log archived at primary database
...
Finished backup

RMAN بدون هیچ هشداری به دیتابیس Primary متصل شد، سوییچ لاگ را انجام داد، ردو لاگ‌های جدید به Standby منتقل شدند و بکاپ با موفقیت کامل شد.