导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

关于用SQL实现数据库还原的问题

extrazero 2007-12-13 04:45:34
我要用SQL语句(不是存储过程)实现数据库的备份与还原

备份如下:
backup database AAA
to disk = 'e:\XXX.bak'
with init

备份的过程没有问题,但将此备份文件进行恢复的时候出现问题
use master;
restore database BBB
from disk = 'e:\XXX.bak'
with stats

出现的错误为:
消息 3154,级别 16,状态 4,第 2 行
备份集中的数据库备份与现有的 'BBB' 数据库不同。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 正在异常终止。

请问是什么问题?该如何解决
...全文
156 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-12-13
数据库文件的逻辑名称
不相同造成的,在企业管理还原或改逻辑名,再还原
--

select * from sysfiles可查到
回复
fcuandy 2007-12-13
如果不在同一个库啊. 估计是两台服务器上对库的mdf文件和路径不一致造成的. 参考联机丛书 MOVE子句


比如
a服务器上 data存放目录为 c:\sqldata
那么 test库在 c:\sqldata\test_db.mdf和 test_log.ldf

b服务器上 data存放目录为 d:\sqldata
那么 test1库在 d:\sqldata\test1_db.mdf和test1_log.ldf

当对a服务器的test做备份,为 aTest.bak
在b的test1下恢复数据库,使用aTest.bak时,因为bak文件是从a上备分的,它记录的是c:\sqldata\test_db.mdf 和test_db.ldf
所以恢复不能成功,需要指定为 d:\sqldata\...

这种问题,通过企业管理器的鼠标点击操作,如果不更改ldf和mdf路径时,也会报错,很容易看到.

比如,我上面举的那个例子, 那么move到的地方应该是 to 'd:\sqldata\test1_data.mdf'和ldf

你的问题,依具你库文件的存放位置适当修改路径.
回复
zheninchangjiang 2007-12-13
建议你还是重新命名一个新数据库,把原来存在的那个数据库delete掉吧。你的问题比较复杂,文件组可能不一样
回复
zheninchangjiang 2007-12-13
强制还源呢?
回复
extrazero 2007-12-13
不是同一个服务器
回复
fcuandy 2007-12-13
是不是在同一个服务器上进行的备份和恢复啊
回复
extrazero 2007-12-13
按照9楼的方法改写为:

use master;
restore database BBB
from disk = 'e:\XXX.bak'
with
move 'BBB_data' to 'e:\BBB.mdf',
move 'BBB_log' to 'e:\BBB.ldf';

报的错误是

消息 3234,级别 16,状态 2,第 2 行
逻辑文件 'BBB_data' 不是数据库 'BBB' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 正在异常终止。

这应该怎么解决?
回复
kk19840210 2007-12-13
backup database AAA
to disk = 'e:\XXX.bak'
with init

备份的过程没有问题,但将此备份文件进行恢复的时候出现问题
use master;
restore database BBB
from disk = 'e:\XXX.bak'
with stats

出现的错误为:
消息 3154,级别 16,状态 4,第 2 行
备份集中的数据库备份与现有的 'BBB' 数据库不同。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 正在异常终止。



首先 你备份的时 AAA 数据库 但是还原时 为 BBB 数据库

其次 with STATS 使用不正确

STATS [ = percentage ]
注意:
受 RESTORE 和 RESTORE VERIFYONLY 支持。



每当另一个百分比完成时显示一条消息,并用于测量进度。如果省略 percentage,则 SQL Server 将每完成 10 个百分点(近似值)便显示一条消息。

STATS 选项报告截止报告下一个间隔的阈值时完成的百分比。此百分比接近于指定的百分比;例如,STATS=10 时,数据库引擎将按近似值报告该间隔;例如,此选项可能显示 43%,而不是精确地显示 40%。对于较大的备份集,这不是问题,因为完成百分比在已完成的 I/O 调用之间变化非常缓慢。



备份时 with init
INIT
指定应覆盖所有备份集,但是保留媒体标头。如果指定了 INIT,将覆盖该设备上所有现有的备份集。

默认情况下,BACKUP 将检查下列条件,如果其中的任一条件存在,都不会覆盖备份媒体:

所有备份集都未过期。有关详细信息,请参阅 EXPIREDATE 和 RETAINDAYS 选项。


如果 BACKUP 语句给出了备份集名,则该备份集名与备份媒体上的名称不匹配。有关详细信息,请参阅 NAME 子句。


若要越过这些检查,请使用 SKIP 选项。有关 { INIT | NOINIT } 和 { NOSKIP | SKIP } 之间交互的详细信息,请参阅“备注”部分。




回复
-狙击手- 2007-12-13

restore database BBB
from disk = 'c:\XXX.bak'
WITH
MOVE 'csdn_test_data' TO 'c:\test\BBB.mdf',
MOVE 'csdn_test_log' TO 'c:\test\BBB.ldf'

drop database bbb
/*
已处理 864 页,这些页属于数据库 'BBB' 的文件 'csdn_test_Data'(位于文件 1 上)。
已处理 1 页,这些页属于数据库 'BBB' 的文件 'csdn_test_Log'(位于文件 1 上)。
RESTORE DATABASE 操作成功地处理了 865 页,花费了 1.688 秒(4.193 MB/秒)。
正在删除数据库文件 'c:\test\BBB.ldf'。
正在删除数据库文件 'c:\test\BBB.mdf'。

*/
回复
rouqu 2007-12-13
接分
回复
dawugui 2007-12-13
确保BBB已经删除然后再恢复/还原.
回复
pt1314917 2007-12-13
我试了没错阿。完全可以
回复
dawugui 2007-12-13
[code=SQL]A. 备份整个 MyNwind 数据库


说明 MyNwind 数据库仅用于演示。


下例创建用于存放 MyNwind 数据库完整备份的逻辑备份设备。

-- Create a logical backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_1',
DISK ='c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_1

B. 备份数据库和日志
本例创建了一个数据库和日志的完整备份。将数据库备份到称为 MyNwind_2 的逻辑备份设备上,然后将日志备份到称为 MyNwindLog1 的逻辑备份设备上。



说明 创建逻辑备份设备需要一次完成。


-- Create the backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_2',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat'

--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwindLog1',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2

-- Update activity has occurred since the full database backup.

-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1

[/code]
回复
dawugui 2007-12-13
A. 备份整个 MyNwind 数据库


说明 MyNwind 数据库仅用于演示。


下例创建用于存放 MyNwind 数据库完整备份的逻辑备份设备。

-- Create a logical backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_1',
DISK ='c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_1

B. 备份数据库和日志
本例创建了一个数据库和日志的完整备份。将数据库备份到称为 MyNwind_2 的逻辑备份设备上,然后将日志备份到称为 MyNwindLog1 的逻辑备份设备上。



说明 创建逻辑备份设备需要一次完成。


-- Create the backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_2',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat'

--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwindLog1',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2

-- Update activity has occurred since the full database backup.

-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1

回复
extrazero 2007-12-13
还是不行,报错

消息 3154,级别 16,状态 4,第 2 行
备份集中的数据库备份与现有的 BBB' 数据库不同。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 正在异常终止。
回复
-狙击手- 2007-12-13
restore   database   BBB 
from disk = 'c:\XXX.bak'
WITH
MOVE 'csdn_test_data' TO 'c:\test\BBB.mdf',
MOVE 'csdn_test_log' TO 'c:\test\BBB.ldf'
回复
pt1314917 2007-12-13

BACKUP DATABASE test --这里的test指的是数据库名称
TO disk = 'c:\test\backup.bak' --这里指名的数据库路径(test为文件夹,backup.bak为备份文件名)
WITH FORMAT,
NAME = 'Full Backup of MyNwind' --这个是备注,无所谓。。随便写。


RESTORE DATABASE test --所被恢复的数据库名称
FROM disk = 'c:\test\backup.bak' --本地硬盘路径(test为文件夹,backup.bak为备份文件名)
GO


回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告