一、目的
在做SQL Server数据库维护的时候,当上司要求我们把几十G的数据文件搬动到其它服务器,并且要求最小宕机时间的时候,我们有没什么方案可以做到这些要求呢?
在这里我们假设这两台机器并不是在一个机房上,这样看起来我们的解决方案才更有意义,如果你那么好运这两台机器在同一个局域网,那么恭喜你,你可以多很多的方案可以做到。
二、分析与设计思路
其实我们假设的环境有两个特点:第一个是数据库文件比较大;第二个就是我们的传送文件的速度可能会比较慢。也许这传送速度我们是没有办法了,但是我们可以就从文件的大小这个问题出发,结合SQL Server的特性,这样就有了下面的解决方案了。
为了使宕机时间最短,我们这里使用了完整备份和差异备份来迁移数据库,在白天的时候对需要迁移的数据库进行一次完整备份(XXX_full.bak),并把备份文件拷贝(这里可以使用FTP软件进行断点续传)到目标服务器进行还原,等到下班时间之后再进行一次差异备份(XXX_diff.bak),再把这个差异备份拷贝到目标服务器,在完整还原的基础上再进行差异还原。
这里的宕机时间 = 差异备份时间 + 传送差异备份文件时间 + 还原差异备份文件时间,这宕机时间是不是让你感觉这时间很短呢?
三、参考脚本
注意修改下面脚本中数据库的名称,还有绝对路径。
--1:完整备份
declare @dbname
varchar(100)
declare @sql
nvarchar(max)
set @dbname
= 'DataBaseName'
set @sql
= '
--'+@dbname+'_full
BACKUP DATABASE ['+@dbname+']
TO DISK = ''D:\DBBackup\'+@dbname+'_full.bak''
WITH NOFORMAT, NOINIT, NAME = '''+@dbname+'-完整数据库备份'',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO'
print @sql
--生成的SQL
--DataBaseName_full
BACKUP
DATABASE [DataBaseName]
TO
DISK =
'D:\DBBackup\DataBaseName_full.bak'
WITH NOFORMAT, NOINIT,
NAME =
'DataBaseName-完整数据库备份',
SKIP, NOREWIND, NOUNLOAD, STATS
= 10
GO
--2:完整备份还原
declare @dbname
varchar(100)
declare @sql
nvarchar(max)
set @dbname
= 'DataBaseName'
set @sql
= '
--RESTORE '+@dbname+'_full
RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:\DBBackup\'+@dbname+'_full.bak''
WITH FILE = 1,
MOVE N''DataBase_Name'' TO N''D:\DataBase\'+@dbname+'.mdf'',
MOVE N''DataBase_Name_log'' TO N''D:\DataBase\'+@dbname+'_log.ldf'',
NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO'
print @sql
--生成的SQL
--RESTORE DataBaseName_full
RESTORE
DATABASE [DataBaseName]
FROM
DISK =
'D:\DBBackup\DataBaseName_full.bak' WITH
FILE = 1,
MOVE N'DataBase_Name'
TO N'D:\DataBase\DataBaseName.mdf',
MOVE N'DataBase_Name_log'
TO N'D:\DataBase\DataBaseName_log.ldf',
NORECOVERY, NOUNLOAD,
REPLACE, STATS
= 10
GO
--3:差异备份
declare @dbname
varchar(100)
declare @sql
nvarchar(max)
set @dbname
= 'DataBaseName'
set @sql
= '
--'+@dbname+'_diff
BACKUP DATABASE ['+@dbname+']
TO DISK = N''D:\DBBackup\'+@dbname+'_diff.bak''
WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@dbname+'-差异数据库备份'',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
'
print @sql
--生成的SQL
--DataBaseName_diff
BACKUP
DATABASE [DataBaseName]
TO
DISK = N'D:\DBBackup\DataBaseName_diff.bak'
WITH DIFFERENTIAL
, NOFORMAT, NOINIT,
NAME = N'DataBaseName-差异数据库备份',
SKIP, NOREWIND, NOUNLOAD, STATS
= 10
GO
--4:差异备份还原
declare @dbname
varchar(100)
declare @sql
nvarchar(max)
set @dbname
= 'DataBaseName'
set @sql
= '
--RESTORE '+@dbname+'_full
RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:\DBBackup\'+@dbname+'_diff.bak''
WITH FILE = 1,
NOUNLOAD, STATS = 10
GO'
print @sql
--生成的SQL
--RESTORE DataBaseName_full
RESTORE
DATABASE [DataBaseName]
FROM
DISK =
'D:\DBBackup\DataBaseName_diff.bak' WITH
FILE = 1,
NOUNLOAD, STATS
= 10
GO
四、后记
也许到了这里应该结束了,但是往往事与愿违,有的时候我们的数据库文件的大小并不是几十G的,那么我们应该如何做呢?是否还有其他的解决方案呢?
我之前就移动过700G的数据文件,不过给我移动的时间比较充足,我是通过数据库的作业进行愚公移山的,搬数据到新的服务器上的,这样的好处就是对之前的数据库进行优化,比如进行数据库参数的设置,比如表分区,在对之前数据库影响尽量小的情况进行数据搬迁。详细的过程下次再写吧。
相关推荐
本文将详细介绍如何解决SQL Server数据库迁移后出现的孤立用户问题,并提供具体的解决方案。 #### 一、理解孤立用户 在SQL Server中,用户是由两部分组成的:一是登录名(Login),二是数据库中的用户(User)。...
本免费小工具适用于迁移SQLServer数据库(从低版本到高版本,或者从A服务器到B服务器)。只要提前做好配置和准备,不管用户库的数据量有多大,每次迁移需要停止业务的时间都可以控制在5分钟之内(操作熟练的话,2...
在软件的安装目录下找到 SQL Server 数据库脚本(文件名:sqlserver.sql),用记事本打开,然后把里面的脚本程序全部复制。注意,复制粘贴时不要通过快捷键操作,点鼠标右键复制粘贴。 步骤 4:执行数据库脚本 在...
SQL Server 数据库巡检知识点 通过对 SQL Server 数据库巡检的重要性,我们可以了解到数据库的健康状态和安全性。以下是数据库巡检的知识点: 一、数据库巡检报告 * 数据库巡检报告是对数据库当前状态的总结,...
SQL Server 数据库导入导出是数据库管理员和开发者常用的操作,目的是将数据库备份到本地或网络存储设备中,以便在需要时恢复数据库或将数据库迁移到其他服务器上。下面将详细介绍 SQL Server 数据库导入导出的方法...
为了实现上述功能,你需要在项目中引用Microsoft.SqlServer.Smo和Microsoft.SqlServer.SqlManagementUtils库。在压缩包文件"SQL Server数据库备份与恢复"中,可能包含了详细的C#代码示例,你可以参考这些示例来理解...
### SQL Server到Oracle数据库迁移详解 #### 一、引言 随着企业的发展和技术的更新换代,企业常常需要对原有的数据库系统进行迁移或升级。本文将详细介绍如何使用Java语言实现从SQL Server到Oracle数据库的数据...
酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 ...
zktime5.0考勤机连接sqlserver数据库,创建及连接方法 1. 数据库管理系统(DBMS):sqlserver是微软公司开发的一种关系数据库管理系统(RDBMS),用于存储、处理和保护数据。 2. 数据库创建:在sqlserver中,创建...
本话题主要关注SQL Server数据库的迁移,结合给定的标签"C#",我们可以推断这里可能涉及到使用C#编程语言进行数据库迁移的工具或解决方案。 SQL Server数据库迁移通常包括以下几个步骤: 1. **数据备份与恢复**:...
本案例中,我们关注的是从MySQL数据库向SQL Server数据库的迁移过程,这涉及到多个关键知识点。 首先,MySQL和SQL Server是两种不同的关系型数据库管理系统(RDBMS),它们之间存在一些语法和数据类型的差异。MySQL...
JS访问SQL Server数据库代码 这是我自己的代码,能用不就不用说了
在.NET开发环境中,C#与SQL Server数据库的交互是常见的任务。这个压缩包"**C# SQL Server数据库操作DLL**"提供了一种便捷的方式,通过一个动态链接库(DLL)来处理这些操作,免去了手动编写大量基础数据库访问代码...
而SQL Server则是一款由Microsoft公司推出的高效、安全的关系型数据库管理系统,适用于存储、管理和处理大量数据。当需要在C++程序中与SQL Server数据库交互时,通常会采用ActiveX Data Objects(简称ADO)技术。...
《SQL Server数据库表结构对比工具详解》 在SQL Server数据库管理中,确保数据库表结构的一致性至关重要。尤其是在多环境、多版本之间进行同步时,表结构的差异可能导致应用程序出现问题或者数据丢失。为了应对这一...
SQL Server数据库健康检查 巡检报告
C#SqlServer数据库链接帮助类
标题“C# 开发SQLSERVER数据库自动建表”表明我们将讨论一个使用C#开发的程序,该程序可以自动化创建SQL Server数据库中的表结构。这个功能对于数据导入、系统初始化或简化数据库管理流程非常有用。 描述中提到,该...
在某些情况下,由于业务发展或技术选型的变化,可能需要将SQL Server数据库迁移至MySQL数据库。本篇文章将详细探讨这个过程,包括关键步骤、工具选择以及注意事项。 首先,SQL Server和MySQL之间的主要差异在于它们...
本代码使用的默认数据库环境是MS SQL Server, study_bak是从MS SQL Server中BACKUP出来的库文件。 在使用前请先RESTORE到study库中。 如果restore失败,可以用study.sql脚本创建所有表格与视图并自行添加数据。