Update to handle snapshots and not try to back them up in any multi-database queries
SELECT DISTINCT
s_mf.database_id
, *
FROM sys.master_files s_mf
INNER JOIN sys.databases s_db
ON s_mf.database_id = s_db.database_id
WHERE s_mf.state = 0 -- Online
AND s_db.source_database_id is null --Eliminate All Snapshots
AND has_dbaccess(db_name(s_mf.database_id)) = 1 -- Only look at databases to which we have access
AND NOT db_name(s_mf.database_id) in ('tempdb', 'master', 'msdb', 'model') --eliminate temp db
This is my collection of mostly useful SQL server information that helps administer the server. It is mostly aimed at SQL Server 2012 / 2014 / 2016.
Wednesday, June 20, 2012
Monday, April 23, 2012
Creating a snapshot
Time to learn something about creating a snapshot of a database so I wrote a script
CREATE DATABASE [Snapshot Name for queries] ON
( NAME = [Name of the logical to be snap shot, this should include the date time to allow multiple days], FILENAME = 'e:\BackupforSnapshot_20120420.ss' )
AS SNAPSHOT OF [Database to be snap shot name];
GO
CREATE DATABASE [Snapshot Name for queries] ON
( NAME = [Name of the logical to be snap shot, this should include the date time to allow multiple days], FILENAME = 'e:\BackupforSnapshot_20120420.ss' )
AS SNAPSHOT OF [Database to be snap shot name];
GO
Monday, March 26, 2012
SSAS Training Books links
Useful book links from the class
For MDX
Fast Track to MDX Author Mosha Pasumanskyinventory of MDX
Fast Track to MDX Author Mosha Pasumanskyinventory of MDX
SQL Server 2008 White Paper: Analysis Services Performance Guide
Monday, February 27, 2012
Tables Change Auditing
/*
This is used to track database table changes and include the ability to email when tables are altered or dropped. The is accomplished with a DDL trigger. It assumes there is a table in an auditing database to hold the rollback information and a database mail default account.
*/
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'Event_Table_changes')
DISABLE TRIGGER [Event_Table_changes] ON DATABASE
GO
USE [Name of Database]
GO
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'Event_Table_changes')DROP TRIGGER [Event_Table_changes] ON DATABASE
GO
USE [Manuals]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE trigger [Event_Table_changes]
on database
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
DECLARE @FullFile xml
DECLARE @EventType nvarchar(25)
DECLARE @EventTime datetime
DECLARE @LoginName nvarchar(50)
DECLARE @UserName nvarchar(25)
DECLARE @ObjectName nvarchar(50)
DECLARE @ObjectType nvarchar(25)
DECLARE @Command nvarchar(max)
SET @FullFile = eventdata()
SET @EventType = @FullFile.value('(//EVENT_INSTANCE/EventType)[1]', 'nvarchar(25)')
SET @EventTime = @FullFile.value('(//EVENT_INSTANCE/PostTime)[1]', 'DATETIME')
SET @LoginName = @FullFile.value('(//EVENT_INSTANCE/LoginName)[1]', 'nvarchar(50)')
SET @UserName = @FullFile.value('(//EVENT_INSTANCE/UserName)[1]', 'nvarchar(25)')
SET @ObjectName = @FullFile.value('(//EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(50)')
SET @ObjectType = @FullFile.value('(//EVENT_INSTANCE/ObjectType)[1]', 'nvarchar(25)')
SET @Command = @FullFile.value('(//EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
--print @command
INSERT INTO [AuditDB].dbo.Table_Events
([EventType]
,[EventTime]
,[LoginName]
,[UserName]
,[ObjectName]
,[ObjectType]
,[Command]
,[FullFile])
SELECT @EventType
, @EventTime
, @LoginName
, @UserName
, @ObjectName
, @ObjectType
, @Command
, @FullFile
--if table drop email admin group
IF @EventType = 'DROP_TABLE'
BEGIN
DECLARE @profile varchar(100)
DECLARE @EmailTo varchar(128)
DECLARE @Subject varchar(128)
DECLARE @Body varchar(max)
DECLARE @BodyType varchar(25)
SELECT @profile = CAST(COALESCE(SERVERPROPERTY ( 'InstanceName' ), SERVERPROPERTY ( 'ServerName')) AS varchar(80)) + 'Admin'
SET @EmailTo = [Add email name]
SET @Subject = CAST(COALESCE(SERVERPROPERTY ( 'InstanceName' ), SERVERPROPERTY ( 'ServerName')) AS varchar(80)) + ' Table has been changed in DB: ' + db_name()
SET @Body = @Command
SET @BodyType = 'HTML'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profile,
@recipients = @EmailTo ,
@subject = @Subject,
@body = @Body ,
@body_format = @BodyType
END
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
DISABLE TRIGGER [Event_Table_changes] ON DATABASE
GO
ENABLE TRIGGER [Event_Table_changes] ON DATABASE
GO
Subscribe to:
Posts (Atom)