因为bak文件记录了数据库在压缩放到bak文件前每个数据库文件的路径
因为bak文件记录了数据库在压缩放到bak文件前每个数据库文件的路径
当你确定bak文件所保存的路径(用GUI)或你想将数据库文件放到别的地方 跟原来压缩前的路径不一样
现有完备备份还原,才有差异备份还原,日志备份还原
完备还原-》差备还原-》日备还原
那么移动数据文件是在完备还原的时候移动,差备和日备的bak文件不保存数据库文件路径
RESTORE DATABASE的时候可以用WITH MOVE语句
1 --返回由备份集内包含的数据库和日志文件列表组成的结果集。 2 --主要获得逻辑文件名 3 USE master 4 RESTORE FILELISTONLY 5 FROM DISK = 'g:\back.Bak' 6 Go 7 8 /* 9 利用bak恢复数据库,强制还原(REPLACE) 10 STATS = 10 每完成10%显示一条记录 11 DBTest和DBTest_log是上面g:\back.Bak里的逻辑文件 12 */ 13 USE master 14 RESTORE DATABASE DB 15 FROM DISK = 'g:\back.Bak' 16 WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB.mdf', 17 MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB_log.ldf', 18 STATS = 10, REPLACE 19 GO 20 ------------------------------------------------- 21 22 /* 23 备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。 24 */ 25 USE master 26 BACKUP DATABASE DB 27 TO DISK = 'g:\DBBack0930.bak' 28 RESTORE FILELISTONLY 29 FROM DISK = 'g:\DBBack0930.bak' 30 RESTORE DATABASE DBTest 31 FROM DISK = 'g:\DBBack0930.bak' 32 WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest.mdf', 33 MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest_log.ldf' 34 GO 35 ---------------------------------------------------
http://www.cnblogs.com/adandelion/archive/2006/09/30/519534.html
1 USE master 2 GO 3 --创建数据库 4 CREATE DATABASE LogChainTest; 5 GO 6 --改为完整恢复模式 7 ALTER DATABASE LogChainTest SET RECOVERY FULL; 8 GO 9 10 11 12 13 --1、如果数据库在线,那么还原的时候会把原来的数据库文件移动到新路径(实质就是删除数据库,在新路径创建数据库并还原) 14 --2、如果原来的数据库不在了,需要新建一个数据库,那么还原的时候会在在新路径创建数据库并还原缺少了删除原来的数据库那个步骤 15 USE master 16 RESTORE DATABASE LogChainTest 17 FROM DISK = 'C:\LogChainTest_full1_20131208093555.bak' 18 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 19 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 20 STATS = 10, REPLACE 21 GO
只有完整备份才可以移动数据库文件
1 USE master 2 GO 3 --创建数据库 4 CREATE DATABASE LogChainTest; 5 GO 6 --改为完整恢复模式 7 ALTER DATABASE LogChainTest SET RECOVERY FULL; 8 GO 9 10 11 -------------------------------------------------------------------- 12 --备份 13 --第一个完整备份 14 USE master 15 GO 16 DECLARE @strbackup NVARCHAR(100) 17 --改为日期加时间的 18 SET @strbackup = 'C:\LogChainTest_full1_' 19 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 20 ''), ':', '') + '.bak' 21 BACKUP DATABASE LogChainTest TO DISK = @strbackup WITH INIT; 22 GO 23 24 25 26 --第一个日志备份 27 USE LogChainTest 28 GO 29 CREATE TABLE tt(id INT) 30 INSERT INTO tt 31 SELECT 1 32 DECLARE @strbackup NVARCHAR(100) 33 --改为日期加时间的 34 SET @strbackup = 'C:\LogChainTest_log1_' 35 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 36 ''), ':', '') + '.bak' 37 BACKUP LOG LogChainTest TO DISK = @strbackup WITH INIT; 38 GO 39 40 41 42 --第一个差异备份 43 USE LogChainTest 44 GO 45 INSERT INTO tt 46 SELECT 1 47 DECLARE @strbackup NVARCHAR(100) 48 --改为日期加时间的 49 SET @strbackup = 'C:\LogChainTest_diff1_' 50 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 51 ''), ':', '') + '.bak' 52 BACKUP DATABASE LogChainTest TO DISK = @strbackup WITH INIT, DIFFERENTIAL; 53 GO 54 ------------------------------------------------------------------------ 55 56 57 -------------------------------------------------------------------------- 58 --还原 59 USE master 60 GO 61 RESTORE DATABASE LogChainTest 62 FROM DISK = 'C:\LogChainTest_full1_20131208093555.bak' 63 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 64 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 65 REPLACE 66 GO 67 68 USE master 69 GO 70 --只有完备备份还原才可以移动数据库文件 71 RESTORE DATABASE LogChainTest FROM DISK='C:\LogChainTest_full1_20131208100145.bak' 72 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 73 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 74 NORECOVERY 75 GO 76 77 78 RESTORE DATABASE LogChainTest FROM DISK='c:\LogChainTest_log1_20131208100151.bak' 79 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 80 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 81 NORECOVERY 82 GO 83 --日志还原 84 消息 3174,级别 16,状态 1,第 1 行 85 此 RESTORE 操作无法移动文件 'LogChainTest'。 86 消息 3174,级别 16,状态 2,第 1 行 87 此 RESTORE 操作无法移动文件 'LogChainTest_log'。 88 消息 3119,级别 16,状态 1,第 1 行 89 在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。 90 消息 3013,级别 16,状态 1,第 1 行 91 RESTORE DATABASE 正在异常终止。 92 93 RESTORE DATABASE LogChainTest FROM DISK='c:\LogChainTest_diff1_20131208100251.bak' 94 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 95 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 96 NORECOVERY 97 GO 98 --差异还原 99 消息 3174,级别 16,状态 1,第 1 行 100 此 RESTORE 操作无法移动文件 'LogChainTest'。 101 消息 3119,级别 16,状态 1,第 1 行 102 在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。 103 消息 3013,级别 16,状态 1,第 1 行 104 RESTORE DATABASE 正在异常终止。
还原日志备份的时候使用restore log 或restore database都是一样的
而还原差异备份的时候使用restore log就会报错
1 USE master 2 GO 3 --创建数据库 4 CREATE DATABASE LogChainTest; 5 GO 6 --改为完整恢复模式 7 ALTER DATABASE LogChainTest SET RECOVERY FULL; 8 GO 9 10 11 -------------------------------------------------------------------- 12 --备份 13 --第一个完整备份 14 USE master 15 GO 16 DECLARE @strbackup NVARCHAR(100) 17 --改为日期加时间的 18 SET @strbackup = 'C:\LogChainTest_full1_' 19 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 20 ''), ':', '') + '.bak' 21 BACKUP DATABASE LogChainTest TO DISK = @strbackup WITH INIT; 22 GO 23 24 25 26 --第一个日志备份 27 USE LogChainTest 28 GO 29 CREATE TABLE tt(id INT) 30 INSERT INTO tt 31 SELECT 1 32 DECLARE @strbackup NVARCHAR(100) 33 --改为日期加时间的 34 SET @strbackup = 'C:\LogChainTest_log1_' 35 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 36 ''), ':', '') + '.bak' 37 BACKUP LOG LogChainTest TO DISK = @strbackup WITH INIT; 38 GO 39 40 41 42 --第一个差异备份 43 USE LogChainTest 44 GO 45 INSERT INTO tt 46 SELECT 2 47 DECLARE @strbackup NVARCHAR(100) 48 --改为日期加时间的 49 SET @strbackup = 'C:\LogChainTest_diff1_' 50 + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', 51 ''), ':', '') + '.bak' 52 BACKUP DATABASE LogChainTest TO DISK = @strbackup WITH INIT, DIFFERENTIAL; 53 GO 54 ------------------------------------------------------------------------ 55 56 57 -------------------------------------------------------------------------- 58 --还原 59 60 61 62 USE master 63 GO 64 --只有完备备份还原才可以移动数据库文件 65 RESTORE DATABASE LogChainTest FROM DISK='C:\LogChainTest_full1_20131208100145.bak' 66 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 67 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 68 NORECOVERY ,REPLACE 69 GO 70 71 72 RESTORE LOG LogChainTest FROM DISK='c:\LogChainTest_log1_20131208100151.bak' 73 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 74 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 75 NORECOVERY 76 GO 77 ------------------------------------------------- 78 RESTORE DATABASE LogChainTest FROM DISK='c:\LogChainTest_log1_20131208100151.bak' 79 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 80 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 81 NORECOVERY 82 GO 83 84 85 RESTORE DATABASE LogChainTest FROM DISK='c:\LogChainTest_diff1_20131208100251.bak' 86 WITH MOVE 'LogChainTest' TO 'E:\LogChainTest.mdf', 87 MOVE 'LogChainTest_log' TO 'E:\LogChainTest_log.ldf', 88 RECOVERY 89 GO 90 91 USE [LogChainTest] 92 GO 93 SELECT * FROM [dbo].[tt]