DECLARE @ServerName nvarchar(50) SET @ServerName='SQL01'; WITH CMSCTE AS ( --Anchor SELECT server_group_id, name, description, parent_id, 1 AS [Level], CAST((name) AS VARCHAR(MAX)) AS CMSPath FROM msdb.dbo.sysmanagement_shared_server_groups AS A WHERE parent_id IS NULL UNION ALL --Recursive Member SELECT B.server_group_id, B.name, B.description, B.parent_id, C.[level] + 1 AS [Level], CAST((C.CMSPath + '->' + B.Name) AS VARCHAR(MAX)) AS CMSPath FROM msdb.dbo.sysmanagement_shared_server_groups AS B JOIN CMSCTE AS C ON B.parent_id = C.server_group_id ) SELECT TOP 1 CMSPath AS 'Path in CMS' , B.name as 'Server Name', B.description AS 'Server Description', A.name AS 'Group Name', A.description AS 'Group Description' FROM CMSCTE AS A INNER JOIN msdb.dbo.sysmanagement_shared_registered_servers AS B ON A.server_group_id=B.server_group_id WHERE B.name = @ServerName ORDER BY [Level] DESC
Monday, May 16, 2022
T-SQL to find Navigation path in CMS
In large enterprises there will be huge number of SQL servers which will be registered within a Central Management Server (CMS) and times it may become difficult to find out where the server is registered atleast for new team members in the Huge pile of servers and folder structure. This query give you the path where the specified servers is registered within the CMS.
Sunday, March 12, 2017
T-SQL script to get Backup Details of a Database and the Sequence it was taken
Here is an handy script which give the details of the list of backup(s) taken of a database and the sequence it was taken.
DECLARE @db_name VARCHAR(100) SELECT @db_name = '<DB Name>' SELECT BS.server_name AS [Server Name] ,BS.database_name AS [Database Name] ,BS.recovery_model AS [Recovery Model] ,BMF.physical_device_name [Location] ,(CAST(BS.backup_size / 1000000 AS INT)) AS [Size of Backup (MB)] ,CASE BS.[type] WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Transaction Log' END AS [Type of Backup] ,BS.backup_start_date AS [Backup Date] ,BS.first_lsn AS [First LSN] ,BS.last_lsn AS [Last LSN] FROM msdb.dbo.backupset BS INNER JOIN msdb.dbo.backupmediafamily BMF ON BS.media_set_id = BMF.media_set_id WHERE BS.database_name = @db_name ORDER BY backup_start_date DESC , backup_finish_date
Download the script from https://gallery.technet.microsoft.com/T-SQL-script-to-get-Backup-5a9b029b?redir=0
Labels:
Backup,
Backup Location,
Differential Backup,
Full Backup,
Log Backups,
LSN,
Sequence,
T-SQL
Friday, November 22, 2013
When was my database last taken Offline or Online
Here is a T-SQL script which tells when and who took the database offline or online recently.
This script utilizes the default trace and if the trace is reset after the database went offline or online then you have change the trace file path and name in the script.
This script utilizes the default trace and if the trace is reset after the database went offline or online then you have change the trace file path and name in the script.
DECLARE @DBNAME nvarchar(100) ,@FileName nvarchar(max) ,@spid int ,@LogDate Datetime ,@Status nvarchar(10) SET @DBNAME = 'AdventureWorks2008R2' -- Change DB Name SET @Status = 'OFFLINE' --[OFFLINE or ONLINE] SELECT @FileName=[path] FROM sys.traces WHERE is_default=1 DECLARE @ErrorLogTable table (Logdate datetime, ProcessInfo nvarchar(10), [Text] nvarchar(max)) INSERT INTO @ErrorLogTable EXEC xp_readerrorlog 0,1, @Status, @DBNAME, NULL, NULL, 'desc' SELECT TOP 1 @spid=cast(SUBSTRING(ProcessInfo,5,5) AS int) ,@LogDate=cast(Logdate AS nvarchar) FROM @ErrorLogTable SELECT DatabaseID, DatabaseName, HostName, ApplicationName, LoginName, StartTime FROM sys.fn_trace_gettable( @FileName, DEFAULT ) WHERE spid=@spid and DatabaseName=@DBNAME and CAST(StartTime AS nvarchar)=@LogDate
Labels:
Database Offline,
Database Online,
T-SQL
Thursday, November 14, 2013
T-SQL to get the list of objects modified in x number of days
USE SansSQL; -- Change the Database Name GO DECLARE @Days int SET @Days=300 -- Specify the number of days SELECT name AS ObjectName ,SCHEMA_NAME(schema_id) AS SchemaName ,type_desc AS ObjectType ,create_date AS ObjectCreatedOn ,modify_date As ObjectModifiedOn FROM sys.objects WHERE modify_date > GETDATE() - @Days ORDER BY modify_date; GO
Wednesday, April 17, 2013
Get SQL Server Database details using T-SQL
Here is a T-SQL script which gives you the details of all the databases in an SQL Server Instance.
This will be very useful when you are gathering SQL Server information from multiple servers
This will be very useful when you are gathering SQL Server information from multiple servers
SET NOCOUNT ON
IF OBJECT_ID('tempdb..#DatabaseDetails') IS NOT NULL DROP TABLE #DatabaseDetails
CREATE TABLE #DatabaseDetails (
DatabaseID int
, DatabaseName varchar(256)
, CreateDate datetime
, Collation varchar(256)
, ComparisonStyle int
, IsAnsiNullDefault bit
, IsAnsiNullsEnabled bit
, IsAnsiPaddingEnabled bit
, IsAnsiWarningsEnabled bit
, IsArithmeticAbortEnabled bit
, IsAutoClose bit
, IsAutoCreateStatistics bit
, IsAutoShrink bit
, IsAutoUpdateStatistics bit
, IsCloseCursorsOnCommitEnabled bit
, IsFulltextEnabled bit
, [IsInStandBy] bit
, IsLocalCursorsDefault bit
, IsMergePublished bit
, IsMergeSubscribed bit
, IsNullConcat bit
, IsNumericRoundAbortEnabled bit
, IsParameterizationForced bit
, [IsQuotedIdentifiersEnabled] bit
, IsPublished bit
, IsRecursiveTriggersEnabled bit
, IsSubscribed bit
, IsSyncWithBackup bit
, IsTornPageDetectionEnabled bit
, LCID int
, [Recovery] varchar(256)
, [SQLSortOrder] tinyint
, [Status] varchar(256)
, Updateability varchar(256)
, UserAccess varchar(256)
, [Version] int
, LastDatabaseBackup datetime
, LastIncremetalBackup datetime
, LastLogBackup datetime
, TotalLogSize bigint
, LogPercentUsed int
, [TotalDBSize_MB] bigint
, [cmptlevel] int
)
INSERT INTO #DatabaseDetails(
DatabaseID
, [DatabaseName]
, [CreateDate]
, [Collation]
, [ComparisonStyle]
, [IsAnsiNullDefault]
, [IsAnsiNullsEnabled]
, [IsAnsiPaddingEnabled]
, [IsAnsiWarningsEnabled]
, [IsArithmeticAbortEnabled]
, [IsAutoClose]
, [IsAutoCreateStatistics]
, [IsAutoShrink]
, [IsAutoUpdateStatistics]
, [IsCloseCursorsOnCommitEnabled]
, [IsFulltextEnabled]
, [IsInStandBy]
, [IsLocalCursorsDefault]
, [IsMergePublished]
, [IsMergeSubscribed]
, [IsNullConcat]
, [IsNumericRoundAbortEnabled]
, [IsParameterizationForced]
, [IsQuotedIdentifiersEnabled]
, [IsPublished]
, [IsRecursiveTriggersEnabled]
, [IsSubscribed]
, [IsSyncWithBackup]
, [IsTornPageDetectionEnabled]
, [LCID]
, [Recovery]
, [SQLSortOrder]
, [Status]
, [Updateability]
, [UserAccess]
, [Version]
, [cmptlevel])
SELECT sd.dbid as 'DatabaseID'
, sd.[name] as 'DatabaseName'
, sd.crdate as 'CreateDate'
, CAST(DATABASEPROPERTYEX(sd.[name], 'Collation') as varchar(256)) as 'Collation'
, CAST(DATABASEPROPERTYEX(sd.[name], 'ComparisonStyle') as varchar(256)) as 'ComparisonStyle'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAnsiNullDefault') as bit) as 'IsAnsiNullDefault'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAnsiNullsEnabled') as bit) as 'IsAnsiNullsEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAnsiPaddingEnabled') as bit) as 'IsAnsiPaddingEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAnsiWarningsEnabled') as bit) as 'IsAnsiWarningsEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsArithmeticAbortEnabled') as bit) as 'IsArithmeticAbortEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAutoClose') as bit) as 'IsAutoClose'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAutoCreateStatistics') as bit) as 'IsAutoCreateStatistics'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAutoShrink') as bit) as 'IsAutoShrink'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsAutoUpdateStatistics') as bit) as 'IsAutoUpdateStatistics'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsCloseCursorsOnCommitEnabled') as bit) as 'IsCloseCursorsOnCommitEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsFulltextEnabled') as bit) as 'IsFulltextEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsInStandBy') as bit) as 'IsInStandBy'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsLocalCursorsDefault') as bit) as 'IsLocalCursorsDefault'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsMergePublished') as bit) as 'IsMergePublished'
, CASE WHEN sd.category & 8 = 8 THEN 1 ELSE 0 end as 'IsMergeSubscribed'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsNullConcat') as bit) as 'IsNullConcat'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsNumericRoundAbortEnabled') as bit) as 'IsNumericRoundAbortEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsParameterizationForced') as bit) as 'IsParameterizationForced'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsQuotedIdentifiersEnabled') as bit) as 'IsQuotedIdentifiersEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsPublished') as bit) as 'IsPublished'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsRecursiveTriggersEnabled') as bit) as 'IsRecursiveTriggersEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsSubscribed') as bit) as 'IsSubscribed'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsSyncWithBackup') as bit) as 'IsSyncWithBackup'
, CAST(DATABASEPROPERTYEX(sd.[name], 'IsTornPageDetectionEnabled') as bit) as 'IsTornPageDetectionEnabled'
, CAST(DATABASEPROPERTYEX(sd.[name], 'LCID') as int) as 'LCID'
, CAST(DATABASEPROPERTYEX(sd.[name], 'Recovery') as varchar(256)) as 'Recovery'
, CAST(DATABASEPROPERTYEX(sd.[name], 'SQLSortOrder') as tinyint) as 'SQLSortOrder'
, CAST(DATABASEPROPERTYEX(sd.[name], 'Status') as varchar(256)) as 'Status'
, CAST(DATABASEPROPERTYEX(sd.[name], 'Updateability') as varchar(256)) as 'Updateability'
, CAST(DATABASEPROPERTYEX(sd.[name], 'UserAccess') as varchar(256)) as 'UserAccess'
, CAST(DATABASEPROPERTYEX(sd.[name], 'Version') as int) as 'Version'
, cmptlevel
FROM master.dbo.sysdatabases sd
ORDER BY sd.dbid
UPDATE dbd
SET LastDatabaseBackup = fullbak.LastDatabaseBackup
, LastIncremetalBackup = incbak.LastIncremetalBackup
, LastLogBackup = logbak.LastLogBackup
FROM #DatabaseDetails dbd
left join (
SELECT sd.dbid
, sd.[name] as 'DatabaseName'
, max(t1.backup_finish_date) as 'LastDatabaseBackup'
FROM master.dbo.sysdatabases sd
join msdb.dbo.backupset t1 on t1.type = 'D' and t1.database_name = sd.[name]
GROUP BY sd.dbid, sd.[name]
) fullbak ON fullbak.dbid = dbd.DatabaseID
left join (
SELECT sd.dbid
, sd.[name] as 'DatabaseName'
, max(t2.backup_finish_date) as 'LastIncremetalBackup'
FROM master.dbo.sysdatabases sd
join msdb.dbo.backupset t2 on t2.type = 'I' and t2.database_name = sd.[name]
GROUP BY sd.dbid, sd.[name]
) incbak on incbak.dbid = dbd.DatabaseID
left join (
SELECT sd.dbid
, sd.[name] as 'DatabaseName'
, max(t3.backup_finish_date) as 'LastLogBackup'
FROM master.dbo.sysdatabases sd
join msdb.dbo.backupset t3 on t3.type = 'L' and t3.database_name = sd.[name]
GROUP BY sd.dbid, sd.[name]
) logbak on logbak.dbid = dbd.DatabaseID
IF OBJECT_ID('tempdb..#logspace') IS NOT NULL DROP TABLE #logspace
CREATE TABLE #logspace(
DatabaseName varchar(256)
, TotalLogSize decimal(20,4)
, PercentUsed decimal(20,4)
, [Status] varchar(50)
)
INSERT INTO #logspace
EXEC('DBCC sqlperf(logspace)')
UPDATE dbd
SET TotalLogSize = ls.TotalLogSize
, LogPercentUsed = Convert(int, ls.PercentUsed)
FROM #DatabaseDetails dbd
join #logspace ls ON dbd.DatabaseID = db_id(ls.DatabaseName)
EXEC master.dbo.sp_MSForEachDB 'update #DatabaseDetails
set TotalDBSize_MB = (select (sum([size]) * 8.0) / 1024.0
FROM [?].[dbo].[sysfiles] )
where DatabaseID = db_id(''?'')'
SELECT DatabaseID
, DatabaseName
, [TotalDBSize_MB]
, TotalLogSize
, LogPercentUsed
, CreateDate
, [Status]
, LastDatabaseBackup
, LastIncremetalBackup
, LastLogBackup
, [Recovery]
, [Updateability]
, [UserAccess]
, [Collation]
, [ComparisonStyle]
, [LCID]
, [SQLSortOrder]
, [Version]
, [cmptlevel]
, [IsAutoUpdateStatistics]
, [IsAutoCreateStatistics]
, [IsInStandBy]
, [IsAutoShrink]
, [IsNullConcat]
, [IsFulltextEnabled]
, [IsPublished]
, [IsSubscribed]
, [IsMergePublished]
, [IsMergeSubscribed]
, [IsAnsiNullDefault]
, [IsAnsiNullsEnabled]
, [IsAnsiPaddingEnabled]
, [IsAnsiWarningsEnabled]
, [IsArithmeticAbortEnabled]
, [IsAutoClose]
, [IsCloseCursorsOnCommitEnabled]
, [IsLocalCursorsDefault]
, [IsNumericRoundAbortEnabled]
, [IsParameterizationForced]
, [IsQuotedIdentifiersEnabled]
, [IsRecursiveTriggersEnabled]
, [IsSyncWithBackup]
, [IsTornPageDetectionEnabled]
FROM #DatabaseDetails
ORDER BY DatabaseName
SET NOCOUNT OFF
Friday, May 18, 2012
Get SQL Server details using T-SQL
Here is a T-SQL script which gives you the details of a SQL Server.
This will be very useful when you are gathering SQL Server information from multiple servers and works for SQL Server 2005 and above.
This will be very useful when you are gathering SQL Server information from multiple servers and works for SQL Server 2005 and above.
CREATE TABLE #ServerDetails(ID int, Name sysname, Internal_Value int, Value nvarchar(512))
INSERT #ServerDetails EXEC master.dbo.xp_msver
DECLARE @InstanceName nvarchar(50)
DECLARE @value VARCHAR(100)
DECLARE @RegKey_InstanceName nvarchar(500)
DECLARE @RegKey nvarchar(500)
DECLARE @AuditLevel int
DECLARE @DataDirectory nvarchar(500)
DECLARE @LogDirectory nvarchar(500)
DECLARE @BackupDirectory nvarchar(500)
SET @InstanceName=CONVERT(nVARCHAR,isnull(SERVERPROPERTY('INSTANCENAME'),
'MSSQLSERVER'))
if(SELECT Convert(varchar(1),(SERVERPROPERTY('ProductVersion'))))<>8
BEGIN
SET @RegKey_InstanceName='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL'
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = @RegKey_InstanceName,
@value_name = @InstanceName,
@value = @value OUTPUT
SET @RegKey='SOFTWARE\Microsoft\Microsoft SQL Server\'+@value+'\MSSQLServer\'
EXEC master..xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key=@RegKey,
@value_name='AuditLevel',
@value=@AuditLevel OUTPUT
EXEC master..xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key=@RegKey,
@value_name='DefaultData',
@value=@DataDirectory OUTPUT
EXEC master..xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key=@RegKey,
@value_name='DefaultLog',
@value=@LogDirectory OUTPUT
EXEC master..xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key=@RegKey,
@value_name='BackupDirectory',
@value=@BackupDirectory OUTPUT
END
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS') [Machine Name]
,SERVERPROPERTY('ServerName') AS [SQL Server Name]
,SERVERPROPERTY('InstanceName') AS [Instance Name]
,SERVERPROPERTY('Collation') AS [Server Collation]
,'Microsoft SQL Server ' + CAST(SERVERPROPERTY('Edition') AS varchar(250)) AS Edition
,SERVERPROPERTY('ProductLevel') AS [Product Level]
,(SELECT Value FROM #ServerDetails WHERE Name = N'Language') AS [Language]
,(SELECT Value FROM #ServerDetails WHERE Name = N'Platform') AS [Platform]
,(SELECT 'Microsoft Windows NT ' + Value from #ServerDetails where Name = N'WindowsVersion') AS [Operating System]
,(SELECT Internal_Value FROM #ServerDetails WHERE Name = N'ProcessorCount') AS [Processors]
,(SELECT CAST(Internal_Value AS varchar)+ ' (MB)' FROM #ServerDetails WHERE Name = N'PhysicalMemory') AS Memory
, CASE WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'True' ELSE 'False' END AS IsClustered
,(SELECT value from sys.configurations where name='min server memory (MB)') AS 'Min Server Memory (MB)'
,(SELECT value from sys.configurations where name='max server memory (MB)') AS 'Max Server Memory (MB)'
,(SELECT CASE WHEN value=0 THEN 'True' ELSE 'False' END from sys.configurations where name='affinity mask') AS 'Automatically set processor affinity mask for all processor'
,(SELECT CASE WHEN value=0 THEN 'True' ELSE 'False' END from sys.configurations where name='affinity I/O mask') AS 'Automatically set I/O affinity mask for all processor'
,CASE WHEN SERVERPROPERTY('IsIntegratedSecurityOnly')= 1 THEN 'Windows Authentication Mode'
WHEN SERVERPROPERTY('IsIntegratedSecurityOnly')= 0 THEN 'SQL Server and Windows Authentication Mode' END AS [Server Authentication]
,CASE WHEN @AuditLevel = 0 THEN 'None'
WHEN @AuditLevel = 1 THEN 'Successful Logins Only'
WHEN @AuditLevel = 2 THEN 'Failed Logins Only'
WHEN @AuditLevel = 3 THEN 'Both Failed and Successful Logins'
END AS [Audit Level]
,(select CASE WHEN value = 0 THEN 'False' WHEN value = 1 THEN 'True' END from sys.configurations where name='remote access') AS 'Allow remote connections to this Server'
,(select CASE WHEN value = 0 THEN 'unlimited' ELSE value END from sys.configurations where name='user connections') AS 'Max number of concurrent Connections'
,(select CASE WHEN value = 0 THEN 'No Timeout' ELSE value END from sys.configurations where name='remote query timeout (s)') AS 'Query Timeout (s)'
,(select CASE WHEN value = 0 THEN 'False' WHEN value = 1 THEN 'True' END from sys.configurations where name='remote access') AS 'Allow Remote Connections to this server'
,@DataDirectory AS 'Default Data Directory'
,@LogDirectory AS 'Default Log Directory'
,@BackupDirectory AS 'Default Backup Directory'
,(SELECT value from sys.configurations WHERE name='max degree of parallelism') AS 'Max Degree of Parallelism'
,(SELECT value from sys.configurations WHERE name='remote login timeout (s)') AS 'Remote Login Timeout (s)'
,(SELECT CASE WHEN value = 0 THEN 'False' WHEN value = 1 THEN 'True' END from sys.configurations WHERE name='scan for startup procs') AS 'Scan for Startup Procs'
DROP TABLE #ServerDetails
Friday, March 23, 2012
Different ways to check your SQL Server(s) Authentication mode
Checking the Authentication mode using T-SQL:
- Using "xp_LoginConfig" extended Stored Procedure
EXEC Master.dbo.xp_LoginConfig 'login mode'
- Using "SERVERPROPERTY" Function
SELECT CASE SERVERPROPERTY('IsIntegratedSecurityOnly') WHEN 1 THEN 'Windows Authentication mode' WHEN 0 THEN 'SQL Server and Windows Authentication mode' END as [Authentication Mode] - Using Registry
DECLARE @Mode INT EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', @Mode OUTPUT SELECT CASE @Mode WHEN 1 THEN 'Windows Authentication mode' WHEN 2 THEN 'SQL Server and Windows Authentication mode' ELSE 'Not known' END as [Authentication Mode]
Checking the Authentication mode using SSMS:
- Right-Click on the Server
- Choose "Properties"
- Navigate to "Security" Page
- Check "Server Authentication" Section
Subscribe to:
Posts (Atom)