2011-04-07 65 views
5

我有一個數據庫包含許多使用的表以及許多不再使用的表。雖然我可以手動對每張表進行分類以查看它們是否仍在使用,但這將是一項繁瑣的任務。是否有任何軟件/隱藏功能可用於SQL Server/Oracle數據庫,以返回「上一個月未使用表x,y,z」等信息?「已使用表a,b,c 17次今日「?或者可能通過「日期上次修改/選擇自」來排序表?是否有與SQL數據庫等效的「代碼覆蓋率」?

或者還有更好的方法去做這件事嗎?謝謝

編輯:當執行「SELECT * FROM sys.tables ORDER BY modify_date desc」時,我發現了一個「modify_date」列,但這似乎只跟蹤對錶格結構的修改,而不是其內容。

回答

6

與您感興趣的表名替換spt_values,查詢會給它使用了最後的時間,它被用來通過

從這裏什麼:Finding Out How Many Times A Table Is Being Used In Ad Hoc Or Procedure Calls In SQL Server 2005 And 2008

SELECT * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName,execution_count, 
    (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset/2+1 , 
     ((CASE WHEN statement_end_offset = -1 
     THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2) 
     ELSE statement_end_offset END) - statement_start_offset)/2+1)) AS sql_statement, 
     last_execution_time 
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2) x 
WHERE sql_statement like '%spt_values%' -- replace here 
AND sql_statement NOT like 'SELECT * FROM(SELECT coalesce(object_name(s2.objectid)%' 
ORDER BY execution_count DESC 

記住如果你重新啓動盒子,這將被清除

+0

在分離/重新連接或重新啓動服務器時是否重置? – JNK 2011-04-07 19:45:27

+0

是的,如果你重新啓動盒子,它將被重置 – SQLMenace 2011-04-07 19:45:57

+0

對不起,但我不確定我是否明白你的意思,重新啓動盒子。重新啓動服務器? – tom 2011-04-07 19:50:48

0

如果你使用觸發器,你可以檢測更新插入或刪除表上。

訪問可能更困難。

0

我在元數據中使用靜態分析的組合來確定SQL Server中沒有依賴關係和運行時跟蹤的表/列,以查看正在發生的活動。

+0

你能用這種方式獲得準確的跨DB依賴信息嗎? – JNK 2011-04-07 19:50:38

+0

@JNK不,你被限制在數據庫邊界。與任何「客戶」代碼相同。只有痕跡可以真正告訴你是否有可能發生的事情。 – 2011-04-07 19:52:03

+0

對於SQL Server 2008,sys.sql_expression_dependencies具有引用數據庫和服務器名稱的列。 – 2011-04-07 22:04:53

0

一些可能對您有用的查詢。

select * from sys.dm_db_index_usage_stats 

select * from sys.dm_db_index_operational_stats(db_id(),NULL,NULL,NULL) 

select * from sys.sql_expression_dependencies /*SQL Server 2008 only*/ 

betweeen什麼第2周的DMV報告不同的是explained well in this blog post.

1

在Oracle中你可以使用ASH(活動會話歷史記錄)來查找有關的是使用SQL信息。您還可以使用Hierarchical Profiler執行代碼覆蓋率測試,您可以在其中查找使用或不使用存儲過程的哪些部分。

如果您想知道表數據的更新,也可以使用DBA_TAB_MODIFICATIONS。這將顯示在表或表分區上執行了多少次插入,更新和刪除操作。只要生成新的對象統計信息,指定表的行將從DBA_TAB_MODIFICATIONS中刪除。你在這裏仍然有幫助,因爲你也可以在表統計歷史記錄中查看。這並不顯示任何有關僅查詢表的內容。如果你真的需要了解這一點,你就要使用ASH。

請注意,對於ASH和統計歷史訪問,您都需要診斷或調整包許可證。 (通常你會想要這個)。

0

Ed Elliott的開源工具SQL Cover是一個不錯的選擇,它內置了對流行的單元測試工具tSQLt的支持。