Before an upgrade I wanted to remove any unused databases. To help find them I created a generic sql-job that every 10 mins would log connections.
I say ‘generic’ as the job needed to work on SQL2000, SQL2005, and SQL2012. So I created it using SQL-2000 enterprise-manager and scripted it out as ‘createJob_DbaAudit.sql’.
The script in job-step-1 (‘Build Table – if needed’) was …
select @@ServerName AS Server,
db.[name] [Database],
getdate() [TimeStamp],
Hostname,
Program_name,
Net_library,
Loginame
into master.dbo.tbl_connections
from master.dbo.sysdatabases db
join master.dbo.sysprocesses pr on db.dbid = pr.dbid
where db.dbid > 4
… this step was set to continue on to the next-step regardless of whether it succeded or failed.
Step-2 (‘Record Connections’) was similar …
insert into master.dbo.tbl_connections
select @@ServerName AS Server,
db.[name] [Database],
getdate() [TimeStamp],
Hostname,
Program_name,
Net_library,
Loginame
from master.dbo.sysdatabases db
join master.dbo.sysprocesses pr on db.dbid = pr.dbid
where db.dbid > 4
Final notes: To be robust and generic, I did not set-up Notifications. Also, I added a few lines to the top of the ‘CreateJob_DbaAudit.sql’ script to delete the tbl_connections table from master if it already existed.