Có rất nhiều cơ sở dữ liệu trên máy chủ SQL của khách hàng của tôi. Các cơ sở dữ liệu này đang được phát triển, vì vậy các nhà phát triển có thể thiết kế, tái cấu trúc, thực hiện sửa đổi dữ liệu, v.v. Có một số cơ sở dữ liệu hiếm khi thay đổi. Khách hàng của tôi phải giữ tất cả chúng an toàn (được sao lưu) và dành thời gian quản lý môi trường. (Không có vị trí quản trị viên DB tại công ty.) Sau khi thảo luận kéo dài, khách hàng đã quyết định sử dụng chiến lược sao lưu toàn bộ hàng ngày, do dễ khôi phục.
Vì vậy, đây là tóm tắt của tình huống:
- Số lượng cơ sở dữ liệu có thể thay đổi mỗi ngày.
- Cơ sở dữ liệu đã được thay đổi (có nghĩa là dữ liệu và / hoặc cấu trúc đã được thay đổi) sẽ được sao lưu.
- Cơ sở dữ liệu không được thay đổi sẽ KHÔNG được sao lưu.
- Giải pháp sẽ không ảnh hưởng đến cấu trúc cơ sở dữ liệu (yêu cầu không bị hạn chế)
- "Công cụ sao lưu" này sẽ hoạt động tự động.
Vấn đề chính: làm thế nào để phát hiện ra rằng một cơ sở dữ liệu đã được thay đổi. Phần đầu tiên của vấn đề (thay đổi DDL) có thể được giải quyết bằng cách sử dụng trình kích hoạt DDL . Nhưng những thay đổi dữ liệu (thay đổi DML) là một vấn đề. Không thể áp dụng các kích hoạt DML cho tất cả các bảng của tất cả các cơ sở dữ liệu để theo dõi các thay đổi (hiệu suất, quản lý các đối tượng mở rộng ...). Công cụ sao lưu phải theo dõi tất cả các thay đổi để đánh dấu từng cơ sở dữ liệu là sẵn sàng để sao lưu.
Change Data Capture là một giải pháp nhưng có vẻ quá nặng (nó cũng yêu cầu SQL Server Enterprise Edition).
Một cách khác là theo dõi các thay đổi tệp cơ sở dữ liệu (kích thước hoặc thời gian thay đổi cuối cùng), nhưng nó không hoạt động chính xác: Cơ sở dữ liệu có thể thay đổi kích thước của nó khi vượt quá tất cả không gian trống dành riêng và sp_spaceuse không phải là một giải pháp.
Truy tìm là một giải pháp nhưng nó gây ra các vấn đề về hiệu suất và yêu cầu quản lý bổ sung.
Có giải pháp nào để tính kích thước sử dụng cơ sở dữ liệu thực tế mà không ảnh hưởng đến các đối tượng quản lý cơ sở dữ liệu khác (như thống kê ..) không? Được cho rằng một thay đổi đối với dữ liệu của bảng không thay đổi kích thước của bảng sẽ không kích hoạt (tôi nghĩ), nhưng tốt hơn là không có gì. Thực sự tôi đang tìm kiếm một giải pháp trực tiếp hoặc gián tiếp cho SQL Server 2008.
Cảm ơn bạn cho bất kỳ ý kiến, giải pháp và suy nghĩ.
THÊM:
Đây là giải pháp (nhờ có Marian ):
Select
NextLSN = MAX(fn.[Current LSN])
,Databasename = DB_NAME()
from fn_dblog(NULL, NULL) fn
LEFT JOIN sys.allocation_units au
ON fn.AllocUnitId = au.allocation_unit_id
LEFT JOIN sys.partitions p
ON p.partition_id = au.container_id
LEFT JOIN sys.objects so
ON so.object_id = p.object_id
WHERE
(
(Operation IN
('LOP_INSERT_ROWS','LOP_MODIFY_ROW',
'LOP_DELETE_ROWS','LOP_BEGIN_XACT','LOP_COMMIT_XACT')
AND so.is_ms_shipped = 0)
OR
([Lock Information] like '%ACQUIRE_LOCK_SCH_M OBJECT%')
)