原文:MS SQL数据批量备份还原(适用于MS SQL 2005+)

我们知道通过Sql代理,可以实现数据库的定时备份功能;当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较麻烦;

还好,微软自带的osql工具,比较实用,通过在命令行里里输入命令,也能实现数据库备份的功能;如果能通过sql语句来生成一个批处理文件,那就方便了;

下面即是生成批处理文件的sql脚本,通过它可以实现:运行一个批处理文件,备份数据库服务器上的所有数据库到指定目录。

生成批量备份脚本:

/************************************************************
* 数据备份脚本:
* 1.运行前,请根据实际配置修改相应账户信息;
* 2.请将脚本执行结果另存为批处理文件,执行批处理文件即可;
* 时间: 2015/3/10 14:21:15
************************************************************/ DECLARE @name NVARCHAR(200);
DECLARE @path NVARCHAR(500);
DECLARE @dbServer NVARCHAR(500);
DECLARE @dbUserName NVARCHAR(500);
DECLARE @dbUserPwd NVARCHAR(500);
--备份文件存放路径
SET @path = N'E:\05_DataBase_bakup\';
--数据库服务器
SET @dbServer = N'.';
--数据库用户名
SET @dbUserName = N'sa';
--数据库用户密码
SET @dbUserPwd = N'';
DECLARE cursors CURSOR FOR
--查询集合
SELECT [name]
FROM [sysdatabases]
WHERE name NOT IN ( 'master', 'tempdb', 'model', 'msdb' ); OPEN cursors;
FETCH NEXT FROM cursors
INTO @name;
WHILE @@fetch_status = 0
BEGIN
--遍历集合
PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd + ' -Q "BACKUP DATABASE [' + @name
+ '] TO DISK = ''' + @path + '[%date:~0,4%%date:~5,2%%date:~8,2%]' + @name + '.bak''"';
FETCH NEXT FROM cursors
INTO @name;
END;
CLOSE cursors;
DEALLOCATE cursors;

生成批量还原脚本:

/************************************************************
* 生成批量还原数据库脚本
* Time: 2015/4/19 18:30:05
************************************************************/
DECLARE @name NVARCHAR(200);
DECLARE @fileName NVARCHAR(200);
DECLARE @path NVARCHAR(500);
DECLARE @restorePath NVARCHAR(500);
DECLARE @dbServer NVARCHAR(500);
DECLARE @dbUserName NVARCHAR(500);
DECLARE @dbUserPwd NVARCHAR(500);
DECLARE @mdfName NVARCHAR(500);
DECLARE @ldfName NVARCHAR(500);
--数据库备份文件存放路径
SET @path = N'd:\DBBAK\';
--数据库还原后的文件存放路径
SET @restorePath = N'D:\PMSDB\';
--还原到的数据库服务器
SET @dbServer = N'127.0.0.1';
--还原到的数据库用户名
SET @dbUserName = N'sa';
--还原到的数据库用户密码
SET @dbUserPwd = N'xxxxxxx';
DECLARE cursors CURSOR FOR
--查询集合
--注意:这里将数据库文件的物理路径替换掉了一部分,只保留数据库名称
SELECT [name],
REPLACE(REPLACE(filename, 'D:\DBBAK\', ''), '.mdf', '') AS [fileName]
FROM [sysdatabases]
WHERE name NOT IN ( 'master', 'tempdb', 'model', 'msdb', 'DWDiagnostics', 'DWConfiguration', 'DWQueue', 'BIReport',
'distribution', 'ReportServer', 'ReportServerTempDB'
)
ORDER BY name;
OPEN cursors;
FETCH NEXT FROM cursors
INTO @name,
@fileName;
WHILE @@fetch_status = 0
BEGIN
SELECT @mdfName = f.name
FROM sysaltfiles f
INNER JOIN sysdatabases d
ON (f.dbid = d.dbid)
AND d.name = @name
AND CHARINDEX('MDF', f.filename) > 0;
SELECT @ldfName = f.name
FROM sysaltfiles f
INNER JOIN sysdatabases d
ON (f.dbid = d.dbid)
AND d.name = @name
AND CHARINDEX('LDF', f.filename) > 0;
--遍历集合
PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd + ' -Q "RESTORE DATABASE [' + @name
+ '] FROM DISK = ''' + @path + '[20170720]' + @name + '.bak'' WITH FILE = 1, MOVE N''' + @mdfName
+ ''' TO N''' + @restorePath + @name + '.mdf'', MOVE N''' + @ldfName + ''' TO N''' + @restorePath + @name
+ '.LDF'', NOUNLOAD, REPLACE,STATS = 10';
FETCH NEXT FROM cursors
INTO @name,
@fileName;
END;
CLOSE cursors;
DEALLOCATE cursors;

  

 

MS SQL数据批量备份还原(适用于MS SQL 2005+)的更多相关文章

  1. MS SQL数据批量备份还原(适用于MS SQL 2005+) 分类: SQL Server 数据库 2015-03-10 14:32 103人阅读 评论(0) 收藏

    我们知道通过Sql代理,可以实现数据库的定时备份功能:当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较麻烦: 还好,微软自带的osql工具,比较实用,通过在命令行里里输入命 ...

  2. SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原

    原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DECLARE @ ...

  3. sql 数据库的备份还原问题

    今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来覆去的找资料,最终想是不是可 ...

  4. sql数据库的备份还原问题

    sql数据库的备份还原问题 今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来 ...

  5. SQL server数据库备份还原问题备忘(亲测有效)

    问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...

  6. SQL Server数据库备份&还原

    一.备份 1.登录数据库 2.找到要还原的数据库 右键-任务-备份-添加(路径只写一个,刚开始二个总是报错)-确定 二.还原数据库 这个之间报错了二次 1.报错1:备份集中的数据库与现有数据库“XXX ...

  7. SQL Server 数据库备份还原和数据恢复

      认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...

  8. 你真的会使用SQL Server的备份还原功能吗?之二:主要备份类型

    假设在下面几个时间段中,一个数据库积累插入了如下数据: 1.完整数据库备份 故名思意,完整数据库备份包括完整的数据库信息.它包括数据库的数据文件和备份结尾的部份活动事务日志. 完整备份基本语法如下: ...

  9. 数据库备份还原工具EMS SQL Angel for SQL Server发布1.3版本

    EMS公司,是专门从事企业数据库以及内置于多层次客户服务器结构自动化开发.其EMS SQL Angel for SQL Server工具,便是SQL Servers数据库数据备份还原工具,并且还能使用 ...

随机推荐

  1. MySQL 主主同步

    双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到 ...

  2. Codeforces Round #326(Div2)

    CodeForces 588A 题意:Duff喜欢吃肉,想在接下来的n天,每天都有Ai斤肉吃,但每一天肉的单价Pi不定,肉 可以保存不过期,现已知n天每天肉的斤数Ai,以及单价Pi,为了使每天都   ...

  3. RMAN 增量备份级别说明

    通过Bat批处理调用RMan是我们定时备份数据库的好帮手,但是RMan的备份级别需要我们好好了解一下. RMAN备份全为全备和增量备份 增量备份:分为0 1 2级 ORACLE官方解释: A leve ...

  4. SQL小助手——SQL Prompt

    背景: 当数据库设计的比较复杂.庞大时,我们如果对脚本不是很熟悉,就会很难完成看似简单的增.删.改.查的操作.我们需要一款软件来给出相应的提示或帮助,来提高代码的可读性,更快更好的完成任务. 简介: ...

  5. MapReduce架构

    主从结构 主节点:JobTracker(一个) 从节点:TaskTrackers(多个) JobTracker: 接收客户提交的计算任务 把计算任务分配给TaskTrackers执行 监控TaskTr ...

  6. [洛谷P2216][HAOI2007]理想的正方形

    题目大意:有一个$a\times b$的矩阵,求一个$n\times n$的矩阵,使该区域中的极差最小. 题解:二维$ST$表,每一个点试一下是不是左上角就行了 卡点:1.用了一份考试时候写的二维$S ...

  7. 转:Java NIO

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递 ...

  8. laravel的elixir和gulp用来对前端施工

    使用laravel elixer npm install --global gulp  ok 然后在安装好的laravel 下 npm install 以安装 laravel-elixir subli ...

  9. JS操作checkBox

    代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...

  10. 和菜鸟一起学c之gcc编译过程及其常用编译选项【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/8162626 版权声明:本文为博主东月之神原创文章,未经博主允许不得转载. 上篇文章,知 ...