نسخ نسخة متسقة من قاعدة البيانات في قاعدة بيانات Azure SQL

ينطبق على: قاعدة بيانات Azure SQL

توفر قاعدة بيانات Azure SQL عدة طرق لإنشاء نسخة من قاعدة بيانات موجودة على الخادم نفسه أو خادم مختلف. يمكنك نسخ قاعدة بيانات باستخدام مدخل Microsoft Azure أو PowerShell أو Azure CLI أو T-SQL.

نظرة عامة

نسخة قاعدة البيانات هي نسخة مطابقة متسقة للمعاملات لقاعدة البيانات المصدر اعتباراً من نقطة زمنية بعد بدء طلب النسخ. يمكنك تحديد نفس الخادم أو خادم مختلف للنسخة. يمكنك أيضاً اختيار الاحتفاظ بنسخة احتياطية من النسخ الاحتياطي وطبقة الخدمة وحجم الحوسبة لقاعدة البيانات المصدر، أو استخدام نسخة احتياطية مختلفة من تخزين النسخ الاحتياطي و/ أو حجم الحوسبة في نفس مستوى الخدمة أو في طبقة خدمة مختلفة. بعد اكتمال النسخة، تصبح قاعدة بيانات مستقلة تعمل بكامل طاقتها. تتم إدارة عمليات تسجيل الدخول والمستخدمين والأذونات في قاعدة البيانات المنسوخة بشكل مستقل عن قاعدة البيانات المصدر. يتم إنشاء النسخة باستخدام تقنية النسخ المتماثل الجغرافي. بمجرد اكتمال إدخال بيانات النسخة المتماثلة، يتم إنهاء ارتباط النسخ المتماثل الجغرافي تلقائياً. تنطبق جميع متطلبات استخدام النسخ المتماثل الجغرافي على عملية نسخ قاعدة البيانات. راجع نظرة عامة على النسخ الجغرافي النشط للحصول على التفاصيل.

نسخ قاعدة البيانات لـ Azure SQL Hyperscale

بالنسبة إلى Azure SQL Hyperscale، تحدد قاعدة البيانات الهدف ما إذا كانت النسخة ستكون نسخة سريعة أو بحجم نسخة البيانات.

النسخ السريع: عندما يتم النسخ في نفس المنطقة مثل المصدر، سيتم إنشاء النسخة من النسخة المطابقة لكائنات ثنائية كبيرة الحجم هذه النسخة هي عملية سريعة بغض النظر عن حجم قاعدة البيانات.

حجم نسخة البيانات: عندما تكون قاعدة البيانات الهدف في منطقة مختلفة عن المصدر أو إذا كان التكرار في تخزين النسخ الاحتياطي للبيانات (محلي، نطاقي، جغرافي) يختلف عن الهدف عن قاعدة البيانات المصدر، ستكون عملية النسخ بحجم تشغيل البيانات. لن يتناسب وقت النسخ بشكل مباشر مع الحجم حيث يتم نسخ الكائنات الثنائية كبيرة الحجم لخادم الصفحة بالتوازي.

تسجيلات الدخول في نسخة قاعدة البيانات

عند نسخ قاعدة بيانات إلى نفس الخادم، يمكن استخدام نفس عمليات تسجيل الدخول في قاعدتي البيانات. يصبح أساس الأمان الذي تستخدمه لنسخ قاعدة البيانات هو مالك قاعدة البيانات في قاعدة البيانات الجديدة.

عند نسخ قاعدة بيانات إلى خادم مختلف، يصبح أساس الأمان الذي بدأ عملية النسخ على الخادم الهدف هو مالك قاعدة البيانات الجديدة.

بغض النظر عن الخادم الهدف، يتم نسخ جميع مستخدمي قاعدة البيانات وأذوناتهم ومعرفات الأمان (معرفات الأمان) الخاصة بهم إلى نسخة قاعدة البيانات. يضمن استخدام مستخدمي قاعدة البيانات المضمنين للوصول إلى البيانات أن قاعدة البيانات المنسوخة لها نفس بيانات اعتماد المستخدم، بحيث يمكنك الوصول إليها فوراً باستخدام بيانات الاعتماد نفسها بعد اكتمال النسخة.

إذا كنت تستخدم عمليات تسجيل الدخول على مستوى الخادم للوصول إلى البيانات ونسخ قاعدة البيانات إلى خادم مختلف، فقد لا يعمل الوصول المستند إلى تسجيل الدخول. يمكن أن يحدث هذا بسبب عدم وجود عمليات تسجيل الدخول على الخادم الهدف، أو لأن كلمات المرور ومعرفات الأمان (معرفات الأمان) الخاصة بهم مختلفة. لمعرفة المزيد حول إدارة عمليات تسجيل الدخول عند نسخ قاعدة بيانات إلى خادم مختلف، راجع How to manage Azure SQL Database security after disaster recovery. بعد نجاح عملية النسخ إلى خادم مختلف، وقبل إعادة تعيين المستخدمين الآخرين، يمكن فقط تسجيل الدخول المرتبط بمالك قاعدة البيانات، أو مسؤول الخادم، تسجيل الدخول إلى قاعدة البيانات المنسوخة. لحل عمليات تسجيل الدخول وإنشاء الوصول إلى البيانات بعد اكتمال عملية النسخ، راجع Resolve logins.

نسخ باستخدام مدخل Microsoft Azure

لنسخ قاعدة بيانات باستخدام مدخل Microsoft Azure، افتح الصفحة لقاعدة البيانات الخاصة بك، ثم انقر فوق Copy.

Database copy

نسخ باستخدام PowerShell أو Azure CLI

لنسخ قاعدة بيانات، استخدم الأمثلة التالية.

بالنسبة إلى PowerShell، استخدم الأمر cmdlet New-AzSqlDatabaseCopy.

هام

لا تزال الوحدة النمطية PowerShell Azure Resource Manager (RM) مدعومة بواسطة قاعدة بيانات Azure SQL، ولكن كل التطوير المستقبلي مخصص للوحدة النمطية Az.Sql. ستستمر الوحدة النمطية AzureRM في تلقي إصلاحات الأخطاء حتى ديسمبر 2020 على الأقل. تتطابق وسائط الأوامر في الوحدة النمطية Az وفي الوحدات النمطية AzureRm بشكل كبير. لمعرفة المزيد حول تطابقها، اطّلع على تقديم الوحدة النمطية Azure PowerShell Az الجديدة.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

نسخة قاعدة البيانات هي عملية غير متزامنة ولكن يتم إنشاء قاعدة البيانات الهدف على الفور بعد قبول الطلب. إذا كنت بحاجة إلى إلغاء عملية النسخ بينما لا تزال قيد التقدم، فقم بإفلات قاعدة البيانات الهدف باستخدام الأمرcmdlet Remove-AzSqlDatabase .

للحصول على برنامج نصي كامل لـ PowerShell، راجع Copy adatabase to a new server.

نسخ باستخدام Transact-SQL

قم بتسجيل الدخول إلى قاعدة البيانات الرئيسية باستخدام تسجيل دخول مسؤول الخادم أو تسجيل الدخول الذي أنشأ قاعدة البيانات التي تريد نسخها. لكي تنجح نسخ قاعدة البيانات، يجب أن تكون عمليات تسجيل الدخول التي ليست من مسؤول الخادم أعضاء في الدورdbmanager. لمزيد من المعلومات حول عمليات تسجيل الدخول والاتصال بالخادم، راجع Manage logins.

ابدأ نسخ قاعدة البيانات المصدر باستخدام العبارة CREATE DATABASE ... AS COPY OF. تواصل عبارة T-SQL في التشغيل حتى تكتمل عملية نسخ قاعدة البيانات.

ملاحظة

لا يؤدي إنهاء عبارة T-SQL إلى إنهاء عملية نسخ قاعدة البيانات. لإنهاء العملية، قم بإفلات قاعدة البيانات الهدف.

نسخة قاعدة البيانات باستخدام T-SQL غير معتمدة عند الاتصال بالخادم الوجهة عبر نقطة نهاية خاصة. إذا تم تكوين نقطة نهاية خاصة ولكن تم السماح بالوصول إلى الشبكة العامة، يتم دعم نسخة قاعدة البيانات عند الاتصال بالخادم الوجهة من عنوان IP عام. بمجرد اكتمال عملية النسخ، يمكن رفض الوصول العام.

هام

تحديد التكرار في تخزين النسخ الاحتياطي عند استخدام T-SQL CREATE DATABASE ... لأن الأمر COPY OF غير مدعوم حتى الآن.

نسخ إلى نفس الخادم

قم بتسجيل الدخول إلى قاعدة البيانات الرئيسية باستخدام تسجيل دخول مسؤول الخادم أو تسجيل الدخول الذي أنشأ قاعدة البيانات التي تريد نسخها. لكي تنجح نسخ قاعدة البيانات، يجب أن تكون عمليات تسجيل الدخول التي ليست من مسؤول الخادم أعضاء في الدورdbmanager.

ينسخ هذا الأمر Database1 إلى قاعدة بيانات جديدة تسمى Database2 على نفس الخادم. بناءً على حجم قاعدة البيانات الخاصة بك، قد تستغرق عملية النسخ بعض الوقت حتى تكتمل.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

نسخ إلى تجمعات مرنة

قم بتسجيل الدخول إلى قاعدة البيانات الرئيسية باستخدام تسجيل دخول مسؤول الخادم أو تسجيل الدخول الذي أنشأ قاعدة البيانات التي تريد نسخها. لكي تنجح نسخ قاعدة البيانات، يجب أن تكون عمليات تسجيل الدخول التي ليست من مسؤول الخادم أعضاء في الدورdbmanager.

ينسخ هذا الأمر Database1 إلى قاعدة بيانات جديدة تسمى Database2 في تجمع مرن يسمى pool1. بناءً على حجم قاعدة البيانات الخاصة بك، قد تستغرق عملية النسخ بعض الوقت حتى تكتمل.

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

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = 'pool1' ) );

نسخ إلى خادم مختلف

قم بتسجيل الدخول إلى قاعدة البيانات الرئيسية للخادم الهدف حيث سيتم إنشاء قاعدة البيانات الجديدة. استخدم تسجيل دخول له نفس الاسم وكلمة المرور لمالك قاعدة البيانات لقاعدة البيانات المصدر على الخادم المصدر. يجب أن يكون تسجيل الدخول على الخادم الهدف أيضاً عضواً في الدور dbmanager، أو أن يكون تسجيل دخول مسؤول الخادم.

ينسخ هذا الأمر Database1 على server1 إلى قاعدة بيانات جديدة تسمى Database2 على server2. بناءً على حجم قاعدة البيانات الخاصة بك، قد تستغرق عملية النسخ بعض الوقت حتى تكتمل.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

هام

يجب تكوين جدران الحماية للخادمين للسماح بالاتصال الداخلي من IP للعميل الذي أصدر T-SQL CREATE DATABASE ... كنسخة من الأمر. لتحديد عنوان IP المصدر للاتصال الحالي، قم بتنفيذ SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

وبالمثل، ينسخ الأمر أدناه Database1 على server1 إلى قاعدة بيانات جديدة تُسمى Database2 داخل تجمع مرن يُسمى pool2، على server2.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = 'pool2' ) );

نسخ إلى اشتراك مختلف

يمكنك استخدام الخطوات الواردة في قسم Copy a SQL Database to a different server لنسخ قاعدة البيانات الخاصة بك إلى خادم في اشتراك مختلف باستخدام T-SQL. تأكد من استخدام تسجيل دخول له نفس الاسم وكلمة المرور لمالك قاعدة البيانات لقاعدة البيانات المصدر. بالإضافة إلى ذلك، يجب أن يكون تسجيل الدخول عضواً في دور dbmanager أو مسؤول الخادم، على كل من خوادم المصدر والهدف.

تلميح

عند نسخ قواعد البيانات في نفس مستأجر Azure Active Directory، يتم تبسيط التخويل على خوادم المصدر والوجهة إذا بدأت أمر النسخ باستخدام تسجيل دخول مصادقة AAD مع وصول كافٍ على كلا الخادمين. الحد الأدنى اللازم من الوصول هو العضوية في الدور dbmanager في قاعدة البيانات الرئيسية على كلا الخادمين. على سبيل المثال، يمكنك استخدام تسجيل دخول AAD كعضو في مجموعة AAD المُعينة كمسؤول الخادم على كلا الخادمين.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx', SID = [SID of loginname login on source server];
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 5
--Execute the copy of database script from the destination server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

ملاحظة

لا تدعم مدخل Microsoft Azure وPowerShell وAzure CLI نسخ قاعدة البيانات إلى اشتراك مختلف.

تلميح

يدعم نسخ قاعدة البيانات باستخدام T-SQL نسخ قاعدة بيانات من اشتراك في مستأجر Azure مختلف. يتم دعم هذا فقط عند استخدام تسجيل دخول مصادقة SQL لتسجيل الدخول إلى الخادم الهدف. لا يتم دعم إنشاء نسخة قاعدة بيانات على خادم منطقي في مستأجر Azure مختلف عندما تكون مصادقة Microsoft Azure Active Directory نشطة (ممكَّنة) على الخادم المنطقي المصدر أو الهدف.

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

راقب عملية النسخ عن طريق الاستعلام عن طرق العرض sys.databases وsys.dm_database_copies وsys.dm_operation_status. أثناء عملية النسخ، يتم تعيين عمود state_desc لعرض sys.databases لقاعدة البيانات الجديدة على COPYING.

  • في حالة فشل النسخ، يتم تعيين عمود state_desc في عرض sys.databases لقاعدة البيانات الجديدة على SUSPECT. قم بتنفيذ عبارة DROP في قاعدة البيانات الجديدة، وحاول مرة أخرى لاحقاً.
  • في حالة نجاح النسخ، يتم تعيين العمود state_desc لعرض قواعد البيانات sys.databases لقاعدة البيانات الجديدة على ONLINE. اكتمل النسخ، وقاعدة البيانات الجديدة هي قاعدة بيانات عادية يمكن تغييرها بشكل مستقل عن قاعدة البيانات المصدر.

ملاحظة

إذا قررت إلغاء النسخ أثناء تقدمه، فقم بتنفيذ عبارة DROP DATABASE في قاعدة البيانات الجديدة.

هام

إذا كنت بحاجة إلى إنشاء نسخة مع هدف خدمة أصغر إلى حد كبير من المصدر، فقد لا تحتوي قاعدة البيانات الهدف على موارد كافية لإكمال عملية إدخال بيانات ويمكن أن يتسبب في فشل عملية النسخ. في هذا السيناريو، استخدم طلب استعادة جغرافية لإنشاء نسخة في خادم مختلف و/ أو منطقة مختلفة. راجعRecover an Azure SQL Database using database backups لمزيد من المعلومات.

أدوار وأذونات التحكم في الوصول استناداً إلى الدور من Azure لإدارة نسخ قاعدة البيانات

لإنشاء نسخة من قاعدة البيانات، يجب أن تكون في الأدوار التالية

  • مالك الاشتراك أو

  • دور مساهم Microsoft SQL Server أو

  • دور مخصص على قواعد البيانات المصدر والهدف مع الإذن التالي:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

لإلغاء نسخة من قاعدة البيانات، يجب أن تكون في الأدوار التالية

  • مالك الاشتراك أو

  • دور مساهم Microsoft SQL Server أو

  • دور مخصص على قواعد البيانات المصدر والهدف مع الإذن التالي:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

لإدارة نسخة قاعدة البيانات باستخدام مدخل Microsoft Azure، ستحتاج أيضاً إلى الأذونات التالية:

Microsoft.Resources/subscriptions/resources/read Microsoft.Resources/subscriptions/resources/write Microsoft.Resources/deployments/read Microsoft.Resources/deployments/write Microsoft.Resources/deployments/operationstatuses/read

إذا كنت تريد رؤية العمليات ضمن عمليات النشر في مجموعة الموارد على المدخل، والعمليات عبر موفري موارد متعددين بما في ذلك عمليات SQL، فستحتاج إلى هذه الأذونات الإضافية:

Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

عمليات تسجيل الدخول للحل

بعد أن تصبح قاعدة البيانات الجديدة متصلة بالإنترنت على الخادم الهدف، استخدم العبارة ALTER USER لإعادة تعيين المستخدمين من قاعدة البيانات الجديدة لتسجيلات الدخول على الخادم الهدف. لحل مشكلة المستخدمين المعزولين، راجع Troubleshoot Orphaned Users. راجع أيضاً How to manage Azure SQL Database security after disaster recovery.

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

لمعرفة المزيد حول إدارة المستخدمين وتسجيلات الدخول عند نسخ قاعدة بيانات إلى خادم مختلف، راجع How to manage Azure SQLDatabase security after disaster recovery.

أخطاء نسخ قاعدة البيانات

يمكن مواجهة الأخطاء التالية أثناء نسخ قاعدة بيانات في قاعدة بيانات Azure SQL. لمزيد من المعلومات، راجع Copy an Azure SQL Database.

التعليمة البرمجية للخطأ الخطورة الوصف
40635 ⁧⁩16⁧⁩ تم تعطيل العميل الذي يحمل عنوان IP باسم '%.*ls' مؤقتًا.
40637 ⁧⁩16⁧⁩ إنشاء نسخة قاعدة البيانات معطل حالياً.
40561 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. إما أن قاعدة البيانات المصدر أو الهدف غير موجودة.
40562 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. تم إسقاط قاعدة البيانات المصدر.
40563 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. تم إفلات قاعدة البيانات الهدف.
40564 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات بسبب خطأ داخلي. يُرجى إفلات قاعدة البيانات الهدف وحاول مرة أخرى.
40565 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. لا يُسمح بأكثر من نسخة واحدة من قاعدة البيانات المتزامنة من نفس المصدر. ُيرجى إسقاط قاعدة البيانات الهدف والمحاولة مرة أخرى في وقت لاحق.
40566 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات بسبب خطأ داخلي. يُرجى إفلات قاعدة البيانات الهدف وحاول مرة أخرى.
40567 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات بسبب خطأ داخلي. يُرجى إفلات قاعدة البيانات الهدف وحاول مرة أخرى.
40568 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. أصبحت قاعدة البيانات المصدر غير متوفرة. يُرجى إفلات قاعدة البيانات الهدف وحاول مرة أخرى.
40569 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات. أصبحت قاعدة البيانات الهدف غير متوفرة. يُرجى إفلات قاعدة البيانات الهدف وحاول مرة أخرى.
40570 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات بسبب خطأ داخلي. ُيرجى إسقاط قاعدة البيانات الهدف والمحاولة مرة أخرى في وقت لاحق.
40571 ⁧⁩16⁧⁩ فشل نسخ قاعدة البيانات بسبب خطأ داخلي. ُيرجى إسقاط قاعدة البيانات الهدف والمحاولة مرة أخرى في وقت لاحق.

الخطوات التالية