Tôi muốn sao lưu các bảng cụ thể có sẵn trong cơ sở dữ liệu của mình trong một .bak
tệp và tất cả những bảng này phải được thực hiện bằng cách sử dụng tập lệnh T-SQL.
Tôi muốn sao lưu các bảng cụ thể có sẵn trong cơ sở dữ liệu của mình trong một .bak
tệp và tất cả những bảng này phải được thực hiện bằng cách sử dụng tập lệnh T-SQL.
Câu trả lời:
Các loại sao lưu phụ thuộc vào Mô hình khôi phục máy chủ SQL. Mỗi mô hình khôi phục cho phép bạn sao lưu toàn bộ hoặc một phần cơ sở dữ liệu SQL Server hoặc các tệp riêng lẻ hoặc nhóm tệp của cơ sở dữ liệu. Sao lưu mức bảng không thể được tạo, không có tùy chọn như vậy. Nhưng có một cách giải quyết cho việc này
Có thể sao lưu bảng SQL Server trong SQL Server. Có nhiều cách khác nhau để sao lưu bảng trong SQL Server SQL
Ở đây tôi chỉ giải thích phần còn lại đầu tiên bạn có thể biết
Phương pháp 1 - Sao lưu bảng sql bằng BCP (CHƯƠNG TRÌNH SAO CHÉP)
Để sao lưu bảng SQL có tên "Person.Contact", nằm trong SQL Server AdventureWorks, chúng ta cần thực thi đoạn script sau,
-- 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
ĐẦU RA
Ghi chú -
Ngoài ra , bạn có thể chạy BCP thông qua dấu nhắc lệnh và gõ lệnh sau trong dấu nhắc lệnh, cả hai thao tác đều thực hiện cùng một hoạt động, nhưng tôi thích phương thức được đề cập ở trên vì đó là loại lưu trong việc mở dấu nhắc lệnh và gõ.
bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T
Cách 1:
Nếu bạn chỉ quan tâm đến dữ liệu trong các bảng và được sử dụng cục bộ trong cùng một cơ sở dữ liệu và máy chủ, bạn có thể sử dụng truy vấn bên dưới để sao lưu các bảng đã chọn:
SELECT * INTO newtable1
FROM originalTable1
--- Đối với bảng 2
SELECT * INTO newtable2
FROM originalTable2
và v.v ... cho n số bảng
Tuyên bố này S CRE TẠO các bảng được gọi là newtable1, newtable1, .. do đó bạn không phải tạo trước đó.
Lưu ý * Phương pháp này thực hiện sao lưu khá nhanh nhưng nhược điểm lớn là nó không mang theo Khóa, Chỉ mục và Ràng buộc của bảng và sao lưu được lưu trữ trong cơ sở dữ liệu không ở đâu đó bên ngoài tệp
Cách 2:
Nếu bạn muốn sao lưu bảng qua máy chủ khác cho bất kỳ giải pháp khắc phục thảm họa hoặc ngăn ngừa mất dữ liệu nào, thì bạn có thể tạo kịch bản cho bảng bằng tùy chọn Tạo tập lệnh từ Tác vụ.
Đầu tiên, nhấp chuột phải vào cơ sở dữ liệu chứa các bảng bạn muốn sao lưu và chọn Nhiệm vụ -> Tạo tập lệnh
Chọn cơ sở dữ liệu của bạn từ danh sách có các bảng cần được sao lưu
Màn hình tiếp theo xuất hiện là Tùy chọn tập lệnh.
Cuộn xuống các tùy chọn tập lệnh cho đến khi bạn thấy Tùy chọn Bảng / Xem. Chúng tôi muốn những điều sau đây là đúng: Kiểm tra các ràng buộc, Dữ liệu tập lệnh, Khóa ngoại, Khóa chính, Kích hoạt và Khóa duy nhất. (Hoặc bạn có thể chọn bất cứ điều gì bạn cần tất nhiên). Chọn tiếp theo và chúng tôi được trình bày với màn hình Chọn loại đối tượng
Chọn Bảng và nhấn tiếp theo. Cuối cùng, chọn bảng hoặc bảng bạn muốn sao lưu và nhấn tiếp theo
Cách 3:
Bạn cũng có thể sử dụng tiện ích bcp để sao lưu bảng.
Bạn không thể sao lưu các bảng cụ thể vào một .bak
tệp, bạn có thể xuất chúng sang csv hoặc script chúng ra hoặc sử dụng bcp
để đặt chúng vào một tệp.
Những gì bạn có thể làm nếu bạn muốn sao lưu các bảng cụ thể (và chúng luôn giống nhau) là chuyển chúng vào một file group
nhóm tệp riêng biệt và sao lưu.
Xem Back Up Files và Filegroups để biết tài liệu.
Ví dụ: nếu bạn muốn sao lưu các tệp hoặc nhóm tệp cụ thể bằng T-SQL, bạn có thể sử dụng (từ liên kết)
--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
FILEGROUP = 'SalesGroup1',
FILEGROUP = 'SalesGroup2'
TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO
và
--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
Dựa trên Phương pháp 1 từ phản hồi của KASQLDBA:
Tạo một cơ sở dữ liệu riêng biệt để giữ bản sao dự phòng của các bảng. Sửa đổi truy vấn được cung cấp của KASQLDBA để bạn chọn từ bảng gốc của mình và sao chép vào cơ sở dữ liệu thay thế.
SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1
--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2
Bạn có thể tạo một tập lệnh bỏ các bảng trong cơ sở dữ liệu mới, sau đó chạy lệnh select thành các lệnh cho mỗi bảng được yêu cầu. Nếu bạn muốn có các chỉ mục và các đối tượng khác có sẵn, thì bạn có thể xây dựng chúng trên cơ sở dữ liệu mới của mình và cắt bớt các bảng trước khi điền lại chúng. Nếu bạn thích cắt ngắn, thì bạn sẽ cần sử dụng các câu lệnh chèn thay cho lựa chọn.
Tùy chọn này sẽ cung cấp cho bạn một phương thức để tạo tệp .BAK. Bạn chỉ cần chạy một lệnh cơ sở dữ liệu sao lưu sau khi bạn đã điền các bảng trong cơ sở dữ liệu mới.
Sử dụng tính năng xuất hàng loạt của SSMS, đây là phương pháp tốt nhất và dễ nhất được đề cập
Trình hướng dẫn nhập và xuất SQL Server : Trình hướng dẫn nhập và xuất SQL Server cung cấp giao diện người dùng đồ họa trên gói Dịch vụ tích hợp máy chủ SQL (SSIS). Sau khi tạo gói có thể được tự động, để chạy theo lịch trình. Nó có thể được cấu hình và sửa đổi thêm bằng cách sử dụng Công cụ dữ liệu SQL Server (SSDT)
Để bắt đầu, hãy mở Trình hướng dẫn nhập và xuất, bấm chuột phải vào cơ sở dữ liệu và chọn menu phụ Tác vụ -> Xuất lệnh dữ liệu.
Một phương pháp khác là sử dụng script / sproc: DumpDataFromTable.sql từ: https://github.com/Zindur/MSQuery-DumpTable/tree/master/Scripts
EXECUTE [dbo].[DumpDataFromTable] @SchemaName = 'dbo', @TableName = 'Table', @PathOut = 'c:\temp\Scripts'
Bạn phải vượt qua: tên lược đồ và tên bảng, sau đó đường dẫn đầu ra nơi tập lệnh đã tạo sẽ được lưu (thư mục ghi chú phải được tạo / tồn tại và sql có quyền xem bình luận trong sproc).
Và nếu bạn muốn, bạn có thể thêm một điều kiện vào bảng (bộ lọc phải bắt đầu bằng AND trong thời điểm này)
Sao lưu một bảng duy nhất với dữ liệu từ cơ sở dữ liệu trong SQL Server 2008:
SELECT * INTO [dbo].[tbl_NewTable]
FROM [dbo].[tbl_OldTable]