IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('dbo.set_to_hot_site') AND sysstat & 0xf = 4) DROP PROCEDURE dbo.set_to_hot_site GO CREATE PROCEDURE set_to_hot_site @dbName VARCHAR(30) = ' ', -- the database name on both systems @target VARCHAR(30) = ' ', -- the source server name @targetPassword VARCHAR(30) = ' ', -- sa password on source @debug VARCHAR(5) = 'false' -- debug this procedure AS DECLARE @CMD VARCHAR(255), -- reusable command holder @CMDstatus INT, -- return status of command prompt @myName VARCHAR(30) -- name of this function /* Procedure set_to_hot_site sets the database options approptiately for log replication. The objective is to make sure no changes are made to the hot site database and no non_logged operations are permitted */ SELECT @myName = 'admin.set_to_hot_site' IF (@dbName <> ' ') AND (@target <> ' ') BEGIN IF DB_ID(@dbName) < 6 BEGIN SELECT @CMD = @myName + ' cannot be used on ' + @dbName + '. Only user databases can be safely moved via dump/load.' RAISERROR(@CMD,1,1) WITH SETERROR RETURN 1 END /* make sure the target database is read only (unless it's this administrative db) has checkpoint on recovery disabled has select into/bulkcopy disabled has truncate log on checkpoint disabled */ IF @dbName = 'admin' -- include more if appropriate BEGIN SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'read only',false" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'select into/bulkcopy',true" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'trunc. log on chkpt.',true" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus END ELSE -- all other dbs BEGIN SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'read only',true" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'select into/bulkcopy',false" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + 'sp_dboption ' + @dbName + ",'trunc. log on chkpt.',false" + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus END END ELSE BEGIN PRINT " usage: set_to_hot_site" PRINT " [@dbname = <database name> ]," PRINT " [@target = <target SQL Server> ]," PRINT " [@targetPassword = <target sa password> ]," PRINT " [@debug = <debug -default=false>]," RETURN 1 END RETURN GO