ฉันพบว่า BCP มีประสิทธิภาพมากกว่าเครื่องมือบางอย่างสำหรับรับข้อมูลลงใน SQL Server รุ่นก่อนหน้านี้และเพื่อดึงข้อมูลจาก RDS (ขอบคุณ @ivan_posdeev)
ฉันแรกสร้าง schema โดยคลิกขวาบนฐานข้อมูลใน SQL Server Management Studio, Tasks, Generate script ทำเครื่องหมายวัตถุทั้งหมดในวัตถุขั้นสูงเพื่อให้มั่นใจว่าทุกสิ่งที่คุณต้องการจะเป็นสคริปต์ (สถิติดัชนี ฯลฯ ) ให้ยกเลิกการเลือก "ฐานข้อมูล USE" หากฐานข้อมูลปลายทางของคุณมีชื่อแตกต่างกันตั้งค่าความเข้ากันได้กับรุ่นฐานข้อมูลปลายทางของคุณ ไฟล์ที่สร้างสคีมาของคุณ สร้างฐานข้อมูลบนปลายทางของคุณและเรียกใช้ไฟล์นี้กับมัน (ใช้osql, sqlcmdหรือกุย)
หากต้องการย้ายข้อมูลให้รันเคียวรีต่อไปนี้สองครั้งบนฐานข้อมูลต้นทางก่อนแสดงความคิดเห็นคอลัมน์ที่สองเพื่อสร้างไฟล์แบตช์เพื่อดึงข้อมูลจากนั้นให้ข้อคิดเห็นคอลัมน์แรกเพื่อสร้างไฟล์แบตช์นำเข้าเพื่อทำงานบนปลายทางของคุณ (คุณต้องเพิ่มเซิร์ฟเวอร์ต้นทางและปลายทางของคุณชื่ออินสแตนซ์ไดเรกทอรีส่งออกและอินพุตไฟล์ไดเรกทอรีชื่อผู้ใช้และรหัสผ่านหากต้องการใช้การรักษาความปลอดภัยแบบรวมให้แทนที่-Uและ-Pตัวเลือกด้วยเพียง-T)
สนับสนุน Unicode นี้ถ้าคุณไม่จำเป็นต้องเปลี่ยนสวิทช์ในงบทั้งสอง-N-n
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
หลังจากรันไฟล์ตรวจสอบชื่อ schema.tablename.ERRORS.dat - จะรวมแถวใด ๆ ที่ล้มเหลวให้ว่างถ้าไม่มี
การอ้างอิง MSDN สำหรับ BCP ที่นี่เป็นมิตรกับการเดินผ่านตัวเลือก BCP ที่นี่มากขึ้น
ฉันพบสิ่งนี้ดีกว่าการสร้างสคริปต์และเครื่องมือใด ๆ ที่ฉันได้ลอง นอกจากนี้ยังทำงานบนฐานข้อมูล RDS (ซึ่งไม่อนุญาตให้มีการสำรองข้อมูล) ไฟล์ข้อมูลที่สร้างขึ้นมีขนาด 30% ของสคริปต์ SQL การเรียกใช้จะใช้เวลาเพียงเล็กน้อยและมีความน่าเชื่อถือมากกว่า (สคริปต์ที่สร้างขึ้นโดย SQL Server สำหรับข้อมูลสคริปต์จะเพิ่มขึ้นเสมอบางครั้งคาดเดาได้ว่าบางครั้งไม่ได้ SQL ที่สร้างขึ้นไม่เข้ากันกับ 2008R2 (เช่นใช้nvarchar(0)บ่อยครั้งไม่สมบูรณ์เพราะไม่มีเหตุผลที่สังเกตได้ ฯลฯ ) BCP ก็ทำซ้ำการละเมิดข้อ จำกัด เช่นกัน เช่น Referential Integrity)