پشتیبانگیری در محیط RAC با استفاده از rman
در محیطهای غیر کلاستر اسکریپت پشتیبانگیری rman بر روی سیستمعامل تهیه شده و توسط سرویس cron اجرا میگردد و یا با استفاده از ابزارهایی مثل OEM و…، در صورتی که این سناریو بر روی یکی از ماشینهای RAC پیادهسازی گردد، این مخاطره وجود دارد که در صورت خرابی ماشین یادشده، فرآیند پشتیبانگیری انجام نگردد. برای جلوگیری از این مخاطره لازم است تا تغییرات اندکی در اسکریپت و نحوه اجرای آن ایجاد گردد.
فایل اسکریپت پشتیبان
تفات چندانی بین محتوای فایل اسکریپت پشتیبانگیری در معماری غیر کلاستر و کلاستر وجود ندارد. تفاوت زمانی رخ میدهد که از explicit connection و یا parallelism استفاده شود. فایل اسکریپت در معماری کلاستر باید در فضای قابل دسترسی برای تمامی ماشینها ذخیره شده باشد. همچنین محل ذخیرهسازی فایلهای پشتیبان نیز باید قابل دسترسی برای کلیه ماشینها باشد. همچنین از نسخه ۱۱gR2 باید محل ذخیرهسازی فایل snapshot control نیز برای کلیه ماشینها قابل دسترسی باشد. برای این منظور میتوان از فضایی بر روی ASM استفاده نمود.
زمانبندی اجرا با استفاده از بسته DBMS_SCHEDULER
برای از بین بردن وابستگی اجرای اسکریپت پشتیبان به ماشینای خاص، از بسته DBMS_SCHEDULER پایگاهداده استفاده میشود. این بسته از نسخه ۱۱gR2 با معماری کلاستر سازگار شده؛ اما بسته DBMS_JOB کماکان ناسازگار میباشد. بنابراین از ترکیب این دو بسته برای اجرای خودکار اسکریپت پشتیبان در معماری کلاستر استفاده میگردد.
نکته مهم در این بخش یکسانبودن منطقه زمانی کلیه ماشینهای کلاستر و منطقه زمانی بسته DBMS_SCHEDULER میباشد. برای تنظیم منطقه زمانی در سیستمعامل لینوکس از ابزار system_config_date و یا فایل /etc/sysconfig/clock استفاده میشود. برای بررسی منطقه زمانی کنونی نیز میتوان از دستور date استفاده نمود. برای بررسی منطقه زمانی بسته DBMS_SCHEDULER نیز میتوان از دستور زیر استفاده کرد.
select value from dba_scheduler_global_attribute where attribute_name = ‘DEFAULT_TIMEZONE’;
همچنین با استفاده از دستور زیر میتوان این مقدار را تغییر داد.
exec dbms_scheduler.set_scheduler_attribute (‘DEFAULT_TIMEZONE’, ‘Europe/Amsterdam’);
بسته DBMS_SCHEDULER میتواند اسکریپتهای درون سیستمعامل را نیز اجرا کند؛ البته برای این منظور لازم است اطلاعات کاربری سیستمعامل تنظیم گردد. برای این منظور از دستور زیر استفاده میشود.
exec dbms_scheduler.create_credential(
credential_name => ‘oracle’,
username => ‘oracle’,
password => ‘****’);
در گام بعد وظیفه پشتیبانگیری ایجاد میگردد.
begin
dbms_scheduler.create_job(
job_name => ‘RMAN_BACKUP’,
job_type => ‘EXECUTABLE’,
job_action => ‘/bin/sh’,
number_of_arguments => 2,
start_date => SYSTIMESTAMP,
credential_name => ‘oracle’,
auto_drop => FALSE,
enabled => FALSE);
dbms_scheduler.set_job_argument_value(
job_name => ‘RMAN_BACKUP’,
argument_position => 1,
argument_value => ‘/shared/scripts/dbbackup.sh’);
dbms_scheduler.set_job_argument_value (
job_name => ‘RMAN_BACKUP’,
argument_position => 2,
argument_value => ‘4’);
end;
/
commit
/
در این مثال فایل اسکریپت بر روی فضای اشتراکی به آدرس /shared/scripts/dbbackup.sh قرار داده شده است. برای آزمایش وظیفه ایجاد شده میتوان از دستور زیر استفاده کرد.
begin
dbms_scheduler.purge_log(job_name=>’RMAN_BACKUP’);
dbms_scheduler.run_job(‘RMAN_BACKUP’);
end;
/
در انتها زمان اجرای وظیفه تنظیم میگردد.
begin dbms_scheduler.set_attribute(
name => ‘RMAN_BACKUP’,
attribute => ‘repeat_interval’,
value => ‘freq=daily; byhour=22; byminute=05; bysecond=0;’);
dbms_scheduler.enable( ‘RMAN_BACKUP’ );
end;