Sao chép (hàng trăm) bảng từ máy chủ này sang máy chủ khác (với SSMS)


27

Tôi có vài trăm bảng (hiện tại là 466, nhưng ngày càng tăng) tôi phải sao chép từ máy chủ này sang máy chủ khác.

Tôi chưa bao giờ phải làm điều này trước đây, vì vậy tôi không chắc chắn về cách tiếp cận nó. Tất cả các bảng có cùng định dạng:Cart<Eight character customer number>

Đây là một phần của dự án lớn hơn mà tôi đang hợp nhất tất cả các Cart<Number>bảng này vào một Cartsbảng, nhưng đó là một câu hỏi hoàn toàn khác.

Có ai có một phương pháp thực hành tốt nhất mà tôi có thể sử dụng để sao chép tất cả các bảng này không? Tên cơ sở dữ liệu trên cả hai máy chủ là như nhau, nếu điều đó giúp. Và như tôi đã nói trước đó, tôi có satài khoản để tôi có thể làm bất cứ điều gì cần thiết để lấy dữ liệu từ A đến B. Cả hai máy chủ đều nằm trong cùng một cụm máy chủ.


Câu trả lời:


21

Bạn có thể sử dụng tác vụ "Xuất dữ liệu" của SQL Server Management Studio. Nhấp chuột phải vào cơ sở dữ liệu trong SSMS, chọn Nhiệm vụ và sau đó "Xuất dữ liệu". Nó sẽ khởi chạy một trình hướng dẫn tương tác cho phép sao chép các bảng từ máy chủ này sang máy chủ khác, mặc dù bạn sẽ phải tự tạo lại các chỉ mục. Trình hướng dẫn tạo gói SSIS tạm thời (mặc dù bạn cũng có thể chọn lưu nó) và tương đối nhanh.


4
Cũng có thể thực hiện tác vụ Xuất tương tự qua PowerShell nếu quan tâm. Kịch bản tương tự để thực hiện hành động này là trong câu trả lời của tôi ở đây: dba.stackexchange.com/a/122149/507
Shawn Melton

Tại sao nhập / xuất bản sao các chỉ số và phụ thuộc? Sẽ không quá khó để tạo lại các chỉ số cho 466 bảng chứ?
Vini

@Vini bạn cũng có thể sử dụng trình hướng dẫn Tạo tập lệnh, cho phép bạn sao chép các chỉ mục (Tôi không biết liệu nó có tạo ra một tập lệnh theo thứ tự phụ thuộc phù hợp hay không - mặc dù vậy - Tôi luôn sử dụng RedGate SQL So sánh cho điều đó).
Aaron Bertrand

@AaronBertrand: OK. Tôi cũng có câu hỏi tương tự. Nhưng khi tôi nhập datetime cũng được chuyển đổi thành smalldatetime
Vini

23

Đây là một cách tiếp cận nhanh & bẩn chỉ cần một máy chủ được liên kết, theo từng hướng, với đủ đặc quyền, khả năng tương thích đối chiếu và truy cập dữ liệu được kích hoạt. Bạn chạy cái này trên máy chủ được liên kết nguồn để tạo SQL động sẽ được thực thi trên máy chủ được liên kết đích.

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT * INTO [database].dbo.' + QUOTENAME(name)
  + N' FROM [source_linked_server].[database].dbo.' + QUOTENAME(name) + N';'
FROM sys.tables
WHERE name LIKE N'Cart[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]';

PRINT @sql; -- this will only print 8K, enough to spot check
--EXEC [destination_linked_server].master.sys.sp_executesql @sql;

19

Nếu bạn muốn một cái gì đó có thể được viết kịch bản để có thể dễ dàng chạy lại khi bạn kiểm tra điều này và thực hiện các thay đổi nhỏ, hãy xem câu trả lời của tôi ở đây:

Nhập dữ liệu từ cơ sở dữ liệu này sang tập lệnh khác

Câu trả lời đó mô tả bằng cách sử dụng thủ tục lưu sẵn SQLCLR, sử dụng SqlBulkCopylớp trong .NET. Sử dụng thủ tục được lưu trữ đó có thể được thực hiện trong một con trỏ vòng qua các bảng. Điều này cho phép dễ dàng chỉnh sửa quy trình cũng như kế toán cho các bảng mới hoặc dễ dàng loại trừ một hoặc nhiều bảng thông qua một WHEREđiều kiện trong truy vấn con trỏ.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.