I am upgrading the backend of an Access 2003 mdb to SQL Server Express 2005 on a 6 user peer to peer network. In the past the user backed up the mdb every night by using compact and repair. I want to provide a simple and similar process for backing up the SQL Server database. I have created the following stored procedure which the user will invoke by clicking a Backup button in the Access front end. Since I really don't understand SQL Server backups, is this a good approach and if not, what should I be doing?
/****** Object: StoredProcedure [dbo].[procBackupAndShrink
Log] Script Date: 05/08/2009 07:43:40 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[procBackupAndShrink
Log]
@FQBackupName VARCHAR(1000) OUTPUT
AS
--
BEGIN
DECLARE @BackupName VARCHAR(1000)
DECLARE @DbName VARCHAR(500)
DECLARE @DbPath VARCHAR(500)
DECLARE @ErrMsg VARCHAR(1000)
DECLARE @ErrNbr INT
DECLARE @LogFileName VARCHAR(500)
DECLARE @RC INT
--
EXECUTE @RC = master.dbo.xp_instance_reg
read
'HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\MSSQLS
erver\Setu
p',
'SQLDataRoot',
@param = @DbPath OUTPUT
IF @RC <> 0 BEGIN
SET @ErrMsg = 'master.dbo.xp_instance_re
gread failed with RC=' + CAST(@RC AS VARCHAR)
RAISERROR (@ErrMsg,16,1)
RETURN @RC
END
--
SET @DbName = DB_NAME()
SET @BackupName = @DbPath + '\Backup\'
+ @DbName
+ CONVERT(CHAR(8), GETDATE(), 112)
+ STUFF(CONVERT(VARCHAR(5), GETDATE(), 8), 3, 1, '')
+ '.BAK'
SET @LogFileName = @DbName + '_Log'
--
PRINT CONVERT(VARCHAR,GETDATE(),
109) + ' backing up database to ' + @BackupName
BACKUP DATABASE @DbName
TO DISK = @BackupName
WITH DESCRIPTION = 'Backup before log truncate'
SET @ErrNbr = @@ERROR
IF @ErrNbr <> 0 BEGIN
RAISERROR (@ErrNbr,16,1)
RETURN @ErrNbr
END
--
PRINT CONVERT(VARCHAR,GETDATE(),
109) + ' shrinking log file'
DBCC SHRINKFILE(@LogFileName, 1)
SET @ErrNbr = @@ERROR
IF @ErrNbr <> 0 BEGIN
RAISERROR (@ErrNbr,16,1)
RETURN @ErrNbr
END
--
PRINT CONVERT(VARCHAR,GETDATE(),
109) + ' backing up log file'
BACKUP LOG @DbName
WITH TRUNCATE_ONLY
SET @ErrNbr = @@ERROR
IF @ErrNbr <> 0 BEGIN
RAISERROR (@ErrNbr,16,1)
RETURN @ErrNbr
END
--
PRINT CONVERT(VARCHAR,GETDATE(),
109) + ' shrinking log file after truncate_only'
DBCC SHRINKFILE(@LogFileName, 1)
SET @ErrNbr = @@ERROR
IF @ErrNbr <> 0 BEGIN
RAISERROR (@ErrNbr,16,1)
RETURN @ErrNbr
END
--
PRINT CONVERT(VARCHAR,GETDATE(),
109) + ' done'
SET @FQBackupName = @BackupName
RETURN 0
END