در اوراکل 11g با پیاده سازی دیتاگارد به صورت کلاستر، تنها نودی که دستور alter database manage recover بر روی ان اجرا شده(برای اولین بار!)، مسئولیت اعمال کردن redoها را برعهده خواهد داشت و مابقی نودها می توانند برای گزارش گیری، تهیه بکاپ و یا دریافت redo (یا آرشیو) و… مورد استفاده قرار بگیرند.
در اوراکل 12cR2، بهبودی در این زمینه رخ داد که می توان با کمک آن، همه نودها را در recovery سهیم کرد. این قابلیت که (Multi Instance Redo Apply (MIRA نام دارد، امکان اعمال redoها را با کمک چند instance ممکن می سازد.
برای فعال کردن این قابلیت می توان عبارت [INSTANCES [ ALL | integer را به دستور ALTER DATABASE RECOVER MANAGED STANDBY DATABASE اضافه کرد:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE INSTANCES [ ALL | integer]
برای مثال، با دستور زیر، در یک محیط تستی که تنها دو نود حاضر هستند، هر دو این نودها، وظیفه redo apply را بر عهده خواهند گرفت:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE INSTANCES ALL disconnect;
با مشاهده alert log در نودی که دستور در ان اجرا شده، پیامهای زیر قابل مشاهده می باشد:
Started logmerger process on instance id 2
Started logmerger process on instance id 1
Starting Multi Instance Redo Apply (MIRA) on 2 instances
2018-09-02T15:30:27.514112+04:30
Starting Multi Instance Redo Apply (MIRA)
2018-09-02T15:30:27.562984+04:30
…. (PID:15215): Managed Standby Recovery starting Real Time Apply
2018-09-02T15:30:27.861206+04:30
Started 16 apply slaves on instance id 2
2018-09-02T15:30:28.117260+04:30
Started 16 apply slaves on instance id 1
2018-09-02T15:30:28.643222+04:30
همچنین با اجرای این دستور در instance دوم، تنها بر روی آن نود، پروسس MRP اجرا خواهد شد:
–node 1:
[[email protected] ~]# ps -eaf|grep mrp
–node 2:
[[email protected]~]# ps -eaf|grep mrp
oracle 17458 1 0 14:40 ? 00:00:00 ora_mrp0_stb2
که در این صورت، پروسس mrp، نقش هماهنگ کننده را بین پروسسهایی که نام انها با پیشوند parallel recovery slave process)pr) شروع می شود، ایفا خواهد کرد که بر اساس پیامهای alert log، در هر نود 16 پروسس pr اجرا خواهد شد:
Started 16 apply slaves on instance id 2
2018-09-02T15:30:28.117260+04:30
Started 16 apply slaves on instance id 1
[[email protected]~]# ps -eaf|grep pr
oracle 16487 1 0 15:30 ? 00:00:00 ora_pr02_stb2
همچنین با cancel کردن حالت recovery در هر کدام از این نودها، media recovery به صورت کلی لغو خواهد شد:
–node 2:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE INSTANCES ALL disconnect;
Database altered.
–node 1:
SQL> alter database recover managed standby database cancel;
Database altered.
–node 2:
ORA-16037: user requested cancel of managed recovery operation
2018-09-02T14:48:52.719683+04:30
Background Media Recovery process shutdown (stb2)
برای استفاده از قابلیت MIRA، باید همه instanceها در یک وضیعت قرار داشته باشند(open و یا mount)! در غیر این صورت، خطای زیر رخ خواهد داد:
Starting Multi Instance Redo Apply (MIRA)
2018-09-02T14:39:31.422046+04:30
…. (PID:15215): Managed Standby Recovery starting Real Time Apply
2018-09-02T14:39:31.426539+04:30
Multi Instance Redo Apply terminaed with error 10459
2018-09-02T14:39:31.432166+04:30
Errors in file /oracle/diag/rdbms/stb/stb2/trace/stb2_pr00_16780.trc:
ORA-10459: cannot start media recovery on standby database; conflicting state detected
MIRA: Mark controlfile recovery error occurred