高手请教

xuminghua 2003-08-19 09:18:35
怎么得到逻辑文件名和物理文件名
即如何把数据库名称为 AA 的备份文件 AA.BAK 还原 数据库名为 BB中 要原码


如何得到SQL安装目录
...全文
42 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2003-08-19
  • 打赏
  • 举报
回复
/*
恢复数据库
指定备份文件名及要恢复的数据库名
自动恢复到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
z5wjz 2003-08-19
  • 打赏
  • 举报
回复
restore filelistonly from disk='路径\aa.bak'
liuyun2003 2003-08-19
  • 打赏
  • 举报
回复
看看
xuminghua 2003-08-19
  • 打赏
  • 举报
回复
我是把备份文件到别的目录 而且我现在是要另太机器有VB程序还原
用 move 'db1_Log' to 'C:\Program Files\Microsoft SQL 可不知道SQL服务器安装目录
CrazyFor 2003-08-19
  • 打赏
  • 举报
回复
到企业管理器->到"数据库"BB 这个上右键,->所有任务->恢复数据库->

1,输入新的数据库名BB,并打开你的备份文件.
2,在选项中,选中在现有数据库上强制恢复,并在下面输入还原目录.
pengdali 2003-08-19
  • 打赏
  • 举报
回复
--查看备份信息
RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup'

--还原旧的备份
use master

RESTORE DATABASE bb FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery,
move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf',
move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf'

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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