批量还原数据库 SQL Server 2008
1.如果你够懒,不想一步一步点路径,一步一步选择
2.如果你连单个备份数据库的存储过程都不想多执行,一般每还原一个需要修改数据库名
下面的脚本适合你:
/**********************************************
Description:This script help you restore database batch.
Pay attention:You'd better name the database like databaseName+number.
The database name is nessasery. This script not perfect,and please make it progress if you want. Author:jiangxiaoqaing
Script Date:2013-09-29
Modify history: **********************************************/ ALTER procedure [dbo].[sp_restoreDBBatch]
--The path your .bak file store
@database_bak_path varchar(200),
--The distination you want your database file store
@database_path varchar(200)
as
begin
declare @bak_databaseName varchar(200),
@DynamicSql varchar(500)=null /*Judge the '#tmpTable' object if exists,the #tmpTable store backup
database name and path*/
if (OBJECT_ID('#tmpTable') is not null)
drop table #tmpTable
create table #tmpTable
(
DBName varchar(200)
) /*using extended procedure xp_cmdshell to get the path and name*/
set @DynamicSql='cd /d "'+@database_bak_path+'"&&dir /a /b /s *.bak'
insert into #tmpTable exec xp_cmdshell @DynamicSql /*If the backup path not exists,make the directory*/
set @DynamicSql='if not exist '+@database_path+' mkdir '+@database_path+''
exec xp_cmdshell @DynamicSql declare bak_DBPathandName cursor
for
select DBName from #tmpTable
open bak_DBPathandName
while @@FETCH_STATUS=0
begin
fetch next from bak_DBPathandName into @bak_databaseName
declare @s varchar(200)
/*Get the database backup file name,store your specify path*/
set @s= reverse(substring(reverse(@bak_databaseName),0,CHARINDEX('\',reverse(@bak_databaseName))))
/*To get the database name,and tick the number*/
BEGIN
WHILE PATINDEX('%[0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[0-9]%',@s),1,'')
end
/*Tick the '.bak' affix*/
set @s=replace(@s,'.bak','')
end
/*Backup single database*/
exec restore_database_proc @bak_databaseName,@s,@database_path
end
close reachDBName
deallocate reachDBName
end
Resore single DB:
/*******************************************
Descript:SQL server 2008 backup database.
Author:jiangxiaoqiang
Date:2013-09-26
Modify history: *******************************************/ ALTER PROCEDURE [dbo].[restore_database_proc]
@database_bak_path varchar(100),--bak file store path
@database_name varchar(100),--The new database name(Not a LogicalName and PhysicalName)
@database_path varchar(200)--restore new database file store path,the path you want to store data file
AS
--exec( 'RESTORE FILELISTONLY FROM DISK = N''' + @database_bak_path + '''')
--select * from tempdb..sysobjects where name ='#tmp_file'
if OBJECT_ID('tempdb..#tmp_file') is not null
DROP TABLE #tmp_file create table #tmp_file
(
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,
TDEThumbprint varbinary(32)
)
--Database datafile full path
declare @database_mdf_path varchar(1000)
--Database log file full path
declare @database_log_path varchar(1000) --The old database name
declare @database_mdf_oldname varchar(1000)
--The old database old log name
declare @database_log_oldname varchar(1000) set @database_mdf_path = @database_path + '/' + @database_name + '.mdf'
set @database_log_path = @database_path + '/' + @database_name + '_Log.ldf' --INSERT INTO #tmp_file EXEC ('restore_database_proc N''' + @database_bak_path + '''')
INSERT INTO #tmp_file EXEC ('RESTORE FILELISTONLY FROM DISK = N''' + @database_bak_path + '''')
set @database_mdf_oldname = (select LogicalName from #tmp_file where Type = 'D')
set @database_log_oldname = (select LogicalName from #tmp_file where Type = 'L')
--select @database_mdf_oldname=LogicalName from #tmp_file where Type = 'D' --select @database_log_oldname =LogicalName from #tmp_file where Type = 'L'
exec(
'
RESTORE DATABASE ' + @database_name +
'
FROM DISK = ''' + @database_bak_path + '''' +
'
WITH
MOVE ''' + @database_mdf_oldname + ''' TO ''' + @database_mdf_path + ''',' +
'
MOVE ''' + @database_log_oldname + ''' TO ''' + @database_log_path + ''''
)
批量还原数据库 SQL Server 2008的更多相关文章
- 备份数据库SQL Server 2008下实测
下面的存储过程适用: 1.一次想备份多个数据库. 2.只需要一步操作,在有存储过程的条件下. 3.可以根据自己的需要修改存储过程. /*----------------------------- De ...
- 九、数据库——sql server 2008导入excel
昨天分配给我一个活,让我手动录入新闻网页的数据,包括每条新闻的标题.时间和链接. 一开始,就是按照最原始的手动录入的方法,一条条的录入.发现这简直就是在浪费时间,于是就想了一种新方法. 1.将网页中的 ...
- excel批量导入数据库SQL server
思路: 第一是文件上传,可以参照Jakarta的FileUpload组件,用普通的Post也就行了.第二是Excel解析,用JSL或者POI都行第三是数据保存,这个应该简单吧,一个循环,一行对应一条数 ...
- 从远程服务器数据库中同步数据到本地数据库 sql server 2008 开启分布
控制面板\所有控制面板项\管理工具 打开“管理工具――组件服务”,以此打开“组件服务――计算机”,在“我的电脑”上点击右键.在MSDTC选项卡中,点击“安全配置”按钮. 在安全配置窗口中做如下设置: ...
- SQL Server 2008 R2 数据库安装
操作系统 Windows server 2008 R2 数据库 SQL Server 2008 R2 注意:SQL Server 2008 R2需要操作系统首先安装.NET Frame ...
- .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
一. 问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...
- Vcenter虚拟化三部曲----SQL Server 2008 R2 数据库安装
操作系统 Windows server 2008 R2 数据库 SQL Server 2008 R2 注意:SQL Server 2008 R2需要操作系统首先安装.NET Frame ...
- .NET Core EF框架使用SQL server 2008数据库分页问题:Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement
一. 问题 最近.Net Core程序部署到服务器,采用EF6.本地数据库是SQL server 2016,服务器数据库安装的是SQL server 2008 R2,在用到分页查询时报错如下: { & ...
- sql server ------创建本地数据库 SQL Server 排序规则
sql server完整复制数据库 sql server导入导出方法 SQL Server 排序规则
随机推荐
- Jquery正则表达式公式.例子
1.非负整数 /^\d+$/ 2.正整数 /^[0-9]*[1-9][0-9]*$/ 3.非正整数 /^((-\d+)|(0+))$/ ...
- mencoder mencoder 安装使用及常用参数
mencoder 安装及使用 1.安装: 参考:http://hi.baidu.com/putword/item/e5910a187d2aed14e2f9867f 2.合并视频: ...
- javascript中 的 + RegExp['\x241'] 怎么理解
\x24是十六进制转义符,16*2+4=36,ASCII码36代表的正是“$”符号(可以查ASCII码表),十六进制转义符的一般形式是'\xhh',h是0-9或A-F内的一个.$1是javascrip ...
- js中substr与substring的用法与区别
substrsubstr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/pic_1.png";alert(sr ...
- Objective-C编码规范:26个方面解决iOS开发问题
介绍 我们制定Objective-C编码规范的原因是我们能够在我们的书,教程和初学者工具包的代码保持优雅和一致.即使我们有很多不同的作者来完成不同的书籍. 这里编码规范有可能与你看到的其他Object ...
- Oracle PO - 模块一揽子采购协议小结
本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1.理论介绍 (1)名词术语 一揽子采购协议(Blanket Purchase Agreement,BPA)是指某 ...
- [CFGym101028] 2016 Al-Baath University Training Camp Contest-1
比赛链接:http://codeforces.com/gym/101028/ 由于实习,几乎没有时间刷题了.今天下午得空,断断续续做了这一套题,挺简单的. A.读完题就能出结果. /* ━━━━━┒ギ ...
- 从零开始学数据分析,什么程度可以找到工作?( 内附20G、5000分钟数据分析工具教程大合集 )
从零开始学数据分析,什么程度可以找到工作?( 内附20G.5000分钟数据分析工具教程大合集 ) 我现在在Coursera上面学data science 中的R programming,过去很少接 ...
- WinCE5.0中文模拟器SDK(VS2005)的配置
WinCE5.0中文模拟器SDK的安装过程不细说了,一路默认即可,下面主要介绍如何配置,使其能在VS2005中正常使用. 安装完成后,打开VS2005,点击菜单“工具”——“选项”——“设备工具”—— ...
- Codeforces 435 A Queue on Bus Stop
题意:给出n队人坐车,车每次只能装载m人,并且同一队的人必须坐同一辆车,问最少需要多少辆车 自己写的时候想的是从前往后扫,看多少队的人的和小于m为同一辆车,再接着扫 不过写出来不对 后来发现把每一队的 ...