Sunday, January 29, 2017

Configure RMAN using Oracle Enterprise Manager بالعربي

تستطيع تهيئة أوراكل ارمان عن طريق كتابة الأوامر المطلوبة  او تنفيذها في منفذ الاوامر في rman  مباشرة . قامت أوراكل بإضافة هذه الميزة على برنامجها Oracle Enterprise Manager  لتيسير العمل و تقليل الوقت المطلوب . في هذه المدونة سأقوم ببرمجة الكود المطلوب داخل OEM ليتسنى تبسيط العمل في هذا الباب .



 OEM :- 
أحد أهم الأدوات لدعم برامج قاعدة البيانات أوراكل التي تعمل على Browser مباشرة  ، أي أن هناك برنامج متكامل لدعم و مراقبة اوراكل بدون كتابة كود .

الخطوة 1 :- الدخول الى نظام OEM  عن طريق browser و فتح البرنامج باستخدام اسم المستخدم   sys  ( مثل Root  في Linux ) . 



الخطوة الثانية :- التوجه الى Availability و منها اختيار Scheduled Backup .



الخطوة 3:- إدراج إسم المستخدم لنظام التشغيل الذي لديه صلاحيات لإستخدام أوراكل ، وهو هنا المستخدم Oracle . تحديد خصائص الـ Backup   ثم الضغط على 

Schedule Customized Backup  


الخطوة 4 :- تحديد Type و Mode و من ثم Next . 


الخطوة 5 :- تحديد مكان Backup  و هو هنا Disk .




الخطوة 6 :- اختيار إسم المهمة ( Job ) و وقت التنفيذ كما هو موضح في الصورة
وقت التنفيذ = مرة واحدة الان او مرة واحدة لاحقا او الخيار المتعارف عليه و هو تنفيذ المهمة في وقت معين يوميا او اسبوعيا . 




الخطوة 7 :- مراجعة كود rman  و تنفيذ المهمة الآن بناءا على طلبي . 
submit job .






الخطوة 8 :- مراقبة التنفيذ و الحالة له كما هو مبين في الصورة أدناه ، و تمت العملية كاملة خلال 138 ثانية بنجاح .





خاتمة :- 

نستطيع التأكد من خلال Backup reports وفي حال رغبتنا بتغير بعض خصائص rman  من خلال setup  و من ثم backup setting .




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  و من ثم شغل قاعدة البيانات . 


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








Saturday, January 14, 2017

كيفية الحصول على حجم الملفات في أنظمة لينكس Linux df & du

هنالك العديد من الأوامر المفيدة  التي يتم إستخدامها  لتحديد المساحة المشغولة في نظام لينكس حيث أن الهدف الرئيس من تتبع معرفة المساحة هو المحافظة على ديمومة التشغيل و عدم انقطاع الخدمة .  



هناك أمرين من أوامر لينكس  يتم إستخدامهما:-
  1. df - report file system disk space usage ( Disk Files) .
  2. du - estimate file space usage ( Disk Usage ).
مثال على df ( عند كتابة الامر df لوحده يتم إرجاع معلومات المساحة بـ Block Size و هو ما يكافئ 1KB ) و تستطيع إضافة -h للحصول على المعلومات بطريقة مفهومة جدا دون اللجوء الى الالة الحاسبة لتحديد المساحة . 


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

  root@tambarakat log]# man df


الأمر du  :- يستخدم لمعرفة المساحة المستهلكة ( المستخدمة ) لملف او قسم معين ( Directory ) . وله عدة options تساعدك في تحديد المراد معرفتها و منها s و تعني ملخص summary  و h تعني قابل للقراءة بصيغة GB او MB بدلا من KB. 

سنجد مساحة /oracle بإستخدام الأمرين . 


المساحة الكلية GB 25 و أوراكل تستخدم GB 18 ، لكن هذه المعلومات غير كافية ، ما نريده بالضبط معرفة المساحة للملفات الموجودة داخل أوراكل .



مثال آخر حيث اننا نريد معرفة  حجم الملفات الموجودة في مكان أو البحث عن الملفات التي تبدأ ب حرف s ، طبعا هنالك العديد من الطرق المختلفة .


مثال أخير في هذه المقالة ، نريد الحصول على أكبر 10 ملفات حجما داخل دليل معين ( Directory ) هنا /var . 


du -ah /var | sort -n -r | head -n 10


تم تجربة جميع الأوامر على بيئة  Oracle Linux 6.5 . 
المراجع :-
  • https://en.wikipedia.org/wiki/Df_%28Unix%29
  • https://en.wikipedia.org/wiki/Du_%28Unix%29
  • http://www.linfo.org
  • http://www.tecmint.com/find-top-large-directories-and-files-sizes-in-linux/