предложить запрос в SQL, чтобы найти неиспользуемые таблицы - PullRequest
0 голосов
/ 04 июня 2009

SNAHi

кто-нибудь, пожалуйста, предложите запрос в sql, чтобы найти неиспользуемые таблицы.

У меня есть устаревшее приложение, перенесенное в .net из coldfusion. Но сейчас многие таблицы не используются

Каков наилучший способ найти все неиспользуемые объекты из базы данных. (sql 2005)

спасибо SNA

Ответы [ 3 ]

4 голосов
/ 04 июня 2009

В SQL Server данные точной таблицы IS кластеризованный индекс. С помощью этого запроса в представлениях динамического управления (DMV) в SQL Server 2005 и более поздних версиях вы можете найти неиспользуемые индексы - если вы обнаружите, что какой-либо кластерный индекс (index_id = 1) не используется в течение длительного периода времени, таблица не используется больше:

DECLARE  @dbid INT
SELECT @dbid = DB_ID(DB_NAME())

SELECT   
    OBJECTNAME = OBJECT_NAME(I.OBJECT_ID),
    INDEXNAME = I.NAME,
    I.INDEX_ID
FROM     
    SYS.INDEXES I
JOIN 
    SYS.OBJECTS O ON I.OBJECT_ID = O.OBJECT_ID
WHERE    
    OBJECTPROPERTY(O.OBJECT_ID, 'IsUserTable') = 1
    AND I.INDEX_ID NOT IN 
        (SELECT S.INDEX_ID
        FROM SYS.DM_DB_INDEX_USAGE_STATS S
        WHERE S.OBJECT_ID = I.OBJECT_ID
              AND I.INDEX_ID = S.INDEX_ID
              AND DATABASE_ID = @dbid)
ORDER BY 
    OBJECTNAME,
    I.INDEX_ID,
    INDEXNAME ASC

Другой вариант - временно переименовать таблицу, если вы подозреваете, что она не используется, а затем посмотреть, все ли ваши приложения работают должным образом. Если они делают, например, Примерно через 30 дней вы будете уверены, что вам больше не нужен этот стол.

Марк

1 голос
/ 22 декабря 2010

- Запрос, чтобы найти таблицы, не используемые ни одной хранимой процедурой, функцией или представлением - Использование системных таблиц SQL 2005, всех программных объектов для зависимостей и один-единственный запрос:

select tables.name, progr.name
from sys.objects tables (nolock) 
    left join sys.syscomments comm (nolock) on comm.text like '%' + tables.name +'%'
    left join sys.objects progr (nolock) on progr.object_id = comm.id and progr.type in ('P', 'FN', 'TR', 'V' )
where tables.type = 'U'
    and comm.id is null
0 голосов
/ 08 июня 2009

Вот запрос, который я написал, чтобы найти таблицы, не используемые никакими процедурами магазина. .................................................. ....................................

Declare @tablename nvarchar(40)
Declare tablecursor cursor for
    Select name from sysobjects where xtype = 'U'
DECLARE @sqlCommand nvarchar(1000)
declare @rowCount int
DECLARE @searchstring varchar(50)
DECLARE @ParmDefinition nvarchar(500);

create table #temp
(
    UnusedTables nvarchar(40)
)

open tablecursor
fetch next from tablecursor into @tablename
while @@fetch_status = 0
begin               
    set @searchstring='p'
    SET @sqlCommand = N'SELECT @rows = count(o.name) from sysobjects o , 
    syscomments c where o.type='+char(39)+@searchstring + char(39)+' and 
    o.id=c.id and c.text like '+ char(39)+'%' +  @tablename +'%'+char(39);
    SET @ParmDefinition = N'@rows int OUTPUT';              

    EXECUTE sp_executesql @sqlCommand, @ParmDefinition,@rows=@rowCount OUTPUT;

    if @rowCount = 0 
    begin
        insert into #temp values (@tablename)                     
    end

    fetch next from tablecursor into @tablename
end

close tablecursor
deallocate tablecursor
select UnusedTables from #temp
drop table #temp

спасибо SA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...