Loc*_*rde 214 backup restore sql-server-2008
我从一周前开始备份Database1.备份在调度程序中每周完成,我得到一个.bak文件.现在我想摆弄一些数据,所以我需要将它恢复到另一个数据库 - Database2.
我已经看到了这个问题:在不同名称的同一台PC上恢复SQL Server数据库,建议的步骤是重命名原始数据库,但我没有那个选项,因为我在生产服务器中,我真的不能这样做.
有没有其他方法可以恢复它Database2,或者至少,我如何浏览该.bak文件的数据?
谢谢.
ps:来自上面链接的第二个答案看起来很有希望,但它一直以错误结束:
还原文件列表异常终止
Ale*_* K. 291
您可以创建一个新的数据库,然后使用"还原向导"启用"覆盖"选项或;
查看内容;
RESTORE FILELISTONLY FROM DISK='c:\your.bak'
Run Code Online (Sandbox Code Playgroud)
请注意结果中.mdf和.ldf的逻辑名称;
RESTORE DATABASE MyTempCopy FROM DISK='c:\your.bak'
WITH
MOVE 'LogicalNameForTheMDF' TO 'c:\MyTempCopy.mdf',
MOVE 'LogicalNameForTheLDF' TO 'c:\MyTempCopy_log.ldf'
Run Code Online (Sandbox Code Playgroud)
MyTempCopy使用内容创建数据库your.bak.
示例(将名为'creditline'的数据库备份恢复为'MyTempCopy';
RESTORE FILELISTONLY FROM DISK='e:\mssql\backup\creditline.bak'
>LogicalName
>--------------
>CreditLine
>CreditLine_log
RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak'
WITH
MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf',
MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'
>RESTORE DATABASE successfully processed 186 pages in 0.010 seconds (144.970 MB/sec).
Run Code Online (Sandbox Code Playgroud)
Dan*_*rne 66
SQL Server 2008 R2:
对于您希望"还原的现有数据库:从不同数据库的备份中执行以下步骤:
Rot*_*ots 42
对于SQL Server 2012,使用Sql Server Management Studio,我发现Microsoft页面中的这些步骤可用于还原到其他数据库文件和名称:(ref:http://technet.microsoft.com/en-us/library/ms175510 .aspx)
注意 步骤4和7对于设置非常重要,以便不覆盖现有数据库.
将数据库还原到新位置,并可选择重命名数据库
- 连接到SQL Server数据库引擎的相应实例,然后在对象资源管理器中,单击服务器名称以展开服务器树.
- 右键单击" 数据库",然后单击"还原数据库".将打开" 还原数据库"对话框.
在" 常规"页面上,使用" 源"部分指定要还原的备份集的源和位置.选择以下选项之一:
数据库
从下拉列表中选择要还原的数据库.该列表仅包含根据msdb备份历史记录备份的数据库 .
注意如果备份是从其他服务器获取的,则目标服务器将不具有指定数据库的备份历史记录信息.在这种情况下,请选择"设备"以手动指定要还原的文件或设备.
设备
单击浏览(...)按钮以打开" 选择备份设备"对话框.在" 备份媒体类型"框中,选择一种列出的设备类型.要为" 备份媒体"框选择一个或多个设备 ,请单击" 添加".将所需设备添加到" 备份媒体"列表框后,单击" 确定"返回" 常规"页面.在" 源:设备:数据库"列表框中,选择应还原的数据库的名称.
注意 此列表仅在选择"设备"时可用.只有在所选设备上具有备份的数据库才可用.
- 在" 目标"部分中," 数据库"框将自动填充要还原的数据库的名称.要更改数据库的名称,请在" 数据库"框中输入新名称 .
- 在" 还原到"框中,保留默认设置为"上次备份"或单击" 时间线"以访问" 备份时间线"对话框,以手动选择停止恢复操作的时间点.
- 在"要还原的备份集"网格中,选择要还原的备份.此网格显示指定位置的可用备份.默认情况下,建议使用恢复计划.要覆盖建议的恢复计划,您可以更改网格中的选择.取消选择早期备份时,将自动取消选择依赖于恢复早期备份的备份.
- 若要指定数据库文件的新位置,请选择" 文件"页面,然后单击"将所有文件重新定位到文件夹".为数据文件文件夹和日志文件文件夹提供新位置.或者,您可以保留相同的文件夹,只需重命名数据库和日志文件名.
小智 34
实际上,没有必要用本机SQL Server术语恢复数据库,因为你"想要摆弄一些数据"和"浏览那个.bak文件的数据"
您可以使用ApexSQL Restore - 一种SQL Server工具,它将本机和本机压缩的SQL数据库备份和事务日志备份作为实时数据库附加,可通过SQL Server Management Studio,Visual Studio或任何其他第三方工具访问.它允许附加单个或多个完整,差异和事务日志备份
此外,我认为您可以在工具处于全功能试用模式(14天)时完成工作
免责声明:我在ApexSQL担任产品支持工程师
这是我从各种帖子拼凑到一起使用备份和恢复来复制数据库,同时移动来修复物理位置和其他sql以修复逻辑名称.
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339303 次 |
| 最近记录: |