Version 2 Posted

  • IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_Load_TestDB_From_Backup]') AND type in (N'P', N'PC'))

    DROP PROCEDURE [dbo].[usp_Load_TestDB_From_Backup]

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    create procedure [dbo].[usp_Load_TestDB_From_Backup]

    AS

    /*

    RESTORE the TEST version of the database from the latest backup

    This procedure uses a full backup for restoration and does NOT handle incremental or transaction log backups

    Mike Kober 2/16/2010

    */

    DECLARE @DBBackupFileName VARCHAR(500),--Local variable used to get the most recent backup path

    @SourceBackupPath varchar(500), --Where to look for the hard drive backups, filtering for this database name

    @RestoreName varchar(200),-- Database name that should be restored, I always use the DBNAME_TEST as the default

    @SourceDBname varchar(200),-- Logical DB Name used in SQL Server

    @SourceTXname varchar(200), -- Logical TX Name used in SQL Server

    @DestDBpath varchar(500),-- Full path and filename to where the MDF should be stored

    @DestTXpath varchar(500)-- Full path and filename to where the LDF should be stored

    SET @SourceBackupPath = 'T:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\ChangeName\ChangeName_backup_%'

    SET @RestoreName = 'ChangeName_TEST'

    SET @SourceDBname = 'ChangeName'

    SET @SourceTXname = 'ChangeName_log'

    SET @DestDBpath = 'M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\ChangeName_TEST_Data.MDF'

    SET @DestTXpath = 'L:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\ChangeName_TEST_Log.LDF'

    -- First Get the last saved backup from disk.

    SELECT

    @DBBackupFileName =

    (

    SELECT TOP (1)

    BUMF.physical_device_name

    FROM

    msdb.dbo.backupmediafamily AS BUMF

    INNER JOIN msdb.dbo.backupmediaset AS BUMS ON BUMF.media_set_id = BUMS.media_set_id

    INNER JOIN msdb.dbo.backupfile AS BUF

    INNER JOIN msdb.dbo.backupset AS BUS ON BUF.backup_set_id = BUS.backup_set_id ON BUMS.media_set_id = BUS.media_set_id

    WHERE

    (BUS.database_name = @SourceDBname)

    AND (BUMF.physical_device_name LIKE @SourceBackupPath)

    AND (RIGHT(BUMF.physical_device_name, 3) = 'BAK')

    ORDER BY

    BUS.backup_start_date DESC)

    -- Restore the files for Dbname_Test.

    RESTORE DATABASE @RestoreName

    FROM DISK = @DBBackupFileName

    WITH RECOVERY,

    MOVE @SourceDBname TO @DestDBpath,

    MOVE @SourceTXname TO @DestTXpath,

    REPLACE

    GO

Viewing 0 posts

You must be logged in to reply to this topic. Login to reply