artarad-oracle-database

۱۱G DATAGUARD اوراکل؛ CLIENT FAILOVER خودکار

۱۱G DATAGUARD اوراکل؛ CLIENT FAILOVER خودکار

در این مطلب در خصوص CLIENT FAILOVER خودکار که ویژگی جدید ۱۱G DATAGUARD اوراکل می‌باشد، می پردازیم.
تا پیش از نسخه‌ی ۱۱G، به یک یا بیشتر trigger نوشته شده‌ توسط کاربر نیاز بود تا بسته به موقعیت، پروسه‌ی CLIENT FAILOVER به صورت خودکار انجام شود.

۱۱G DATAGUARD دو پیکر بندی ساده را به طور عمده انتشار می‌دهد که نیاز به نوشتن trigger توسط کاربر را برطرف می‌کند. انتقال وظیفه توسط کارگذار(broker) DATAGUARD به صورت اتوماتیک این موارد را انجام می‌دهد:
_ استندبای کردن پایگاه داده‌
_سرویس‌های مناسب را روی پایگاه داده‌‌ی جدید ارائه دادن
_ قطع ارتباط Client از پایگاه داده‌‌ی ناموفق
_ و ارجاع او به پایگاه‌ داده‌ی جدید بدون هیچگونه نیاز به مداخله‌ی دستی کاربر

مرور کلی:
_ یک سرویس (orcls) جدید برای پایگاه داده بسازید تا شروع کنید
_ یک نام سرویس شبکه (net service name) درست کنید که به هر دو پایگاه داده‌های اصلی و استندبای اشاره داشته باشد
_ یک trigger درست کنید که سرویس را در پایگاه داده‌ی جدید اجرا کند
_ با استفاده از سرویس اوراکل به پایگاه داده‌ی جدید متصل شوید
_ سفارش یک جستجو ((query طولانی مدت را بدهید
_ در حالی که جستجو در حال انجام است، عملیات switchover به حالت استندبای را انجام دهید
_ بعد از switchover، چک کنید که جستجو به پایگاه‌ داده‌ی جدید منتقل شده باشد

پیاده سازی و اجرا:
 SERVICE_NAMES را چک کرده و پارامترها را در پایگاه‌داده‌ی اصلی بررسی کنید

PRI>sho 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 از سرویس اطلاعی نداشته باشد انگار که هنوز شروع به کار نکرده است

$ lsnrctl services |grep orcls

 سرویس را اجرا کنید

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

 چک کنید که سرویس در قسمت پارامترهای پارامترهای SERVICE_NAMES وجود داشته باشد

PRI>sho parameter service_names

NAME TYPE VALUE

———————————— ———– ——————————

service_names string orcls

 چک کنید که سرویس به طور خودکار برای LISTENER رجیستر شده باشد

PRI>ho lsnrctl services |grep orcls

Service “orcls” has 1 instance(s).

 بعد از ساخت trigger که سرویس را راه‌اندازی می‌کند، پایگاه‌داده ی جدید را راه‌اندازی کنید و در STANDBY DATABASE متوقف‌اش کنید

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;

لطفا توجه داشته باشید که هر دو پایگاه داده‌های primary و standby میبایست به طور static، در database home با listener رجیستر شده باشند. حال در اینجا listener در database home برای هر دو standby و primary، در پورت ۱۵۲۹ اجرا می‌شود.
 اگر هر دو پایگاه داده‌های standby و primary روی یک ماشین مشترک هستند:

create net service name orcls

– service name = orcls

– add address on host1 port 1521 (representing both primary database orcl and standby database sby)

حال وقتی سرویس روی اوراکل در دسترس است ( primary)، listener به سرویس ORCL متصل می‌شود

و وقتی سرویس در حالت sby در دسترس است ( standby به همراه FAILOVER/SWITCHOVER)، کاربر به پایگاه‌داده‌ی sby متصل می‌شود

 اگر پایگاه داده‌های standby و primary روی سیستم‌های متفاوت هستند:

– USING NETMGR

. create net service name orcls

– service name = orcls

– add address on host1 port 1521 (representing primary database orcl)

– add address on host2 port 1521 (representing standby database sby)

حال وقتی سرویس در حال اجرا روی پایگاه‌داده‌ی اصلی اوراکل باشد، به طور اتوماتیک در پورت ۱۵۲۹ و host1 با listener رجیستر می‌شود و برنامه به پایگاه داده‌ی اوراکل (ORCL) متصل می‌شود.
حال وقتی سرویس در حال اجرا روی پایگاه‌داده‌ی استندبای اوراکل باشد، به طور اتوماتیک در پورت ۱۵۲۹ و host2 با listener رجیستر می‌شود و برنامه به پایگاه‌داده‌ی standby متصل می‌شود.
 یک کاربر DGTEST ایجاد کنید

PRI>create user dgtest identified by dgtest;

grant create session to dgtest;

grant select_catalog_role to dgtest;

در حال حاضر من هر دو پایگاه داده‌های standby و primary را روی ماشین مشترک دارم

 پیکر بندی در حال اجرا را چک کنید

Primary – orcl

Standby sby

DGMGRL>show configuration

 چک کنید که سرویس با listener رجیستر شده باشد در پورت ۱۵۲۹ و به اوراکل (پایگاه داده‌ی primary)،هدایت کند

$lsnrctl services

 به سرویس اوراکل ORCLS متصل شوید و بررسی نمایید DB_UNIQUE_NAME=ORCL(PRIMARY)

PRI>connect dgtest/dgtest@orcls

show parameter db_unique_name

 چک کنید که Session تاکنون ناموفق نشده باشد

(failed_over = no)

PRI>select failover_method, failover_type, failed_over

from v$session

where username=’DGTEST’;

 سفارش یک جستجو طولانی را در این قسمت بدهید و همزمان در یک DGMGRL Session دیگر به استندبای سوییچ کنید

PRI>select * from dba_objects, dba_tables;

DGMGRL>switchover to sby;

در حالی که تعویض (SWITCHOVER) چک می شود، جستجو به طور موقت به حالت تعلیق در می‌آید

 پس از آن که پایگاه‌داده ی sby راه اندازی شد، چک کنید که سرویس اوراکل (ORCLS) به سمت این پایگاه داده (Standby) اشاره کند

$lsnrctl services

پس از عملیات Switch Over وضعیت اجرای query را بررسی نمایید

پیکربندی کنونی را بررسی نمایید

DGMGRL>show configuration;

از Failed Over شدن Session به پایگاه داده Standby مطمئن شوید

PRI>sho parameter db_unique_name

بررسی Failed Over شدن Session

PRI>select failover_method, failover_type, failed_over

from v$session

where username=’DGTEST’;

بازگرداندن تنظیمات قبلی:

DGMGRL>switchover to orcl;

همچنین از قابلیت FailOver خودکار در دیتاگارد پایگاه داده ۱۱g میتوان به منظور Fail Over خودکار یک Job در حال اجرا به Standby در هنگام switchover یا failover نیز استفاده نمود.

0 پاسخ

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

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

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

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