home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Database / DBMaint / data1.cab / Program_Files / sp_warn_if_full_db.sql < prev   
Encoding:
Text File  |  1999-04-06  |  2.2 KB  |  63 lines

  1. USE master
  2. GO
  3.  
  4. CREATE PROC sp_warn_if_full_db @fillpercentage DECIMAL(5,2) = NULL AS
  5. /*******************************************************************************/
  6. /* Generates warning is db is fuller than specified value.                     */
  7. /* @fillpercentage is how full the db should be for a warning to be generated. */
  8. /* Copyright (c) Tibor Karaszi and B÷rje Carlsson 1998.                        */
  9. /* Tested on verion 6.5. Does nothing if executed on 7.0.                      */
  10. /*******************************************************************************/
  11. SET NOCOUNT ON
  12.  
  13. DECLARE @ver VARCHAR(5)
  14. SELECT @ver = CASE
  15. WHEN CHARINDEX('6.50', @@VERSION) > 0 THEN '6.50'
  16. WHEN CHARINDEX('7.00', @@VERSION) > 0 THEN '7.00'
  17. END 
  18. -- This is not supported on 7.0.
  19. IF @ver = '6.50'
  20. BEGIN
  21.  IF @fillpercentage NOT BETWEEN 1 AND 99 OR @fillpercentage IS NULL
  22.    BEGIN
  23.     RAISERROR("Bad parameters: @fillpercentage = How full db for warning to be generated.", 16, 1)
  24.     RETURN -101
  25.    END 
  26.  
  27.  DECLARE @db_size FLOAT, @db_full_pages FLOAT, @db_full_percentage FLOAT, @msg VARCHAR(255)
  28.  
  29.  -- User defined segments are not supported
  30.  IF (SELECT COUNT(*) FROM sysusages WHERE segmap NOT IN(3, 4, 7)) > 0
  31.    BEGIN
  32.     RAISERROR("User defined segments are not supported.", 16, 1)
  33.     RETURN -102
  34.    END
  35.  
  36.  IF (SELECT COUNT(*) FROM sysusages WHERE segmap = 7 AND dbid = DB_ID()) > 0
  37.    -- Data and log not separated
  38.    BEGIN
  39.     SELECT @db_size = SUM(size) FROM sysusages WHERE dbid = DB_ID()
  40.     SELECT @db_full_pages= SUM(reserved) FROM sysindexes WHERE indid IN(0,1)
  41.    END
  42.  ELSE IF (SELECT COUNT(*) FROM sysusages WHERE segmap IN(3, 4)) > 0
  43.    -- Data and log separated
  44.    BEGIN
  45.     SELECT @db_size = SUM(size) FROM sysusages WHERE dbid = DB_ID() AND segmap = 3
  46.     SELECT @db_full_pages= SUM(reserved) FROM sysindexes WHERE indid IN(0,1) AND id != OBJECT_ID('syslogs')
  47.    END
  48.  SELECT @db_full_percentage = @db_full_pages/@db_size*100
  49.  
  50.  IF @db_full_percentage > @fillpercentage
  51.  BEGIN
  52.   SELECT @msg = 'Database ' + DB_NAME() + ' is ' + CONVERT(VARCHAR(10), @db_full_percentage) + ' %% full.'
  53.   RAISERROR(@msg, 15, 1)
  54.  END
  55. END
  56. /*
  57. Test execution:
  58. sp_warn_if_full_db 70
  59. */
  60.  
  61. GO
  62.  
  63.