Advertisement
davsank

Get DB Free Sizw

Jun 15th, 2015
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.24 KB | None | 0 0
  1. IF EXISTS(
  2.     SELECT 1
  3.     FROM tempdb.dbo.sysobjects
  4.     WHERE id = OBJECT_ID('tempdb.dbo.#DBObj')
  5. ) DROP TABLE #DBObj
  6.  
  7. CREATE TABLE #DBObj
  8. (
  9.       [DB] SYSNAME
  10.     , reservedpages INT
  11.     , usedpages INT
  12.     , pages INT
  13. )
  14.  
  15. EXEC sys.sp_MSforeachdb '
  16.    USE [?]
  17.  
  18.    INSERT INTO #DBObj
  19.    (
  20.          [DB]
  21.        , reservedpages
  22.        , usedpages
  23.        , pages
  24.    )
  25.    SELECT
  26.          DB_NAME()
  27.        , pg.reservedpages
  28.        , pg.usedpages
  29.        , pg.pages  
  30.    FROM (
  31.        SELECT
  32.              reservedpages = SUM(a.total_pages)
  33.            , usedpages = SUM(a.used_pages)
  34.            , pages = SUM(
  35.                CASE
  36.                    WHEN it.internal_type IN (202, 204, 207, 211, 212, 213, 214, 215, 216, 221, 222) THEN 0
  37.                    WHEN a.[type] != 1 AND p.index_id < 2 THEN a.used_pages
  38.                    WHEN p.index_id < 2 THEN a.data_pages ELSE 0
  39.                END
  40.              )
  41.        FROM sys.partitions p
  42.        JOIN sys.allocation_units a ON p.[partition_id] = a.container_id
  43.        LEFT JOIN sys.internal_tables it ON p.[object_id] = it.[object_id]
  44.    ) pg'
  45.  
  46. SELECT
  47.       d.name
  48.     , total_size_mb = DATA.row_size_mb + DATA.log_size_mb
  49.     , DATA.log_size_mb
  50.     , DATA.row_size_mb
  51.     , unused_size_mb = CAST((do.reservedpages - do.usedpages) * 8. / 1024 AS DECIMAL(10,2))
  52.     , unallocated_space_GB =
  53.         CAST(CASE WHEN DATA.row_size >= do.reservedpages
  54.             THEN (DATA.row_size - do.reservedpages) * 8. / 1024 /1024
  55.             ELSE 0
  56.         END AS DECIMAL(10,2))
  57. FROM (
  58.     SELECT
  59.           df2.database_id
  60.         , log_size_mb = CAST(df2.log_size * 8. / 1024 AS DECIMAL(10,2))
  61.         , row_size_mb = CAST(df2.row_size * 8. / 1024 AS DECIMAL(10,2))
  62.         , df2.log_size
  63.         , df2.row_size
  64.     FROM (
  65.         SELECT
  66.               df.database_id
  67.             , log_size = SUM(CASE WHEN df.type_desc = 'LOG' THEN df.SIZE END)
  68.             , row_size = SUM(CASE WHEN df.type_desc = 'ROWS' THEN df.SIZE END)
  69.         FROM sys.master_files df
  70.         GROUP BY df.database_id
  71.     ) df2
  72. ) DATA
  73. JOIN sys.DATABASES d ON DATA.database_id = d.database_id
  74. JOIN #DBObj do ON do.DB = d.name
  75. ORDER BY DATA.row_size_mb + DATA.log_size_mb DESC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement