RSS订阅
RSS订阅TT数据库

根据备份文件直接还原数据库

2008-7-30  选择字号:  | |
打印本文章

导读:根据备份文件直接还原数据库的方法是先提取原数据库名,再提取数据库相关的数据文件(数据文件和日志文件),然后还原数据库。

关键词:数据库 备份 备份文件 直接还原数据库

正在加载数据...

  根据备份文件直接还原数据库:方法是先提取原数据库名,再提取数据库相关的数据文件(数据文件和日志文件),然后还原数据库。
 
  方法是先提取原数据库名,再提取数据库相关的数据文件(数据文件和日志文件),然后还原数据库。

  代码如下: 


Use master 
  Go 
  If Object_id(’sp_RestoreDataBase’) Is Not Null 
  drop Proc sp_RestoreDataBase 
  Go 
  create Proc sp_RestoreDataBase 
  ( 
  @DataBaseBakPath nvarchar(260), 
  @DataBaseNewPath nvarchar(260) 
  ) 
  As 
  Set Nocount On 
  Declare 
  @Sql nvarchar(max), 
  @DataBase nvarchar(128) 
  Declare @DataBakHeader table(BackupName nvarchar(128),BackupDescription nvarchar(255),BackupType smallint,ExpirationDate datetime,Compressed tinyint,Position smallint,DeviceType tinyint,UserName nvarchar(128),ServerName nvarchar(128),DatabaseName nvarchar(128),DatabaseVersion int,DatabaseCreationDate datetime,BackupSize numeric(20,0),FirstLSN numeric(25,0),LastLSN numeric(25,0),CheckpointLSN numeric(25,0),DatabaseBackupLSN numeric(25,0),BackupStartDate datetime,BackupFinishDate datetime,SortOrder smallint,CodePage smallint,UnicodeLocaleId int,UnicodeComparisonStyle int,CompatibilityLevel tinyint,SoftwareVendorId int,SoftwareVersionMajor int,SoftwareVersionMinor int,SoftwareVersionBuild int,MachineName nvarchar(128),Flags int,BindingID uniqueidentifier,RecoveryForkID uniqueidentifier,Collation nvarchar(128),FamilyGUID uniqueidentifier,HasBulkLoggedData bit,IsSnapshot bit,IsReadOnly bit,IsSingleUser bit,HasBackupChecksums bit,IsDamaged bit,BeginsLogChain bit,HasIncompleteMetaData bit,IsForceOffline bit,IsCopyOnly bit,FirstRecoveryForkID uniqueidentifier,ForkPointLSN numeric(25,0) NULL,RecoveryModel nvarchar(60),DifferentialBaseLSN numeric(25,0) NULL,DifferentialBaseGUID uniqueidentifier,BackupTypeDescription nvarchar(60),BackupSetGUID uniqueidentifier NULL) 
  Declare @DataBakFileList table(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId bigint,createLSN numeric(25,0),dropLSN numeric(25,0) NULL,UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0) NULL,ReadWriteLSN numeric(25,0) NULL,BackupSizeInBytes bigint,SourceBlockSize int,FileGroupID int,LogGroupGUID uniqueidentifier NULL,DifferentialBaseLSN numeric(25,0) NULL,DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit) 
  insert Into @DataBakHeader 
  exec sp_executesql N’Restore HeaderOnly From Disk=@DataBaseBakPath’,N’@DataBaseBakPath nvarchar(260)’,@DataBaseBakPath 
  insert Into @DataBakFileList 
  exec sp_executesql N’Restore FileListOnly From Disk=@DataBaseBakPath’,N’@DataBaseBakPath nvarchar(260)’,@DataBaseBakPath 
  select @DataBase=DatabaseName From @DataBakHeader 
  select @Sql=Isnull(@Sql+char(13)+char(10),’’)+’Kill ’+Rtrim(spid) From master.sys.sysprocesses where dbid=db_id(@DataBase) 
  Set @Sql=Isnull(@Sql+char(13)+char(10),’’)+’Restore DataBase @DataBase From Disk=@DataBaseBakPath With ’ 
  select @Sql=@Sql+’Move’’’+LogicalName+’’’ To ’’’+@DataBaseNewPath+’\’+LogicalName+Right(PhysicalName,charindex(’.’,Reverse(PhysicalName)))+’’’,’ 
  From @DataBakFileList 
  Set @Sql=@Sql+’Replace,Stats=10’ 
  Set Nocount Off 
  Print ’还原数据库: ’+@DataBase 
  exec sp_executesql @Sql,N’@DataBase nvarchar(128),@DataBaseBakPath nvarchar(260)’,@DataBase,@DataBaseBakPath 
  e.g:


exec sp_RestoreDataBase ’F:\SQL2005\test1\deadlocktest.bak’,’F:\SQL2005\test2\’ 
  /* 
  还原数据库: deadlocktest 
  已处理百分之 10。 
  已处理百分之 20。 
  已处理百分之 30。 
  已处理百分之 40。 
  已处理百分之 50。 
  已处理百分之 60。 
  已处理百分之 70。 
  已处理百分之 80。 
  已处理百分之 90。 
  已处理百分之 100。 
  已为数据库 ’deadlocktest’,文件 ’deadlocktest’ (位于文件 1 上)处理了 1184 页。 
  已为数据库 ’deadlocktest’,文件 ’deadlocktest_log’ (位于文件 1 上)处理了 2 页。 
  RESTORE DATABASE 成功处理了 1186 页,花费 0.495 秒(19.613 MB/秒)。 
  */ 

原文出处:http://www.cnblogs.com/wghao/archive/2008/07/27/1254213.html
来源:BLOG    作者:OK_008    
对5GB大小的Oracle 7.3存档或删除的最佳办法是什么?为了便于管理机构查询,这些数据至少需要再用20年的时间。我们担心将来我们不能对它重新获取并迁入一个更新的……
启用数据库进行热备份用什么程序?有两种方法。今天普遍的做法就是用RMAN进行Oracle数据库备份。以下语句就是用RMAN进行热备份……
我现在每天都要检查调度程序日志,但是我实在不想每天都手动进行这些操作。要是写封Email可能会更加简单。这个问题通常怎么解决呢?
我怎样才能重建内置的package body?(如:DBMS_IJOB,DBMS_IREFRESH..) 不知道为什么我把DBMS_IJOB package body弄丢了,这样我就不能进行完整导出(FULL=Y)。
2009年是不是升级Oracle数据库和应用软件的一年?如果是,我们应该升级哪些Oracle数据库和应用软件呢?现在是不是实施Oracle架构的时候?

本专题介绍了SQL Server服务代理相关方面的知识,包括SQL Server服务代理基础知识的概述、消息类型、契约、队列、服务和路由、SEND命令和RECEIVE命令、性能方面的改进以及对运行状况的监控等等。

无论你是否计划将SQL Server数据库转换服务(DTS)包迁移到SQL Server集成服务(SSIS)或在SQL Server 2005里运行DTS包,都需要专家的一些建议。这一指南主要是包括SSIS的相关基础知识、技巧帮助你进行SSIS调整,还介绍了SSIS有经验的一些用户的具体信息等等。

子查询是一个嵌套在SELECT、INSERT、UPDATE 或DELETE语句,或者另一个子查询里的查询。一个子查询可以返回一行或多行结果给父查询。标量子查询是只返回一个值的查询:只有一个字段的一行记录。标量子查询可以在SQL语句的大多数位置,其中你可以使用一个表达式或一个实际值。
最新更新
专家答疑
技巧
Michael Hillenbrand
你能解释一下数据库公程师、数据库架构师以及数据库管理员之间有什么区别吗?数据库管理员:这是目前最普遍使用的对从事数据库相关的工作的人的头衔。数据库管理员是指……
Brian Peasland
对5GB大小的Oracle 7.3存档或删除的最佳办法是什么?为了便于管理机构查询,这些数据至少需要再用20年的时间。我们担心将来我们不能对它重新获取并迁入一个更新的……
Rudy Limeback
如何创建一个约束限制2007年1月1日之前的日期被录入?用CHECK约束就可以。如下面的示例……