در هنگام بکاپ گیری با RMAN در محیط RAC، می توان CHANNELها را طوری تنظیم کرد که بار ناشی از عملیات بکاپ گیری، بر روی instanceهای مختلف، توزیع شود. در ادامه این متن، به شیوه انجام این کار، خواهیم پرداخت.
در ابتدا، net service nameای را برای instanceهای حاضر در محیط RAC تنظیم می کنیم:
rac1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)) )
rac2=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.72)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)))
با دستورات زیر، CHANNELای را به نودهای مختلف تخصیص دهیم:
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT ‘sys/qwe@rac2’;
new RMAN configuration parameters:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT ‘*’;
new RMAN configuration parameters are successfully stored
RMAN> CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT ‘sys/qwe@rac3’;
با دستور زیر، عملیات بکاپ گیری به طور موازی و با سه CHANNEL شروع به کار خواهد کرد:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
همانطور که در ادامه می بینید، سه CHANNEL بر روی سه instance اجرا شده اند:
RMAN> backup database;
Starting backup at 05-NOV-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=3234 instance=rac2 devtype=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: sid=3234 instance=rac3 devtype=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: sid=3269 instance=rac1 devtype=DISK
channel ORA_DISK_1: starting piece 1 at 05-NOV-15
channel ORA_DISK_2: starting full datafile backupset
channel ORA_DISK_2: specifying datafile(s) in backupset
با داشتن sid مربوط به CHANNEL دو نود دیگر می توان پروسس مربوط به rman را مشاهده کرد:
–rac2:
SQL> select sid,serial# from v$session where sid=3234;
SID SERIAL#
———- ———-
3234 2116
–rac3:
select sid,serial# from v$session where sid=3234;
SID SERIAL#
———- ———-
3234 9824
AUTOLOCATE BACKUPS
در محیط rac این امکان وجود دارد که فایلهای backup در فضای local هر کدام از نودها ذخیره شوند، حال اگر بخواهیم در این حالت restore را انجام دهیم، rman به طور خودکار محل هر کدام از آنها را کشف خواهد کرد و بازیابی را انجام خواهد داد. مثال زیر را ببینید:
مثال:
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT ‘sys/sys@rac2’;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT ‘*’;
new RMAN configuration parameters are successfully stored
RMAN> CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT ‘sys/sys@rac1’;
پوشه rman_test را در صورتی که وجود ندارد، ایجاد می کنیم.
mkdir /rman_test
chown -R oracle.oinstall /rman_test/
از دیتافایلهای 7 و 8 بکاپ می گیریم:
RMAN> backup datafile 7,8 format ‘/rman_test/usef%U’;
channel ORA_DISK_1: SID=331 instance=rac1 device type=DISK
channel ORA_DISK_2: SID=64 instance=rac2 device type=DISK
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/acfs/test1.dbf
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00008 name=/acfs/test2.dbf
piece handle=/rman_test/usef0aqlgcie_1_1 tag=TAG20151105T112811 comment=NONE
piece handle=/rman_test/usef0bqlgcig_1_1 tag=TAG20151105T112811 comment=NONE
Finished backup at 05-NOV-15
برای تست دو دیتافایل را به طریقی حذف و یا افلاین می کنیم:
SQL> alter database datafile 7,8 offline;
SQL> alter system archive log current;
SQL> alter system archive log current;
در نهایت آن را بازیابی می کنیم:
RMAN> restore datafile 7,8;
channel ORA_DISK_1: restoring datafile 00007 to /acfs/test1.dbf
channel ORA_DISK_1: reading from backup piece /rman_test/usef0eqlgcsm_1_1
channel ORA_DISK_2: restoring datafile 00008 to /acfs/test2.dbf
channel ORA_DISK_2: reading from backup piece /rman_test/usef0fqlgcsn_1_1
channel ORA_DISK_1: piece handle=/rman_test/usef0eqlgcsm_1_1 tag=TAG20151105T113341
channel ORA_DISK_2: piece handle=/rman_test/usef0fqlgcsn_1_1 tag=TAG20151105T113341
Finished restore at 05-NOV-15
در صورتی که channelها به درستی تنظیم نشده باشند، عملیات با خطا متوقف خواهد شد:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CLEAR;
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CLEAR;
RMAN> restore datafile 7,8;
channel ORA_DISK_1: SID=245 instance=rac2 device type=DISK
channel ORA_DISK_2: SID=276 instance=rac2 device type=DISK
channel ORA_DISK_1: restoring datafile 00007 to /acfs/test1.dbf
channel ORA_DISK_1: reading from backup piece /rman_test/usef0eqlgcsm_1_1
channel ORA_DISK_2: starting datafile backup set restore
channel ORA_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_DISK_2: restoring datafile 00008 to /acfs/test2.dbf
channel ORA_DISK_2: reading from backup piece /rman_test/usef0fqlgcsn_1_1
channel ORA_DISK_1: ORA-19870: error while restoring backup piece /rman_test/usef0eqlgcsm_1_1
ORA-19505: failed to identify file “/rman_test/usef0eqlgcsm_1_1”
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
select inst_id,
filename,
status,
round(100 * bytes / nvl(TOTAL_BYTES, bytes), 1) as pct,
round((100 – 100 * bytes / nvl(TOTAL_BYTES, bytes)) /
(100 * bytes / nvl(TOTAL_BYTES, bytes)) *
(sysdate – OPEN_TIME) * 24 * 60,
2) AS MIN_REMAIN,
OPEN_TIME
from gV$BACKUP_ASYNC_IO
where status not in (‘FINISHED’)
and filename is not null