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


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








Wednesday, November 30, 2011

Drop User - - -

Drop User - - -
من موقع شركة اوراكل 

في كثير من الاحيان نحتاج الى عمل Delete للـ User الذي نعمل عليه ( طبعا ستقوم اوراكل بحذف كل الجداول التي تتبع لهذا المستخدم ، او بالاحرى سيتم مسح كل الـ schema المرتبطه بهذا المستخدم .


ما هو الامر المطلوب لأتمام هذا العمل؟؟؟

 Drop user HR CASCADE

لماذا نستخدم الكلمة CASCADE ؟؟؟
 يوجد في العادة بعض objects المتعلقة بالـ user  التي نريد عمل delete لها . لذلك نضع هذه الكلمة CASCADE  للتأكد من ان جميع objects المرتبطه بهذا الـ User سيتم عمل delete لها


ملاحظه مهمة : لا تقم بعمل Drop  للمستخدميين الرئيسيين ( SYSTEM ,SYS ) وذلك لأنهم مرتبطين بنظام قواعد البيانات .

ملاحظه اخرى : قبل عمل drop يجب التاكد ان هذا الامر ضروري فبعد عمل Drop لا يوجد اي اثر للجداول التي نعمل عليها .


Monday, October 31, 2011

اسرع طريقة لعمل Recovery




بسم الله الرحمن الرحيم
 كثيره هي حوادث الدهر ، فلا سمح الله وقدر  حدثت مشكله واردنا استرجاع Backup  الذي قمنا بعمله ما هو command  المطلوب لذلك ؟؟؟؟!!!!!!!!!!!!   تماما عكس عمليه export يعني Import
بعد فتح CMD من RUN نكتب الكود التالي
  
imp system / system  from user=system touser=system file=backuup.dmp

حيث system = اسم المستخدم و ايضا كلمة السر
fromuser = كلمة واحده وتعني اسم المستخدم الذي قمنا بعمل export له ( schema )
touser = كلمة واحده بدون فراغات وتعني اسم المستخدم الذي نريد ادخال البيانات له

 file = اسم ومكان الداتا التي نريد ادخالها . هنا موجوده على root  بمعني على C Drive

في حال واجهتك مشكله معينه واردت مساعده  اكتب ما يلي

exp help = y







صورة توضح كيفية استخدام Help