删除对象时统计信息是否已删除?

时间:2019-09-16 09:59:01

标签: sql sql-server statistics

如果删除了一个对象(表/索引..),与该对象有关的统计信息是否仍然可用或与被删除的对象一起被删除?

2 个答案:

答案 0 :(得分:0)

来自virtual-dba.com

  

删除表/索引时只需注意:如果有任何统计类型为   与表关联,然后数据库取消关联   统计信息类型并删除收集的所有用户定义的统计信息   统计类型。

答案 1 :(得分:-1)

什么是默认跟踪?

  

默认跟踪是SQL Server 2005首次包含的一项新功能,它提供对架构修改(如表创建和存储过程删除等)的审核。默认情况下它确实运行,但是您可以将其打开..

有关更多信息:https://www.mssqltips.com/sqlservertip/1739/using-the-default-trace-in-sql-server/

在此查询中。使用EventClass 92和93来跟踪数据库自动增长事件。这是一个查询,用于查找谁删除/创建或更改了数据库或数据库本身中的对象。

DECLARE @current VARCHAR(500);
DECLARE @start VARCHAR(500);
DECLARE @indx INT;

SELECT @current = path
FROM sys.traces
WHERE is_default = 1;

SET @current = REVERSE(@current)

SELECT @indx = PATINDEX('%\%', @current)

SET @current = REVERSE(@current)
SET @start = LEFT(@current, LEN(@current) - @indx) + '\log.trc';

-- Change filter as needed
SELECT 
    CASE EventClass
       WHEN 46 THEN 'Object:Created'
       WHEN 47 THEN 'Object:Deleted'
       WHEN 164 THEN 'Object:Altered'
    END, 
    DatabaseName, ObjectName, HostName, ApplicationName, LoginName, 
    StartTime
FROM
    ::fn_trace_gettable(@start, DEFAULT)
WHERE 
    EventClass IN (46,47,164) AND EventSubclass = 0 AND DatabaseID <> 2
ORDER BY 
    StartTime DESC

您可以使用此查询查找已创建,已删除,更改表信息的所有详细信息...

SQL Server中有一些不同的默认跟踪。...

SELECT DISTINCT Trace.EventID, TraceEvents.NAME AS Event_Desc
FROM ::fn_trace_geteventinfo(1) Trace,
     sys.trace_events TraceEvents
WHERE Trace.eventID = TraceEvents.trace_event_id

上面的查询用于事件类,在上面的示例中也使用(Object:Created,Object:Deleted,Object:Altered);您可以根据需要进行更改。