有沒有誤還原前的備份?若有就用可以,否則若有備份文件:
--恢复数据库/*--调用示例
--完整恢复数据库
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db'--差异备份恢复
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db',@byvType='DBNOR'
EXEC p_backupdb @byvBkFile='c:\db_20031015_df.bak',@byvBbName='db',@byvType='DF'--日志备份恢复
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db',@byvType='DBNOR'
EXEC p_backupdb @byvBkFile='c:\db_20031015_log.bak',@byvBbName='db',@byvType='LOG'--*/IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[procRestoreDb]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROC [dbo].[procRestoreDb]
GOCREATE PROC procRestoreDb
@byvBkFile nvarchar(1000), --定义要恢复的备份文件名
@byvBbName sysname='', --定义恢复后的数据库名,默认为备份的文件名
@byvBbPath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
@byvType nvarchar(10)='DB', --恢复类型:'DB'完整,'DBNOR' 为差异,日志恢复进行完整恢复,   DF'                                                       差异备份的恢复,'LOG' 日志恢复
@byvFileNo int=1, --恢复的文件号
@byvOverSign bit=1, --是否覆盖已经存在的数据库,仅@byvType为'DB'/'DBNOR'是有效
@byvKillSign bit=1 --是否关闭用户使用进程,仅@byvOverSign=1时有效
AS
DECLARE @vchSql varchar(8000)--得到恢复后的数据库名
IF ISNULL(@byvBbName,'')=''
SELECT @vchSql=REVERSE(@byvBkFile)
,@vchSql= CASE WHEN CHARINDEX('.',@vchSql)=0 THEN @vchSql
ELSE SUBSTRING(@vchSql,CHARINDEX('.',@vchSql)+1,1000) END
,@vchSql= CASE WHEN CHARINDEX('\',@vchSql)=0 THEN @vchSql
ELSE LEFT(@vchSql,CHARINDEX('\',@vchSql)-1) END
,@byvBbName=REVERSE(@vchSql)--得到恢复后的数据库存放目录
IF ISNULL(@byvBbPath,'')=''
BEGIN
SELECT @byvBbPath=rtrim(REVERSE(filename)) FROM master..sysfiles WHERE name='master'
SELECT @byvBbPath=REVERSE(substring(@byvBbPath,charindex('\',@byvBbPath),4000))
END--生成数据库恢复语句
SET @vchSql='restore '+ CASE @byvType WHEN 'LOG' THEN 'log ' ELSE 'database ' END+@byvBbName
+' FROM disk='''+@byvBkFile+''''
+' with file='+CAST(@byvFileNo as varchar)
+ CASE WHEN @byvOverSign=1 AND @byvType in('DB','DBNOR') THEN ',replace' ELSE '' END
+ CASE @byvType WHEN 'DBNOR' THEN ',NORECOVERY' ELSE ',RECOVERY' END--添加移动逻辑文件的处理
IF @byvType='DB' or @byvType='DBNOR'
BEGIN
--从备份文件中获取逻辑文件名
DECLARE @lfn nvarchar(128),@tp char(1),@i int--创建临时表,保存获取的信息
CREATE TABLE #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--从备份文件中获取信息
INSERT INTO #tb EXEC('restore filelistonly FROM disk='''+@byvBkFile+'''')
DECLARE #f CURSOR FOR SELECT ln,tp FROM #tb
OPEN #f
FETCH NEXT FROM #f INTO @lfn,@tp
SET @i=0
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @vchSql=@vchSql+',move '''+@lfn+''' to '''+@byvBbPath+@byvBbName+CAST(@i as varchar)
+ CASE @tp WHEN 'D' THEN '.mdf''' ELSE '.ldf''' END
,@i=@i+1
FETCH NEXT FROM #f into @lfn,@tp
END
CLOSE #f
DEALLOCATE #f
END--关闭用户进程处理
IF @byvOverSign=1 AND @byvKillSign=1
BEGIN
DECLARE @spid varchar(20)
DECLARE #spid cursor for
SELECT spid=cast(spid as varchar(20)) FROM master..sysprocesses WHERE dbid=db_id(@byvBbName)
OPEN #spid
FETCH NEXT FROM #spid into @spid
WHILE @@FETCH_STATUS=0
BEGIN 
EXEC('kill '+@spid)
FETCH NEXT FROM #spid into @spid
END 
CLOSE #spid
DEALLOCATE #spid
END--恢复数据库
EXEC(@vchSql)GO

解决方案 »

  1.   

    若有(*.mdf)和日志文件(*.ldf)EXEC sp_attach_db @dbname = 'test', 
    @filename1 = 'd:\mssql7\data\test_data.mdf', 
    @filename2 = 'd:\mssql7\data\test_log.ldf' 
      

  2.   

    利用日志恢復數據的工具,隻能恢復誤刪的數據。
    Log Explorerhttp://www.ttdown.com/SoftDown.asp?ID=14562
    http://www.yiii.net/app/servlet/net.yiii.club.DownloadServlet?Information_Id=I00023471
    解压缩密码 www.heibai.nethttp://www.ttdown.com/softview_8647.htm
    注册机产生的是注册码,是两个用解压缩密码解开后,压缩包里也有一个注册机的
      

  3.   

    在还原前,没有备份,我想,能不能通过SQL SERVER 的日志原还呢
      

  4.   

    try:
    http://expert.csdn.net/Expert/topic/2083/2083062.xml?temp=.4302179