Batch Script để đơn giản bảo trì cơ sở dữ liệu máy chủ SQL
Ngoài việc tạo các bản sao lưu, có rất nhiều nhiệm vụ và chức năng mà SQL Server cung cấp, điều này có thể cải thiện hiệu suất và độ tin cậy của cơ sở dữ liệu của bạn. Trước đây chúng tôi đã chỉ cho bạn cách sao lưu cơ sở dữ liệu SQL Server bằng một tập lệnh dòng lệnh đơn giản để cùng một cách chúng tôi cung cấp một tập lệnh cho phép bạn dễ dàng thực hiện các tác vụ bảo trì chung.
Nén / thu hẹp cơ sở dữ liệu [/ Compact]
Có một số yếu tố góp phần vào không gian đĩa vật lý mà cơ sở dữ liệu SQL Server sử dụng. Chỉ cần nêu một vài tên:
- Theo thời gian khi các bản ghi được thêm, xóa và cập nhật, SQL liên tục phát triển và thu hẹp các bảng cũng như tạo các cấu trúc dữ liệu tạm thời để thực hiện các thao tác truy vấn. Để đáp ứng nhu cầu lưu trữ đĩa, SQL Server sẽ tăng kích thước cơ sở dữ liệu (thường là 10%) khi cần để kích thước tệp cơ sở dữ liệu không thay đổi liên tục. Mặc dù điều này lý tưởng cho hiệu năng, nhưng nó có thể gây ra sự ngắt kết nối với không gian lưu trữ được sử dụng bởi vì, ví dụ, nếu bạn thêm một số lượng lớn các bản ghi khiến cơ sở dữ liệu phát triển và sau đó xóa các bản ghi này, SQL Server sẽ không tự động lấy lại không gian đĩa.
- Nếu bạn đang sử dụng Chế độ khôi phục hoàn toàn trên cơ sở dữ liệu của mình, tệp nhật ký giao dịch (LDF) có thể phát triển khá lớn, đặc biệt là trên các cơ sở dữ liệu có khối lượng cập nhật lớn.
Nén (hoặc thu hẹp) cơ sở dữ liệu sẽ lấy lại không gian đĩa không sử dụng. Đối với cơ sở dữ liệu nhỏ (200 MB trở xuống), điều này thường sẽ không nhiều, nhưng đối với cơ sở dữ liệu lớn (1 GB trở lên), không gian được thu hồi có thể là đáng kể.
Reindexing một cơ sở dữ liệu [/ Reindex]
Giống như liên tục tạo, chỉnh sửa và xóa các tệp có thể dẫn đến phân mảnh đĩa, chèn, cập nhật và xóa các bản ghi trong cơ sở dữ liệu có thể dẫn đến phân mảnh bảng. Các kết quả thực tế là giống nhau ở chỗ các hoạt động đọc và ghi phải chịu một hiệu suất. Mặc dù không phải là một sự tương tự hoàn hảo, nhưng reindexing các bảng trong cơ sở dữ liệu về cơ bản chống phân mảnh chúng. Trong một số trường hợp, điều này có thể làm tăng đáng kể tốc độ truy xuất dữ liệu.
Do cách thức hoạt động của SQL Server, các bảng phải được lập chỉ mục lại riêng lẻ. Đối với cơ sở dữ liệu có số lượng bảng lớn, điều này có thể thực sự đau đớn khi thực hiện thủ công, nhưng tập lệnh của chúng tôi sẽ truy cập mọi bảng trong cơ sở dữ liệu tương ứng và xây dựng lại tất cả các chỉ mục.
Xác minh tính toàn vẹn [/ Xác minh]
Để cơ sở dữ liệu duy trì cả chức năng và tạo ra kết quả chính xác, có rất nhiều mục toàn vẹn phải có. Rất may, các vấn đề toàn vẹn về vật lý và / hoặc logic không phổ biến lắm, nhưng đôi khi nên chạy quy trình xác minh tính toàn vẹn trên cơ sở dữ liệu của bạn và xem xét kết quả.
Khi quá trình xác minh được chạy qua tập lệnh của chúng tôi, chỉ có lỗi được báo cáo, vì vậy không có tin nào là tin tốt.
Sử dụng tập lệnh
Tập lệnh bó SQLMaint tương thích với SQL 2005 trở lên và phải được chạy trên máy có cài đặt công cụ SQLCMD (được cài đặt như một phần của cài đặt SQL Server). Bạn nên thả tập lệnh này vào một vị trí được đặt trong biến Windows PATH của bạn (tức là C: Windows) để có thể dễ dàng gọi nó như bất kỳ ứng dụng nào khác từ dòng lệnh.
Để xem thông tin trợ giúp, chỉ cần nhập:
SQLMaint /?
Ví dụ
Để chạy một bản rút gọn và sau đó xác minh trên cơ sở dữ liệu, My MyDB bằng cách sử dụng kết nối đáng tin cậy:
SQLMaint MyDB / Compact / Xác minh
Để chạy một reindex và sau đó nén lại trên My MyDB trên phiên bản có tên là Special Special bằng cách sử dụng người dùng của sa sa với mật khẩu.
SQLMaint MyDB /S:. Special / U: sa / P: 123456 / Reindex / Compact
Sử dụng từ Inside of Batch Script
Mặc dù tập lệnh bó SQLMaint có thể được sử dụng như một ứng dụng từ dòng lệnh, khi bạn đang sử dụng tập lệnh bên trong tập lệnh bó khác, nó phải được bắt đầu bằng từ khóa CALL.
Ví dụ: tập lệnh này chạy tất cả các tác vụ bảo trì trên mọi cơ sở dữ liệu phi hệ thống trên bản cài đặt SQL Server mặc định bằng xác thực đáng tin cậy:
@ECHO TẮT
SETLOCAL EnableExtensions
THIẾT LẬP DBList = '%% TEMP% DBList.txt
SqlCmd -E -h-1 -w 300 -Q BỘ THIẾT LẬP NoCount ON; Tên CHỌN TỪ master.dbo.sysDatabase WHERE Tên Không IN ('master', 'model', 'msdb', 'tempdb'),>> DBList%
FOR / F và usBackq tokens = 1 Lần %% i IN (% DBList%) DO (
GỌI SQLMaint búa %% i Danh / Nhỏ gọn / Reindex / Xác minh
ECHO +++++++++++
)
NẾU EXIST% DBList% DEL / F / Q% DBList%
KẾT THÚC
Tải xuống tập lệnh SQLMaint Batch từ SysadminGeek.com