نحتاج أحياناً إلى نسخ البيانات بكيمات كبيرة من أو إلى قاعدة البيانات. تسمى هذه العمليات استيراد وتصدير البيانات بحجوم كبيرة.
يوفر SQL Server أدوات للقيام بعمليات استيراد وتصدير البيانات بكميات كبيرة ونسخها بحجوم كبيرة. ومن هذه الأدوات :
الأداة المساعدة BCB ، الدالة OPENROWSET(BULK) ، معالج اتسيراد وتصدير البيانات في SQL Server ، جملة BULK INSERT وجملة SELECT INTO.
سنشرح في هذا المقال كيفية نسخ كميات كبيرة من البيانات من جدول أو مجموعة من الجداول إلى قاعدة بيانات أخرى باستخدام هذه الأدوات وأيضاً باستخدام ApexSQL Script و ApexSQL Data Diff.
نسخ البيانات باستخدام معالج استيراد وتصدير البيانات في SQL Server
يقوم معالج استيراد وتصدير البيانات بإنشاء مجموعة من الخدمات المتكاملة (SSIS) والتي يمكن جدولتها لتنفّذ على أسس محددة وتعديلها عند الحاجة لذلك باستخدام أداة SQL Server Data Tools.
لتشغيل معالج اتسيراد وتصدير البيانات ، انقر بالزر الأيمن للفأرة على قاعدة البيانات ، اختر مهام ، ثم أمر تصدير بيانات :
- في شاشة اختيار مصدر البيانات ، اشبك على قاعدة البيانات المصدر. يجب أن يكون لديك الصلاحيات التالية على الخادم المصدر حتى تتمكن من استخدام معالج استيراد وتصدير البيانات في SQL Server : صلاحية قراءة البيانات من قاعدة البيانات أو الملف ، صلاحية الكتابة على قاعدة بيانات النظام msdb لحفظ الخدمات المتكاملة (SSIS).
-
في شاشة اختيار الوجهة، اشبك على قاعدة بيانات التي ستكون الوجهة. يجب أن يكون لديك الصلاحيات التالية على الخادم الوجهة : الكتابة على قاعدة البيانات أو الملف ، صلاحيات لإنشاء قاعدة بيانات أو جدول إذا تطلب الأمر:
- في شاشة تحديد نسخ جدول أو جملة استعلام ، اخترخيار نسخ البيانات من جدول ، مجموعة جداول أو عروض.
-
اختر الجداول والعروض ثم اختر Run immediately للتنفيذ الفوري في شاشة إتمام المعالج:
لاحظ أن معالج استيراد وتصدير البيانات في SQL Server لن يعامل عمود القيمة التعريفية Identity معاملة خاصة مختلفة عن باقي الأعمدة، وسوف تفشل العملية عند محاولتك إدخال بيانات إلى جدول يحتوي على عمود القيمة التعريفية:
لاحظ أنه إذا كان الجدول المصدر يحتوي على قيد مفتاح خارجي ، فإن معالج استيراد وتصدير البيانات في SQL Server لن يقوم بتحميل الجداول بالترتيب الصحيح للقيود ،حيث أنه من الممكن أن يقوم بنسخ الجدول الذي يحتوي على قيد المفتاح الخارجي قبل تحميل الجدول الذي يحتوي على المفتاح الرئيسي المرجعي ، مما يسبب فشل في قيد المفتاح الخارجي.
ستخدام تقنيات النسخ كبيرة الحجم في SQL Server
أداة BCP
إنّ أداة BCP هي أداة أوامر سطرية تسمح بنسخ حجم كبيرمن البيانات من قاعدة بيانات مصدرية إلى ملف ، أو استيراد حجم كبير من البيانات من ملف إلى قاعدة البيانات الوجهة. على سبيل المثال ، لتصدير العمودين EmployeeIDs و Emails كاملين إلى الملف Emails.txt من جدول EmployeeEmail في قاعدة بيانات TestDB ، قم بتنفيذ أمر BCP التالي:
bcp TestDB.dbo.EmployeeEmail out Emails.txt –c -T
لاحظ أنّ خيار –c يحدد أن الأداة المساعدة ستستخدم مع بيانات نصية و كذلك الخيار –T يبين أن الأتصال موثوق، مما يعني أن أداة BCP سيتم تنفيذها عن طريق المستخدم الذي تم تسجيل دخوله حالياً. وإذا لم يتم تحديد –T ، وجب عليك تحديد اسم المستخدم وكلمة السر باستخدام الخيارات –U و –P .
تأكد من وجود الجدول الوجهة الذي تريد النسخ عليه قبل عملية الإستيراد، وأنّ يحتوي الجدول الوجهة على أعمدة مطابقة في نوعها للجدول المستورد قبل عملية الإستيراد. مثلا ، لإدخال البيانات من ملف Emails.txt إلى الجدول NewSchema.dbo.EmployeeEmail ، استخدم أمر BCP التالي:
bcp NewSchema.dbo.EmployeeEmail in Emails.txt -T –c
إنّ أداة BCP تستخدم فقط لنسخ البيانات إلى ملف أو استيرادها من ملف. والمستخدم الذي ينفذ هذا الأمر يجب أن يكون لديه صلاحية للقراءة من الجدول المصدر حتى يتسنى له استخدامها.
استيراد البيانات باستخدام جملة BULK INSERT
يمكنك استخدام جملة BULK INSERT لاستيراد البيانات من ملف معين إلى جدول. كم هو الحال في أداة bcp السابقة ، يجب أن يكون الجدول الذي يراد استيراده موجوداً في الوجهة والأعمدة فيه مطابقة للمصدر في نوع البيانات.
ما عليك فعله هنا هو تحديد الجدول الوجهة ومكان تواجد الملف الذي يراد استيراد البيانات منه كالتالي:
BULK INSERT TestRemote.dbo.EmployeeEmail FROM 'C:\Users\Lenovo\Desktop\Emails.txt'; GO
استيراد البيانات باستخدام الدالّة OPENROWSET(BULK)
إنّ دالّة OPENROWSET(BULK) تستخدم مصدر بيانات OLE DB لاستعادة البيانات ، وتسمح الدخول إلى البيانات البعيدة من خلال اتصالها بمصادر البيانات البعيدة.
INSERT INTO AllEmails(Email) SELECT * FROM OPENROWSET( BULK 'C:\Users\Lenovo\Desktop\Emails.txt', SINGLE_BLOB) AS x;
تقدّم دالّة OPENROWSET(BULK) البديل عن استخدام أداة الربط بالخادم البعيد Linked Server للوصول إلى البيانات ، ومناسبة لإدخال البيانات من مصدر بعيد دفعة واحدة.
استيراد وتصدير البيانات باستخدام جملة SELECT INTO
عند استخدام جملة INTO مع SELECT في تركيب واحد ، يسمح لك هذا بإنشاء جدول جديد بناء على نتيجة جملة الإختيار. مثلا ، لنسخ الجدول EmployeeEmail على نفس الخادم ، على المخطط الإفتراضي في قاعدة بيانات TestDB، قم بتنفيذ جملة الإستعلام التالية:
SELECT * INTO TestDB.dbo.EmployeeEmail FROM AdventureWorks2012.HumanResources.EmployeeEmail;
لا يمكن استخدام جملة SELECT INTO لإنشاء جدول جديد في خادم SQL البعيد ، لكن يمكن تضمين المصدر البعيد في جملة SELECT اذا كان هناك أداة ربط مع هذا الخادم البعيد.
اذا كان الجدول المصدر يحتوي على أي قيود ، فهارس أو مشغلات ، فلن يتم نقلها إلى الجدول الجديد. والعمود في الجدول الجديد لن يرث خاصية الإدخال التلقائي من مخرجات جملة الإستعلام اذا كانت جملة الإدخال تحتوي على دالة التجميع ، جملة الربط أو جملة التجميع عن طريق حقل ، وكذلك اذا تم استخدام عمود التعريف في الجملة أو استخدم أكثر من مرة أو اذا كان من مصدر بيانات بعيد.
استيراد وتصدير البيانات باستخدام ApexSQL Script
تستخدم أداة ترحيل قواعد البيانات ApexSQL Script في SQL Server لإنشاء برامج نصية لتصدير البيانات أو البيانات والتركيب معاً من الخادم المصدر وتنفيذ هذه البرامج في الخادم الوجهة لاستيراد البيانات.
لإنشاء البرنامج النصي للبيانات في قاعدة البيانات باستخدام تطبيق ApexSQL Script، ابدأ مشروع جديد، اشبك على قاعدة البيانات، وقم بتحديد الإعدادات للمشروع اعتماداً على التركيب في الخادم الوجهة. إذا اردت إنشاء برنامج نصي لكل من البيانات وتركيب الجدول المصدر، وعلى افتراض أن قاعدة البيانت تم انشاؤها مسبقاً في الوجهة، من خلال تبويب انشاء البرنامج النصي للتركيب ، أزل الاختيار من المربع بجانب الخيارات Script CREATE DATABASE و Script USE for a database. واذا اردت انشاء برنامج نصي للقيود والفهارس والمفاتيح الخارجية ، قم باختيار المربع بجانب الخيار Script names.
من خلال تبويب انشاء برامج نصية للبيانات ، قم باختيار الخيار Set IDENTITY_INSERT ON للتعامل مع تحميل بيانات إلى جداول تحتوي على عمود IDENTITY. وتحت خيار السجلات التي سيتم انشاء برنامج نصي لها ، اختر Script rows as INSERT ليتم انشاؤها على شكل جمل إدخال.
اذا كان تركيب الجدول في الوجهة مختلف عن تركيب الجدول المصدر، فمن خلال التبويب Schema mapping ، اختر Exclude schemas لازالة اسم البنية من اسماء العناصر في قاعدة البيانات، ثم اضغط على زر Open للفتح:
في شبكة النتائج ، تحت شبكة البيانات ، قم بتصفية الأعمدة التي تريد الحصول على البيانات منها:
ومن شبكة التركيب ، اختر الجداول التي تريد انشاء برنامج نصي لها ، ثم ابدأ معالج إنشاء البرامج:
في معالج إنشاء البرامج النصية ، قم بتحديد نمط البرامج ثم انقر على التالي Next:
قم بحفظ البرنامج النصي الناتج وتنفيذه على الخادم الحالي أو البعيد:
نسخ البيانات باستخدام تطبيق ApexSQL Data Diff
بإمكانك استخدام أداة مقارنة البيانات ApexSQL Data Diff لنسخ البيانات من جدول أو مجموعة جداول إلى قاعدة بيانات الوجهة اذا كانت هذه الجداول موجودة في الوجهة وبنفس تركيب الجداول المصدرية.
ابدأ مشروع جديد ، واشبك على قاعدة البيانات المصدر والوجهة ، ثم انقر على زر المقارنة Compare:
في شبكة النتائج، اختر الجداول التي تريد نسخها ثم اضغط على زر Synchronize:
في معالج المزامنة يمكنك رؤية تأثير برنامج المزامنة النصي ومراجعة كافة التحذيرات والخطوات:
انقر على زر انشاء البرنامج النصي Create script ثم نفّذ البرنامج:
موارد مفيدة:
bcp Utility
SQL Server Import and Export Wizard
Bulk Import and Export of Data (SQL Server)
مترجم Ahmad Yaseen
January 19, 2016