هذه المقالة لكل من هو مبتدأ في النسخ الاحتياطي او ما يعرف بأوراكل ارمان، الهدف هو تبسيط مفاهيم ارمان و وضع مثال بسيط يحاكي الأنظمة الموجودة في العالم ، حيث أن أداة ( 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 ) ، بناءا على الخطة المرسومة للباك اب يتم تحديد هذه الإجراءات .
خطوات العمل :-
هنالك العديد من جمل الاستعلام التي تستطيع تنفيذها عن طريق sqlplus او عن طريق حفظ ال log الذي يستخدمه rman .
الخطوة الخامسه :-
يقصد بعمل job هو كتابة الأوامر في ملف منفصل ويتم استدعاء هذه الاوامر اما عن طريق taskschd في ويندوز او عن طريق crontab في لينكس .
بالعادة يتم تخصيص جميع اوامر rman و تحديد مكان backup و عدد القنوات و حذف الملفات التي تحتوي على الـ باك اب القديم ( absolute data ) . ويتم حفظ الملف ب إمتداد .sh في لينكس . لذلك قمت بإنشاء ملف سميته rman_tam.sh و كتبت فيه كود ليعمل full backup ويقوم بحذف الملفات التي تصنف انها متنهية الصلاحية ( طبعا بناءا على policy التي قمت بوضعها ( فقط نسخة واحدة لا أكثر ) ) .
توضيحات مهمة :-
- إنشاء directory في بنية النظام لحفظ الباك اب فيه ومن ثم ربط هذا المكان مع نظام RMAN .
- تغيير إعدادات RMAN ليتوافق مع الـ Policy ( وهي هنا لأغراض التعليم ) .
- أخذ backup لنظام أوراكل .
- فحص backup .
- عمل Job ليتم عمل Backup كل يوم ( بناءا على Policy التي تخدم مصالح ( Business ) العمل في المؤسسة ) .
- ربط Job بـ crontab و تحديد موعد تنفيذ المهمة .
- المهمة الاخيرة ( عمل restore ) .
الخطوة الأولى :-
من أهم الخطوات تحديد مكان الباك اب ( Backup ) ولعل سياسة الشركة او اتفاقية التنفيذ للمشروع تحدد مكان و كيفية (آلية) النسخ الاحتياطي . هنا في هذا المثال قمت بإنشاء Directory في بنية النظام ، تستطيع حفظ الباك اب في san storage ( مكان لضمان عدم تلف الهاردسك ) او حتى سحب الباك اب على Tape مباشرة .
الخطوة الثانية :-
لمشاهدة إعدادات RMAN
هنالك العديد من الخصائص المهمة التي يجب وضع قيمة لها و من أهمها .
لمشاهدة إعدادات RMAN
rman> show all ;
retention policy ( فترة الاحتفاظ بـ rman backup ) و يمكن وضعها بالأيام او بالنسخ . ( سأقوم بحفظ 3 نسخ ) و بعد ذلك سأقوم بحذف النسخ المنتهية الصلاحية .
و CHANNEL DEVICE TYPE DISK FORMAT التي تختص بمكان ال rman backup .
الخطوة الثالثة و الرابعة :-
و 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: