标签:SQL SERVER/MSSQL SERVER/数据库/DBA/xp_cmdshell/备份压缩

概述

当备份空间不是很充裕的情况下需要找方法将备份文件拷贝到专用的备份机器上去,特别是存储空间不够优越的企业更是如此,接下来就分享两种迁移备份文件的方法。

目录

服务器配置选项

查询服务器配置

使用xp_cmdshell方法之前必须先开启对应的服务器配置选项,查询系统中每个服务器范围的配置选项值使用以下语句。

--系统中每个服务器范围的配置选项值对应一行
SELECT * FROM sys.configurations
ORDER BY name DESC
GO

开启xp_cmdshell

---开启xp_cmdshell
sp_configure 'show advanced options', 1;--开启sp_configure系统存储过程高级选项,默认为0
go
reconfigure;---指定如果配置设置不需要服务器停止并重新启动,则更新当前运行的值.RECONFIGURE 还会检查新的配置值中是否有无效值(如果是RECONFIGURE WITH OVERRIDE则会跳过错误检查)
go
sp_configure 'xp_cmdshell', 1;
go
reconfigure;
go
sp_configure 'show advanced options', 0;
go

开启allow updates

在服务器范围的配置里面如果‘allow updates’的vlues值是‘1’的话,会阻止对系统表的更新,即上面开启xp_cmdshell会被阻止,所以必须先开启allow updates

----开启允许更新系统表功能(当更改系统配置选项时提示不运行对系统目录即时更新时需要开启改功能)
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',0 ---开启允许更新系统表
go
sp_configure 'show advanced options', 0;
go
----关闭更新系统表功能
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',1
go
sp_configure 'show advanced options', 0;
go

xp_cmdshell方法

先建立一个备份数据库的存储过程,然后通过作业调用存储过程执行备份。

USE [master]
GO
CREATE PROCEDURE [dbo].[SP_bakupDataBase]
(@dbname nvarchar(50)
)
as
Declare @strCmdShell varchar(300)
Declare @FullFileName Varchar(200)
Declare @strPath NVARCHAR(200)
Declare @ToFileName varchar(200)
Declare @SQLStr varchar(500)
Declare @SQLStr2 varchar(500)
Declare @FlagDel INT
declare @backupSetId as int SET @strPath = convert(NVARCHAR(19),getdate(),120)
SET @strPath = REPLACE(REPLACE(convert(NVARCHAR(19),getdate(),120), ':' , ''),' ','_')
SET @FullFileName='E:\'+@dbname+'\'+@dbname+'_backup_'+@strPath+'.bak'
SET @ToFileName='\\192.168.1.1\E$\备份'
SET @FlagDel=1
SET @SQLStr='copy '+@FullFileName+' '+@ToFileName
SET @SQLStr2='del ' +@FullFileName
BackUp DataBase @dbname To Disk= @FullFileName WITH NOINIT , NOUNLOAD , NOSKIP, NOFORMAT , STATS = 10,CHECKSUM,CONTINUE_AFTER_ERROR
---验证备份集是否有效
select @backupSetId = position from msdb..backupset where database_name=@dbname and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@dbname )
IF @backupSetId is null begin raiserror(N'验证失败。找不到数据库数据库的备份信息。', 16, 1) end
RESTORE VERIFYONLY FROM DISK = @FullFileName WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
EXEC master.dbo.xp_cmdshell 'net use \\192.168.1.1\E$ 123456 /user:192.168.1.1\user'
EXEC Master..xp_cmdshell @SQLStr
IF (@FlagDel =1)
BEGIN
EXEC master.. xp_cmdshell @SQLStr2
END

---图片解释

执行备份

USE [master]
EXEC sp_bakupDataBase 'AdventureWorks2008R2'

dos方法

如果远程备份空间不够充足,需要将备份的数据库进行压缩后再拷贝,先通过正常的备份将数据库备份到本地,然后使用RAR.EXE压缩软件,压缩并拷贝到远程电脑,将下面的批处理保存成bat后缀格式,然后可以通过任务计划调用批处理进行定时操作。

@echo off
rem 为注释语法 timeout 为window 2003版本才有的指定 xp不兼容 setlocal enabledelayedexpansion
set /a t=0*3600
:start
for /f "delims=" %%a in ("dir /b 'D:\DataBase\person\person*'") do (
"c:\Program Files\WinRAR\winrar.exe" a -as -r -EP1 -ibck -df "\\192.168.1.1\DataBase\person\person_.rar" -m3 -agyyyymmddhhmmss "D:\DataBase\person\p*"
rem del /q /f "D:\DataBase\person\p*"
)
rem timeout /t %t% /nobreak
rem goto :start

---图片解释

总结

凡事都有利有弊,对于第一种方案开启XP_cmdshell存在一定的安全风险,当你的服务启动账户的权限过高的话别人就可以通过XP_cmdshell来进行很多危险的操作,包括新增账户、新建文件夹、删除文件等,所以在使用完之后建议关闭 XP_cmdshell。如果备份空间足够充裕不需要这么麻烦,第二种方法对服务器的压力比较大而且迁移时间也很长,不建议使用。

 

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

SQL Server 备份迁移策略的更多相关文章

  1. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

  2. sql server备份损坏

    sql server备份损坏 转自:https://www.cnblogs.com/zhijianliutang/p/4080916.html 1.备份文件和数据库放在同一个(或一组)的物理磁盘上.磁 ...

  3. 17、SQL Server 备份和还原

    SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式,它会完整记录下操作数据库的每一个步骤, ...

  4. SQL Server 备份和还原

    SQL Server 备份和还原   SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...

  5. SQL Server 备份和还原全攻略

    原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...

  6. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, ...

  7. sql server 备份恢复效率

    sql server 备份恢复效率 如何提高备份的速度呢? 其实这个问题和如何让系统跑的更快是一样的,要想系统跑的更快,无非就是:优化系统,或者就是更好更强大的服务器,特别是更多的cpu.更大的内存. ...

  8. Data Base sql server 备份数据库

    sql server 备份数据库 1.维护计划向导: 右键维护计划-维护计划向导-然后安装提示: 勾选自己要干的事,比如:完整备份数据库.差异备份数据库等等 2.作业计划: 如下图: SQL Serv ...

  9. SQL Server备份时间段内插入的数据依旧进入了备份文件?(转载)

    问 MSSql我在本机测试了下.为了延长备份时间,找个大的数据库.开始完整备份bak然后再此库新建表,并增添数据.备份结束.==================还原备份后,在还原的数据库内发现新增的表 ...

随机推荐

  1. Knockout.js随手记(7)

    数组元素的新增/移除事件 前两篇博客已经很清楚的知道knockout.js通过observableArray()数组元素增减,可以实时的反映在UI上.当然我们想在数组增加或移除元素时加上自定义逻辑就好 ...

  2. apache的AB测试

    A/B测试A/B测试是一种新兴的网页优化方法,可以用于增加转化率注册率等网页指标..A/B测试的目的在于通过科学的实验设计.采样样本代表性.流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信 ...

  3. js字符串格式化扩展方法

    平时使用js的时候会遇到很多需要拼接字符串的时候,如果是遇到双引号和单引号混合使用,经常会搞混.在C#中有string.Format方法,使用起来非常方便,也很容易理解,所以找到一种参考C#的form ...

  4. 在 Delphi 中判断一个字符是中文的方法

    http://blog.163.com/l1_jun/blog/static/143863882011741124581/ 由于 Delphi2005 支持中文标识符,在编写 PASCAL 词法分析器 ...

  5. [转]MSI安装程序中的文件替换

    原文链接:http://teach.hanzify.org/article/652-1233562028.html 前言 最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装 ...

  6. linux 高性能服务器编程

    1. 高性能定时器:时间轮,时间堆 (處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件) 2. 高性能服务器程序框架:(nginx 使用的是基於事件模型,epoll,不阻塞,異步處理) 两种 ...

  7. 2016-1-30 Servlet中Session管理(Sesssion追踪)

    Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...

  8. Leetcode Valid Anagram

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  9. Python 键盘记录

    之前写的键盘记录最后一直在纠结弹框与不弹框的问题,代码找不到了,今天重新来一遍 #!/usr/bin/env python# -*-coding:utf-8 -*-from ctypes import ...

  10. 第一章 DeepLab的创作动机

    这一段时间一直在做深度学习方面的研究,目前市场上的深度学习工具主要分为两大块.一块是基于Python语言的theano:另一块是可以在多个语言上使用并能够在GPU和CPU之间随意切换的Caffe.但是 ...