Djabarov, Robert
Robert.Djabarov at usaa.com
Mon Feb 24 10:34:43 CST 2003
Here's my version of the same idea that I use whenever I need to get rid of connections from a database: use master go if object_id('dbo.sp_KillUsers') is not null drop procedure dbo.sp_KillUsers go create procedure dbo.sp_KillUsers ( @dbname varchar(128) ) as declare @spid varchar(10), @print varchar(8000) set nocount on if @dbname is null begin set @print = 'Database name must be specified!' + char(13)+char(10) + 'Operation aborted.' raiserror (@print, 15, 1) return (1) end if @dbname = db_name() begin set @print = 'Executing this procedure from the same database ' + 'as the one that you are currently in is not allowed! ' + char(13)+char(10) + 'Operation aborted.' raiserror (@print, 15, 1) return (1) end select @spid = cast(min(spid) as varchar(10)) from sysprocesses (nolock) where dbid = db_id(@dbname) while @spid is not null begin exec ('kill ' + @spid) select @spid = cast(min(spid) as varchar(10)) from sysprocesses (nolock) where dbid = db_id(@dbname) and spid > cast(@spid as int) end go -- Example: kill all users in pubs exec dbo.sp_KillUsers pubs This way you're not using something as archaic as a C U R S O R, especially off of a temporary table!!! ______________________________________________________ Robert Djabarov Certified MS SQL Server DBA Certified MS SQL Server Programmer Certified MS VB Programmer ? (210) 913-3148 - phone ( (210) 753-3148 - pager -----Original Message----- From: Francisco H Tapia [mailto:my.lists at verizon.net] Sent: Monday, February 24, 2003 9:51 AM To: dba-sqlserver at databaseadvisors.com Subject: Re: [dba-SQLServer]Rolling back a transaction log? Found out some GREAT NEWS!, Hope you all had a good weekend... it TURNS out that when you don't auto-shrink your log files, meaning you set a fixed lenght and then auto-backup whenever your log file hits 60% there are some outstanding benefits.... One of which you NEVER loose any data... When you go and choose to restore your database and you have your full backup selected (hopefully from last night) and your logs from during the day, simply plug in a point in time to restore to and viola!, 15 minutes before I was alerted was the time I chose and it restored the entire db up until that point, I kept playing with it pushing less and less time until I found the point (minute) in time that it was killed.. I did this of course NOT on the production server as it has already been restored loosing only 2 hrs worth of data, but instead I did this on my TEST database that I run on my Box. I hope this helps you guys out... as an added bonus, I found this great script at www.SQLSERVERCENTRAL.com, I can't say enough good things about that site, it is a kick all users out of my DB script.. just drop it into QA or make a sproc out of it, and run it, it will kick out all your database users, which is required in order to restore it.. here it is....(BTW, if you've never visited the site and you're dealing more and more with SQL you really ought to stop by, there are articles written here with many times real life situations taken into consideration... ) DECLARE @dbname varchar(50) SET @dbname = 'YourDBNAME HERE' DECLARE @strSQL varchar(255) PRINT 'Killing Users' PRINT '-----------------' CREATE table #tmpUsers( spid int, eid int, status varchar(30), loginname varchar(50), hostname varchar(50), blk int, dbname varchar(50), cmd varchar(30)) INSERT INTO #tmpUsers EXEC SP_WHO DECLARE LoginCursor CURSOR READ_ONLY FOR SELECT spid, dbname FROM #tmpUsers WHERE dbname = @dbname DECLARE @spid varchar(10) DECLARE @dbname2 varchar(40) OPEN LoginCursor FETCH NEXT FROM LoginCursor INTO @spid, @dbname2 WHILE (@@fetch_status <> -1) BEGIN IF (@@fetch_status <> -2) BEGIN PRINT 'Killing ' + @spid SET @strSQL = 'KILL ' + @spid EXEC (@strSQL) END FETCH NEXT FROM LoginCursor INTO @spid, @dbname2 END CLOSE LoginCursor DEALLOCATE LoginCursor DROP table #tmpUsers go -Francisco http://rcm.netfirms.com ----- Original Message ----- From: "Stuart McLachlan" <stuart at lexacorp.com.pg> To: <dba-sqlserver at databaseadvisors.com>; <CWortz at tea.state.tx.us> Sent: Saturday, February 22, 2003 5:12 PM Subject: RE: [dba-SQLServer]Rolling back a transaction log? : If he deleted a database, he would have deleted the mirrored version : as well. The only thing mirroring protects you from is physical failure of : a drive. : : > Francisco, : > : > How frequently you backup is dependent on how valuable is the lost data. : > If you can afford to lose a day's worth of data, or if you can easily : > recreate the day's worth of data, then you backup daily. If you can : > afford to lose an hour's worth of data, or if you can easily recreate : > the hour's worth of data, then you backup hourly. If you cannot afford : > to lose any data, then you mirror your database. : > : > Charles Wortz : > Software Development Division : > Texas Education Agency : > 1701 N. Congress Ave : > Austin, TX 78701-1494 : > 512-463-9493 : > CWortz at tea.state.tx.us : > (SELECT * FROM users WHERE clue > 0) : > : > : > -----Original Message----- : > From: Francisco H Tapia [mailto:my.lists at verizon.net] : > Sent: Friday 2003 Feb 21 13:19 : > To: dba-SQLServer at databaseadvisors.com; sswug-sql2k at topica.com : > Subject: [dba-SQLServer]Rolling back a transaction log? : > : > : > Well it finally happened... We have a Complaint database that runs in : > conjunction with a goldmine database. The Goldmine database tracks : > outgoing calls made by our company to customers in order to track sales : > leads and now complaints. Since 4/1/2002 we have not had a database : > error or hiccup until now. The company's official DBA, while working on : > a development database on the production server (yes, that's right) : > inadvertently wiped out my database instead of his test one this : > morning, The users of the Complaint db suddenly began to complaining : > that there were no records, and upon checking I found this to be the : > case. I backup every night, and I have the log file backup when it : > reaches 60%. BUT. I did not have *ANY* protection for the moments : > before the wipe out. Initially I panicked about not being able to kick : > the users out quickly enough... I didn't bother to *remember* that I had : > a Kill All Users In Db script. So about 10 minutes later (after kicking : > all the users out) I restored the database back to last log backup, but : > that was not good as it had the transactions that wiped out the : > database. SO I had to restore to last nights copy officially killing : > all entries from 10am and prior. :( : > : > I've secured my script for killing Active Users in the DB. And My boss : > knows *who* wiped out the database, in fact I made sure he knew as soon : > as it happened ... maybe that's not a good political move, but I'm in : > charge of the db. Now the question is... Since the log file is only : > 1meg long and on average it doesn't backup the log for perhaps every 2 : > to 3 days... (I do make a full backup every night). I suppose I could : > manage the backups to include incremental changes every hr, so that as : > little data is lost? What do you guys suggest? : > : > : > -Francisco : > http://rcm.netfirms.com : > _______________________________________________ : > dba-SQLServer mailing list : > dba-SQLServer at databaseadvisors.com : > http://databaseadvisors.com/mailman/listinfo/dba-sqlserver : > http://www.databaseadvisors.com : > : : : -- : Lexacorp Ltd : http://www.lexacorp.com.pg : Information Technology Consultancy, Software Development,System Support. : : : : _______________________________________________ : dba-SQLServer mailing list : dba-SQLServer at databaseadvisors.com : http://databaseadvisors.com/mailman/listinfo/dba-sqlserver : http://www.databaseadvisors.com : _______________________________________________ dba-SQLServer mailing list dba-SQLServer at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-sqlserver http://www.databaseadvisors.com