How to restore to a different database in sql server?

后端 未结 10 1575
忘掉有多难
忘掉有多难 2020-11-29 14:39

I have a backup of Database1 from a week ago. The backup is done weekly in the scheduler and I get a .bak file. Now I want to fiddle with some

相关标签:
10条回答
  • 2020-11-29 15:12

    Here is how to restore a backup as an additional db with a unique db name.

    For SQL 2005 this works very quickly. I am sure newer versions will work the same.

    First, you don't have to take your original db offline. But for safety sake, I like to. In my example, I am going to mount a clone of my "billing" database and it will be named "billingclone".

    1) Make a good backup of the billing database

    2) For safety, I took the original offline as follows:

    3) Open a new Query window

    **IMPORTANT! Keep this query window open until you are all done! You need to restore the db from this window!

    Now enter the following code:

    -- 1) free up all USER databases
    USE master;
    GO
    -- 2) kick all other users out:
    ALTER DATABASE billing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    GO
    -- 3) prevent sessions from re-establishing connection:
    ALTER DATABASE billing SET OFFLINE;
    

    3) Next, in Management Studio, rt click Databases in Object Explorer, choose "Restore Database"

    4) enter new name in "To Database" field. I.E. billingclone

    5) In Source for Restore, click "From Device" and click the ... navigate button

    6) Click Add and navigate to your backup

    7) Put a checkmark next to Restore (Select the backup sets to restore)

    8) next select the OPTIONS page in upper LH corner

    9) Now edit the database file names in RESTORE AS. Do this for both the db and the log. I.E. billingclone.mdf and billingclone_log.ldf

    10) now hit OK and wait for the task to complete.

    11) Hit refresh in your Object Explorer and you will see your new db

    12) Now you can put your billing db back online. Use the same query window you used to take billing offline. Use this command:

    -- 1) free up all USER databases
    USE master; GO
    -- 2) restore access to all users:
    ALTER DATABASE billing SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO
    -- 3) put the db back online:
    ALTER DATABASE billing SET ONLINE;
    

    done!

    0 讨论(0)
  • 2020-11-29 15:13

    For SQL Server 2012, using Sql Server Management Studio, I found these steps from the Microsoft page useful to restore to a different database file and name: (ref: http://technet.microsoft.com/en-us/library/ms175510.aspx)

    Note steps 4 and 7 are important to set so as not to overwrite the existing database.


    To restore a database to a new location, and optionally rename the database

    1. Connect to the appropriate instance of the SQL Server Database Engine, and then in Object Explorer, click the server name to expand the server tree.
    2. Right-click Databases, and then click Restore Database. The Restore Database dialog box opens.
    3. On the General page, use the Source section to specify the source and location of the backup sets to restore. Select one of the following options:

      • Database

        • Select the database to restore from the drop-down list. The list contains only databases that have been backed up according to the msdb backup history.

          Note If the backup is taken from a different server, the destination server will not have the backup history information for the specified database. In this case, select Device to manually specify the file or device to restore.

      • Device

        • Click the browse (...) button to open the Select backup devices dialog box. In the Backup media type box, select one of the listed device types. To select one or more devices for the Backup media box, click Add. After you add the devices you want to the Backup media list box, click OK to return to the General page. In the Source: Device: Database list box, select the name of the database which should be restored.

          Note This list is only available when Device is selected. Only databases that have backups on the selected device will be available.

    4. In the Destination section, the Database box is automatically populated with the name of the database to be restored. To change the name of the database, enter the new name in the Database box.
    5. In the Restore to box, leave the default as To the last backup taken or click on Timeline to access the Backup Timeline dialog box to manually select a point in time to stop the recovery action.
    6. In the Backup sets to restore grid, select the backups to restore. This grid displays the backups available for the specified location. By default, a recovery plan is suggested. To override the suggested recovery plan, you can change the selections in the grid. Backups that depend on the restoration of an earlier backup are automatically deselected when the earlier backup is deselected.
    7. To specify the new location of the database files, select the Files page, and then click Relocate all files to folder. Provide a new location for the Data file folder and Log file folder. Alternatively you can keep the same folders and just rename the database and log file names.
    0 讨论(0)
  • 2020-11-29 15:21

    Here's what I've cobbled together from various posts to copy a database using backup and restore with move to fix the physical location and additional sql to fix the logical name.

    /**
     * Creates (or resets) a Database to a copy of the template database using backup and restore.
     *
     * Usage: Update the @NewDatabase value to the database name to create or reset.
     */
    
    DECLARE @NewDatabase SYSNAME = 'new_db';
    
    -- Set up
    USE tempdb;
    
    DECLARE @TemplateBackups SYSNAME = 'TemplateBackups';
    DECLARE @TemplateDatabase SYSNAME = 'template_db';
    DECLARE @TemplateDatabaseLog SYSNAME = @TemplateDatabase + '_log';
    
    -- Create a backup of the template database
    BACKUP DATABASE @TemplateDatabase TO DISK = @TemplateBackups WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 100;
    
    -- Get the backup file list as a table variable
    DECLARE @BackupFiles TABLE(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlockSize int,FileGroupId int,LogGroupGUID uniqueidentifier,DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit,TDEThumbprint varbinary(32));
    INSERT @BackupFiles EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @TemplateBackups + '''');
    
    -- Create  the backup file list as a table variable
    DECLARE @NewDatabaseData VARCHAR(MAX);
    DECLARE @NewDatabaseLog VARCHAR(MAX);
    
    SELECT @NewDatabaseData = PhysicalName FROM @BackupFiles WHERE Type = 'D';
    SELECT @NewDatabaseLog = PhysicalName FROM @BackupFiles WHERE Type = 'L';
    
    SET @NewDatabaseData = REPLACE(@NewDatabaseData, @TemplateDatabase, @NewDatabase);
    SET @NewDatabaseLog = REPLACE(@NewDatabaseLog, @TemplateDatabase, @NewDatabase);
    
    RESTORE DATABASE @NewDatabase FROM DISK = @TemplateBackups WITH CHECKSUM, RECOVERY, REPLACE, STATS = 100,
       MOVE @TemplateDatabase TO @NewDatabaseData,
       MOVE @TemplateDatabaseLog TO @NewDatabaseLog;
    
    -- Change Logical File Name
    DECLARE @SQL_SCRIPT VARCHAR(MAX)='
        ALTER DATABASE [{NewDatabase}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
        ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}'', NEWNAME=N''{NewDatabase}'');
        ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}_log'', NEWNAME=N''{NewDatabase}_log'');
        ALTER DATABASE [{NewDatabase}] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
        SELECT name AS logical_name, physical_name FROM SYS.MASTER_FILES WHERE database_id = DB_ID(N''{NewDatabase}'');
    ';
    SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{TemplateDatabase}', @TemplateDatabase);
    SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{NewDatabase}', @NewDatabase);
    EXECUTE (@SQL_SCRIPT);
    
    0 讨论(0)
  • 2020-11-29 15:22

    SQL Server 2008 R2:

    For an existing database that you wish to "restore: from a backup of a different database follow these steps:

    1. From the toolbar, click the Activity Monitor button.
    2. Click processes. Filter by the database you want to restore. Kill all running processes by right clicking on each process and selecting "kill process".
    3. Right click on the database you wish to restore, and select Tasks-->Restore-->From Database.
    4. Select the "From Device:" radio button.
    5. Select ... and choose the backup file of the other database you wish to restore from.
    6. Select the backup set you wish to restore from by selecting the check box to the left of the backup set.
    7. Select "Options".
    8. Select Overwrite the existing database (WITH REPLACE)
    9. Important: Change the "Restore As" Rows Data file name to the file name of the existing database you wish to overwrite or just give it a new name.
    10. Do the same with the log file file name.
    11. Verify from the Activity Monitor Screen that no new processes were spawned. If they were, kill them.
    12. Click OK.
    0 讨论(0)
提交回复
热议问题