Sunday, January 22, 2017

Oracle RMAN مبتدئ


هذه المقالة لكل من هو مبتدأ في النسخ الاحتياطي او ما يعرف بأوراكل ارمان، الهدف هو تبسيط مفاهيم ارمان و وضع مثال بسيط يحاكي الأنظمة الموجودة في العالم ، حيث أن أداة ( RMAN ) يتم استخدامها في المشاريع المتوسطة و الكبيرة ، مع العلم ان كل مدير قاعدة بيانات أوراكل يجب  الإلمام بعملية النسخ الاحتياطي و الاعادة  ( backup & restore ) . 




 Oracle RMAN ؟


قامت شركة أوراكل بإصدار أداة متخصصة ( Recovery Manager ) بالنسخ الاحتياطي والاستعادة  ( Backup and restore )  مع صدور الاصدار 8 من قاعدة البيانات أوراكل ،هذه الاداة هي المفضلة و الموصى بها من شركة أوراكل لما تحتويه من خصائص عدة :-

  • مستوى أفضل في أداء النسخ الاحتياطي :- حيث  أن Rman  يعمل جنبا إلى جنب مع قاعدة البيانات ، اي لا تحتاج الى إيقاف التشغيل لنسخ قاعدة البيانات ( Online ).
  • الكشف عن الكتل الفاسدة (   corrupted ) أثناء عملية النسخ الاحتياطي . 
  • توفير ميزات النسخ التراكمي Incremental Backup  و النسخ الكامل Full Backup و أيضا تخصيص بموضوع النسخ مثل tablespace  معين او Data file . 
  • إمكانية التكامل مع برامج النسخ الاحتياطي مثل TSM  و غيرها عن طريق تحديد القناة و مكان الحفظ  (Tape or Disk).
  • يمكن الاستعلام عن  المادة المنسوخة ، تسميها ، تغيير مكان النسخ .
  • توفير ميزات عدة تساعد مدير قواعد البيانات DBA لإدارة  النسخ الاحتياطي و الارجاع لتقليص زمن العطل او ما يعرف اصطلاحا بـ downtime .


كيفية الاتصال بـ RMAN ؟ 

تستطيع فتح RMAN بدون الاتصال بأي  قاعدة بيانات عن طريق كتابة ( rman ) فقط والخروج منه عن طريق exit. 



من أجل فتح rman ويكون مرتبط مع قاعدة البيانات ( target database ) نستطيع فتحه عن طريق كتابة الأمر التالي الذي يعني فتح قاعدة البيانات لأداة ارمان مع صلاحيات sysdba .
rman target / 


ملاحظة :- يتم تخزين معلومات النسخ backup في control file مع أنه يمكن إنشاء schema لحفظ هذه المعلومات ( recovery catalog ) ، بناءا على الخطة المرسومة للباك اب يتم تحديد هذه الإجراءات .    



خطوات العمل :- 

  1. إنشاء directory  في بنية النظام لحفظ الباك اب فيه ومن ثم ربط هذا المكان مع نظام RMAN . 
  2. تغيير إعدادات RMAN ليتوافق مع الـ Policy ( وهي هنا لأغراض التعليم )  .
  3. أخذ backup لنظام أوراكل . 
  4. فحص backup .
  5. عمل Job ليتم عمل Backup كل يوم ( بناءا على Policy التي تخدم مصالح ( Business ) العمل  في المؤسسة ) .
  6. ربط Job بـ crontab و تحديد موعد تنفيذ المهمة . 
  7. المهمة الاخيرة ( عمل restore ) .  

الخطوة الأولى :-

من أهم الخطوات تحديد مكان الباك اب ( Backup ) ولعل سياسة الشركة او اتفاقية التنفيذ للمشروع تحدد مكان و كيفية (آلية) النسخ الاحتياطي . هنا في هذا المثال  قمت بإنشاء Directory في بنية النظام  ، تستطيع حفظ الباك اب في san storage ( مكان لضمان عدم تلف الهاردسك ) او حتى سحب الباك اب على Tape مباشرة . 

الخطوة الثانية :- 

لمشاهدة إعدادات RMAN 
rman> show all ;


هنالك العديد من الخصائص المهمة التي يجب  وضع قيمة لها و من أهمها .    
retention policy ( فترة الاحتفاظ بـ rman backup ) و يمكن وضعها بالأيام او بالنسخ . ( سأقوم بحفظ 3 نسخ ) و بعد ذلك سأقوم بحذف النسخ المنتهية الصلاحية . 
و CHANNEL DEVICE TYPE DISK FORMAT التي تختص بمكان ال rman backup . 

الخطوة الثالثة و الرابعة :- 

RMAN> BACKUP DATABASE;

Starting backup at 22-JAN-17
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oracle/app/oracle/oradata/SDB/system01              .dbf
input datafile file number=00002 name=/oracle/app/oracle/oradata/SDB/sysaux01              .dbf
input datafile file number=00005 name=/oracle/app/oracle/oradata/SDB/example0              1.dbf
input datafile file number=00003 name=/oracle/app/oracle/oradata/SDB/undotbs0              1.dbf
input datafile file number=00006 name=/oracle/app/oracle/oradata/SDB/DEV_odi_              user.dbf
input datafile file number=00004 name=/oracle/app/oracle/oradata/SDB/users01.              dbf
channel ORA_DISK_1: starting piece 1 at 22-JAN-17
channel ORA_DISK_1: finished piece 1 at 22-JAN-17
piece handle=/backup/rman/full_09rqkpfk_9_1 tag=TAG20170122T043500 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
Finished backup at 22-JAN-17

Starting Control File and SPFILE Autobackup at 22-JAN-17
piece handle=/oracle/app/oracle/fast_recovery_area/SDB/autobackup/2017_01_22/              o1_mf_s_933914155_d88b4w05_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 22-JAN-17

RMAN>


من خلال النتيجة تبين انه تم عمل full backup . 

نستطيع فحص المكان الموجود فيه و كم حجم الـ rman backup . 

[oracle@tambarakat 2017_01_22]$ cd /backup
[oracle@tambarakat backup]$ ls
rman
[oracle@tambarakat backup]$ cd rman
[oracle@tambarakat rman]$ pwd
/backup/rman
[oracle@tambarakat rman]$ du -sh *
1.3G    full_09rqkpfk_9_1


هنالك العديد من جمل الاستعلام التي تستطيع تنفيذها عن طريق sqlplus  او عن طريق حفظ ال log  الذي يستخدمه rman  .

 الخطوة الخامسه :- 
يقصد بعمل job  هو كتابة الأوامر في ملف منفصل ويتم استدعاء هذه الاوامر اما عن طريق taskschd في ويندوز او عن طريق crontab في لينكس . 

بالعادة يتم تخصيص جميع اوامر rman  و تحديد مكان backup  و عدد القنوات و حذف الملفات التي تحتوي على الـ باك اب القديم ( absolute data ) . ويتم حفظ الملف ب إمتداد .sh في لينكس .  لذلك قمت بإنشاء ملف سميته rman_tam.sh  و كتبت فيه كود ليعمل full backup  ويقوم بحذف الملفات التي تصنف انها متنهية الصلاحية ( طبعا بناءا على policy  التي قمت بوضعها ( فقط نسخة واحدة لا أكثر ) ) .  


[oracle@tambarakat backup]$ cat rman_tam.sh
TODAY=`date '+%d%m%Y%H%M%S'`
LOG=/backup/tambarakat_full_backup_${TODAY}.log


echo "Online backup of database started at $TODAY" > $LOG
echo "--------------------------------------------------------" >> $LOG

$ORACLE_HOME/bin/rman <<EOF >> tambarakat_full_backup_${TODAY}.log

connect target /
run {
allocate channel tam1 type disk ;
backup
        format '/backup/rman/%ttambarakat_rman_backup%T_%u_s%s_p%p'
        tag 'Daily_rman_backup'
        (database);
release channel tam1;
}
crosscheck backup;
delete NOPROMPT obsolete;
list backup summary;
EOF
exit
TODAY2=`date '+%d%m%Y%H%M%S'`
echo "-------------------------------------------------------" >> $LOG
echo "Online backup of database finished at $TODAY2" >> $LOG
echo "-------------------------------------------------------" >> $LOG
[oracle@tambarakat backup]$


توضيحات مهمة :-  

  • الهدف من today  و today2  هو حصر وقت البدء و الانتهاء . 
  • الهدف من Log هو حفظ output  الخاص بكود rman ليتسنى لنا فحصه و التأكد انه خالي من الاخطاء .
  • حذف ال backup  المنتهي الصلاحية وذلك لحفظ المساحة حيث أني اعمل على VM ware  .
  • تسمية ال Backup  و ذلك لمعرفة النوع و التاريخ لهذا الـ backup  .
  • الكود داخل Run {} يعرف ب job . 
  • يجب إعطاء صلاحيات التنفيذ لهذا الملف عن طريق الامر chmod 755 rman_tam.sh  ويصبح لون الملف بالاخضر :)
  • الى الان هذا الملف لا يعمل الا عن طريق تنفيذه يدويا عن طريق الامر 
[oracle@tambarakat backup]$ ./rman_tam.sh

بعد تنفيذ الكود أعلاه تستطيع فحص المساحة و الملفات و الاستعانة بالكود الخارج  لمعرفة نتيجة العملية .


الخطوة السادسة :- 

ربطه بـ crontab . سيتم إستدعاء هذا الملف للتنفيذ الساعة الواحده صباحا و 36 دقيقه .


[oracle@tambarakat backup]$ crontab -l
36 01 * * * /backup/rman_tam.sh
[oracle@tambarakat backup]$


الخطوة السابعة :- لا تطبق على نظام يعمل ( production ) ، هذا المثال تجريبي تدريبي بحت . 

المطلوب هو حذف  حذف احد data files  لمحاكاة مثال  corruption ،  يعني هناك فقدان بأحد data files او ان  Hard Disk  تعرض لعطل . لذلك قم بإعادة تسمية اخد data files  الموجودين و قم بعمل shutdown  و من ثم شغل قاعدة البيانات . 


للحديث بقية . . . . . . . . .   








0 comments: