4/27/2018 07:48:00 a. m.
Share:
Blog Informático sobre Análisis y Desarrollo de Software.
-- -- create procedure PROC_REINDEXA_TABLAS as begin set nocount on -- Reduce el tamaño de los archivos de datos y de registro de la base de datos especificada. DBCC SHRINKDATABASE(N'tempdb') CREATE TABLE #tablas_reindexar ( ID smallint identity, Nombre_Tabla varchar(200) ) insert into #tablas_reindexar values('dbo.cta_corriente') insert into #tablas_reindexar values('dbo.transaccion') insert into #tablas_reindexar values('dbo.descuento_cta') insert into #tablas_reindexar values('dbo.decremento_cta') insert into #tablas_reindexar values('dbo.DOCUMENTO') insert into #tablas_reindexar values('dbo.DETALLE_DOCUMENTO') insert into #tablas_reindexar values('dbo.PAGO') insert into #tablas_reindexar values('dbo.DETALLE_PAGO') insert into #tablas_reindexar values('dbo.RESOLUCION') insert into #tablas_reindexar values('dbo.PERSONA') insert into #tablas_reindexar values('dbo.INTERES') CREATE TABLE #reorganizar_reindexar ( Id int identity, Index_ID int, NOMBRE_INDICE varchar(200), NOMBRE_TABLA varchar(200), PORCENTAJE_FRAGMENTACION decimal(10,2), ACCION varchar(2) ) DECLARE @DB_NAME nvarchar(100) = ( select DB_NAME() ) -- LLENAR a la tabla #reorganizar_reindexar los indices de las tablas especificadas, -- el porcentaje de fragmentación y la acción que corresponde de REORGANIZAR O RECONSTRUIR DECLARE @nombre_tabla varchar(200) = null DECLARE @id_tabla smallint = 0 SELECT TOP 1 @id_tabla = ID, @nombre_tabla = nombre_tabla from #tablas_reindexar where ID > @id_tabla order by ID WHILE @nombre_tabla is not null BEGIN insert into #reorganizar_reindexar (Index_ID, NOMBRE_INDICE, NOMBRE_TABLA, PORCENTAJE_FRAGMENTACION, ACCION) SELECT a.index_id, name as nombre_indice, OBJECT_name(a.object_id) as nombre_tabla, avg_fragmentation_in_percent as porcentaje_fragmentacion, case when avg_fragmentation_in_percent <= 30 then 'RO' -- REORGANIZAR else 'RI' -- REINDEXAR END as 'ACCION' FROM sys.dm_db_index_physical_stats (DB_ID(@DB_NAME), OBJECT_ID(@nombre_tabla), NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id where avg_fragmentation_in_percent >= 5 and name <> '' set @nombre_tabla = null SELECT TOP 1 @id_tabla = ID, @nombre_tabla = nombre_tabla from #tablas_reindexar where ID > @id_tabla order by ID --Print 'ID = ' + convert(varchar, isnull(@id_tabla,0)) + ', ' + @nombre_tabla END DECLARE @i int = 1 declare @nombre_indice varchar(200), @accion varchar(10) declare @sql nvarchar(200)='' set @nombre_tabla = null select top 1 @i = ID, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion from #reorganizar_reindexar order by ID while @nombre_tabla is not null begin --RAISERROR(@i, 0, 1) WITH NOWAIT Print @i RAISERROR(N'', 0, 1) WITH NOWAIT if @accion = 'RO' begin set @sql = 'ALTER INDEX ' + @nombre_indice + ' ON dbo.' + @nombre_tabla + ' REORGANIZE' end else begin set @sql = 'ALTER INDEX '+ @nombre_indice + ' ON dbo.' + @nombre_tabla + ' REBUILD' + ' WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON)' end --RAISERROR(@sql, 0, 1) WITH NOWAIT Print @sql RAISERROR(N'', 0, 1) WITH NOWAIT execute sp_executesql @sql set @nombre_tabla = null select top 1 @i = ID, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion from #reorganizar_reindexar where ID > @i order by ID end set nocount off drop table #reorganizar_reindexar drop table #tablas_reindexar end
-- -- use AdventureWorks2012 GO; -- https://www.lawebdelprogramador.com/foros/SQL/615668-Como-ver-en-que-filegroup-esta-la-tabla.html select si.name, sf.fileid, sf.name as 'nombre file', sfg.groupid, sfg.groupname from sysindexes si inner join sysfiles sf on si.groupid = sf.groupid inner join sysfilegroups sfg on sf.groupid = sfg.groupid where si.id = object_id('HumanResources.Department')
0 comentarios: