SQL Server 使用日志传送

参考文献:sql

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. 在主服务器实例中备份事务日志。ide

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

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

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

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

您能够为了实现报表目的而使用辅助数据库。server

此外,能够针对日志传送配置来配置警报。

典型日志传送配置

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

  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
欢迎任何形式的转载,但请务必注明出处。
相关文章
相关标签/搜索