SQL Server 备份迁移策略

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

概述

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

 

目录

服务器配置选项

查询服务器配置

使用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/p/4193914.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
8天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
51 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
18天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
8天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
66 6
|
3天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
8 0
|
8天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
12天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
17 1
|
12天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
14 1
|
25天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
28天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移