artarad-oracle-database

۱۱G DATAGUARD : AUTOMATIC JOB FAILOVER

۱۱G DATAGUARD : AUTOMATIC JOB FAILOVER

در این مطلب به شرح عملیات Failover خودکار یک Job به محیط Standbgy که می تواند در نتیجه Client Failover خودکار مطرح شده در دیتاگارد ۱۱g باشد می‌پردازیم.
اکنون با توانایی ایجاد سرویس برای پایگاه داده با قابلیت اجرا بر روی هر دو پایگاه داده اصلی و Standby و متعاقب آن یک Switchover/Failover دیتاگارد Broker به طور خودکار سرویس های مورد نیاز را بر روی پایگاه داده اصلی جدید استارت می نماید و client ها را از پایگاه داده ناکارآمد جدا نموده و آنها را به سمت پایگاه داده اصلی جدید بدون هرگونه مداخله دستی هدایت میکند.


با استفاده از این ویژگی در هنگام Switchover/Failover می توان عملیات انتقال Jobهای فعال بر روی پایگاه داده اصلی به پایگاه داده Standby را انجام داد. به این منظور نیاز به ایجاد یک Job Class که به یک سرویس Map شده می باشد و تخصیص Job به این Job Class داریم. در هنگام Switchover/Failover سرویس به Standby منتقل خواهد شد و بالطبع تمام Job های تخصیص داده شده به Job Class هایی که به سرویس Map شده اند نیز به Standby منتقل می شود.

Job 1 —-|
Job 2 —+—–> Job class —> Service
Job 3 —-|

مرور کلی
• ساخت سرویس ORCLS برای پایگاه داده و Start آن
• ایجاد سرویس دهنده نام شبکه برای سرویس هایی که به هر دو پایگاه داده اصلی و Standby اشاره می کنند.
• ایجاد Trigger برای Start سرویس روی پایگاه داده اصلی
• اتصال پایگاه داده اصلی (ORCL) به سرویس (ORCLS)
• ایجاد Job Class به نام Test_Class و تخصیص آن به سرویس ORCLS
• ایجاد و Start یک Job متعلق به Test_Class
• بررسی اجرای Job روی پایگاه داده اصلی
• اجرای Switchover
• بررسی Failover شدن Job و اجرا روی پایگاه داده اصلی جدید

ایجاد سرویس
• بررسی پارامترهای Service_Name در پایگاه داده اصلی

PRI>show parameter service_names
NAME TYPE VALUE
———————————— ———– ——————————
service_names string orcl

• ایجاد سرویس ORCLS

PRI>exec dbms_service.create_service(-
service_name => ‘orcls’,-
network_name => ‘orcls’,-
failover_method => ‘BASIC’, –
failover_type => ‘SELECT’,-
failover_retries => 180,-
failover_delay => 1);

• بررسی عدم اطلاع Listener از Start نبودن سرویس

$ lsnrctl services |grep orcls

• Start سرویس

PRI>exec dbms_service.start_service(‘orcls’);

• بررسی حضور سرویس در پارامتر Service_Names

PRI>sho parameter service_names
NAME TYPE VALUE
———————————— ———– ——————————
service_names string orcls

• بررسی Register شدن خودکار سرویس با Listener

PRI>ho lsnrctl services |grep orcls
Service “orcls” has 1 instance(s).

• ایجاد Trigger پس از Startup برای استارت شدن سرویس روی پایگاه داده ای که در حال حاضر اصلی است

PRI>create or replace trigger manage_service after startup on database
declare
role varchar2(30);
begin
select database_role into role from v$database;
IF role = ‘PRIMARY’ THEN
DBMS_SERVICE.START_SERVICE(‘orcls’);
ELSE
DBMS_SERVICE.STOP_SERVICE(‘orcls’);
END IF;
END;
/

• ایجاد Net Service Name برای سرویس ORCLS
به این نکته توجه شود که هر دوی Primary و Standby باید به صورت Static با Listener در Home پایگاه داده رجیستر شوند. در اینجا Listener پایگاه داده بر روی هر دو پایگاه داده روی پورت ۱۵۲۱ فعال است.

o اگر هر دوی Primary و Standby بر روی یک ماشین باشند:
• ایجاد نام سرویس شبکه ORCLS

– service name = orcls

• اضافه نمودن آدرس روی Host1 پورت ۱۵۲۱ (نمایش هر دو پایگاه داده اصلی ORCL و Standby)
• در زمان فعالیت سرویس روی ORCL (پایگاه داده اصلی) Listener به پایگاه داده ORCL متصل می شود.
• در زمان فعالیت سرویس روی SBY (پایگاه داده اصلی) Listener به پایگاه داده SBY متصل می شود.

o اگر هر دو پایگاه داده Primary و Standby در ماشین متفاوتی باشند:
• با استفاده از Netmgr و ایجاد نام سرویس شبکه ORCLS

– service name = orcls

• اضافه نمودن آدرس روی Host1 پورت ۱۵۲۱
• اضافه نمودن آدرس روی Host2 پورت ۱۵۲۱
• با اتصال سرویس به ORCL پایگاه داه اصلی با Listener در پورت ۱۵۲۱ روی Host1 به طور خودکار رجیستر می شود و برنامه کاربردی به پایگاه داده ORCL متصل می شود.
• در هنگام اتصال سرویس به پایگاه داده SBY با Listener در پورت ۱۵۲۱ Host2 به طور خودکار رجیستر شده و برنامه کاربردی به پایگاه داده SBY متصل می شود.

Job Failover

• بررسی پیکربندی کنونی

DGMGRL> show configuration;
Protection Mode: MaxPerformance
Databases:
orcl – Primary database
sby – Physical standby database

• ایجاد جدول تست روی ORCL

ORCL>drop table hr.test purge;

create table hr.test(id number, tim timestamp);

• ایجاد Job Class با نام Test_class که پیوسته به سرویس ORCLS است

ORCL>exec dbms_scheduler.drop_job_class (‘TEST_CLASS’);
BEGIN
sys.dbms_scheduler.create_job_class(
logging_level => DBMS_SCHEDULER.LOGGING_RUNS,
service => ‘orcls’,
job_class_name => ‘”TEST_CLASS”‘);
END;
/

• ایجاد یک Job که هر ۳ ثانیه رکورد در جدول HR.TEST وارد کند و متعلق به Test_Class باشد.

ORCL>exec sys.dbms_scheduler.drop_job(job_name=>’sys.test_job’);
BEGIN
sys.dbms_scheduler.create_job(
job_name => ‘”SYS”.”TEST_JOB”‘,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘begin
insert into hr.test values (1, systimestamp);
commit;
end;’,
repeat_interval => ‘FREQ=SECONDLY;INTERVAL=3′,
start_date => systimestamp at time zone ‘Asia/Calcutta’,
job_class => ‘”TEST_CLASS”‘,
auto_drop => FALSE,
enabled => TRUE);
END;
/

• اطمینان از اجرای Job

ORCL>select * from hr.test
order by time;

• اطمینان از اجرای Job روی Primary

ORCL>select job_name
from dba_scheduler_jobs
where job_name=’TEST_JOB’;
JOB_NAME
——————————
TEST_JOB

• اطمینان از عدم اجرای Job روی Standby

SBY>select job_name
from dba_scheduler_jobs
where job_name=’TEST_JOB’;
no rows selected

• اجرای Switchover

SBY becomes new primary and
ORCL becomes new physical standby
DGMGRL>switchover to sby;

• Startup روی Standby جدید (ORCL)

ORCL>conn / as sysdba
startup

• اطمینان از موفقیت Switchover

DGMGRL>connect sys/sys@sby
show configuration;
Protection Mode: MaxPerformance
Databases:
sby – Primary database
orcl – Physical standby database

• اطمینان از فعالیت Job با بررسی رکوردهای جدول HR.TEST

ORCL>select * from hr.test
order by time;

• بررسی اجرای Job روی Primary جدید (SBY)

SBY>select job_name
from dba_scheduler_jobs
where job_name=’TEST_JOB’;
JOB_NAME
——————————
TEST_JOB

• بررسی عدم اجرای Job روی Standby جدید (ORCL)

ORCL>select job_name
from dba_scheduler_jobs
where job_name=’TEST_JOB’;
no rows selected

• بازگشت به وضعیت سابق

DGMGRL>switchover to orcl;
ORCL>exec dbms_scheduler.drop_job(‘TEST_JOB’);
drop table hr.test purge;

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *