← maurobernal.com.ar

Etiqueta: tsql

  • Obtener Base Actual

    Cuando trabajamos con campos calculados a veces es necesario incluir el nombre de la base sobre la que está realizando la consulta. De esta manera si realizamos esta misma consulta en varias veces, y unimos el resultado tendremos siempre un dato agrupador que nos identificará la base origen.

    Esta función es DB_NAME().

    Ejemplo:
    select db_name() as BaseActual

    Resultado:

    BaseActual
    master

     

  • Listar Tamaño de las Bases de Datos

    El siguiente script en TSQL lista todas las bases de datos con sus respectivos tamaños en Megas y Gigas.

    SELECT DB_NAME(db.database_id) DatabaseName,
    round((CAST(mfrows.RowSize AS FLOAT)*8)/1024,2) RowSizeMB,
    round((CAST(mflog.LogSize AS  FLOAT)*8)/1024,2) LogSizeMB,
    round((CAST(mfrows.RowSize AS FLOAT)*8)/1024+(CAST(mflog.LogSize AS FLOAT)*8)/1024,2) DBSizeMB,
    round((CAST(mfrows.RowSize AS FLOAT)*8)/1024/1024+(CAST(mflog.LogSize AS FLOAT)*8)/1024/1024,2) DBSizeGB
    FROM sys.databases db LEFT JOIN
    (SELECT database_id, SUM(size) RowSize FROM sys.master_files WHERE type = 0
      GROUP BY database_id, type) mfrows
    ON mfrows.database_id = db.database_id LEFT JOIN
    (SELECT database_id, SUM(size) LogSize FROM sys.master_files WHERE type = 1
      GROUP BY database_id, type) mflog
    ON mflog.database_id = db.database_id LEFT JOIN
    (SELECT database_id,SUM(size) StreamSize FROM sys.master_files WHERE type = 2
     GROUP BY database_id, type) mfstream
    ON mfstream.database_id = db.database_id LEFT JOIN
    (SELECT database_id, SUM(size) TextIndexSize FROM sys.master_files  WHERE type = 4
      GROUP BY database_id, type) mftext
    ON mftext.database_id = db.database_id
    ORDER BY 4 DESC

    Complementa al siguiente script para listar las bases de datos con su ubicación:
    https://maurobernal.com.ar/blog/blog/t-sql/listar-todas-las-bases-de-datos-con-su-respectiva-ubicacion-y-tamanos/

  • Verificar Backups por TSQL

    Verificar que se hayan realizado correctamente los backups es tarea fundamental de un DBA.

    Para ello contamos con una serie de tablas provistar por Microsoft SQL Server para almacenar dicha información:

    • msdb.dbo.backupfile
    • msdb.dbo.backupmediafamily
    • msdb.dbo.backupmediaset
    • msdb.dbo.backupset

     

    Los siguientes scripts pueden facilitar dicha tarea.

    Más adelante trabajaremos con más detalle.

     

    Atención:   Si copian y pegan puede que la comilla simple (‘) se convierta a comilla doble («»).

    /*******************************************************************************
    Último Backup de la Base
    ******************************************************************************/
    SELECT    S.Name AS DB, MAX(B.backup_finish_date) Fecha,DATEDIFF(hh,MAX(B.backup_finish_date),GETDATE()) Antiguedad_HS ,
    CASE
      WHEN DATEDIFF(hh , MAX(B.backup_finish_date, GETDATE()) > 24 THENSI’
    WHEN MAX(B.backup_finish_dateIS NULL THEN ‘SI’ ELSE »
    END AS SinBackupUltimas24hs
    FROM sys.sysdatabases S LEFT OUTER JOIN msdb.dbo.backupset B ON B.database_name = S.name
    WHERE B.type NOT LIKE ‘L’ AND S.name NOT LIKE  ‘tempdb’
    GROUP BY S.Name ORDER BY S.Name

    /*******************************************************************************
    Ultimo Backup del Log
    ******************************************************************************/
    SELECT S.Name AS DB,MAX(B.backup_finish_date) Fecha ,
    CASE WHEN DATEDIFF(hh , MAX(B.backup_finish_date, GETDATE()) > 4 THEN ‘SI’
    WHEN MAX(B.backup_finish_dateIS NULL THEN ‘SI’ ELSE »
    END AS SinBackupUltimas24hs
    FROM sys.sysdatabases S LEFT OUTER JOIN msdb.dbo.backupset B ON B.database_name = S.name
    WHERE B.type LIKE ‘L’ AND S.name NOT LIKE ‘tempdb’
    GROUP BY S.Name ORDER BY S.Name

    /*******************************************************************************
    Detalle por Backups de los últimos 7 días
    ******************************************************************************/
    SELECT    database_name as DB, name AS Backup_Name, backup_finish_date AS LastBackup,
    CASE [type] WHEN ‘D’ THEN ‘Full’ 
    WHEN ‘L’ THEN ‘Log’
    WHEN ‘I’ THEN ‘Differential’ ELSE ‘Other’
    END AS Tipo_Backup
    FROM    msdb.dbo.backupset B
    WHERE backup_finish_date DATEADD(dd,-7,GETDATE())
    ORDER BY database_name, backup_finish_date desc

  • Quitar microsegundos a una fecha en SQL Server

    De la siguiente manera podrán quitar (truncar) la fechas para quitarles los microsegundos.

    –Como Quedaria sin los microsegundos

    SELECT
    CampoFecha
    ,DATEADD(MILLISECOND,
    DATEPART(MILLISECOND ,
    CampoFecha

    )
    ,
    CampoFecha

    )
    as Resultado From Tabla

     

    –Update de la Tabla

    update Tabla set
    CampoFecha=DATEADD(MILLISECOND,
    DATEPART(MILLISECOND ,
    CampoFecha

    )
    ,
    CampoFecha

    )


     

  • Ultimo dia del Mes con SQL Server y otros

    Trabajando con funciones TSQL para realizar cálculos de Fechas

    A continuación una serie de funciones en TSQL útiles para el cálculo de fechas:

    -->Mes Actual:
    -----------------------------------
    --Primer día del mes actual
    SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
    --Último día del mes actual
    SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
    
    -->Mes Anterior:
    -----------------------------------
    --Primer día del mes anterior
    SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,GETDATE())-1,0))
    --Último día del mes anterior
    SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
    
    -->Mes Siguiente:
    -----------------------------------
    ----Primer día del mes siguiente
    SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
    ----Último día del mes siguiente
    SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
    
    
    --> Trimestre Actual:
    -----------------------------------
    ----Primer día del trimestre actual
    SELECT DATEADD(qq,DATEDIFF(qq,0,GETDATE()),0) 
    ----Último día del trimestre actual
    SELECT DATEADD(qq,DATEDIFF(qq,-1,GETDATE()),-1)

    Resultados

    Con la fecha 10 de Noviembre del 2017 esto serían los resultados

    Primer_Y_Ultimo_Dia_Resultados

     

    Otra alternativa

    Continuando con el trabajo con fechas con TSQL podemos hacer lo mismo, pero con una función nativa: EOMONTH()

    Si les interesa les dejo el link, que incluye como siempre un caso práctico:

    https://maurobernal.com.ar/blog/blog/t-sql/obtener-ultimo-dia-del-mes-sql-server/


  • Obtener el número de la Semana

    Una función muy simple en diferentes lenguajes para obtener el número de la semana.

    Obtener el número de semana del año con PERL

    my $numeroSemana = POSIX::strftime("%V", gmtime time);
    

    Obtener el número de semana del año con PHP

    $numeroSemana = date("W"); 
    

    o date(«W», epoch). Se usa la letra mayúscula ‘W’.

    Obtener el número de semana del año con SQL

    En MySQL:

     SELECT WEEKOFYEAR(NOW())
    

     o
    

     SELECT WEEK(NOW(),3)
    

     

    En MS SQL Server:

    SELECT DATEPART( wk, GETDATE() )
    

  • Listar todas las bases de datos con su respectiva ubicación y tamaños

    Listar todas las bases de datos

    Una problemática habitual con la que me enfrentaba en las PCs de desarrollo era que me quedaba sin espacio en los discos por logs inmanejables, y más de una vez olvidar la ubicación de los archivos de las bases en proyectos versionados.

    El siguiente script muy simple pero muy útil permite listar las bases, sus respectivos tamaños, archivos que la componen(MDF y LDF). Además es posible agregarle más campos a gusto del lector.( complementa a este script que muestra los tamaños )

    select d.database_id,d.name, a.name as filename,a.physical_name as ubication,
     a.type_desc,(a.size/128)as sizeMB, recovery_model_desc,d.state_desc,compatibility_level
    from sys.master_files a inner join sys.databases d on (a.database_id = d.database_id)
    order by a.type,a.size
    
    

    Espero que les sea útil, y como siempre cualquier sugerencia será tenida en cuenta..

    Hasta la próxima…

     

Tags

tsql (27)mssql (26)sql (20)devops (20)dotnet (18)docker (15)performance (14)contenedores (11)dotnet10 (10)linux (9)csharp (8)microservicios (7)angular (7)angular21 (7)sql server (6)issabel (6)docker-compose (6)typescript (6)mysql (5).NET (5)