根据备份文件直接还原数据库:方法是先提取原数据库名,再提取数据库相关的数据文件(数据文件和日志文件),然后还原数据库。
方法是先提取原数据库名,再提取数据库相关的数据文件(数据文件和日志文件),然后还原数据库。
代码如下:
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 |
exec sp_RestoreDataBase ’F:SQL2005test1deadlocktest.bak’,’F:SQL2005test2’ /* 还原数据库: 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/秒)。 */ |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
数据库和数据仓库的区别在哪儿?
目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。
-
如何使用服务来平衡Oracle RAC 数据库工作负载
为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。