بعد از قضیه داستان های واقعی: کلون گیری باگ دار بودم که یه PDB با نزدیک 600 گیگ دیتا انتقال پیدا نمیکرد و در هنگام کلون گیری با خطای زیر مواجه میشد:

RMAN-08018: channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
RMAN-08508: archived log destination=+FRA
RMAN-08169: channel ORA_AUX_DISK_1: using network backup set from service CDB1
RMAN-08022: channel ORA_AUX_DISK_1: restoring archived log
RMAN-08510: archived log thread=1 sequence=8700
RMAN-08180: channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
RMAN-03091: Finished restore at 14-APR-22
RMAN-05045:
Performing import of metadata...
RMAN-06136: Oracle error from auxiliary database: ORA-00283: recovery session canceled due to errors
ORA-65345: cannot refresh pluggable database

اگه جستجو کنید این مشکل زمانی پیش میاد که مقصد قادر به رفرش شدن از دیتابیس مبدا نیست. یکی از دلایل ممکنه به خاطر وجود MRP در سرور مبدا باشه (اگه بر فرض دیتابیس مبدا گارد باشه) اما در مورد من دیتابیس مبدا ADG نبود پس این مشکل با داکیومنت ORA-65345 When Refreshing PDB Sourced From Active Data Guard Standby (Doc ID 2765472.1) برای من وجود نداشت. پس مشکل کجا بود؟

تو جستجوهای خودم بودم که به لینک زیر برخورد کردم:

Bug 32631551 - Refresh pluggable database fails with ORA-283: recovery session canceled due to errors ORA-65345: cannot refresh pluggable database (Doc ID 32631551.8)

و قهمیدم یک باگ شبیه این مورد ثبت شده و تا پچ 19.13 هم وجود داره و تو نسخه 20.1.0 و پچ 19.14 فیکس شده. خب راه حل سریع این باگ میگفت که مسیر recovery_file_dest و LOG_ARCHIVE_DEST_n = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' رو پیکربندی کنیم. من برای اینکه از پارامترها اطمینان پیدا کنم هم در دیتابیس مبدا و هم مقصد دوباره پیکربندی ها رو چک کردم و همه چیز به نظر خوب بود.

دیتابیس مبدا:

SQL> show parameter recovery_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /data1/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 500G
remote_recovery_file_dest string

SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=USE_DB_RECOVERY_FILE_
DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_18 string
log_archive_dest_19 string

SQL>

دیتابیس مقصد:

SQL> show parameter recovery_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FRA
db_recovery_file_dest_size big integer 400G
remote_recovery_file_dest string +FRA

SQL> show parameter LOG_ARCHIVE_DEST_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=USE_DB_RECOVERY_FILE_DEST
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_19 string

SQL>

با این حال در تلاش بعدی هم خطای ORA-65345: cannot refresh pluggable database رو مشاهده کردم. اینبار سراغ اپلای پچ 32631551 رفتم که 3 باگ 

Bug 32567863-ORA-65345: CANNOT REFRESH PLUGGABLE DATABASE

Bug 32631551-ORA-00283: RECOVERY SESSION CANCELED DUE TO ERRORS ORA-65345: CANNOT REFRESH PLUGGABLE DATABASE

Bug 32690109- PDB HOT CLONE FAILS WITH ORA-283 DUE TO INCORRECT PARLOG FILE GENERATION.

را رفع میکرد اما بعد از اپلای این پچ هم دوباره خطا را مشاهده میکردم.

اینبار با جستجوی بیشتر هیدن پارامتر دیباگ _pluggable_database_debug رو روشن کردم این پارارمتر چک کردن redo ها رو سطر به سطر برای pluggable دیتابیسها جهت trace انجام میده

alter system set "_pluggable_database_debug"=16777216;

توجه کنید مقدار پیشفرض این پارارمتر 0 است و توصیه میشه بعد از تموم شدن کار این پارامتر به مقدار اصلی برگردانده بشه.

alter system set "_pluggable_database_debug"=0;

بعد از اجرای دوباره دستور کلون گیری آنلاین خطا دیگه مشاهده نشد و این مشکل نیز برطرف گردید.

اگه شما دوباره به این خطا برخورد کردید با توجه به اینکه پارارمتر trace کلون گیری فعال بوده شما باید کوچیکترین SCN رو از دیتابیس مبدا پیدا کنید و با استفاده از دستورات زیر sequence مشکل دار رو شناسایی و با بک آپ و ریکاوری به وسیله RMAN مشکل را برطرف کنید.

alter session set nls_date_format='DD-MON-RRRR HH24:MI:SS';

select name, sequence#, status, FIRST_CHANGE#,NEXT_CHANGE# from
v$archived_log where <lower_scn> between FIRST_CHANGE# and NEXT_CHANGE#;

روز خوبی داشته باشید.