Xây dựng lại toàn bộ cơ sở dữ liệu Microsoft SQL Server


7

Có cách nào được đề xuất để xây dựng lại toàn bộ cơ sở dữ liệu SQL Server từ cơ sở dữ liệu khác trong SQL Server 2012 SP2 không?

Hãy để tôi giải thích ... chúng tôi có một cơ sở dữ liệu mà chúng tôi đang cố gắng kích hoạt ngăn chặn một phần và sau đó thêm nó vào cụm Luôn luôn của chúng tôi. Chúng tôi không nhận được gì ngoài lỗi bế tắc trong khi cố gắng đặt ngăn chặn thành một phần. Cơ sở dữ liệu đã đi từ SQL Server 2008 đến 2008R2 đến 2012 (không có SP, SP1, SP2) và có TDE trong một thời gian.

Bộ phận hỗ trợ của Microsoft đã xem xét nó trong một vài ngày, nhưng nó không có vẻ rất hứa hẹn và tôi nghĩ rằng chúng ta hiện đang nghiêng về một số hình thức tham nhũng. Ứng dụng của chúng tôi và mọi thứ khác dường như vẫn có thể truy cập tốt, nó chỉ cài đặt một lá cờ nhỏ này không hoạt động. Vấn đề rất lạ.

Tài liệu tham khảo duy nhất tôi tìm thấy trên mạng cho thấy vấn đề chính xác tương tự là từ một bài đăng trên diễn đàn Technet bằng tiếng Bồ Đào Nha ( liên kết dịch ), nhưng nó không bao giờ được giải quyết.

Tại thời điểm này, tôi không thể chờ đợi lâu hơn nữa và tôi chỉ muốn xây dựng lại dữ liệu này trong cơ sở dữ liệu mới. Tôi cho rằng tôi có thể viết kịch bản toàn bộ, nhưng DB này đã có khoảng 20 GB, vì vậy đó sẽ là một kịch bản khó chịu.

Có ai có gợi ý về cách tạo lại cơ sở dữ liệu mới dựa trên cơ sở dữ liệu khác - mà không cần Sao lưu / Khôi phục tiêu chuẩn không? Là kịch bản nó ra đúng cách để đi?


Câu hỏi ngớ ngẩn rất có thể, nhưng bạn đã đặt cơ sở dữ liệu về chế độ người dùng đơn trước khi thực hiện sửa đổi chưa?
Max Vernon

Một câu hỏi ngớ ngẩn khác: Có phải tất cả tàn dư của TDE đã biến mất? Tất cả?
Sean Gallardy - Người dùng đã nghỉ hưu

1
@MaxVernon Tôi nên đã đề cập rằng - vâng tôi có và điều đó không tạo ra sự khác biệt đáng tiếc. Đây là một vấn đề rất kỳ lạ. Từ những gì tôi thấy có vẻ như cài đặt này thực sự không khác gì một cờ đơn giản trong cơ sở dữ liệu (xin hãy sửa tôi nếu tôi sai) và thực tế là chúng tôi gặp lỗi này là điều mà MS đã không thấy trước khi nó nghe như
Adam Plocher

@SeanGallardy Tôi thực sự không chắc chắn. Tôi là người đã xóa TDE nhưng nó đã rất nhiều năm trước và tôi thực sự không có kinh nghiệm với nó. Có thể là tôi đã không xóa tất cả mọi thứ ... Tôi ước tôi có thể nhớ những gì tôi đã làm ... DB đã hoạt động tốt trong sản xuất trong nhiều năm nay, đây là vấn đề kỳ lạ đầu tiên chúng tôi thấy.
Adam Plocher

@AdamPlocher Tôi cũng đã phác thảo các bước TẠI ĐÂY với các tập lệnh cho BCP OUT và BCP IN. Điều đó sẽ nhanh hơn rất nhiều. Kiểm tra nó để xem nếu nó giúp trong tình huống của bạn.
Kin Shah

Câu trả lời:


8

Sử dụng SSMS để tạo tập lệnh cho toàn bộ cơ sở dữ liệu DDL.

nhập mô tả hình ảnh ở đây

Sử dụng tập lệnh để tạo một cơ sở dữ liệu mới, trống.

Sử dụng BCPđể xuất dữ liệu từ tất cả các bảng. Sử dụng BCPđể nhập dữ liệu đó vào cơ sở dữ liệu mới.

HÃY ĐẢM BẢO BẠN ĐÃ BẮT ĐẦU CƠ SỞ DỮ LIỆU GỐC trướcDROPingnó (nếu thực tế bạn có ý định bỏ nó đi). HÃY ĐỂ BẠN KIỂM TRA NHÀ HÀNG QUAY LẠI.


1
Cảm ơn Max, tôi sẽ tặng cái này vào buổi tối hôm nay. Tôi nghĩ rằng nó sẽ hoạt động, nhưng tôi sẽ cho bạn biết chắc chắn sau vài giờ nữa :)
Adam Plocher

Hãy chắc chắn rằng bạn viết kịch bản bất kỳ đối tượng cấp máy chủ nào như thông tin đăng nhập mà bạn yêu cầu nếu bạn đang di chuyển cơ sở dữ liệu mới sang máy chủ mới.
Max Vernon

1
Tôi sẽ kịch bản cấu trúc bảng, nhập dữ liệu và sau đó đồng bộ cấu trúc cơ sở dữ liệu - khóa ngoài, chỉ mục, procs, v.v.
jmoreno

1
Xin chào Max, xin lỗi vì đã không quay lại với bạn. Tôi đã chiến đấu với một số đối tượng không hợp lệ (procs có tham chiếu đến các trường không hợp lệ, v.v.) và có một vài vấn đề khiến bcp.exe phải làm những gì tôi muốn. Tôi rất gần có một cái gì đó hy vọng hoạt động ... Tôi chỉ muốn xác nhận nó hoạt động nhưng sẽ đánh dấu là câu trả lời một khi tôi làm (hy vọng hôm nay)
Adam Plocher

1
Cảm ơn một lần nữa Max. Tôi chưa hoàn thành 100% - và nó có một chút rắc rối nhưng bạn đã trả lời câu hỏi chính của tôi: tôi có nên kịch bản lược đồ sau đó nhập dữ liệu không? Tôi đã kết thúc bằng cách sử dụng Trình hướng dẫn nhập khẩu SQL cho hầu hết các mục liên quan đến dữ liệu, nhưng điều đó chủ yếu là do tôi không hiểu gì về bcp.exe. Đó là quá nhiều dữ liệu, quá nhiều thử nghiệm và lỗi chỉ mất quá nhiều thời gian, nhưng tôi biết nó sẽ có hiệu quả nếu tôi giữ nó để nó chắc chắn là một câu trả lời hợp lệ cho những người tìm thấy điều này trong tương lai. Tôi viết lược đồ theo kịch bản, bỏ các ràng buộc, được nhập với wiz nhập, các ràng buộc được tạo lại với SQL So sánh diff. Cám ơn!
Adam Plocher

5

Để làm cho tác vụ kịch bản dễ dàng hơn nhiều, bạn cũng có thể sử dụng các công cụ của bên thứ 3. MSVisualStudio có cả bộ công cụ so sánh Schema và Data. Cá nhân tôi thích công cụ SQLCompare của RedGate.

Tôi cũng sử dụng loại công cụ này mọi lúc để dễ dàng triển khai DEV-> QA-> PROD. Khi đã có lược đồ, bạn thực hiện một "Trình hướng dẫn nhập dữ liệu" đơn giản để sao chép dữ liệu nếu cần.

Điểm cộng của việc sử dụng các công cụ này là chúng thông minh hơn khi xây dựng các tập lệnh, sắp xếp các mục theo thứ tự tạo đúng, cảnh báo bạn trước các lỗi có thể xảy ra, chỉ tạo các mục bạn cần tạo / cập nhật và bao gồm các mục máy chủ mà bạn có thể quên khi chỉ sử dụng công cụ DBscripting, như đăng nhập hoặc máy chủ được liên kết hoặc bảo mật.


Cảm ơn Philippe. Cuối cùng tôi đã sử dụng kết hợp SQL So sánh / So sánh dữ liệu (đó là hai công cụ bắt buộc phải có đối với tôi), nhưng công cụ So sánh dữ liệu thực sự không thực tế đối với lượng lớn dữ liệu. Quá trình nhanh nhất tôi tìm thấy là loại bỏ các ràng buộc và sử dụng Trình hướng dẫn nhập dữ liệu với bật IDENTITY INSERT (trong tùy chọn Wiz). Được sử dụng SQL So sánh để lấy lại các ràng buộc sau. Nó nhanh hơn một triệu lần và không lấp đầy ổ C: của tôi (nơi đặt% TEMP%). Phân vùng C: của chúng tôi không lớn như phân vùng dữ liệu / nhật ký của chúng tôi.
Adam Plocher

1

Có một cách khác để xây dựng lại toàn bộ cơ sở dữ liệu MS SQL.

Bước 1: Sử dụng tập lệnh để sao chép dữ liệu của tất cả các bảng từ cơ sở dữ liệu cũ sang mới.

Declare @OldDBName Varchar(200)
Declare @NewDBName Varchar(200)

Select @OldDBName='OldDB',@NewDBName='NewDB'

    Select 'Select * into '+@NewDBName+'.'+sc.name+'.'+tbl.Name+ ' From '+@OldDBName+'.'+sc.name+'.'+tbl.Name
    from sys.tables tbl inner join sys.schemas sc on sc.schema_id=tbl.schema_id
     where type='U'

Bước 2: Áp dụng tất cả các loại ràng buộc trên các bảng của cơ sở dữ liệu mới.
1. Khóa chính
2. Khóa ngoài
3. Ràng buộc mặc định
4. Cột được tính toán
5. Danh tính
6. Chỉ mục

Lưu ý: Bạn có thể tìm thấy các tập lệnh đồng bộ hóa ràng buộc đó trên Connectsql.com ( http://www.connectsql.com/2013/11/sql-server-database-sy syncization_29.html?utm_source=BP_recent )

Bước 3: Tạo tập lệnh cho các đối tượng thông qua SSMS tương ứng và thực thi trên cơ sở dữ liệu mới.
1. Tạo tập lệnh Hàm thông qua SSMSS và thực thi trên cơ sở dữ liệu mới.
2. Tạo tập lệnh Lượt xem thông qua SSMSS và thực thi trên cơ sở dữ liệu mới.
3. Tạo tập lệnh Thủ tục lưu trữ thông qua SSMSS và thực thi trên cơ sở dữ liệu mới.
4. Tạo tập lệnh Triggers thông qua SSMSS và thực thi trên cơ sở dữ liệu mới.

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.