SQL, Mantenimiento a Base de datos

Script para crear un SP llamado xOptimiza

--
Create Proc xOptimiza
@mov int
AS
-- Declaración de variables necesarias para los procesos
DECLARE @ID int, @Name varChar(128), @Reindexa int, @Indice varchar(128), @DB VarChar(128)

-- Select db_name()
-- Asigana un valor correcto a esta variable para iniciar el proceso deseado
Select 	@Reindexa = @mov,
	@DB = db_name()
If @Reindexa < 5
Begin
-- Se obtiene la lista de las tablas de usuario para despues poderlas analizar
Declare Tablas Cursor For
	Select id, rTrim(name) from sysobjects where xtype = 'U' Order by name

-- Abre el cursor "TABLAS" para recorrer tabla por tabla
Open Tablas
	-- Obtiene el primer registro de las tablas
	Fetch Next From Tablas
		Into @ID, @Name
	While @@Fetch_Status = 0
	Begin
		Print '******************************************************************* ' + @Name
		
		IF @Reindexa = 0
		-- Muestra la Fragmentacion de la información e indices
		Dbcc Showcontig (@ID)

		IF @Reindexa = 1
		Begin
		-- Defragmenta los indices de una tabla
			If Exists (Select Name From sysindexes Where Id = @ID and IndId <> 0) 
			Begin
				Declare Indices Cursor For
					Select name From sysindexes Where id = @ID and indid <> 0 and rows <> 0
				Open Indices
					Fetch Next From Indices
						Into @Indice
					While @@Fetch_Status = 0
					Begin
						Print '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' + @Indice
						DBCC INDEXDEFRAG (@DB,@Name, @Indice)
						-- Select @Indice, @Name
						Fetch Next From Indices
							Into @Indice
					End
				Close Indices
				Deallocate Indices
			End
			Else
				print '-- No tiene indices que defragmentar'

		End
		IF @Reindexa = 2
		Begin
			-- Muestra la fragmentación de la informacion e indices, y despues
			-- reconstrulle los indices de la tabla cambiandoles el fill-factor a 60 para un mejor desempeño
			If Exists (Select name From sysindexes Where id = @ID and indid <> 0) 
			Begin
				Dbcc Showcontig (@ID)
				Declare Indices Cursor For
					Select name From sysindexes Where id = @ID and indid <> 0 and rows <> 0
				Open Indices
					Fetch Next From Indices
						Into @Indice
					While @@Fetch_Status = 0
					Begin
						Print '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' + @Indice
						DBCC DBREINDEX (@Name, @Indice, 80)
						-- Select @Indice, @Name
						Fetch Next From Indices
							Into @Indice
					End
				Close Indices
				Deallocate Indices
			End
			Else
				print '-- No tiene indices que defragmentar'
		End

		IF @Reindexa = 3
		-- Revisa la integridad de la información, indices y la imagen de la página
		DBCC CheckTable (@Name)

		IF @Reindexa = 4
		-- Informa el espacio utilizado por las tablas
		EXEC sp_spaceused @Name

		Print ''
		Print ''
		-- Obtiene siguiente registro de tablas
		Fetch Next From Tablas
			Into @ID, @Name
	End
-- Cierra y libera el cursor "TABLAS"
Close Tablas
Deallocate Tablas
End

IF @Reindexa = 5
-- Revisa la consistenacia de el almacenamiento de la informacion en el 
-- disco duro
DBCC CHECKALLOC (@DB)


IF @Reindexa = 6
DBCC CHECKALLOC (@DB, REPAIR_REBUILD)

-- Reactiva la opcion para contar los registros
--Set NoCount OFF
--

 

Los posibles valores que pude tomar la variable @Reindexa:

0 : Muestra la Fragmentación de la información e indices

1 : De fragmenta los indices de las tablas

2 : Muestra la fragmentación de la información e indices, y después reconstruye los indices de las tablas cambiándoles el fill-factor a 80 para un mejor desempeño

3 : Revisa la integridad de la información, indices y la imagen de la página

4 : Informa el espacio utilizado por las tablas

5 : Revisa la consistencia de el almacenamiento de la información en el disco duro

 

Modo para ejecutar el SP

--
Exec xOptimiza 1
--

 

Documento Confidencial

 
 

También te podría gustar...