الانتقال إلى المحتوى

سلسلة دروس الdata Guard


الباشا

Recommended Posts

السلام عليكم

سنبدأ سلسلة دروس في الData Guard وستركز السلسلة علي الجانب العملي بصورة اكثر، سنبدأ خطوة بخطوة حتي تكتمل السلسلة.

واليكم متطلبات هذه السلسة:

1- جهازين كمبيوتر (يمكن إستخدام VMware) متصلين مع بعض بشبكة.
2- يعمل الجهازين علي نفس نظام التشغيل (سنستخدم Windows XP )
3- سنستخدم Oracle Database 10g Release 1 في كلا الجهازين (Enterprise Edition or Personal Edition).

رابط هذا التعليق
شارك

الاخ waziry أنا اخترت نظام التشغيل Windows XP لإنتشاره وسهولة إستخدامه وحتي يتمكن جميع الأعضاء من متابعة السلسلة وتطبيقها.

كما أنه لاتوجد فروق جوهرية في تطبيق الData Guard علي الLinux أو الWindows سوا طريقة التعامل مع نظام التشغيل.

رابط هذا التعليق
شارك

نظام الBusiness اليوم يتطلب أن تكون قاعدة البيانات متاحة علي الدوام، فلحظات الDowntime قد تكلف الشركات ملايين الدولارات، فالOracle Data Guard تضمن لك مستوي عالي من إتاحة البيانات وكذلك حماية البيانات والتغلب علي الكوارث التي تحدث لقواعد البيانات وذلك من خلال إنشاء وإدارة ومراقبة واحد أو أكثر من الStandby Database.
الOracle Data Guard تقوم بإدارة الPrimary Database والStandby Databases بحيث تكون الStandby Databases متزامنة مع الPrimary Database فلحظة حدوث مشكلة في الPrimary Database يتم التحول مباشرة إلي الStandby Database لتكون هي الPrimary Database الجديدة، هذه الإجراءات لا تستغرق سواء لحظات، يمكن كذلك أن يتم التحول بين الPrimary Database والStandby Database بغرض الصيانة أو لأغراض أخري.
وتدعم الData Guard 10g Release 1 إدارة عدد من الStandby Database تصل إلي تسع.

سنتبع في هذه السلسلة السيناريو التالي:
ستكون لدينا قاعدة بيانات أساسية Primary Database تسمي PRIM تعمل علي السيرفر Server1
سنقوم بإنشاء قاعدة بيانات أخري Standby Database من الPrimary Database تسمي STAN تعمل علي السيرفر Server2.

واليكم الخطوات:
الخطوة الأولي: التأكد من تهيئة الPrimary Database لإنشاء الStandby Database:
يمكن متابعة السلسلة كذلك علي الفيس بوك من خلال الرابط

Oracle Database Group

رابط هذا التعليق
شارك

قبل إنشاء الStandby Database يجب عمل الخطوات التالية في الPrimary Database:
1- تفعيل ال Forced Logging.

ALTER DATABASE FORCE LOGGING


2- قم بإنشاء الPassword File إذا لم يوجد.
C:\orapwd file=D:\oracle\product\10.1.0\Db_1\database\PWDprim.ora entries=10
Password=SYS force=y

3- تهيئة ملف المتغيرات في الPrimary Database
ولكن قبل تهيئة ملف المتغيرات هل تعرف كيف تتعامل الPrimary Database مع الStandby Database؟ بالطبع يتعامل المستخدمون مباشرة مع الPrimary Database ولكن يتم إرسال Redo Data مباشرة إلي الStandby Database ليتم تطبيقها، ولكن يجب التذكير إلي أنه يوجد نوعان من الStandby Database:
1- Physical Standby Database: وهي قاعدة بيانات يتم إنشاؤها من الPrimary Database (بمعني أنه يتم إنشاؤها من النسخ الاحتياطي للPrimary Database)، تكون هيكلة الPhysical Standby Database مشابهة تماماً لهيكلة الPrimary Database (Block-for-Block).
يتم إرسال الRedo Data من الPrimary Database عبر الLog Writer Process (LGWR) أو الArchiver Process (ARCH) للStandby Database، يتم استقبال الRedo Data في الStandby Database عن طريق الRemote File Server Process (RFS) ثم يتم تطبيق الRedo Data في الPhysical Standby Database عن طريق الManaged Recovery Process (MRP) فيما يعرف بالRedo Apply، (وهذا النوع سنستخدمه في السيناريو).
2- Logical Standby Database: هي قاعدة بيانات يتم إنشاؤها كذلك من الPrimary Database ولكن يمكن أن يتم تغيير هيكلتها لاحقاً ولكن تظل البيانات الموجودة في الPrimary Database والLogical Standby Database متماثلة تماماً، هنا لا يتم عمل Redo Apply كما هو الحال في الPhysical Standby Database ولكن يتم عمل SQL Apply بحيث يتم التعديل علي قاعدة البيانات عن طريق SQL Statements ، يتم عمل الSQL Apply عن طريق الLogical Standby Process(LSP).

Primary Database:
DB_UNIQUE_NAME: PRIM
Oracle Net Service Name: PRIMNET


Physical Standby Database:
DB_UNIQUE_NAME: STAN
Oracle Net Service Name: STANNET

رابط هذا التعليق
شارك

3- تهيئة ملف المتغيرات في الPrimary Database

DB_NAME=PRIM


DB_UNIQUE_NAME=PRIM
SERVICE_NAMES=PRIM
INSTANCE_NAME=PRIM
LOG_ARCHIVE_CONFIG='DG_CONFIG= (PRIM, STAN)'
LOG_ARCHIVE_DEST_1=
'LOCATION=D:\oracle\product\10.1.0\flash_recovery_area\
VALID_FOR= (ALL_LOGFILES, ALL_ROLES)
DB_UNIQUE_NAME=PRIM'
LOG_ARCHIVE_DEST_2=
'SERVICE=STANNET
VALID_FOR= (ONLINE_LOGFILES, PRIMARY_ROLE)
DB_UNIQUE_NAME=STAN'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=STAN
FAL_CLIENT=PRIM
STANDBY_FILE_MANAGEMENT=AUTO





حيث:

DB_NAME: وهو اسم من 8 حروف (استخدم نفس الاسم لجميع الStandby Databases)


DB_UNIQUE_NAME: لتحديد الاسم الفريد لكل قاعدة بيانات، هذا الاسم يظل في قاعدة البيانات ولا يتغير حتى لو تغيرت الأدوار بين الPrimary والStandby Database.
INSTANCE_NAME: ويجب أن يختلف اسم الInstance بين الPrimary والStandby Database إذا كانا في نفس الجهاز.
LOG_ARCHIVE_CONFIG: لتحديد الDB_UNIQUE_NAME لكل من الPrimary Database والStandby Databases، هذا المتغير في الأصل يقوم بتفعيل قاعدة البيانات لإرسال واستقبال الRedo.
LOG_ARCHIVE_DEST_1: لأرشفة الRedo Data التي تم إنشاؤها بواسطة الPrimary Database في الLocal Archived Redo Log Files
LOG_ARCHIVE_DEST_2: لتحديد الRemote Physical Standby Database التي سيتم إرسال الRedo Data لها.
LOG_ARCHIVED_DEST_STATE_n: يأخذ القيمة ENABLE للسماح لنقل الRedo Data للاتجاه المحدد.
REMOTE_LOGIN_PASSWORDFILE: يجب أن يأخذ هذا المتغير (EXCLUSIVE or Shared).
FAL_SERVER: لتحديد الOracle Net Service Name للFAL Server (عادة تكون هذه قاعدة البيانات التي تعمل دور الPrimary Database)، فعندما تكون الPRIM في دور الStandby Database يتم استخدام الٍSTAN Database كFAL SERVER، يستخدم هذا المتغير في حال أن الPrimary Database(STAN) عجز عن إرسال الRedo للStandby Database(PRIM) فيقوم بجلب ال Archived Log Files المفقودة.
FAL_CLIENT: لتحديد الOracle Net Service Name للPRIM Database، حيث يقوم الFAL Server (STAN) بعمل نسخ لملفات الأرشيف المفقودة للPRIM Standby Database.
STANDBY_FILE_MANAGEMENT: إذا تم وضع القيمة AUTO في هذا المتغير فإذا تم إضافة أو حذف Data File في الPrimary Database فإن الStandby Database تستجيب للتغيير بصورة آلية
DB_FILE_NAME_CONVERT: هذا المتغير يحول مسارات الPrimary Database Datafiles للStandby Database Datafiles Path Names، نحتاج لتهيئة هذا الملف إذا كانت الStandby Database والPrimary Database في نفس الجهاز أو إذا كان الStandby Database والPrimary Database في جهازين مختلفين ولكن يختلفان في الهيكلة الفيزيائية، أما إذا كانت الStandby Database والPrimary Database في جهازين مختلفين ولكن متشابهان في الهيكلة الفيزيائية بمعني أن ملفات الData Files في كلا القاعدين متشابهتان تماماً كما هو الحال في السيناريو الذي سنتبعه ففي مثل هذه الحالة فلا نحتاج لتهيئة هذا المتغير.
LOG_FILE_NAME_CONVERT: ويمكن أن يقال ما قيل في المتغير السابق غير أن هذا المتغير يختص بالRedo Log Files وليس الData Files.

رابط هذا التعليق
شارك

الخطوة الثانية: إنشاء الStandby Database:

سنقوم في هذه المرحلة بإنشاء الPhysical Standby Database وستستغرق هذه المهمة حوالي 14 خطوة:

رابط هذا التعليق
شارك

1- عمل نسخ احتياطي (Backup) لملفات الDatafiles في الPrimary Database.
نحتاج لنسخ ملفات الDatafiles من الPrimary Database لإنشاء الPhysical Standby Database، بالطبع يمكن أن نستخدم RMAN or Physical Database، لكن أنا اخترت الطريقة الأسهل Physical Backup، واليكم الخطوات:
أ- قم بإغلاق قاعدة البيانات.
ب- عن طريق نظام التشغيل قم بنسخ جميع ملفات الDatafiles.
هكذا نكون قد انتهينا من قضية النسخ الاحتياطي.


2- إنشاء ملف الControl File للStandby Database.
قم بتشغيل الPrimary Database في الوضع Mount ثم عن طريق الSql*Plus قم بإنشاء الStandby Control File

ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘D:\BACKUP\control.ctl';




3- إنشاء ملف المتغيرات للStandby Database:
قم بإنشاء ملف المتغيرات للStandby Database من الPrimary Database.

CREATE PFILE='D:\BACKUP\initٍSTAN.ora' FROM SPFILE;


ثم قم بتهيئة ملف المتغيرات الجديد ليتوافق مع الStandby Database، سيكون شكل ملف المتغيرات بعد التعديل كالأتي:

DB_NAME=PRIM


DB_UNIQUE_NAME=STAN
SERVICE_NAMES=STAN
INSTANCE_NAME=STAN
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIM,STAN)'
CONTROL_FILES=' D:\oracle\product\10.1.0\oradata\PRIM\control1.ctl', ‘D:\oracle\product\10.1.0\oradata\PRIM\control2.ctl’, ‘D:\oracle\product\10.1.0\oradata\PRIM\control3.ctl’
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=
'LOCATION=D:\oracle\product\10.1.0\flash_recovery_area\
VALID_FOR= (ALL_LOGFILES, ALL_ROLES)
DB_UNIQUE_NAME=STAN'
LOG_ARCHIVE_DEST_2=
'SERVICE=PRIMNET
VALID_FOR= (ONLINE_LOGFILES, PRIMARY_ROLE)
DB_UNIQUE_NAME=PRIM'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=PRIM
FAL_CLIENT=STAN



لاحظ أن الDB_NAME هو واحد لكل من الPrimary and Standby Database لكن يختلفان في الDB_UNIQUE_NAME.

رابط هذا التعليق
شارك

مشكور اخي الباشا على هالمجهود

بس عندي استفسار بسيط

في حاله حصول كرش للبرايمري داتا بيس راح يحصل سويتش وفر على standby database

بس الي بيحصل معاي انه اليوزرز لازم يغيروا اسم الداتابيس من prod1 to prod2 في شاشت الوقين

هل في طريقه اعدلها في tnsnames مما يجعل اليوزرز لايحسوا بان شي قد تغير

ارجوا من عنده الحل ان يسارع باخباري

رابط هذا التعليق
شارك

4- قم بإنشاء المسارات المطلوبة للStandby Database، سنتبع في هذا السيناريو مسارات متشابهة تماماً لكل من الPrimary and Standby Database، لذا قم بإنشاء المسارات لملفات الData Files والRedo Log File في الStandby Site كما هو الحال في الPrimary Site، ولكن قد تختلف المسارات بين الPrimary and Standby Database ولكن يجب عليك وقتها أن تقوم بتهيئة المتغيرين (DB_FILE_NAME_CONVERT & LOG_FILE_NAME_CONVERT ).




5- قم بنقل ملفات النسخ الاحتياطي إلي المسارات الصحيحة في الStandby Database بما في ذلك جميع ملفات الData Files وملف المتغيرات initstan.ora وأيضاً الStandby Controlfile بعد إعادة تسميته بعدد النسخ المحددة في ملف المتغيرات.



6- قم بإنشاء الInstance الخاصة بالStandby Database:
وذلك من خلال إنشاء الService في الWindows

D:\ oradim -NEW -SID STAN -INTPWD password -STARTMODE manual


7- قم بإنشاء الPassword File:

D:\orapwd file= D:\oracle\product\10.1.0\Db_1\database\PWDSTAN.ora password=sys force=y entries=5

رابط هذا التعليق
شارك

- تهيئة ال listeners لكل من الPrimary and Standby Database:

سيكون شكل الListener بالنسبة للPrimary Database كالتالي:

LISTENER =


(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER1)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = PRIM)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(SID_NAME = PRIM)
)
(SID_DESC =
(GLOBAL_DBNAME = PRIM_DGMGRL)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(SID_NAME = PRIM)
)






أما بالنسبة للStandby Database فسيكون شكل الListener كالتالي:

LISTENER =


(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER2)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
:D(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = STAN)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(SID_NAME = STAN)
)
(SID_DESC =
(GLOBAL_DBNAME = STAN_DGMGRL)
(ORACLE_HOME = D:\oracle\product\10.1.0)
(SID_NAME = STAN)
)




ثم قم بإيقاف وتشغيل الListener.

D:\> lsnrctl stop
D:\>  lsnrctl start

رابط هذا التعليق
شارك

9- تهيئة ملف الTnsnames لكل من الPrimary and Standby Database:
بالنسبة للPrimary Site

PRIMNET =


(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = PRIM_DGMGRL)
)
)

STANNET =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = STAN_DGMGRL)
)
)




بالنسبة للStandby Site

STANNET =


(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = STAN_DGMGRL)
)
)

PRIMNET =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = PRIM_DGMGRL)
)
)




tnsping primnet
tnsping stannet

رابط هذا التعليق
شارك

10- تفعيل ال Broken Connection Detection في الStandby Database:
ذلك بتهيئة المتغير SQLNET.EXPIRE_TIME في الملف SQLNET.ORA ليأخذ القيمة 2 (دقيقة)

SQLNET.EXPIRE_TIME=2





11- تشغيل الStandby Database:
ولكن قبل تشغيل الStandby Database قم بإنشاء الSPFILE من ملف الPFILE

CREATE SPFILE FROM PFILE


STARTUP READ ONLY


لا تفتح قاعدة البيانات للمستخدمين يجب أن تظل الStandby Database في الوضع Mount أو Read Only لاستقبال الRedo Data.

رابط هذا التعليق
شارك

12- إنشاء Temporary File جديد للStandby Database:
هذه الخطوة مهمة لأن قاعدة Standby Database قد تحتاج للTemporary File للعمليات المؤقتة مثل الترتيب وغيره خصوصاً عندما يتم فتحها في الوضع OPEN READ ONLY فيقوم المستخدمون ببعض عمليات الاستعلام كما يمكن أيضاً أن يتحول دور الStandby Database لاحقاً.

واليك الخطوات:
أ- قم بالتحقق من الTablespace الذي يجب أن يحوي Temporary Files

SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS = 'TEMPORARY';



ب- أضف Temp File جديد للStandby Database

ALTER TABLESPACE TEMP1 ADD TEMPFILE   ‘D:\oracle\product\10.1.0\oradata\orcl\temp01.dbf'
  SIZE 40M REUSE;



13- تشغيل الRedo Apply:
ذكرنا سابقاً أن الStandby Database تقوم باستقبال الRedo Data من الPrimary Database ومن ثم ييتم تطبيق هذه الData فيما يعرف بالRedo Apply.
لتشغيل الRedo Apply قم بتنفيذ هذا الأمر علي الStandby Database

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;



14- التحقق من الأداء السليم للStandby Database:
عملية نقل الRedo Data للStandby Database لا تتم إلا بعد حدوث الLog Switch، في الأصل الLog Switch يحدث لحظة امتلاء الRedo Log File لكن يمكن عمل الLog Switch بصور يدوية عن طريق الأمر

ALTER SYSTEM SWITCH LOGFILE;



للتأكد من استقبال الRedo Data بصورة سليمة في الStandby Database قم بالأتي:
أ- تأكد من ملفات الأرشيف الحالية في الStandby Database عن طريق الاستعلام

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;



ب- في الPrimary Database قم بتنفيذ الأمر

ALTER SYSTEM ARCHIVE LOG CURRENT;


هذا الأمر يقوم بعمل بعملية الLog Switch وأرشفة الOnline Redo Log File Group الحالية.

ج- للتأكد من أن الNew Redo Data قد تم أرشفتها في الStandby Database قم بالاستعلام التالي في الStandby Database

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;




15- التحقق من تطبيق الأرشيف الذي تم إرساله للStandby Database:
بعدما تأكدنا من وصول الأرشيف للStandby Database يجب التأكد من تطبيقه (Redo Apply) في الStandby Database وذلك عن طريق الاستعلام

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

رابط هذا التعليق
شارك

هكذا نكون قد انتهينا من الخطوة الثانية وهي إنشاء الPhysical Standby Database.

مرفق لكم ملف عبارة عن مخطط يوضح لكم خطوات تهيئة الOracle Data Guard إبتداءً من تهيئة الPrimary Database وبناء الStandby Database وإنشاء الBroker Configuration.

Physical_Standby_Process_Flows.pdf

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية