确定实际的服务器创建日期

Dav*_*ave 5 sql-server installation

我有兴趣确定我所有 70 多台服务器的年龄。我想创建一个增长图,显示服务器和数据库何时/每月或每年添加到环境中。我使用 SSMS 多查询功能执行了以下查询,但仅部分成功。

SELECT [name], create_date FROM sys.databases
Run Code Online (Sandbox Code Playgroud)

这是部分成功,因为当我知道我在过去几年中创建了其中一些服务器时,主数据库和模型数据库返回的日期为“2003 年 4 月 8 日”。

我每周多次将数据库从一台服务器刷新到另一台服务器,这似乎会导致数据库创建日期出现问题。

是否有一种简单的方法可以确定服务器和数据库的实际创建日期?

Kin*_*hah 5

确定 SQL Server 的实际创建日期

这可以找到使用

SELECT  createdate as SQL_SERVER_INSTALLATION_DATE
FROM    sys.syslogins 
where   sid = 0x010100000000000512000000 
Run Code Online (Sandbox Code Playgroud)

注意:sys.syslogins已弃用,因此使用sys.server_principals将为您提供相同的结果。

所以你可以使用:

--Using  sys.server_principals
SELECT SERVERPROPERTY ('MachineName') AS PhysicalMachineName,
   SERVERPROPERTY ('ServerName') AS SQLServerName,
   SERVERPROPERTY ('Edition') AS ServerEdition,
   CAST(SUBSTRING(@@Version,charindex('SQL',@@version, 1),15) AS VARCHAR(255)) +  ' + ' 
       + CAST (SERVERPROPERTY ('productlevel')AS VARCHAR (50)) + ' + (Build'
       + CAST (SERVERPROPERTY ('ProductVersion') AS VARCHAR (50)) +')' AS ProductVersion,
    RIGHT(@@version, (Len(@@Version)-charindex('Windows',@@version, 1))+1) AS [O.S.],
 SERVERPROPERTY ('Collation') AS Collation
      ,create_date as 'SQL Server Installation Date'
FROM sys.server_principals 
WHERE name='NT AUTHORITY\SYSTEM'

--Using sys.server_principals 
SELECT create_date as 'SQL Server Installation Date'
FROM sys.server_principals 
WHERE name='NT AUTHORITY\SYSTEM'
Run Code Online (Sandbox Code Playgroud)

实际创建数据库

这可以通过读取数据库的引导页找到。

注意:DBCC PAGE 未记录。我没有看到使用它的任何副作用,但由于它没有记录,请谨慎使用。

DBCC TRACEON(3604)
GO
 -- Actual creation time of database is stored in the boot page of the database
 -- This is even retained after restore or detach/attach of the database. 
 --- Look for dbi_crdate.
DBCC PAGE('database_name_Goes_here', 1, 9, 3)
GO

DBCC TRACEOFF(3604)
GO
Run Code Online (Sandbox Code Playgroud)

更好地使用 DBCC PAGE WITH TABLERESULTS

CREATE TABLE PageData
(
      ParentObject VARCHAR(1000)NULL,
      Object VARCHAR(4000)NULL,
      Field VARCHAR(1000)NULL,
      ObjectValue VARCHAR(MAX)NULL,
)
GO   

INSERT INTO PageData (ParentObject, Object, Field, ObjectValue)
EXEC ('DBCC PAGE (''AdventureWorks2008R2_copy_August_2014'',1, 9, 3) WITH TABLERESULTS')
GO


select DatabaseName = (select ObjectValue from PageData where field ='dbi_dbname')
, DatabaseCreateDate = ( select ObjectValue from PageData where field = 'dbi_crdate')
Run Code Online (Sandbox Code Playgroud)