2008-11-18 36 views
10

Có cách nào dễ dàng để theo dõi các phụ thuộc của bảng/thủ tục lưu trữ/chức năng trong SQL Server 2005+ không? Tôi đã thừa hưởng một ứng dụng khổng lồ với nhiều bảng và thậm chí nhiều thủ tục và chức năng được lưu trữ lâu hơn và được liên kết với nhau.Phụ thuộc máy chủ SQL

Vào cuối ngày, có cách nào để xây dựng cây phụ thuộc không? Lý tưởng nhất mà tôi đang tìm kiếm theo cả hai hướng:

Để biết bảng/thủ tục - điều gì phụ thuộc vào nó?: Chỉ cho tôi tất cả các thủ tục được lưu trữ mà cuối cùng tham chiếu đến nó (lý tưởng trong chế độ xem dạng cây sao cho các thủ tục phụ lồng ghép các thủ tục lớn hơn gọi chúng)

Để biết quy trình - phụ thuộc vào điều gì?: Chỉ cho tôi tất cả các quy trình và bảng mà một quy trình cụ thể sẽ (hoặc có thể) chạm khi chạy.

Dường như công cụ này không khó để thực hiện và sẽ cực kỳ hữu ích cho việc bảo trì DB nói chung. Có ai biết điều đó không? Nếu điều này không tồn tại, tại sao heck không?

Chức năng tích hợp trong Management Studio rất đẹp nhưng thông tin dường như không hoàn chỉnh chút nào.

Trả lời

11

Cổng đỏ có một công cụ khá hữu ích được gọi là SQL Dependency Tracker. Chúng tôi đã sử dụng thành công nó cho loại kết quả bạn mong muốn có được.

+0

Cuối cùng có xung quanh để sử dụng thử nghiệm miễn phí - đây là một công cụ tuyệt vời. – Cory

2

Tôi không nghĩ đó là danh sách được đảm bảo hoàn chỉnh, nhưng trong Management Studio bạn có thể nhấp chuột phải vào bảng hoặc thủ tục được lưu trữ và chọn tùy chọn View Dependencies.

0

Bảng hệ thống cố gắng theo dõi các phụ thuộc thường sai, vì vậy bất kỳ câu trả lời nào bạn nhận được từ đó, bạn sẽ phải xác nhận lại bằng các phương tiện khác, vậy tại sao phải bận tâm với nó?

Các sản phẩm thương mại tồn tại, chẳng hạn như Trình theo dõi phụ thuộc SQL Redgate.

Một nhà phát triển nghèo như bản thân mình, tôi sử dụng SQL Digger, miễn phí. Bằng cách tìm kiếm DDL cho một tên đối tượng, bạn thường có thể tìm thấy những phụ thuộc mức độ đầu tiên có cho một đối tượng được đề cập đến.

Cấp độ tiếp theo của truy tìm phụ thuộc là theo dõi đối tượng net C# hoặc VB.NET phụ thuộc vào đối tượng trong SQL, nhưng AFAIK, công cụ không tồn tại ở bên ngoài tìm kiếm chung.

2

Dưới đây là danh sách các tùy chọn nếu bạn thấp trên ngân sách:

http://www.mssqltips.com/tip.asp?tip=1294

Bạn cũng có thể chạy một dấu vết và xem những gì studio quản lý được thực sự làm khi bạn nhấp vào 'xem phụ thuộc'. Lấy mã đó và xem liệu bạn có thể sửa đổi nó để sử dụng riêng của bạn hay không. Đây là một kỹ thuật tốt để tìm ra cách tự động hóa những thứ khác nhau mà bạn thường làm thông qua giao diện người dùng.

+0

Làm cách nào để "Lấy mã đó"? – Cory

+1

Sử dụng profiler bạn sẽ có thể xem mã nào đang chạy trên máy chủ. –

25

Hy vọng rằng tôi không quá muộn với điều này:

Nếu SQL của bạn Đăng nhập có quyền truy cập vào giản đồ sys trong một cơ sở dữ liệu cụ thể, bạn có thể sử dụng sys.dependencies xem các để tìm tất cả các phụ thuộc của một đối tượng trong một shot:

SELECT o.name, o.type_desc, p.name, p.type_desc 
FROM sys.sql_dependencies d 
INNER JOIN sys.objects o 
    ON d.object_id = o.object_id 
INNER JOIN sys.objects p 
    ON d.referenced_major_id = p.object_id 

Sử dụng điểm này làm điểm khởi đầu bạn có thể xây dựng một công cụ thích hợp để tạo cây phụ thuộc.Cũng có các kiểu xem cụ thể (ví dụ: sys.columns) cung cấp thêm thông tin chi tiết về từng loại đối tượng cơ sở dữ liệu cụ thể; chúng có thể được sử dụng để cung cấp thông tin theo ngữ cảnh trên một đối tượng nếu cần thiết.

+0

Tính năng này có hoạt động với SQL Server 2000 không? –

+0

Tôi tin rằng khung nhìn Object Catalog mà bảng 'sys.objects' thuộc về đã được giới thiệu trong SQL 2005, nhưng một truy vấn tương tự có thể được viết bằng cách sử dụng khung nhìn Lược đồ thông tin. Chúng hơi phức tạp hơn một chút, nhưng bạn có thể tìm thấy tài liệu trên chúng tại http://msdn.microsoft.com/en-us/library/aa933204 (SQL.80).aspx –

+0

Bạn có thể lưu nó vào Excel và nhập bằng [ Gephi] (http://gephi.org) (một trình hiển thị đồ thị miễn phí và thực sự tiên tiến) –

0

Tôi đã tìm thấy giải pháp này và tuyệt vời của nó.

SELECT referencing_schema_name, referencing_entity_name, 
referencing_id, referencing_class_desc, is_caller_dependent 
FROM sys.dm_sql_referencing_entities ('dbo.udf_func', 'OBJECT'); 
0

Từ MSDN:

SELECT * FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID(N'Production.Product'); 

Chúng ta có thể làm cho nó fancier:

select 
I.name depending, I.xtype dependingtype, 
E.name depended, E.xtype dependedtype 
from sys.sql_expression_dependencies D 
left outer join sysobjects I on D.referencing_id = I.id 
left outer join sysobjects E on D.referenced_id = E.id 
where 1 = 1 
and (E.name = 'mytable' or I.name = 'mytable') -- customize this any way you want 
order by dependedtype, depended, dependingtype, depending 
Các vấn đề liên quan