SQL Server高可用性(High Availability)——Log Shipping

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

参考文献:

http://msdn.microsoft.com/en-us/library/ms187103.aspx

概述

SQL Server 使用日志传送,您可以自动将“主服务器”实例上“主数据库”内的事务日志备份发送到单独“辅助服务器”实例上的一个或多个“辅助数据库”。 事务日志备份分别应用于每个辅助数据库。 可选的第三个服务器实例(称为“监视服务器”)记录备份和还原操作的历史记录及状态,还可以在无法按计划执行这些操作时引发警报。

优点

术语和定义

  1. 主服务器 (primary server):位于生产服务器上的 SQL Server 实例。
  2. 主数据库 (primary database):希望备份到其他服务器的主服务器上的数据库。 通过 SQL Server Management Studio 进行的所有日志传送配置管理都是在主数据库中执行的。
  3. 辅助服务器 (secondary server):想要在其中保留主数据库的热备用副本的 SQL Server 实例。
  4. 辅助数据库 (secondary database):主数据库的热备用副本。辅助数据库可以处于 RECOVERING 状态或 STANDBY 状态,这将使数据库可用于受限的只读访问。
  5. 监视服务器 (monitor server):跟踪日志传送的所有详细信息的 SQL Server 的可选实例,包括:主数据库中事务日志最近一次备份的时间。辅助服务器最近一次复制和还原备份文件的时间。有关任何备份失败警报的信息。

日志传送步骤

日志传送由三项操作组成:

  1. 在主服务器实例中备份事务日志。

  2. 将事务日志文件复制到辅助服务器实例。

  3. 在辅助服务器实例中还原日志备份。

日志可传送到多个辅助服务器实例。 在这些情况下,将针对每个辅助服务器实例重复执行操作 2 和操作 3。

日志传送配置不会自动从主服务器故障转移到辅助服务器。 如果主数据库变为不可用,可手动使任意辅助数据库联机。

您可以为了实现报表目的而使用辅助数据库。

此外,可以针对日志传送配置来配置警报。

典型日志传送配置

下图显示了具有主服务器实例、三个辅助服务器实例和一个监视服务器实例的日志传送配置。 此图阐释了备份作业、复制作业以及还原作业所执行步骤,如下所示:

  1. 主服务器实例执行备份作业以在主数据库上备份事务日志。 然后,该服务器实例将日志备份放入主日志备份文件(此文件将被发送到备份文件夹中)。 在此图中,备份文件夹位于共享目录(“备份共享”)下。

  2. 全部三个辅助服务器实例都执行其各自的复制作业,以将主日志备份文件复制到它本地的目标文件夹中。

  3. 每个辅助服务器实例都执行其还原作业,以将日志备份从本地目标文件夹还原到本地辅助数据库中。

主服务器实例和辅助服务器实例将它们自己的历史记录和状态发送到监视服务器实例。

Log Shipping配置

Primary Server:SANZ-W7\.,以local system启动默认数据库实例

Primary Database:InsideTSQL2008

Secondary Server:WUW-W7\.,以域账户wuwang启动默认数据库实例,因为如果用Local System这个帐号的话,是不能访问网络资源的。

Secondary Database:InsideTSQL2008

配置步骤:

步骤1:

在主服务器SANZ-W7上创建一个共享目录,给Everyone有读的权限。比如我创建的共享目录路径是:C:\Temp\LogShipping,共享路径是:\\SANZ-W7\LogShipping。

步骤2:

对主数据库InsideTSQL2008做一个全备份(可以不做全备份,在配置log shipping的时候再做全备份,下面会提到),然后把备份文件InsideTSQL2008.bak放在C:\Temp\LogShipping目录下。在辅助服务器上创建目录C:\Temp\LogShipping

步骤3:

设置LogShipping的配置属性,我们右键InsideTSQL2008->Tasks->Ship Transaction Logs,会出现如下图所示界面:

点击Backup Settings进行如下配置:

在此处创建了一个Job叫做LSBackup_InsideTSQL2008,用来自动备份事务日志。

步骤4:

然后添加Secondary服务器WUW-W7,如下图所示:

Seconday server instance我们选择WUW-W7,Secondary database默认就是跟primary database同名的InsideTSQL2008。如下图所示,我们在Initialize Secondary Database中看到有两个选项,一个是创建数据库全备份,然后将这个全备份回复到secondary database中,另外一个是指定已有全备份的路径。

在Copy File标签中添加Secondary Server保存文件的路径,我们这里使用同名的路径。还有secondary server也要启动sql agent。

配置完毕以后点击OK,最后会有一个配置成功界面:

Log Shipping验证:

我们在服务服务器WUW-W7下查看InsideTSQL2008信息,如下图所示:

我们可以发现InsideTSQL2008处于Resotoring状态,这是因为恢复到服务数据库的都是使用nonrecovery模式的。

在完全正确配置Log Shipping以后,我们可以在primary server的C:\Temp\LogShipping目录下看到如下这些日志备份文件

在Secondary server的C:\Temp\LogShipping目录下看到

唯一的区别就是primary server有full database backup,而Secondary server中没有。不论是primary server上的LSBackup_TESTDB1,还是secondary server上的LSCopy_SANZ-W7_TESTDB1和LSRestore_SANZ-W7_TESTDB1,我将他们都设置成每一分钟执行一次,这样方便查看实验结果。

"Could not retrieve backup settings for primary ID"错误的解决方法

参考文献:http://blogs.msdn.com/b/sqlsakthi/archive/2012/06/14/error-quot-could-not-retrieve-backup-settings-for-primary-quot-in-log-shipping-backup-job.aspx

在SSMS中查看LSBackup_InsideTSQL2008这个Job的工作情况,发现这个Job报错,错误如下:

复制代码
*** Error: Could not retrieve backup settings for primary ID 'f32baa93-0341-48b5-a5a0-2acde90283fa'.(Microsoft.SqlServer.Management.LogShipping)
***<nl/>2012-09-09 19:30:15.85*** Error: Failed to connect to server WIN-E5EJQ0EN4O2.(Microsoft.SqlServer.ConnectionInfo)
***<nl/>2012-09-09 19:30:15.85*** Error: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider<c/> error: 40 - Could not open a connection to SQL Server)(.Net SqlClient Data Provider)
***<nl/>2012-09-09 19:30:15.85----- END OF TRANSACTION LOG BACKUP   -----
复制代码

从上述错误日志中我们发现有一条是说无法连接 server WIN-E5EJQ0EN4O2。但是我的primary server是SANZ-W7啊,怎么成了WIN-E5EJQ0EN4O2?这是当初安装系统的时候,立马就安装了sql server,然后又将主机名从WIN-E5EJQ0EN4O2改成了SANZ-W7。但是在sys.servers中没有更新,我们可以通过如下TSQL语句查看:

select @@SERVERNAME

其查询结果就是WIN-E5EJQ0EN4O2。我们只需要更新数据库中sys.servers信息就可以了。我们执行如下TSQL语句更新server信息

复制代码
--删除旧的主机名
EXEC sp_dropserver 'WIN-E5EJQ0EN4O2'
GO
--添加当前主机名
EXEC sp_addserver 'SANZ-W7', 'local'
GO
复制代码

在执行完上述TSQL语句以后一定要记得重启sql server,否则使用select @@SERVERNAME查询当前server名称还是WIN-E5EJQ0EN4O2

 

 

 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/09/09/2677547.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
13天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
65 0
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
69 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
3月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
51 6
|
2月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
252 0
|
3月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
167 1
|
3月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
184 3
|
3月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。