← يتطلب: الأمان الحوكمة والتشغيل متوسط ⏱ 4 ساعات الدورة 27

النسخ الاحتياطي والاستعادة

Backup and Recovery

🎯 أهداف التعلم

1فهم أنواع النسخ الاحتياطي
2تعلم إنشاء نسخ احتياطية
3فهم الاستعادة (Recovery)
4تعلم كوارث الاستعادة (Disaster Recovery)
5فهم Journaling
01

أنواع النسخ الاحتياطي

يقدم IRIS عدة أنواع من النسخ الاحتياطي لحماية البيانات.

// Full Backup - نسخة احتياطية كاملة
ClassMethod FullBackup(backupDir As %String)
{
    Set status = ##class(Backup.General).StartTask(backupDir, "FULL")
    If $$$ISOK(status) {
        Write "تم بدء النسخة الاحتياطية الكاملة", !
    }
}

// Incremental Backup - نسخة تراكمية
ClassMethod IncrementalBackup(backupDir As %String)
{
    Set status = ##class(Backup.General).StartTask(backupDir, "INCREMENTAL")
    If $$$ISOK(status) {
        Write "تم بدء النسخة التراكمية", !
    }
}

// Journaling - تسجيل التغييرات
ClassMethod EnableJournaling()
{
    Do ##class(%SYS.Journal.System).Start()
    Write "تم تفعيل Journaling", !
    
    // عرض Journal الحالي
    Set journal = ##class(%SYS.Journal.System).GetCurrentJournal()
    Write "ملف Journal: ", journal, !
}

// جدولة النسخ الاحتياطي
ClassMethod ScheduleBackup()
{
    Set task = ##class(Backup.Task).%New()
    Set task.Name = "Daily Backup"
    Set task.Type = "INCREMENTAL"
    Set task.Dir = "/backup/"
    Set task.Schedule = "0 2 * * *"  // يومياً الساعة 2 صباحاً
    Do task.%Save()
}
02

الاستعادة (Recovery)

استعادة البيانات من النسخ الاحتياطية.

// استعادة من نسخة احتياطية
ClassMethod RestoreFromBackup(backupFile As %String)
{
    Write "بدء الاستعادة من: ", backupFile, !
    Set status = ##class(Backup.General).StartTask(backupFile, "RESTORE")
    If $$$ISOK(status) {
        Write "تمت الاستعادة بنجاح", !
    } Else {
        Write "فشلت الاستعادة: ", status, !
    }
}

// استعادة من Journal
ClassMethod RestoreFromJournal(journalFile As %String)
{
    Set journal = ##class(%SYS.Journal.File).%OpenId(journalFile)
    If '$ISOBJECT(journal) {
        Write "ملف Journal غير موجود", !
        Quit
    }
    
    // عرض محتويات Journal
    Set reader = journal.GetReader()
    While reader.Next() {
        Set record = reader.GetRecord()
        Write "نوع العملية: ", record.Type, !
        Write "الجدول: ", record.GlobalName, !
    }
}

// Point-in-time Recovery
ClassMethod PointInTimeRecovery(targetTime As %String)
{
    // استعادة حتى وقت محدد
    Write "استعادة حتى: ", targetTime, !
    
    // استعادة النسخة الاحتياطية الأخيرة
    Do ..RestoreFromBackup("/backup/latest/")
    
    // تطبيق Journal حتى الوقت المحدد
    Do ..ApplyJournalsUntil(targetTime)
}
03

كوارث الاستعادة

استعادة البيانات في حالات الكوارث.

// خطة استعادة الكوارث
ClassMethod DisasterRecoveryPlan()
{
    // 1. تقييم الضرر
    Write "تقييم حالة النظام...", !
    Do ..AssessDamage()
    
    // 2. استعادة من نسخة offsite
    Write "استعادة من الموقع البديل...", !
    Do ..RestoreFromOffsite()
    
    // 3. تطبيق آخر التغييرات
    Write "تطبيق التغييرات الأخيرة...", !
    Do ..ApplyRecentChanges()
    
    // 4. التحقق من سلامة البيانات
    Write "التحقق من سلامة البيانات...", !
    Do ..VerifyDataIntegrity()
}

// استنساخ النظام
ClassMethod CloneSystem(sourceServer As %String, targetServer As %String)
{
    // نسخ قاعدة البيانات
    Set status = ##class(Backup.General).CloneDatabase(sourceServer, targetServer)
    If $$$ISOK(status) {
        Write "تم استنساخ النظام بنجاح", !
    }
}

// High Availability
ClassMethod SetupMirroring()
{
    Set mirror = ##class(SYS.Mirror).%New()
    Set mirror.Name = "HospitalMirror"
    Set mirror.PrimaryServer = "server1.hospital.com"
    Set mirror.BackupServer = "server2.hospital.com"
    Do mirror.%Save()
    
    Write "تم إعداد المراقبة (Mirroring)", !
}

📝 اختبار التحقق

1 ما هو الفرق بين Full Backup وIncremental Backup؟
A لا يوجد فرق
B Full ينسخ كل شيء وIncremental ينسخ التغييرات فقط
C Full أسرع
D Incremental أكثر أماناً
💡 الشرح

Full Backup ينسخ جميع البيانات بينما Incremental ينسخ فقط التغييرات منذ آخر نسخة.

2 ما هو Journaling؟
A نوع من التشفير
B تسجيل جميع التغييرات على البيانات
C نظام النسخ الاحتياطي
D أداة مراقبة
💡 الشرح

Journaling يسجل جميع التغييرات على البيانات لاستعادتها لاحقاً.

ما هو الفرق بين Full و Incremental Backup؟
💡 الشرح

Full backup ينسخ كل البيانات، Incremental ينسخ فقط ما تغير منذ آخر backup

💡 النقاط الرئيسية

  • IRIS يدعم Full وIncremental Backup
  • Journaling يسجل جميع التغييرات
  • Point-in-time Recovery يستعيد البيانات لوقت محدد
  • Mirroring يوفر High Availability
  • Disaster Recovery Plan ضروري لكل نظام