12/24/2018 04:40:00 p. m.
Share:
Blog Informático sobre Análisis y Desarrollo de Software.
-- -- INSERT INTO tabla (campo1, campo2) VALUES ('f1c1', 'f1c2'), ('f2c1', 'f2c2'),('f3c1', 'f3c2');
-- -- INSERT INTO MyTable (FirstCol, SecondCol) SELECT 'f1c1' , 'f1c2' UNION ALL SELECT 'f2c1' , 'f2c2' UNION ALL SELECT 'f3c1' , 'f3c2' UNION ALL SELECT 'f4c1' , 'f4c2' UNION ALL SELECT 'f5c1' , 'f5c2' GO
-- -- -- --Cursor que contiene todos los objetos que ocupan espacio DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY for SELECT s.name + '.' + o.name from sys.schemas s INNER JOIN sys.objects o ON o.schema_id = s.schema_id WHERE o.type = 'S' or --Tablas de sistema o.type = 'U' or --Tablas de usuario o.type = 'V' or --Vistas (solo las indexadas devuelven tamaño) o.type = 'SQ' or --Cola de servicio o.type = 'IT' -- Tablas internas usadas p.e. por el Service Broker o los indices XML --Tabla temporal para albergar los resultados CREATE TABLE #results (name_with_schema SYSNAME, name SYSNAME, rows CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18),Unused VARCHAR(18)) DECLARE @resultado AS TABLE (name SYSNAME, rows CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18),Unused VARCHAR(18)) --Recorremos el cursor obteniendo la información de espacio ocupado DECLARE @object_name AS SYSNAME OPEN objects_cursor FETCH NEXT FROM objects_cursor INTO @object_name; WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO @resultado EXEC sp_spaceused @object_name INSERT INTO #results SELECT @object_name, x.* from @resultado as x delete from @resultado FETCH NEXT FROM objects_cursor INTO @object_name; END; CLOSE objects_cursor; DEALLOCATE objects_cursor; -- Quitamos "KB" para poder ordenar UPDATE #results SET reserved = LEFT(reserved,LEN(reserved)-3), data = LEFT(data,LEN(data)-3), index_size = LEFT(index_size,LEN(index_size)-3), Unused = LEFT(Unused,LEN(Unused)-3) --Ordenamos la información por el tamaño ocupado SELECT name_with_schema, Name, reserved AS [Tamaño en Disco (KB)], data AS [Datos (KB)], index_size AS [Indices (KB)], Unused AS [No usado (KB)], Rows AS Filas FROM #results ORDER BY name_with_schema, name, CONVERT(bigint, reserved) DESC drop table #results
-- -- CREATE PROCEDURE [dbo].[PROC_HABILITAR_DESHABILITAR_TRIGGERS_BASE] @HABILITAR bit = 1 AS DECLARE @string VARCHAR(8000) DECLARE @NombreTabla NVARCHAR(500) DECLARE @NombreEsquema NVARCHAR(500) DECLARE @instruccion NVARCHAR(500) SET @instruccion = CASE WHEN @HABILITAR = 1 THEN 'ENABLE' ELSE 'DISABLE' END DECLARE cur CURSOR FOR SELECT DISTINCT sch.name AS nombre_esquema, ta.name as 'nombre_tabla' FROM sys.objects tr INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id inner join sys.objects ta on tr.parent_object_id = ta.object_id where tr.type = 'TR' order by sch.name, ta.name OPEN cur FETCH next FROM cur INTO @NombreEsquema, @NombreTabla WHILE @@fetch_status = 0 BEGIN SET @string ='Alter table '+ @NombreEsquema + '.'+@NombreTabla + ' ' + @instruccion + ' trigger all' EXEC (@string) FETCH next FROM cur INTO @NombreEsquema, @NombreTabla END CLOSE cur DEALLOCATE cur GO
-- -- SELECT name AS tbname, * FROM sysobjects WHERE id IN(SELECT parent_obj FROM sysobjects WHERE xtype='tr') -- o SELECT ta.name AS tbname, * FROM sys.objects ta inner join sys.objects tr on ta.object_id = tr.parent_object_id WHERE tr.type = 'TR'
-- -- select * from Information_schema.Columns where table_name = 'WorkOrder'
-- -- SELECT sch.name AS nombre_esquema, ta.name as 'nombre_tabla', tr.name as nombre_trigger, tr.object_id, * FROM sys.objects tr INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id inner join sys.objects ta on tr.parent_object_id = ta.object_id where tr.type = 'TR' order by sch.name, ta.name
-- -- SELECT TAB.name as Table_Name , TRIG.name as Trigger_Name , TRIG.is_disabled FROM [sys].[triggers] as TRIG inner join sys.tables as TAB on TRIG.parent_id = TAB.object_id --where TRIG.is_disabled = 1 --t.name in ('WorkOrder', 'Vendor');
-- -- select so.name, text from sysobjects so, syscomments sc where type = 'TR' and so.id = sc.id and so.name like '%WorkOrder%'
-- -- SELECT o.name AS tbname, s.name AS schema_name FROM sys.objects o INNER JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE type='U' ORDER BY schema_name,o.name
-- -- SELECT schema_Name(schema_id) as Nombre_Esquema, [name] as Nombre_Objeto, -- Nombre de la tabla, procedimiento almacenado, vista o función [type] as Tipo_Objeto -- 'V' para Vistas, 'U' para Tablas, 'P' para Procedimientos Almacenados, 'FN' para funciones FROM sys.objects WHERE [type_desc] IN ( 'USER_TABLE', 'SQL_STORED_PROCEDURE', 'VIEW', 'SQL_SCALAR_FUNCTION') AND [name] NOT LIKE 'sp_%' AND [name] NOT LIKE 'fn_%' ORDER BY 3 DESC, -- primero el tipo de objeto 1 ASC, -- luego el esquema 2 ASC -- luego el nombre de la tabla / función
-- -- SELECT * FROM SYS.SYSCOMMENTS WHERE TEXT LIKE '%CREATE TRIGGER%'
-- -- SELECT s.name,tab.name as tablename, ind.name as indexname FROM sys.indexes ind INNER JOIN sys.tables tab ON ind.object_id = tab.object_id INNER JOIN sys.schemas s on tab.schema_id = s.schema_id ORDER BY s.name,tab.name
-- -- SELECT name, o.create_date, o.modify_date, * FROM AdventureWorks2012.sys.objects o WHERE type = 'p' AND name NOT LIKE 'sp_%' and (convert(date, modify_date) >= '2012-02-01' or convert(date, create_date) >= '2012-02-01') ORDER BY o.modify_date DESC
-- -- create database Marketing on primary (Name= ‘Marketing′, Filename=’D:\SQL SERVER - practicas\Marketing.mdf’, Size= 4Mb, MaxSize= 30MB, FileGrowth=10%) log on (Name=’Marketing_LDF’, Filename=’D:\SQL SERVER - practicas\Marketing.ldf’, Size= 4Mb, MaxSize= 30MB, FileGrowth=10%) go
-- -- -- Crear una base de datos AdventureWorks2012 en base al archivo AdventureWorks2012_Data.MDF y AdventureWorks2012_Log.LDF CREATE DATABASE [AdventureWorks2012] ON (FILENAME = N'D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorks2012_Data.mdf') LOG ON (FILENAME = [D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorks2012_Log.ldf]) FOR ATTACH
-- -- -- Cambiar el nombre lógico de un archivo ALTER DATABASE AdventureWorks2012 MODIFY FILE (NAME='AdventureWorks2012_Data', NEWNAME='AdventureWorks_Data') GO ALTER DATABASE AdventureWorks2012 MODIFY FILE (NAME='AdventureWorks2012_Log', NEWNAME='AdventureWorks_Log') GO
-- -- alter database AdventureWorks set restricted_user with rollback IMMEDIATE alter database AdventureWorks set MULTI_USER alter database AdventureWorks set offline with rollback immediate
-- -- alter database AdventureWorks set online
-- -- SELECT distinct TABLE_SCHEMA,TABLE_NAME,COLUMN_Name FROM INFORMATION_SCHEMA.COLUMNS, sys.Objects so WHERE --TABLE_SCHEMA = 'dbo' and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 and so.Type = 'U' ORDER BY TABLE_NAME
-- -- RESTORE HEADERONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak' RESTORE FILELISTONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak' RESTORE LABELONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak'
-- -- RESTORE DATABASE AdventureWorksDW2012 FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak' WITH FILE = 1, RECOVERY, MOVE 'AdventureWorksDW2012' TO 'D:\SQL SERVER - practicas\DATA\AdventureWorksDW2012.mdf', MOVE 'AdventureWorksDW2012_log' TO 'D:\SQL SERVER - practicas\DATA\AdventureWorksDW2012_Log.ldf'
-- -- 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')
-- -- ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = '' ; GO
-- -- sp_depends MIGRACION_INCREMENTAL_TABLAS
-- -- SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent FROM sys.dm_sql_referencing_entities ('dbo.MIGRACION_INCREMENTAL_TABLAS', 'OBJECT'); GO
-- -- select name, c.id, c.text, o.xtype, o.crdate from syscomments c join sysobjects o on c.id = o.id where c.TEXT like '%MIGRACION_INCREMENTAL_TABLAS%'
-- -- create procedure proc_prueba as begin DECLARE @VARIABLE nvarchar(2000) set @VARIABLE = 'select * from MIGRACION_INCREMENTAL_TABLAS' end
-- -- use AdventureWorks2012 GO; SELECT s.name, tab.name as tablename, ind.name as indexname FROM sys.indexes ind INNER JOIN sys.tables tab ON ind.object_id = tab.object_id INNER JOIN sys.schemas s on tab.schema_id = s.schema_id where tab.name = 'Department' and s.name = 'HumanResources' ORDER BY s.name,tab.name
-- -- SELECT a.index_id, name as nombre_indice, avg_fragmentation_in_percent as porcentaje_fragmentacion FROM sys.dm_db_index_physical_stats (DB_ID(N'BD_TRIBUTACION'), OBJECT_ID(N'dbo.Cta_Corriente'), NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; GO -- o en AdventureWorks2012 SELECT a.index_id, name, avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), OBJECT_ID(N'HumanResources.Department'), NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; GO
-- -- ALTER INDEX [NombreDelIndice] ON [schema].[TablaDondeEstaElIndice] REORGANIZE
-- -- ALTER INDEX [NombreDelIndice] ON [schema].[TablaDondeEstaElIndice] REBUILD
-- -- USE BD_TRIBUTACION; GO -- Reorganizar todos los índices de la tabla dbo.Cta_corriente. ALTER INDEX ALL ON dbo.Cta_corriente REBUILD; GO
-- -- 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' into #reorganizar_reindexar FROM sys.dm_db_index_physical_stats (DB_ID('N'BD_TRIBUTACION'), OBJECT_ID(N'dbo.cta_corriente'), 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 --select * from #reorganizar_reindexar DECLARE @i int = 1, @ix int declare @nombre_indice varchar(200), @nombre_tabla varchar(200), @accion varchar(10) declare @sql nvarchar(200)='' select top 1 @i = index_id, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion from #reorganizar_reindexar order by index_id while @i 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' --WITH (ONLINE = ON); end else begin set @sql = 'ALTER INDEX '+ @nombre_indice + ' ON dbo.' + @nombre_tabla + ' REBUILD' --WITH (ONLINE = ON);; end --RAISERROR(@sql, 0, 1) WITH NOWAIT Print @sql RAISERROR(N'', 0, 1) WITH NOWAIT execute sp_executesql @sql set @ix = null select top 1 @ix = index_id, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion from #reorganizar_reindexar where index_id > @i order by index_id set @i = @ix end drop table #reorganizar_reindexar
0 comentarios: