ฉันจะสำรองข้อมูลของตารางเฉพาะใน SQL Server 2008 โดยใช้ T-SQL Script ได้อย่างไร


14

ฉันต้องการสำรองข้อมูลของตารางเฉพาะที่มีอยู่ในฐานข้อมูลของฉันใน.bakไฟล์และสิ่งเหล่านี้ควรทำโดยใช้สคริปต์ T-SQL

คำตอบ:


11

ประเภทการสำรองข้อมูลขึ้นอยู่กับ SQL Server Recovery Model ทุกรูปแบบการกู้คืนช่วยให้คุณสำรองฐานข้อมูล SQL Server ทั้งหมดหรือบางส่วนหรือแต่ละไฟล์หรือกลุ่มไฟล์ของฐานข้อมูล ไม่สามารถสร้างการสำรองข้อมูลระดับตารางได้ไม่มีตัวเลือกดังกล่าว แต่มีวิธีแก้ปัญหาสำหรับสิ่งนี้

การสำรองข้อมูลของตาราง SQL Server เป็นไปได้ใน SQL Server มีหลายทางเลือกในการสำรองข้อมูลตารางใน SQL Server

  1. BCP (โปรแกรมคัดลอกเป็นกลุ่ม)
  2. สร้างสคริปต์ตารางด้วยข้อมูล
  3. ทำสำเนาของตารางโดยใช้ SELECT INTO
  4. บันทึกข้อมูลตารางโดยตรงในไฟล์ Flat
  5. ส่งออกข้อมูลโดยใช้ SSIS ไปยังปลายทางใด ๆ

ที่นี่ฉันจะอธิบายเฉพาะส่วนที่เหลือแรกที่คุณอาจจะรู้

วิธีที่ 1 - สำรองตาราง sql โดยใช้ BCP (BULK COPY PROGRAM)

ในการสำรองข้อมูลตาราง SQL ชื่อ "Person.Contact" ซึ่งอยู่ใน SQL Server AdventureWorks เราจำเป็นต้องเรียกใช้สคริปต์ต่อไปนี้

-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' --  Table Name which you want    to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) --  Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd

เอาท์พุท

ป้อนคำอธิบายรูปภาพที่นี่

บันทึก -

  1. คุณต้องมีสิทธิ์นำเข้า / ส่งออกจำนวนมาก
  2. ในสคริปต์ด้านบน -n หมายถึงชนิดข้อมูล SQL ดั้งเดิมซึ่งเป็นกุญแจสำคัญในระหว่างการคืนค่า
  3. -T หมายถึงว่าคุณกำลังเชื่อมต่อกับ SQL Server โดยใช้ Windows Authentication ในกรณีที่คุณต้องการเชื่อมต่อโดยใช้การพิสูจน์ตัวจริงของเซิร์ฟเวอร์ SQL -U -P
  4. นี่จะบอกได้ว่าคุณเพิ่มความเร็วในการถ่ายโอนข้อมูลในกรณีของฉันคือ 212468.08 แถวต่อวินาที
  5. เมื่อคำสั่งนี้เสร็จสิ้นแล้วจะสร้างไฟล์ชื่อ "AdventureWorks.Person.Contact_20120222" เป็นโฟลเดอร์ปลายทางที่ระบุ

อีกวิธีหนึ่งคุณสามารถเรียกใช้ BCP ผ่านทางพรอมต์คำสั่งและพิมพ์คำสั่งต่อไปนี้ใน command prompt การดำเนินการทั้งสองดำเนินกิจกรรมเดียวกัน แต่ฉันชอบวิธีการดังกล่าวข้างต้นเป็นที่บันทึกประเภทในการเปิดคำสั่งและประเภท

bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T

ป้อนคำอธิบายรูปภาพที่นี่


9

วิธีที่ 1:

หากคุณเกี่ยวข้องกับข้อมูลในตารางเท่านั้นและจะใช้ภายในฐานข้อมูลและเซิร์ฟเวอร์เดียวกันคุณสามารถใช้แบบสอบถามด้านล่างเพื่อสำรองข้อมูลของตารางที่เลือก:

SELECT * INTO newtable1
FROM originalTable1

--- สำหรับตารางที่ 2

SELECT * INTO newtable2
FROM originalTable2

และอื่น ๆ ... สำหรับจำนวน n ตาราง

คำสั่งนี้จะสร้างตารางที่เรียกว่า newtable1, newtable1, .. ดังนั้นคุณไม่จำเป็นต้องสร้างมันก่อนหน้านี้

หมายเหตุ * วิธีการนี้ใช้เวลาในการสำรองข้อมูลค่อนข้างเร็ว แต่ข้อเสียเปรียบที่สำคัญคือจะไม่ใช้คีย์, ดัชนีและข้อ จำกัด ของตารางและการสำรองข้อมูลจะถูกเก็บไว้ในฐานข้อมูลไม่ใช่ที่ภายนอกไฟล์

วิธีที่ 2:

หากคุณต้องการสำรองข้อมูลตารางไปยังเซิร์ฟเวอร์อื่นสำหรับโซลูชันการกู้คืนจากความเสียหายหรือการป้องกันการสูญหายของข้อมูลคุณสามารถสคริปต์ตารางโดยใช้ตัวเลือกสร้างสคริปต์จากงาน

  1. ก่อนอื่นให้คลิกขวาที่ฐานข้อมูลที่มีตารางที่คุณต้องการสำรองข้อมูลและเลือกงาน -> สร้างสคริปต์

  2. เลือกฐานข้อมูลของคุณจากรายการที่ต้องสำรองข้อมูลตาราง

  3. หน้าจอถัดไปที่ปรากฏคือตัวเลือกสคริปต์

  4. เลื่อนลงไปที่ตัวเลือกสคริปต์จนกว่าคุณจะเห็นตัวเลือกตาราง / มุมมอง เราต้องการสิ่งต่อไปนี้เป็นจริง: ตรวจสอบข้อ จำกัด ข้อมูลสคริปต์คีย์ต่างประเทศคีย์หลักทริกเกอร์ & คีย์ที่ไม่ซ้ำกัน (หรือคุณสามารถเลือกสิ่งที่คุณต้องการแน่นอน) เลือกถัดไปและเราจะนำเสนอด้วยหน้าจอเลือกประเภทวัตถุ

  5. เลือกตารางและกดถัดไป สุดท้ายเลือกตารางหรือตารางที่คุณต้องการสำรองข้อมูลและกดถัดไป

วิธีที่ 3:

คุณสามารถใช้ยูทิลิตี bcpสำหรับการสำรองตารางได้เช่นกัน


1

คุณไม่สามารถสำรองข้อมูลตารางที่เฉพาะเจาะจงไปยัง.bakไฟล์คุณสามารถส่งออกไปยัง csv หรือสคริปต์ออกหรือใช้bcpเพื่อวางลงในไฟล์

คุณสามารถทำอะไรได้บ้างหากคุณต้องการสำรองข้อมูลตารางที่เฉพาะเจาะจง (และตารางเหล่านั้นเหมือนกันเสมอ) จะย้ายตารางเหล่านั้นไปยังfile groupกลุ่มไฟล์ที่แยกต่างหากและสำรองข้อมูล

โปรดดูข้อมูลไฟล์และกลุ่มไฟล์สำรอง

ตัวอย่างเช่นหากคุณต้องการสำรองไฟล์หรือกลุ่มไฟล์โดยใช้ T-SQL คุณสามารถใช้ (จากลิงค์)

--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
   FILEGROUP = 'SalesGroup1',
   FILEGROUP = 'SalesGroup2'
   TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO

และ

--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
   FILE = 'SGrp1Fi2', 
   FILE = 'SGrp2Fi2' 
   TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck';
GO

1
น่าเสียดายที่คุณต้องสำรองกลุ่มไฟล์การอ่าน / เขียนทั้งหมดเข้าด้วยกันดังนั้นคุณจึงไม่สามารถเลือกกลุ่มเดียวได้
Kamil Gosciminski

1

การสร้างตามวิธีที่ 1 จากการตอบสนองของ KASQLDBA:

สร้างฐานข้อมูลแยกต่างหากเพื่อเก็บสำเนาของตารางที่สำรองไว้ ปรับเปลี่ยนแบบสอบถามที่ให้ของ KASQLDBA เพื่อให้คุณเลือกจากตารางต้นฉบับของคุณและคัดลอกไปยังฐานข้อมูลสำรอง

SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1

--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2

คุณสามารถสร้างสคริปต์ที่วางตารางในฐานข้อมูลใหม่จากนั้นเรียกใช้ตัวเลือกลงในคำสั่งสำหรับทุกตารางที่ต้องการ หากคุณต้องการให้ดัชนีและวัตถุอื่นพร้อมใช้งานคุณสามารถสร้างดัชนีเหล่านั้นบนฐานข้อมูลใหม่ของคุณและตัดทอนตารางก่อนที่จะเติมข้อมูลอีกครั้ง หากคุณต้องการตัดทอนคุณจะต้องใช้คำสั่งแทรกแทนการเลือกลงใน

ตัวเลือกนี้จะให้วิธีการในการสร้างไฟล์. BAK ให้กับคุณ คุณเพียงแค่เรียกใช้คำสั่งฐานข้อมูลสำรองหลังจากที่คุณเติมข้อมูลตารางในฐานข้อมูลใหม่


1

การใช้คุณสมบัติการส่งออกจำนวนมากของ SSMS นี่เป็นวิธีที่ดีที่สุดและง่ายที่สุดที่กล่าวถึง

ตัวช่วยสร้างการนำเข้าและส่งออกของ SQL Server : ตัวช่วยสร้างการนำเข้าและส่งออกของ SQL Server จัดเตรียมส่วนต่อประสานผู้ใช้แบบกราฟิกลงบนแพ็คเกจ SQL Server Integration Services (SSIS) เมื่อสร้างแพคเกจสามารถเป็นอัตโนมัติเพื่อให้ทำงานตามกำหนดเวลา สามารถกำหนดค่าและแก้ไขเพิ่มเติมได้โดยใช้ SQL Server Data Tools (SSDT)

ในการเริ่มต้นให้เปิดตัวช่วยสร้างการนำเข้าและส่งออกคลิกขวาที่ฐานข้อมูลและเลือกเมนูย่อยงาน -> ส่งออกคำสั่งข้อมูล

ป้อนคำอธิบายรูปภาพที่นี่


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง - จากรีวิว
kevinsky

@kevinsky แน่นอน! แต่อย่างน้อยคุณควรได้รับการโหวต!
Sayyed Dawood

-1

อีกวิธีหนึ่งคือการใช้สคริปต์ / sproc: DumpDataFromTable.sql จาก: https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts

 EXECUTE [dbo].[DumpDataFromTable] @SchemaName = 'dbo', @TableName = 'Table', @PathOut = 'c:\temp\Scripts'

คุณต้องผ่าน: ชื่อสคีมาและชื่อตารางจากนั้นพา ธ เอาต์พุตที่สคริปต์ที่สร้างขึ้นจะถูกบันทึกไว้ (โฟลเดอร์โน้ตจะต้องสร้าง / มีอยู่แล้วและ sql จะต้องได้รับอนุญาตให้ดูความคิดเห็นใน sproc)

และถ้าคุณต้องการคุณสามารถเพิ่มเงื่อนไขลงในตาราง (ตัวกรองจะต้องเริ่มต้นด้วยและชั่วขณะ)


ขั้นตอนนี้ขึ้นอยู่กับขั้นตอน PRC_WritereadFile หายไป
SubqueryCrunch

-2

สำรองข้อมูลตารางเดียวด้วยข้อมูลจากฐานข้อมูลใน SQL Server 2008:

SELECT * INTO  [dbo].[tbl_NewTable] 
FROM [dbo].[tbl_OldTable]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.