Find out how long the sql server service has been running, from t-sql

后端 未结 6 1388
春和景丽
春和景丽 2021-02-07 22:11

I\'d like if its possible to work out from inside sql server how long sql server has been running.

Would like to use this in conjunction with one of the DMV\'s for unuse

相关标签:
6条回答
  • 2021-02-07 22:44

    Grabbed here

    USE Master
    GO
    
    SET NOCOUNT ON
    DECLARE @crdate DATETIME, @hr VARCHAR(50), @min VARCHAR(5)
    SELECT @crdate=crdate FROM sysdatabases WHERE NAME='tempdb'
    SELECT @hr=(DATEDIFF ( mi, @crdate,GETDATE()))/60
    IF ((DATEDIFF ( mi, @crdate,GETDATE()))/60)=0
    SELECT @min=(DATEDIFF ( mi, @crdate,GETDATE()))
    ELSE
    SELECT @min=(DATEDIFF ( mi, @crdate,GETDATE()))-((DATEDIFF( mi, @crdate,GETDATE()))/60)*60
    PRINT 'SQL Server "' + CONVERT(VARCHAR(20),SERVERPROPERTY('SERVERNAME'))+'" is Online for the past '+@hr+' hours & '+@min+' minutes'
    IF NOT EXISTS (SELECT 1 FROM master.dbo.sysprocesses WHERE program_name = N'SQLAgent - Generic Refresher')
    BEGIN
    PRINT 'SQL Server is running but SQL Server Agent <<NOT>> running'
    END
    ELSE BEGIN
    PRINT 'SQL Server and SQL Server Agent both are running'
    END
    
    0 讨论(0)
  • 2021-02-07 22:45
    SELECT
        login_time
    FROM
        sys.dm_exec_sessions
    WHERE
        session_id = 1
    

    will give you a datetime for when the server was started.

    0 讨论(0)
  • 2021-02-07 22:46

    To get it programmatically, you can run this script. It checks the creation time of your tempdb, since tempdb gets reinitialized every time Sql Server is started.

    SELECT create_date 
    FROM sys.databases 
    WHERE name = 'tempdb'
    

    To make it more intuitive, you can run the script below, which will tell you how many days and hours Sql Server has been running. Minutes and seconds information will be truncated. If you need that, modify the script to get it yourself.

    SELECT 'Sql Server Service has been running for about '
    + CAST((DATEDIFF(hh, create_date, GETDATE()))/24 AS varchar(3)) + ' days and '
    + CAST((DATEDIFF(hh, create_date, GETDATE())) % 24 AS varchar(2)) + ' hours'
    FROM sys.databases 
    WHERE name = 'tempdb'
    

    Source: How long SQL Server has been running

    0 讨论(0)
  • 2021-02-07 22:59

    SELECT crdate FROM sysdatabases WHERE [name] = 'tempdb'

    The above will work on SQL Server 2000, 2005 and 2008.

    The logic is that the result from the above SQL returns the created date of the tempdb database, which SQL Server recreates every time it is restarted. Hence, the created date of tempdb is the startup time of the server.

    0 讨论(0)
  • 2021-02-07 23:02

    I know this is super old, but Microsoft has added a new DMV with this information since this question was asked.

    SELECT dosi.sqlserver_start_time
    FROM sys.dm_os_sys_info AS dosi
    
    0 讨论(0)
  • 2021-02-07 23:05

    This simple query works for versions before SQL Server 2005 as well as recent ones:

    SELECT
     crdate AS startup,
     DATEDIFF(s, crdate, GETDATE()) / 3600. / 24 AS uptime_days
    FROM master..sysdatabases
    WHERE name = 'tempdb'
    
    0 讨论(0)
提交回复
热议问题