martes, 20 de diciembre de 2016

Algunas consultas que me han ayudado mucho en el día a día....

--Validar tamaño del log de transacciones--

Select name
,physical_name
,(size/1024) Tamaño_Actual_MB
,max_size Tamaño_Maximo_KB
,growth Crecimiento_Autom
,is_percent_growth
from sys.database_files


--BUSCAR TABLAS EN LA BD--

Select name as object_name
  ,SCHEMA_NAME(schema_id) as schema_name
  ,type_desc
  ,create_date
  ,modify_date
From sys.objects
Where name like 'vol%'
and type_desc = 'USER_TABLE'
Order by modify_date desc;


--Últimos accesos a una tabla (SE DEBEN TENER PERMISOS)--

SELECT tab.name AS Tablename,
       user_seeks, user_scans, user_lookups, user_updates,
       last_user_seek, last_user_scan, last_user_lookup, last_user_update
FROM sys.dm_db_index_usage_stats ius
INNER JOIN sys.tables tab ON (tab.object_id = ius.object_id)
WHERE database_id = DB_ID(N'nombre_bd')
  AND tab.name = 'nombre_tabla'


--BUSCAR COLUMNAS EN TABLAS DE LA BD--

SELECT TABLE_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%migra%' 


--FILEGROUPS--

SELECT *
FROM sys.filegroups

SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('nombre_bd');


--Tablas por filegroup--

SELECT o.[name] AS 'TABLE',
f.[name] AS 'FILE_GROUP'
FROM sys.indexes i INNER JOIN sys.filegroups f ON i.data_space_id = f.data_space_id
INNER JOIN sys.objects o ON i.[object_id] = o.[object_id]
WHERE o.type = 'U' andi.type < 2
Order by O.name


--CALCULAR FECHA DE NACIMIENTO--

SELECT (((365* year(getdate()))-(365*(year(FECHA_NACIMIENTO))))+ (month(getdate())-month(FECHA_NACIMIENTO))*30 +(day(getdate()) - day(FECHA_NACIMIENTO)))/365


--INFORME TAMAÑO TABLAS BD--

select sysobjects.name
, sum(case when sysindexes.indid<2 then rows else 0 end) as rows
sum(case when sysindexes.indid in (0,1,255) then sysindexes.reserved else 0 end) * 8 as reserved
sum(case when sysindexes.indid in (0,1) then sysindexes.dpages when sysindexes.indid=255 then sysindexes.used else 0 end) * 8 as Data
, (sum(case when sysindexes.indid in (0,1,255) then sysindexes.used else 0 end) - sum(case when sysindexes.indid in (0,1) then sysindexes.dpages when sysindexes.indid=255 then sysindexes.used else 0 end))*8 as index_size
, (sum(case when sysindexes.indid in (0,1,255) then sysindexes.reserved-sysindexes.used else 0 end)*8) as unused
from sysobjects join sysindexes on sysobjects.id=sysindexes.id
where xtype='U' 
group by sysobjects.name
order by 2 desc

--es equivalente a:

sp_spaceused [nombre_tabla]


--GENERACION SCRIPT PARA INFORME TAMAÑO TABLAS BD (se debe ejecutar mostrando los resultados en Text y no en Grid para poderlo copiar para ejecutar)--

SELECT 'sp_columns ' + o.[name] AS 'TABLE', CHAR(13) + CHAR(10) + 'go'
FROM sys.indexes i INNER JOIN sys.filegroups f
ON i.data_space_id = f.data_space_id INNER JOIN sys.objects o
ON i.[object_id] = o.[object_id]
WHERE o.type = 'U' and i.type < 2
Order by O.name


--concatenar registros de un campo en un solo registro--

declare @cadena varchar(1000)
select @cadena = ''

select @cadena = @cadena + ' - ' + Color
from Colores

select Cadena_De_Colores = right(@cadena, len(@cadena) - 3)


--Conocer el porcentaje de fragmentacion de los indices--

WITH INDICES (BD, INDICETIPO, FRAGMENTACION, INDICE, TABLA)
AS (
SELECT DBS.NAME BASEDEDATOS, PS.INDEX_TYPE_DESC, PS.AVG_FRAGMENTATION_IN_PERCENT,
IND.NAME INDICE, TAB.NAME TABLA
FROM
SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(), NULLNULLNULLNULL) PS
INNER JOIN SYS.DATABASES DBS
ON PS.DATABASE_ID = DBS.DATABASE_ID
INNER JOIN SYS.INDEXES IND
ON PS.OBJECT_ID = IND.OBJECT_ID
INNER JOIN SYS.TABLES TAB
ON TAB.OBJECT_ID = IND.OBJECT_ID
WHERE IND.NAME IS NOT NULL AND PS.INDEX_ID = IND.INDEX_ID
AND PS.AVG_FRAGMENTATION_IN_PERCENT > 0)
SELECT DISTINCT 
      CASE
      WHEN FRAGMENTACION > 5 AND FRAGMENTACION <= 30 THEN 'ALTER INDEX ' + INDICE + ' ON ' + TABLA + ' REORGANIZE'    
      WHEN FRAGMENTACION > 30 THEN 'ALTER INDEX ' + INDICE + ' ON ' + TABLA + ' REBUILD'
      END QUERY, FRAGMENTACION, BD, INDICE, TABLA
FROM (SELECT FRAGMENTACION, INDICE, TABLA, BD FROM INDICES
      WHERE FRAGMENTACION > 5) A
ORDER BY FRAGMENTACION DESC