Làm cách nào để thay đổi đối chiếu Cơ sở dữ liệu Máy chủ SQL?


16

Tôi đang cố gắng chuẩn hóa tất cả các cơ sở dữ liệu trên một đối chiếu duy nhất - Latin1_General_CI_AS (đối chiếu chuẩn). Tôi có một số cơ sở dữ liệu nằm trong SQL_Latin1_General_CP1_CI_AS.

Tôi biết tôi có thể sử dụng ALTER DATABASE để thay đổi đối chiếu cơ sở dữ liệu, nhưng điều đó chỉ ảnh hưởng đến các đối tượng mới. Hiểu biết của tôi là cách duy nhất để thay đổi các cột hiện có là thực hiện ALTER COLUMN trên mỗi cột trong mỗi bảng - và tôi sẽ cần bỏ và tạo lại tất cả các chỉ mục để thực hiện điều đó.

Tôi đoán nó sẽ trông giống như thế này:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

và lặp lại cho mỗi cột varchar, char, text, nvarchar, nchar và ntext trong toàn bộ cơ sở dữ liệu. Đó sẽ là một tập lệnh SQL khổng lồ .

Có cách nào dễ dàng hơn để làm điều này không, hoặc có ai có thể đề xuất một cách tự động hóa việc tạo tập lệnh SQL để làm việc đó không?

Câu trả lời:


9

MS KB 325335 có các tùy chọn về cách thực hiện điều này cho toàn bộ db và tất cả các cột.

Về cơ bản:

  1. Bảng cơ sở dữ liệu tập lệnh (với đối chiếu mới)
  2. Dữ liệu DTS / SSIS (xem đối chiếu)
  3. Thêm các ràng buộc


2

Thật không may, đây không phải là một nhiệm vụ dễ dàng trong SQL Server.

Bạn có thể sử dụng một công cụ kịch bản như So sánh SQL của Redgate cho các đối tượng cơ sở dữ liệu hiện tại của bạn (bảng, quy trình được lưu trữ, chế độ xem, v.v.) Nếu bạn không có giấy phép, bạn có thể sử dụng bản dùng thử miễn phí. Sau khi bạn đã tạo cơ sở dữ liệu mới với đối chiếu đúng và xây dựng lại các đối tượng từ tập lệnh của mình, bạn có thể chạy SSIS để chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác. Nếu bạn có nhiều dữ liệu, hãy sử dụng chèn số lượng lớn T-SQL.

Để có đối chiếu đúng cho cơ sở dữ liệu trong tương lai trên máy chủ đó, bạn có thể thay đổi đối chiếu mặc định trên máy chủ. Bài viết MSDN sau đây giải thích những thay đổi khi sử dụng mệnh đề THU THẬP của ALTER DATABASE và ALTER TABLE:

Cài đặt và thay đổi đối chiếu cơ sở dữ liệu (Sách dành cho SQL Server 2008 trực tuyến)

Bạn có thể thay đổi đối chiếu của bất kỳ đối tượng mới nào được tạo trong cơ sở dữ liệu người dùng bằng cách sử dụng mệnh đề COLLATE của ALTER DATABASE . Tuyên bố này không thay đổi đối chiếu các cột trong bất kỳ bảng do người dùng xác định hiện có. Chúng có thể được thay đổi bằng cách sử dụng mệnh đề COLLATE của ALTER TABLE .

Khi bạn thay đổi đối chiếu cơ sở dữ liệu, bạn thay đổi như sau:

  • Đối chiếu mặc định cho cơ sở dữ liệu. Đối chiếu mặc định mới này được áp dụng cho tất cả các cột, kiểu dữ liệu do người dùng xác định, các biến và tham số được tạo sau đó trong cơ sở dữ liệu. Nó cũng được sử dụng khi phân giải các định danh đối tượng được chỉ định trong các câu lệnh SQL so với các đối tượng được xác định trong cơ sở dữ liệu.
  • Bất kỳ cột char, varchar, text, nchar, nvarchar hoặc ntext trong các bảng hệ thống đều được thay đổi thành đối chiếu mới.
  • Tất cả các tham số char, varchar, text, nchar, nvarchar hoặc ntext hiện có và các giá trị trả về vô hướng cho các thủ tục được lưu trữ và các hàm do người dùng định nghĩa được thay đổi thành đối chiếu mới.
  • Các kiểu dữ liệu hệ thống char, varchar, text, nchar, nvarchar hoặc ntext và tất cả các kiểu dữ liệu do người dùng định nghĩa dựa trên các kiểu dữ liệu hệ thống này, được thay đổi thành đối chiếu mặc định mới.

1

Nói chung, không nên làm điều này với một máy chủ trực tiếp. Lần cuối cùng tôi nhìn, làm điều này không được Microsoft hỗ trợ chính thức. Để làm điều này trong thực tế, bạn phải tạo một thể hiện mới với đối chiếu đúng và di chuyển cơ sở dữ liệu sang nó.

Khôi phục DB với máy chủ có đối chiếu mặc định khác nhau gây ra tất cả các loại niềm vui vì tempdb sẽ có đối chiếu máy chủ mới, vì vậy điều này cũng không được khuyến nghị.


1

Hãy thử tiện ích này , được cung cấp một cơ sở dữ liệu nguồn sẽ tạo ra tất cả các tập lệnh cần thiết để được áp dụng trên cơ sở dữ liệu đích để đối chiếu được thay đổi một cách an toàn.


1

Bạn có thể sử dụng các khung nhìn Infomation_Schema để tạo tập lệnh đủ dễ dàng, nhưng tôi không chắc đây là cách tốt nhất để giải quyết vấn đề của bạn. Việc tạo lại tất cả các chỉ mục trên một db lớn có thể mất một lượng lớn thời gian / không gian nhật ký, v.v. Tôi sẽ chuyển sang di chuyển (không khôi phục) sang một thể hiện 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.