مشاركة عبر


استعادة قواعد بيانات SQL في جهاز Azure ظاهري باستخدام Azure CLI

يتم استخدام Azure CLI لإنشاء موارد Azure وإدارتها من سطر الأوامر أو من خلال البرامج النصية. تصف هذه المقالة كيفية استعادة قاعدة بيانات SQL احتياطية على أجهزة Azure الظاهرية باستخدام Azure CLI. يمكنك أيضا تنفيذ هذه الإجراءات باستخدام مدخل Microsoft Azure.

استخدم Azure Cloud Shell لتشغيل أوامر CLI.

تفترض هذه المقالة امتلاكك لقاعدة بيانات SQL تعمل على أجهزة Azure الظاهرية والتي نُسخت احتياطيًا باستخدام Azure. إذا كنت قد استخدمت النسخ الاحتياطي لقاعدة بيانات SQL في Azure باستخدام CLI لنسخ قاعدة بيانات SQL احتياطيا، فأنت تستخدم الموارد التالية:

  • مجموعة موارد تسمى SQLResourceGroup.
  • مخزن باسم SQLVault.
  • حاوية محمية باسم VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • قاعدة بيانات/عنصر تم نسخه احتياطيا باسم sqldatabase;mssqlserver;master.
  • الموارد في westus المنطقة.

Note

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

عرض نقاط الاسترداد لقاعدة بيانات احتياطية

لعرض قائمة بجميع نقاط الاسترداد لقاعدة بيانات، استخدم الأمر az backup recoverypoint list ك:

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

تظهر قائمة نقاط الاسترداد على النحو التالي:

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

تحتوي القائمة أعلاه على ثلاث نقاط استرداد: واحدة للنسخ الاحتياطي الكامل وأخرى للنسخ الاحتياطي التفاضلي والثالثة للنسخ احتياطي للسجل.

Note

يمكنك أيضا عرض نقطتي البدء والنهاية لكل سلسلة نسخ احتياطي سجل غير منقطعة، باستخدام الأمر az backup recoverypoint show-log-chain .

المتطلبات الأساسية لاسترداد قاعدة بيانات

تأكد من استيفاء المتطلبات الأساسية التالية قبل استرداد قاعدة بيانات:

  • يمكنك استعادة قاعدة البيانات فقط إلى مثيل SQL في نفس المنطقة أو إلى منطقة مختلفة إذا تم تمكين الاستعادة عبر المناطق على المخزن.
  • يجب تسجيل المثيل الهدف في نفس المخزن مثل المصدر، باستثناء أثناء الاستعادة عبر المناطق واستعادة الاشتراك عبر المناطق. .

استعادة قاعدة بيانات

يمكن لـ Azure Backup استعادة قواعد بيانات SQL التي تعمل على أجهزة Azure الظاهرية على النحو التالي:

  • استرداد إلى تاريخ أو وقت محدد (إلى الثاني) باستخدام سجل النسخ الاحتياطية. يحدد Azure Backup تلقائياً النسخ الاحتياطية الكاملة والتفاضلية المناسبة وسلسلة نسخ السجل الاحتياطية المطلوبة للاسترداد بناءً على الوقت المحدد.
  • الاستعادة إلى نسخ احتياطي تفاضلي أو كامل مُحدد من أجل الاستعادة إلى نقطة استرداد محددة.

لاستعادة قاعدة بيانات، استخدم الأمر az restore restore-azurewl ، والذي يتطلب كائن تكوين استرداد كأحد الإدخالات. يمكنك إنشاء هذا الكائن باستخدام الأمر az backup recoveryconfig show . يحتوي عنصر تكوين الاسترداد على جميع التفاصيل لتنفيذ عملية الاسترداد. أحدهما هو وضع الاستعادة - OriginalWorkloadRestore أو AlternateWorkloadRestore.

Note

OriginalWorkloadRestore: يستعيد البيانات إلى نفس مثيل SQL مثل المصدر الأصلي. يقوم هذا الخيار بتجاوز قاعدة البيانات الأصلية. AlternateWorkloadRestore: يستعيد قاعدة البيانات إلى موقع بديل ويحتفظ بقاعدة البيانات المصدر الأصلية.

استرداد إلى موقع بديل

لاستعادة قاعدة بيانات إلى موقع بديل، استخدم AlternateWorkloadRestore كوضع استعادة. ثم يجب عليك اختيار نقطة الاستعادة، والتي يمكن أن تكون نقطة زمنية سابقة أو أي من نقاط الاستعادة السابقة.

لننتقل إلى استعادة نقطة استعادة سابقة. اعرض قائمة نقاط الاستعادة لقاعدة البيانات واختر النقطة التي تريد استعادتها. هنا، دعنا نستخدم نقطة الاستعادة مع الاسم 7660777527047692711.

باستخدام اسم نقطة الاستعادة أعلاه ووضع الاستعادة، قم بإنشاء كائن تكوين الاسترداد باستخدام الأمر az backup recoveryconfig show . تحقق من المعلمات المتبقية في هذا الأمر:

  • --target-item-name: الاسم الذي ستستخدمه قاعدة البيانات المستعادة. في هذا السيناريو، استخدمنا الاسم restored_database.
  • --target-server-name: اسم خادم SQL الذي تم تسجيله بنجاح في مخزن خدمات الاسترداد ويبقى نفس المنطقة وفقا لقاعدة البيانات المراد استعادتها. هنا، تقوم باستعادة قاعدة البيانات إلى نفس خادم SQL الذي قمت بحمايته، المسمى testSQLVM.
  • --target-server-type: لاستعادة قواعد بيانات SQL، يجب عليك استخدام SQLInstance.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

ستكون الاستجابة إلى الاستعلام أعلاه عنصر تكوين استرداد يبدو كما يلي:

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

الآن، لاستعادة قاعدة البيانات، قم بتشغيل الأمر az restore restore-azurewl . لاستخدام هذا الأمر، أدخل إخراج JSON أعلاه الذي تم حفظه في ملف يسمى recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

يظهر الإخراج على النحو التالي:

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

توفر لك الاستجابة اسم الوظيفة. يمكنك استخدام اسم الوظيفة هذا لتعقب حالة الوظيفة باستخدام الأمر az backup job show .

الاسترداد والشطب

للاستعادة إلى الموقع الأصلي، استخدم OriginalWorkloadRestore كوضع استعادة. ثم يجب عليك اختيار نقطة الاستعادة، والتي يمكن أن تكون نقطة زمنية سابقة أو أي من نقاط الاستعادة السابقة.

على سبيل المثال، لنختار النقطة الزمنية السابقة "28-11-2019-09:53:00" للاستعادة إليها. يمكنك توفير نقطة الاستعادة هذه بالتنسيقات التالية: dd-mm-yyyy، dd-mm-yyyy-hh:mm:ss. لاختيار نقطة زمنية صالحة للاستعادة، استخدم الأمر az backup recoverypoint show-log-chain ، الذي يسرد الفواصل الزمنية للنسخ الاحتياطية لسلسلة السجلات غير المقطوعة.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

ستكون الاستجابة إلى الاستعلام أعلاه عنصر تكوين استرداد يبدو كما يلي:

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

الآن، لاستعادة قاعدة البيانات، قم بتشغيل الأمر az restore restore-azurewl . لاستخدام هذا الأمر، أدخل إخراج JSON أعلاه الذي تم حفظه في ملف يسمى recoveryconfig.json.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

يظهر الإخراج على النحو التالي:

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

توفر لك الاستجابة اسم الوظيفة. يمكنك استخدام اسم الوظيفة هذا لتعقب حالة الوظيفة باستخدام الأمر az backup job show .

الاستعادة إلى منطقة ثانوية

لاستعادة قاعدة بيانات إلى المنطقة الثانوية، حدد مخزناً مستهدفاً وخادماً موجوداً في المنطقة الثانوية في تكوين الاستعادة.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

الاستجابة هي عنصر تكوين استرداد يظهر على النحو التالي:

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

استخدم تكوين الاسترداد هذا في الأمر az restore restore-azurewl . حدد العلامة --use-secondary-region لاستعادة قاعدة البيانات إلى المنطقة الثانوية.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

يظهر الإخراج على النحو التالي:

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Note

RPO لبيانات النسخ الاحتياطي لتكون متاحة في المنطقة الثانوية هو 12 ساعة. لذلك، عند تشغيل CRR، يكون RPO للمنطقة الثانوية هو 12 ساعة + مدة تكرار السجل (التي يمكن تعيينها إلى 15 دقيقة كحد أدنى).

استرداد كملفات

لاستعادة بيانات النسخ الاحتياطي كملفات بدلا من قاعدة بيانات، استخدم RestoreAsFiles كوضع استعادة. ثم اختر نقطة الاستعادة، والتي يمكن أن تكون نقطة زمنية سابقة أو أي من نقاط الاستعادة السابقة. بمجرد تفريغ الملفات إلى مسار محدد، يمكنك نقل هذه الملفات إلى أي جهاز SQL تريد استعادتها إليه كقاعدة بيانات. لأنه يمكنك نقل هذه الملفات إلى أي جهاز، يمكنك الآن استرداد البيانات عبر الاشتراكات والمناطق.

اختر هنا النقطة الزمنية السابقة 28-11-2019-09:53:00 للاستعادة، والموقع لتفريغ ملفات النسخ الاحتياطي كـ /home/sql/restoreasfiles على نفس خادم SQL. يمكنك توفير نقطة الاستعادة هذه بأحد التنسيقات التالية: dd-mm-yyyy أو dd-mm-yyyy-hh:mm:ss. لاختيار نقطة زمنية صالحة للاستعادة، استخدم الأمر az backup recoverypoint show-log-chain ، الذي يسرد الفواصل الزمنية للنسخ الاحتياطية لسلسلة السجلات غير المقطوعة.

باستخدام اسم نقطة الاستعادة أعلاه ووضع الاستعادة، قم بإنشاء كائن تكوين الاسترداد باستخدام الأمر az backup recoveryconfig show . تحقق من المعلمات المتبقية في هذا الأمر:

  • --target-container-name: اسم خادم SQL الذي تم تسجيله بنجاح في مخزن خدمات الاسترداد والموجود في نفس المنطقة وفقا لقاعدة البيانات المراد استعادتها. دعونا نستعيد قاعدة البيانات كملفات إلى نفس خادم SQL الذي قمت بحمايته، المسمى hxehost.
  • --rp-name: لاستعادة نقطة زمنية، اسم نقطة الاستعادة هو DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

ستكون الاستجابة إلى الاستعلام أعلاه عنصر تكوين استرداد يبدو كما يلي:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

الآن، لاستعادة قاعدة البيانات كملفات، قم بتشغيل الأمر az restore restore-azurewl . لاستخدام هذا الأمر، أدخل إخراج JSON أعلاه المحفوظ في ملف يسمى recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

يظهر الإخراج على النحو التالي:

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

توفر لك الاستجابة اسم الوظيفة. يمكنك استخدام اسم الوظيفة هذا لتعقب حالة الوظيفة باستخدام الأمر az backup job show .

Note

إذا كنت لا تريد استعادة السلسلة بأكملها ولكن فقط مجموعة فرعية من الملفات، فاتبع الخطوات كما هو موثق هنا.

استعادة الاشتراكات المتقاطعة

مع الاستعادة عبر الاشتراك (CSR)، لديك مرونة الاستعادة إلى أي اشتراك وأي مخزن ضمن المستأجر الخاص بك إذا كانت أذونات الاستعادة متوفرة. بشكل افتراضي، يتم تمكين CSR على جميع مخازن خدمات الاسترداد (المخازن الموجودة والمنشأة حديثا).

Note

  • يمكنك تشغيل الاستعادة عبر الاشتراك من مخزن خدمات الاسترداد.
  • يتم دعم CSR فقط للنسخ الاحتياطي المستند إلى الدفق ولا يتم دعمه للنسخ الاحتياطي المستند إلى اللقطة.
  • الاستعادة الإقليمية المتقاطعة (CRR) مع CSR غير مدعومة.
az backup vault create

أضف المعلمة cross-subscription-restore-state التي تمكنك من تعيين حالة CSR للمخزن أثناء إنشاء المخزن وتحديثه.

az backup recoveryconfig show

أضف المعلمة --target-subscription-id التي تمكنك من توفير الاشتراك الهدف كإدخال أثناء تشغيل استعادة الاشتراك المتقاطع لموردي بيانات SQL أو HANA.

Example:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

Next step