一、目的
在做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 原文地址 http://www.cnblogs.com/gaizai/archive/2011/03/30/2000175.html
相关推荐
本文将详细介绍如何解决SQL Server数据库迁移后出现的孤立用户问题,并提供具体的解决方案。 #### 一、理解孤立用户 在SQL Server中,用户是由两部分组成的:一是登录名(Login),二是数据库中的用户(User)。...
本免费小工具适用于迁移SQLServer数据库(从低版本到高版本,或者从A服务器到B服务器)。只要提前做好配置和准备,不管用户库的数据量有多大,每次迁移需要停止业务的时间都可以控制在5分钟之内(操作熟练的话,2...
SQL Server 数据库导入导出是数据库管理员和开发者常用的操作,目的是将数据库备份到本地或网络存储设备中,以便在需要时恢复数据库或将数据库迁移到其他服务器上。下面将详细介绍 SQL Server 数据库导入导出的方法...
为了实现上述功能,你需要在项目中引用Microsoft.SqlServer.Smo和Microsoft.SqlServer.SqlManagementUtils库。在压缩包文件"SQL Server数据库备份与恢复"中,可能包含了详细的C#代码示例,你可以参考这些示例来理解...
酒店管理系统,连接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...
在软件的安装目录下找到 SQL Server 数据库脚本(文件名:sqlserver.sql),用记事本打开,然后把里面的脚本程序全部复制。注意,复制粘贴时不要通过快捷键操作,点鼠标右键复制粘贴。 步骤 4:执行数据库脚本 在...
在.NET开发环境中,C#与SQL Server数据库的交互是常见的任务。这个压缩包"**C# SQL Server数据库操作DLL**"提供了一种便捷的方式,通过一个动态链接库(DLL)来处理这些操作,免去了手动编写大量基础数据库访问代码...
而SQL Server则是一款由Microsoft公司推出的高效、安全的关系型数据库管理系统,适用于存储、管理和处理大量数据。当需要在C++程序中与SQL Server数据库交互时,通常会采用ActiveX Data Objects(简称ADO)技术。...
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脚本创建所有表格与视图并自行添加数据。
String url = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase"; String user = "myUsername"; String password = "myPassword"; try { Connection conn = DriverManager.getConnection(url, user,...
### Sqlserver数据库转成mysql数据库详解 #### 一、前言 随着企业信息化建设的不断发展,数据库迁移成为了常见的需求之一。特别是在不同的业务场景下,可能会出现从Microsoft SQL Server迁移到MySQL的需求。本文将...
《SQL Server数据库表结构对比工具详解》 在SQL Server数据库管理中,确保数据库表结构的一致性至关重要。尤其是在多环境、多版本之间进行同步时,表结构的差异可能导致应用程序出现问题或者数据丢失。为了应对这一...
当在不同的SQL Server实例之间迁移数据库时,登录名丢失是一个常见的问题。通过上述方法,我们不仅可以检测到孤立用户的存在,还能有效地修复它们,确保数据库的完整性和可用性。此外,建议在进行备份和恢复操作之前...
为了实现数据的集中管理和分析,有时我们需要将这些控制器的数据与SQL Server数据库进行集成。本篇文章将深入探讨如何将Siemens S7 1200 PLC连接到SQL Server数据库,以便于数据的存储、查询和处理。 首先,理解...