1个月未访问SQL Server数据库

时间:2018-10-10 19:27:48

标签: sql sql-server tsql datetime

我正在尝试清理一些服务器,并希望找出过去30天内未访问过哪些数据库。如何将T-SQL查询更改为仅显示最近30天未访问的数据库的位置?

有关其他信息,我还包括上次重新引导服务器的时间。这与这个问题无关。

例如,今天是10月10日。自9月10日以来已访问的任何数据库,我都不想出现在查询结果中。

这是我当前的T-SQL脚本,用于查找上次在服务器上访问数据库的时间:

SELECT
    DB_NAME(sd.database_id) AS DatabaseName,
    COALESCE(MAX(ius.last_user_seek), MAX(ius.last_user_scan),
             MAX(ius.last_user_lookup), MAX(ius.last_user_update), '1/1/1900') AS LastAccessDate,
    (SELECT create_date 
     FROM sys.databases 
     WHERE name = 'tempdb') AS LastServerRestart
FROM 
    sys.databases sd
LEFT JOIN
    sys.dm_db_index_usage_stats ius ON ius.database_id = sd.database_id
WHERE 
    DB_NAME(sd.database_id) NOT IN ('tempdb', 'master', 'model', 'msdb')
GROUP BY 
    sd.database_id
ORDER BY 
    DatabaseName

以下是此查询的结果:

DatabaseName            LastAccessDate             LastServerRestart
--------------------------------------------------------------------------
AdventureWorks2016      2018-09-12 18:21:21.800    2018-09-12 18:21:10.727
AdventureWorksDW2016    2018-10-10 09:40:31.903    2018-09-12 18:21:10.727
Drake_Test              1900-01-01 00:00:00.000    2018-09-12 18:21:10.727
OLD_DB                  1900-01-01 00:00:00.000    2018-09-12 18:21:10.727
Drake_Test_new          2018-10-10 14:20:17.943    2018-09-12 18:21:10.727

基于这些结果,我只希望从该查询中返回Drake_TestOLD_DB。在过去30天内访问了其他3个数据库。

此外,更改T-SQL查询的主要问题是,当我尝试将LastAccessDate列用作子句的一部分时,它说这是无效的列吗?

1 个答案:

答案 0 :(得分:5)

我喜欢将CTE用于此类事情:

function foo(arr1, sum){
      let arr = arr1;
      for(let i=0; i<9999;i++){
        let val1=arr[Math.floor(Math.random()*arr.length)];
        arr.splice(arr.indexOf(val1),1);
         console.log(arr1);
        let val2=arr[Math.floor(Math.random()*arr.length)];
        arr.splice(arr.indexOf(val2),1);
        let val3=arr[Math.floor(Math.random()*arr.length)];
        arr.splice(arr.indexOf(val3),1);
        let val4=arr[Math.floor(Math.random()*arr.length)];
        arr.splice(arr.indexOf(val4),1);
        if(val1+val2+val3+val4 == sum){
          console.log(val1,val2,val3,val4);
         return [val1,val2,val3,val4]; 
        }

       arr=arr1;
      }
    }
    console.log(foo([2, 7, 4, 0, 9, 5, 1, 3], 20));