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 = 'E:\05_DataBase_bakup\'
--数据库服务器
SET @dbServer = '.'
--数据库用户名
SET @dbUserName = 'sa'
--数据库用户密码
SET @dbUserPwd = '123'
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)
--数据库备份文件存放路径
SET @path = 'E:\05_DataBase_bakup\'
--数据库还原后的文件存放路径
SET @restorePath = 'E:\db2008\'
--还原到的数据库服务器
SET @dbServer = '192.168.0.7,1501\SQL2008'
--还原到的数据库用户名
SET @dbUserName = 'netuser'
--还原到的数据库用户密码
SET @dbUserPwd = 'netuser2008'
DECLARE cursors     CURSOR
FOR
    --查询集合
    --注意:这里将数据库文件的物理路径替换掉了一部分,只保留数据库名称
    SELECT [name],
           REPLACE  (REPLACE(FILENAME, 'E:\01.数据库\', ''), '.mdf', '') AS
           [fileName]
    FROM   [sysdatabases]
    WHERE  NAME NOT IN ('master', 'tempdb', 'model', 'msdb')  

 OPEN cursors
 FETCH NEXT FROM cursors INTO @name,@fileName
WHILE @@fetch_status = 0
BEGIN
    --遍历集合
    PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd +
    ' -Q "RESTORE DATABASE [' + @name + '] FROM DISK = ''' + @path + @name +
    '.bak'' WITH  FILE = 1,  MOVE N''' + @fileName + ''' TO N''' + @restorePath
    + @name
    + '.mdf'',  MOVE N''' + @fileName + '_log'' TO N''' + @restorePath + @name +
    '.LDF'', NOUNLOAD,  REPLACE,STATS = 10'
    FETCH NEXT FROM cursors INTO @name,@fileName
END
 CLOSE cursors
 DEALLOCATE cursors 
时间: 2025-01-01 19:04:29

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

java 备份还原本地数据库 sql server 2005

问题描述 java 备份还原本地数据库 sql server 2005 这是用swing开发的一个界面想要点击 按钮 可以实现数据库的备份和还原本来尝试了下 但是失败了 代码如下JButton button = new JButton(""u786Eu8BA4""); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { try

sql server2012数据库备份还原

问题描述 sql server2012数据库备份还原 SQL server2012 数据库备份还原很慢,日志过大,怎么加快还原速度 解决方案 根据自己的需要简单设置一下 解决方案二: 如果偶尔恢复一次,考虑备份前截断一下. 解决方案三: 建议收缩事务日志. 在进行一次完整备份后,进行一次事务日志备份.然后收缩事务日志. DBCC shrinkfile(2); GO

SQL Server 2008 导出/还原/兼容到 SQL Server 2005、2000示例

之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本.导出过程: 在SSMS2008(SQL Server Management Studio 2008)中的对象资源管理器中,右击需要导出数据的数据库,在弹出式菜单中选择"任务"下的"生成脚本"选项. 在脚本向导的选择脚

ms SQL server数据库备份、压缩与SQL数据库数据处理的方法_数据库其它

一.备份数据库  1.打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server 2.SQL Server组-->双击打开你的服务器-->双击打开数据库目录 3.选择你的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择备份数据库 4.备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份  二.

通过SQL语句来备份,还原数据库_Mysql

eg: 复制代码 代码如下: /* 通过SQL 语句备份数据库 */ BACKUP DATABASE mydb TO DISK ='C:\DBBACK\mydb.BAK' --这里指定需要备份数据库的路径和文件名,注意:路径的文件夹是必须已经创建的.文件名可以使用日期来标示 /* 通过SQL语句还原数据库 */ USE master RESTORE DATABASE mydb FROM DISK='C:\DBBACK\mydb.BAK' WITH REPLACE 注意:很多时候不能直接还原,因为

通过SQL语句来备份,还原数据库

里仅仅用到了一种方式而已,把数据库文件备份到磁盘然后在恢复. eg: /* 通过SQL 语句备份数据库 */ BACKUP DATABASE mydb TO DISK ='C:DBBACKmydb.BAK' --这里指定需要备份数据库的路径和文件名,注意:路径的文件夹是必须已经创建的.文件名可以使用日期来标示 /* 通过SQL语句还原数据库 */ USE master RESTORE DATABASE mydb FROM DISK='C:DBBACKmydb.BAK' WITH REPLACE

Sql server数据库备份还原另一方法

server|备份|数据|数据库 直接拷贝数据文件把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复: EXEC sp_attach_db @dbname = 'test', @filename1 = 'd:\mssql7\data\test_data.mdf', @filename2 = 'd:\mssql7\data\test_log.ldf' 这样就把test数据库附加到SQL Server中,可

使用PowerShell 命令集进行SQL Server 2012 备份和还原

原文:使用PowerShell 命令集进行SQL Server 2012 备份和还原 最近心相不错,所以打算翻译一些英文文档做福利,原文在此,翻译有不足的地方还请各位兄弟指点. 讨论什么是DBA最重要的工作的时候,你最常听到就是一条就是DBA只要做好备份和恢复.事实如此,如果你不做备份,或者无法保证你的备份能够有效恢复,你和你的公司就会处于数据丢失危险下. T-SQL 命令BACKUP DATABASE已经使用了相当长的一段时间(在这之前用的是DUMP DATABASE 命令,老人们都记得).

SQL SERVER 数据库备份的三种策略及语句

1.全量数据备份 备份整个数据库,恢复时恢复所有.优点是简单,缺点是数据量太大,非常耗时 全数据库备份因为容易实施,被许多系统优先采用.在一天或一周中预定的时间进行全数据库备份使你不用动什么脑筋.使用这种类型的备份带来的问题是非常缺乏灵活性,而且当数据库被冲掉后,你面临丢失大量数据的潜在威胁.例如,假设你每天在午夜备份数据库. 如果服务器在晚上11点崩溃了,你将丢失前面23个小时对数据所做的全部修改.对大多数系统来说,这是无法接受的.对此规则,为数不多的例外如下: 1.系统中所存的数据可以很容易