`
473687880
  • 浏览: 535395 次
文章分类
社区版块
存档分类
最新评论

SQL Server 数据库最小宕机迁移方案

 
阅读更多

一、目的

在做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的数据文件,不过给我移动的时间比较充足,我是通过数据库的作业进行愚公移山的,搬数据到新的服务器上的,这样的好处就是对之前的数据库进行优化,比如进行数据库参数的设置,比如表分区,在对之前数据库影响尽量小的情况进行数据搬迁。详细的过程下次再写吧。

分享到:
评论

相关推荐

    SQLServer数据库迁移孤立用户的解决方法

    本文将详细介绍如何解决SQL Server数据库迁移后出现的孤立用户问题,并提供具体的解决方案。 #### 一、理解孤立用户 在SQL Server中,用户是由两部分组成的:一是登录名(Login),二是数据库中的用户(User)。...

    DBTransfer - SQL Server数据库迁移免费小工具

    本免费小工具适用于迁移SQLServer数据库(从低版本到高版本,或者从A服务器到B服务器)。只要提前做好配置和准备,不管用户库的数据量有多大,每次迁移需要停止业务的时间都可以控制在5分钟之内(操作熟练的话,2...

    中控考勤软件sqlserver数据库建立办法

    在软件的安装目录下找到 SQL Server 数据库脚本(文件名:sqlserver.sql),用记事本打开,然后把里面的脚本程序全部复制。注意,复制粘贴时不要通过快捷键操作,点鼠标右键复制粘贴。 步骤 4:执行数据库脚本 在...

    sql server 数据库巡检

    SQL Server 数据库巡检知识点 通过对 SQL Server 数据库巡检的重要性,我们可以了解到数据库的健康状态和安全性。以下是数据库巡检的知识点: 一、数据库巡检报告 * 数据库巡检报告是对数据库当前状态的总结,...

    sql server 数据库导入导出方法

    SQL Server 数据库导入导出是数据库管理员和开发者常用的操作,目的是将数据库备份到本地或网络存储设备中,以便在需要时恢复数据库或将数据库迁移到其他服务器上。下面将详细介绍 SQL Server 数据库导入导出的方法...

    SQL Server数据库备份与恢复(C#代码示例)

    为了实现上述功能,你需要在项目中引用Microsoft.SqlServer.Smo和Microsoft.SqlServer.SqlManagementUtils库。在压缩包文件"SQL Server数据库备份与恢复"中,可能包含了详细的C#代码示例,你可以参考这些示例来理解...

    SQLSERVER到ORACLE的数据库迁移

    ### SQL Server到Oracle数据库迁移详解 #### 一、引言 随着企业的发展和技术的更新换代,企业常常需要对原有的数据库系统进行迁移或升级。本文将详细介绍如何使用Java语言实现从SQL Server到Oracle数据库的数据...

    酒店管理系统,连接SQLServer 数据库 C++/Qt

    酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 C++/Qt酒店管理系统,连接SQLServer 数据库 ...

    zktime5.0考勤机连接sqlserver数据库,创建及连接方法.pdf

    zktime5.0考勤机连接sqlserver数据库,创建及连接方法 1. 数据库管理系统(DBMS):sqlserver是微软公司开发的一种关系数据库管理系统(RDBMS),用于存储、处理和保护数据。 2. 数据库创建:在sqlserver中,创建...

    sqlserver数据库迁移

    本话题主要关注SQL Server数据库的迁移,结合给定的标签"C#",我们可以推断这里可能涉及到使用C#编程语言进行数据库迁移的工具或解决方案。 SQL Server数据库迁移通常包括以下几个步骤: 1. **数据备份与恢复**:...

    从mysql数据库迁移至sqlserver数据库

    本案例中,我们关注的是从MySQL数据库向SQL Server数据库的迁移过程,这涉及到多个关键知识点。 首先,MySQL和SQL Server是两种不同的关系型数据库管理系统(RDBMS),它们之间存在一些语法和数据类型的差异。MySQL...

    JS访问SQL Server数据库代码

    JS访问SQL Server数据库代码 这是我自己的代码,能用不就不用说了

    C# SQL Server数据库操作DLL

    在.NET开发环境中,C#与SQL Server数据库的交互是常见的任务。这个压缩包"**C# SQL Server数据库操作DLL**"提供了一种便捷的方式,通过一个动态链接库(DLL)来处理这些操作,免去了手动编写大量基础数据库访问代码...

    C++使用ADO连接SQL Server数据库源代码

    而SQL Server则是一款由Microsoft公司推出的高效、安全的关系型数据库管理系统,适用于存储、管理和处理大量数据。当需要在C++程序中与SQL Server数据库交互时,通常会采用ActiveX Data Objects(简称ADO)技术。...

    SQLserver 数据库表结构对比工具

    《SQL Server数据库表结构对比工具详解》 在SQL Server数据库管理中,确保数据库表结构的一致性至关重要。尤其是在多环境、多版本之间进行同步时,表结构的差异可能导致应用程序出现问题或者数据丢失。为了应对这一...

    SQL Server数据库健康检查 巡检报告

    SQL Server数据库健康检查 巡检报告

    C#SqlServer数据库链接帮助类

    C#SqlServer数据库链接帮助类

    C# 开发SQLSERVER数据库自动建表

    标题“C# 开发SQLSERVER数据库自动建表”表明我们将讨论一个使用C#开发的程序,该程序可以自动化创建SQL Server数据库中的表结构。这个功能对于数据导入、系统初始化或简化数据库管理流程非常有用。 描述中提到,该...

    SQL Server数据库迁移Mysql数据库工具

    在某些情况下,由于业务发展或技术选型的变化,可能需要将SQL Server数据库迁移至MySQL数据库。本篇文章将详细探讨这个过程,包括关键步骤、工具选择以及注意事项。 首先,SQL Server和MySQL之间的主要差异在于它们...

    C++操作SqlServer数据库

    本代码使用的默认数据库环境是MS SQL Server, study_bak是从MS SQL Server中BACKUP出来的库文件。 在使用前请先RESTORE到study库中。 如果restore失败,可以用study.sql脚本创建所有表格与视图并自行添加数据。

Global site tag (gtag.js) - Google Analytics