Phương pháp ưa thích để tung ra các bản cập nhật cho hàng trăm cơ sở dữ liệu là gì


7

Tôi đang cố gắng xác định cách tốt nhất để triển khai các tập lệnh SQL tới hàng trăm máy chủ phân tán. Tôi có gói SSIS chậm và quy trình OSQL / BATCH rất nhanh.

Tôi đang ở trong một dự án nơi chúng tôi có hàng trăm máy chủ cơ sở dữ liệu được triển khai trong lĩnh vực này. Tôi cần có thể thường xuyên truy vấn các máy chủ và / hoặc áp dụng các kịch bản nâng cấp cơ sở dữ liệu.

Khi chúng tôi chỉ có 20 máy chủ, tôi đã xây dựng gói SSIS để lấy danh sách các máy chủ và xử lý từng máy chủ một. Gói SSIS hoạt động rất tốt, có hàng tấn xử lý lỗi và ghi nhật ký, v.v. Nó có thể chụp các bộ reult từ mỗi máy chủ và lưu trữ chúng ở một vị trí trung tâm để phân tích thêm. Do cách tôi xây dựng nó, tuy nhiên, nó xử lý từng máy chủ một cách thanh thản. 20 Máy chủ mất khoảng 10 phút để xử lý. Tôi đang ở một điểm mà phương pháp này đơn giản là quá chậm.

Trước khi tôi đầu tư nhiều thời gian hơn vào việc viết lại gói này để sinh ra các gói khác (một cho mỗi máy chủ), tôi đã hy vọng nhận được một số lời khuyên từ những người khác ngoài kia đang gặp phải tình huống tương tự.

Bạn sẽ sử dụng SSIS theo cách này, hoặc chuyển sang powershell, hoặc thậm chí OSQL?

Gần như là một trò đùa, tôi đã đào qua kho lưu trữ của mình và rút ra một quy trình hàng loạt mà tôi đã viết 12 năm trước để áp dụng các tập lệnh trên các máy chủ từ xa. Tôi đã thực hiện một vài điều chỉnh (thay đổi thành OSQL) và nó chạy rất nhanh. Tôi có thể xử lý 100 máy chủ trong vòng dưới 20 giây. Tôi khởi chạy nó từ một máy Windows 7, không bị nghẹt thở khi nhiều cửa sổ lệnh được mở.

Nhược điểm của giải pháp OSQL / BATCH là tệp bó được mã hóa cứng với tên máy chủ và mật khẩu. Nhưng nó quá nhanh nên tôi sẽ tiếp tục sử dụng cho đến khi tôi tìm được giải pháp tốt hơn.

Gói SSIS - Gói SSIS hiện tại thực hiện các thao tác sau: - kết nối với máy chủ trung tâm - truy xuất danh sách các máy chủ cần truy vấn - sử dụng bộ chứa trước, kết nối với từng máy chủ (nối tiếp) và thực hiện truy vấn - nếu truy vấn trả về một tập kết quả, thông tin này được ghi lại và lưu trữ tại máy chủ trung tâm - máy chủ trung tâm được cập nhật để phản ánh thành công / thất bại của mỗi máy chủ - tất cả các lỗi được ghi lại ở máy chủ trung tâm


Chính xác thì điều gì đang xảy ra như là một phần của quá trình này? Gói SSIS làm gì?
Thomas Stringer

@shark, tôi sẽ thêm nhiều hơn vào câu hỏi ban đầu để giải thích gói SSIS
datagod

Câu trả lời:


10

Tôi sẽ điều chỉnh giải pháp nhanh của bạn thành một thứ dễ mở rộng hơn, như PowerShell .

Sẽ thật tầm thường khi PS đọc một tệp văn bản cho một danh sách các máy chủ để chạy và một tệp hoặc tệp khác để thực hiện các lệnh nào.

Bạn cũng có thể thêm xử lý lỗi và tương tự như trong lô SSIS của mình và để nó chạy không đồng bộ để nó hoạt động đồng thời trên tất cả các máy chủ của bạn.


2
CozyRoc có phần mở rộng Parallel Loop cho SSIS. Nhiều người đã yêu cầu Microsoft thêm nó vào SSIS thích hợp, nhưng họ đã từ chối .
Nick Chammas

+1 À, PowerShell. Câu trả lời tuyệt vời cho nhiều câu hỏi :)
Thomas Stringer

2

PowerShell là câu trả lời, nhưng nếu bạn đã có một tập lệnh nhanh như vậy, bạn có thể cân nhắc sử dụng chức năng Máy chủ quản lý trung tâm . Nó không làm được nhiều thứ mà tôi đã cố gắng thực hiện gần đây, nhưng nó làm được một điều cực kỳ tốt, nó nhanh chóng tấn công nhiều máy chủ với tập lệnh nếu bạn đã ở trong SSMS.


Tôi không thể sử dụng chức năng Máy chủ quản lý trung tâm vì môi trường cụ thể của chúng tôi không có xác thực windows. Chúng tôi đang sử dụng xác thực Máy chủ SQL, không được CMS hỗ trợ cho các truy vấn phân tán.
datagod

Nếu bạn đã có tất cả các máy chủ của mình dưới dạng Máy chủ đã đăng ký, bạn có thể chạy truy vấn đối với nó. (Hoạt động cho cả Xác thực SQL và Windows) - nhưng vẫn nghĩ PowerShell là giải pháp tốt nhất.
DaniQuery
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.