设为首页 加入收藏

TOP

SQLServer 批量备份与还原 (一)
2014-11-24 07:25:06 来源: 作者: 【 】 浏览:13
Tags:SQLServer 批量 备份 还原

备份与还原是数据库避不开的主题,而作为DBA,经常会面临将一台机器上的所有数据库重新构建到一台新机器上的要求;

在现在都讲究自动化管理的时代,传统的界面操作备份还原的做法不仅浪费时间和精力,而且还很容易出错,并且这次完成后,

下次再有这样的要求,必须又重头开始(估计做5次就能做得人狂吐);于是,我们需要一套应对这种频繁操作、耗时、耗精力

的通用处理方法,所以以下批处理脚本就诞生了。

脚本主要的功能:

1. 备份一个服务器上的所有数据库(当然你也可以选择),备份文件按数据库名+日期生成,以.bak 结尾;

2. 将所有的备份文件还原到一台新机器上;

3. 验证磁盘和路径的正确性;

说明:

脚本合适SQLServer 2005 & 2008 版本;

批量备份数据库:

-----------------------------批量备份数据-------------------------------------------
Usemaster
GO
/*=================Usp_BackUp_DataBase========================
=====BackUp Sigle DataBase ======
=====Ken.Guo ======
=====2010.9.10 ======
=====Version: 2005 & 2008 SQL Server ======
=====EXEC Usp_BackUp_DataBase 'MyDB','D:\BackUp' ======
============================================================
*/
CREATEPROC [dbo].[Usp_BackUp_DataBase]@DatabaseName nvarchar(200),@Path nvarchar(200)
AS
BEGIN
DECLARE @fn varchar(200)
,@sql varchar(1000)
SET @fn = @Path +(case when right(@Path,1) <>'\' then '\' else '' end)
+@DatabaseName+'_'
+convert(char(8),getdate(),112)+'_'
+replace(convert(char(8),getdate(),108),':','')
+'.bak'
set @sql = 'backup database '+@DatabaseName + ' to disk = N''' + @fn + ''''
--SELECT @sql
EXEC(@sql)
END

GO

Usemaster
GO
/*=============BackUp Mutile DataBase=========================*/
DECLARE@dbnamenvarchar(200)
,@backup_pathnvarchar(200)
SET@backup_path='D:\BackUp\'
DECLAREdb_info CURSOR
LOCAL
STATIC
READ_ONLY
FORWARD_ONLY
FOR--根据查询,添加其他筛选条件
SELECT
name
FROMmaster.sys.databases WITH(NOLOCK)
WHERE
database_id>4

OPENdb_info
FETCHNEXTFROMdb_info INTO@dbname

WHILE@@FETCH_STATUS=0
begin
EXECmaster.dbo.Usp_BackUp_DataBase @dbname,@backup_path
FETCHNEXTFROMdb_info INTO@dbname
END
closedb_info
deallocatedb_info

---------------------------------BackUp DataBase End------------------------------------

检查还原磁盘:

Usemaster
GO
/*=================Check Restore Path Drives Exists==========================
=====Ken.Guo ======
=====2010.9.10 ======
=====EXEC Usp_Check_DriveExists @RestoreDataPath,@ResultCount OUTPUT ======
===========================================================================
*/
CREATEPROCUsp_Check_DriveExists(
@RestoreDataPathnvarchar(200)
,@ResultCountintOUTPUT)
AS
BEGIN
--Check Restore Path and Size >1000M
ifCHARINDEX(':',@RestoreDataPath)>0
begin
DECLARE@Drivenvarchar(10)
,@errorinfonvarchar(500)

DECLARE@DriveListTABLE
(
Drive nvarchar(10)
,DSize bigint
)
INSERTINTO@DriveList
EXECmaster.dbo.xp_fixeddrives

SET@Drive=Left(@RestoreDataPath,CHARINDEX(':',@RestoreDataPath)-1)
ifnotexists(SELECT
*
FROM @DriveList
WHERE
Drive=@Drive
ANDDSize>1024

)
begin
set@errorinfo=N'找不

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sql server批量插入与更新两种解.. 下一篇SQL Server数据库中批量导入数据

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)