setLogDump
IF EXISTS (SELECT * FROM sysobjects
WHERE id = OBJECT_ID('dbo.setLogDump')
AND sysstat & 0xf = 4)
DROP PROCEDURE dbo.setLogDump
GO
CREATE PROCEDURE setLogDump
@dbName VARCHAR(30) = ' ',
@dumpPath VARCHAR(50) = ' ', -- fully qualified dump path
@loadPath VARCHAR(50) = ' ', -- fully qualified load path
@name VARCHAR(30) = ' ' OUTPUT,
@debug VARCHAR(5) = 'false'
AS
DECLARE
@CMD VARCHAR(255), -- reusable command holder
@CMDstatus INT, -- return status of command prompt
@localCMDstatus INT, -- return status of command prompt
@dumpDevice VARCHAR(80), -- fully qualified dump device
@dbDumpName VARCHAR(20), -- database dump file name
@dbDumpTemp VARCHAR(20), -- database dump file name
@loadDevice VARCHAR(80), -- fully qualified load device
@currentDate DATETIME, -- used to make dump file name
@dumpSeq TINYINT, -- used to make dump file name
@myName VARCHAR(30) -- this procedures name
/* find a dump file name that is not in use.
Look in the dump and load folders.
This will support up to 253 log dump files
only the first 99 will be 8.3 file name */
SET NOCOUNT ON
IF (@dbName = ' ') OR (@dumpPath = ' ') OR (@loadPath = ' ') RETURN 1
SELECT @myName = 'admin.setLogDump'
SELECT @dbDumpName = SUBSTRING(@dbName,1,4) +"dump.DAT"
SELECT @dbDumpTemp = SUBSTRING(@dbName,1,4) +"dump.TMP"
SELECT @currentDate = (SELECT getdate())
SELECT @CMDstatus = 0
SELECT @dumpSeq = 1
WHILE (@CMDstatus = 0) AND (@dumpSeq < 254) -- success
BEGIN -- look in the dump directory
SELECT @name = CONVERT(varchar(2), datepart(month,@currentDate)) +
CONVERT(varchar(2), datepart(day,@currentDate)) +
SUBSTRING(CONVERT(char(4), datepart(year,@currentDate)),3,2) +
CONVERT(varchar(3), @dumpSeq) + ".DAT"
SELECT @dumpDevice = @dumpPath + '\' + @name
SELECT @CMD = 'dir ' + @dumpdevice
EXEC @CMDstatus = dispatch @CMD, @myName, @debug
IF (@CMDstatus <> 0) -- did not find it
BEGIN -- look in load folder
SELECT @loadDevice = @loadPath + '\' + @name
SELECT @CMD = 'dir ' + @loaddevice
EXEC @CMDstatus = dispatch @CMD, @myName, @debug
IF (@CMDstatus = 0) -- found it
SELECT @dumpSeq = @dumpSeq + 1 -- try next name
ELSE
BEGIN
IF (@dumpseq = 1) -- remove previous log dumps
BEGIN
SELECT @CMD = 'dir ' + @dumpPath + '\' + @dbDumpName
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'ren ' + @dumpPath + '\' + @dbDumpName + ' ' + @dbDumpTemp
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
SELECT @CMD = 'dir ' + @dumpPath + '\*.DAT'
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'del ' + @dumpPath + '\*.DAT'
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
SELECT @CMD = 'dir ' + @dumpPath + '\' + @dbDumpTemp
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'ren ' + @dumpPath + '\' + @dbDumpTemp + ' ' + @dbDumpName
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
SELECT @CMD = 'dir ' + @loadPath + '\' + @dbDumpName
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'ren ' + @loadPath + '\' + @dbDumpName + ' ' + @dbDumpTemp
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
SELECT @CMD = 'dir ' + @loadPath + '\*.DAT'
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'del ' + @loadPath + '\*.DAT'
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
SELECT @CMD = 'dir ' + @loadPath + '\' + @dbDumpTemp
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus = 0) -- found
BEGIN
SELECT @CMD = 'ren ' + @loadPath + '\' + @dbDumpTemp + ' ' + @dbDumpName
EXEC @localCMDstatus = dispatch @CMD, @myName, @debug
IF (@localCMDstatus <> 0) RETURN @localCMDstatus
END
END
END
END
ELSE -- found this file in the dump archive folder
SELECT @dumpSeq = @dumpSeq + 1 -- try next name
IF @dumpSeq > 254
BEGIN
SELECT @CMD = "Unable to create a unique log dump name. Cannot continue. ("
+ @myName + ")"
EXEC @CMDstatus = dispatch @CMD, @myName, @debug
IF (@CMDstatus = 0) RETURN @CMDstatus
RETURN 99
END
END -- get the next dump file name
RETURN
GO