简单的备份问题——送100分

yjchdy 2003-09-22 11:12:12
我用SQL能正常备份,且备份了一个BAK文件,但问题是我用另一个文件来代替这个备份文件时,却不能从这个被替代了的文件里恢复?我又必需将这个文件恢复进去?(注软件不是我开发的,我是照说明书操作的)。请问毛病出在什么地方?我用的是server 7.0版本。
...全文
54 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
subbee 2003-09-24
  • 打赏
  • 举报
回复
没明白你的意思。
雲水 禅心 2003-09-24
  • 打赏
  • 举报
回复
看看是不是文件路径的问题.
pengdali 2003-09-23
  • 打赏
  • 举报
回复
右键数据库-->所有任务-->还原数据库-->写入你想要的新的数据库名字-->从设备-->选择设备-->添加-->选择你的文件-->确定-->确定-->选项-->改为现在的data目录的路径-->OK

其中:
"写入名字"-->不要与现在的冲突了,或选强制恢复
"改为现在的data目录的路径"-->如默认是"c:\....data\....mdf"而你现在的sql的data目录是d:\....data你就改为d:\...data\...mdf
zjcxc 2003-09-23
  • 打赏
  • 举报
回复
当然,你也可以到企业管理器中手工恢复.
zjcxc 2003-09-23
  • 打赏
  • 举报
回复
可以考虑在查询分析器中创建下面的存储过程,然后用下面的语句恢复数据库:
exec p_RestoreDb 'x:\备份文件名','数据库名'

/*
恢复数据库
指定备份文件名及要恢复的数据库名
自动恢复到SQL数据目录下

--调用示例
exec p_RestoreDb 'c:\fund\fund.smp','new'
*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_RestoreDb]
GO

create proc p_RestoreDb
@bkfile varchar(1000), --定义要恢复的备份文件名
@redb varchar(200), --定义恢复后的数据库名
@overexist bit=1 --是否覆盖已经存在的数据库
as
/*--直接在查询分析器中执行
declare @bkfile varchar(1000),@redb varchar(200),@overexist bit
select @bkfile='c:\fund\fund.smp' --定义要恢复的备份文件名
,@redb='new' --定义恢复后的数据库名
,@overexist=0 --是否覆盖已经存在的数据库
-----------------------------------------------------------*/

--从备份文件中获取逻辑文件名和物理文件名
declare @logfn1 varchar(250),@logfn2 varchar(250)
declare @phyfn1 varchar(1000),@phyfn2 varchar(1000)

--创建临时表,保存获取的信息
create table #tb(lgfn varchar(250),pyfn varchar(1000),type char(1),fg varchar(200),size bigint,maxsize bigint)

--从备份文件中获取信息
insert into #tb
exec('restore filelistonly
from disk='''+@bkfile+'''')

--将信息保存到变量中
select @logfn1=lgfn,@phyfn1=pyfn from #tb where type='D'
select @logfn2=lgfn,@phyfn2=pyfn from #tb where type='L'

--删除临时表
drop table #tb

--显示获取的信息
select @logfn1 as 逻辑数据文件名,@phyfn1 as 物理数据文件名
union all
select @logfn2 as 逻辑日志文件名,@phyfn2 as 物理日志文件名

--生成恢复的语句
declare @sql varchar(8000)

--得到SQL安装时的数据文件路径
select @phyfn1=rtrim(reverse(filename)) from master..sysfiles where name='master'

select @phyfn1=reverse(substring(@phyfn1,charindex('\',@phyfn1),8000))

--生成数据恢复语句,将数据库恢复到SQL数据目录下
set @sql='restore database '+@redb
+' from disk='''+@bkfile+''''
+' with move '''+@logfn1+''' to '''
+@phyfn1+@redb+'.mdf'',move '''
+@logfn2+''' to '''+@phyfn1+@redb+'.ldf'''
+case @overexist when 1 then ',replace' else '' end
exec(@sql)
go
ljianq 2003-09-23
  • 打赏
  • 举报
回复
用另一个文件来代替这个备份文件时?

什么意思?
zjcxc 2003-09-23
  • 打赏
  • 举报
回复
代替是什么意思?

是不是你的软件固定从一个文件中恢复数据库,所以需要恢复另一个文件时,必须将些文件改名为软件需要的文件名,但发现不能恢复.

如果是这样的话,那是因为软件设计的原因.
伍子V5 2003-09-23
  • 打赏
  • 举报
回复
不太明白你是怎么替代的
去联机帮助查一下BACKUP 和RESTORE吧
double22822 2003-09-23
  • 打赏
  • 举报
回复
没试过,帮你up!
Wally_wu 2003-09-23
  • 打赏
  • 举报
回复
在Restore Database窗口中的Option页上改变Restore As 的路径

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧