الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Bulk Insert

مغلقمُجاب
بدأه KARIMSOFT في 17 فبراير 2013 · 5 رد · 1,278 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كيف عمل  منBulk Insert جدول في قاعدة بيانات sql server 2008 الي قاعدة بيانات sql server 2008 بشرط وجود فرز من المصدر اتمني ان يكون المطلوب واضح ولا احد يقول استخدم Import and Export Data لاني سانقل قرابت 3 مليون كل شهر وهذا ياخذ وقت كثير

وسلام ختام

#2

السلام عليكم ..

  1. مالمقصود بــ : 
    اقتباس

    بشرط وجود فرز من المصدر

     

  2. يمكن عمل Linked Server  ثم نكتب الاستعلام الذي نريد :

    INSERT INTO Server1.Db1.Table1 SELECT * FROM Server2.Db1.Table1 WHERE

     

  3. هل هذا هو المطلوب ؟

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

وعليكم السلام عليكم ورحمة الله وبركاته

اكرمك الله اخي حسام

 

1-ال Bulk Insert تعمل مع الملفات ولا تعمل مع قاعدة بيانات sql server 2008 الي قاعدة بيانات sql server 2008 هذا ما اعرف هل يمكن يعمل مع هذا الوضع لانها سريعه جدا اما INSERT INTO تاخذ وقت طويل

2-بشرط وجود فرز من المصدر اي اني ساقوم بعمل فلتر وليس الجدول كله سيتم تصديره

3-كلا قاعدتي البيانات علي نفس السرفر لان احتاج الي الLinked Server

 

شكرا لك

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 17 فبراير 2013 في 23:58

#4

السلام عليكم ...

بارك الله بك أخي كريم ...

  1. حصل التباس بين الأمر bulk insert (رابط) و بين مفهوم (Insert Bulk data)  ..
  2. معك حق فالأمر bulk Insert  يعمل مع الملفات و لا يمكن استخدامه مع الجداول .
  3. الأمر :
    insert into employeesA select * from employeesB;

    أيضا يقوم بإدراج كتلة بيانات من الجدول الأول للجدول الثاني.

  4. الــ Insert INTO   تكون بطيئة بسبب الــ Transaction  .. حيث تعتبر كل عملية Insert  هي Transaction  مستقلة .
  5. لنجرب المثال التالي  :
    Delete from employees;
    declare @start datetime
    set @start = GetDate()
    declare @i int
    set @i = 0
    set nocount on
    BEGIN TRANSACTION
    while @i < 2000
    begin
    insert into Employees(EmployeeID  , FirstName) VALUES( @i , 'GGGG')
    set @i = @i + 1
    end
    COMMIT
    declare @end datetime
    set @end = GetDate()
    select datediff(ms , @start ,@end)

     و لنجزب المثال :

    Delete from employees;
    declare @start datetime
    set @start = GetDate()
    declare @i int
    set @i = 0
    set nocount on
    while @i < 2000
    begin
    insert into Employees(EmployeeID  , FirstName) VALUES( @i , 'GGGG')
    set @i = @i + 1
    end
    declare @end datetime
    set @end = GetDate()
    select datediff(ms , @start ,@end)

    (نفس المثال الأول لكن دون  Transaction )  سنجد أن الزمن ازداد بشكل كبير .

  6. يفضل تفعيل الــ Bulk Copy و الــ Select Into  لقاعدة البيانات بالأمر :

    EXEC sp_dboption 'DB02', 'select into/bulkcopy', 'true'

     و sql server 2012  يكون  :

    ALTER DATABASE DB02 SET RECOVERY BULK_LOGGED

     و للتأكد  من القيمة :

    SELECT DATABASEPROPERTY ('DB02', 'isbulkcopy')

     1 يعني true  و 0 يعني false  . رابط

  7. أي استخدم Transaction  مع الــ Insert INTO  و ستحصل على أداء جيد .

  8. بانتظار ردود الخبراء .

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 18 فبراير 2013 في 02:14

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5 أفضل إجابة

وعليكم السلام عليكم ورحمة الله وبركاته

اكرمك الله اخي حسام

وجت الحل

اولا كما قلت حضرت تغير حالة قاعدة البيانات الي bulk insert عن طريق هذا الكود

EXEC sp_dboption 'DB02', 'select into/bulkcopy', 'true'

او عن طرقف خصائص قاعد البيانات recovery model to bulk-logged

ثانيا استخدام with (TABLOCK)

مثل

insert into [aaa].[dbo].[Station_Pension_MemberAllMonth] with (TABLOCK) 
select *
from FamiliesStationPension.[dbo].[Station_Pension_MemberAllMonth]

الناتج رائئع في السرعة ومساحة ملف اللوج وملف البيانات

شكرا اخي حسام (شرشبيل الشرير) :D

#6
KARIMSOFT كتب:

شكرا اخي حسام (شرشبيل الشرير) :D

بارك الله بك أخي كريم ..  :lol:  مازلت أحاول القبض على تلك الاشياء الزرقاء المسماة سنافر .. لكن دون نتيجة :lol:

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

هذا الموضوع مغلق.

مواضيع مشابهة