当前位置: 代码迷 >> Sql Server >> 征集数据库可靠性方案解决办法
  详细解决方案

征集数据库可靠性方案解决办法

热度:87   发布时间:2016-04-27 17:16:08.0
征集数据库可靠性方案
镜像、订阅发布、日志传送....


------解决方案--------------------
有请小P梁.
------解决方案--------------------
订阅发布挺好用的。
------解决方案--------------------
SQL code
SQL Server 2005数据库镜像简介Submitted by 小强 on 2007, November 7, 1:07 PM. 基础知识自从SQL Server 2000以来,你已经能够通过使用复制来创建一个备用的服务器、传输日志,以及备份和重新存储了——但是现在微软又引入了一个内建的工具,它可以实现自动的错误恢复。数据库镜像是SQL Server 2005的一个新特性,它允许你将一个SQL Server中的数据库内容镜像到另一个SQL Server上。它还让你可以在发生错误的时候,通过镜像数据库来进行错误恢复。Edgewood Solutions 的Greg Robidoux 回答了我们一些SQL Server 2005中有关数据库镜像的常见问题,同时还解释了为什么你现在就应该开始测试这个内建的功能来看看它最终是否会给你的环境带来好处。什么是数据库镜像?Robidoux:数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像的拷贝是一个备用的拷贝,不能直接访问;它只用在错误恢复的情况下。因为是在SQL Server 2005中新引入的特性,这个功能只能用在,这个版本的软件中。在某种程度上说,它是复制和日志传输的混合体:你所有的事物都在事物级别(复制)上移动(日志传输)到你的数据库的一个镜像拷贝上,同时减少了你在实现日志传输或者复制的时候可能会面临的问题。复制包括大量的移动部分,并且如果你的数据库计划经常改变的话,要保证你的复制运行得流畅也是困难重重。对于日志传输,为了保证同步,同样需要实现很多的处理,例如创建备份、拷贝备份,以及备份重存。如果有一个进程崩溃了,整个处理过程就崩溃了。数据库镜像的工作方式是什么?Robidoux :要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境。主服务器被称为“基本的”,第二个服务器被称作“镜像的”。基本数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝。当事务写入你的基本服务器的时候,他们也同样被传送到并写入你的镜像数据库中。除了基本和镜像之外,你还可以引入另一个可选的组件,名为“证人”。证人数据库是第三个SQL Server 2005运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。证人服务器只有在你想实现自动错误恢复的时候才需要用到。实现的方式是什么?Robidoux :数据库镜像提供了三种实现的方式。根据你想要用什么方式来进行错误恢复处理来进行选择。高可用性:这个操作模式选项允许你在两台服务器上同步事务写入,并支持自动错误恢复。要使用这个选项,你必须还要使用一个证人服务器。高保护:这个选项可以让你在两台服务器上同步事物写入,但是错误恢复是手工的。因为自动的错误恢复不是这个选项的一部分,所以也不会用到证人服务器。高性能:这个选项不关心两台服务器上的写入是否是同步的,因此在性能上有所提高。当使用这个选项的时候,你只能假设镜像服务器上的所有事情都是成功完成。这个选项只允许手工的错误恢复,因此不会用到证人服务器。时刻记住将你的数据自动恢复到第二个拷贝才是数据库镜像的真正好处。因此,大多数的实现可能都是使用的高可达性方式。其他的选项仍然提供了内建的错误恢复过程,但是前提是你在发生错误的时候对进行自动的错误恢复怀有极大的兴趣。数据库镜像可以工作在哪几个版本上?Robidoux :数据库镜像只能在标准版、开发版和企业版的SQL Server 2005中找到。基本服务器和镜像服务器的SQL Server运行实例都需要是这几个版本。证人服务器可以运行在任何版本的SQL Server上。此外,还有其他的一些特性是SQL Server的开发版和企业版上特有的,但是标准版具有最基本的功能。总结现如今,SQL Server 2005的数据库镜像已经关掉了,但是所有的功能仍然存在。数据库镜像可以通过使用检索标志来打开——但是微软现在并不支持这个功能了,所以不要在你的产品环境中运行它。数据库镜像将会在本年年末完全实现并被支持。要打开这个特性并开始你的测试,你可以看看以前的专家知识解答。微软正在寻找额外的反馈,所以你可以看看它是否可以作为你的SQL Server环境的候选。Tags: 数据库镜像
------解决方案--------------------
SQL code
日志传送(log shipping)主要基于SQL Server代理,使用定时作业来完成,另外在配置日志传送之前必须要创建共享文件夹,用于辅助服务器访问。这里我们假设有数据库logTrans1需要进行日志传送,共享文件夹为“C:\data”,在T-SQL中配置日志传送主要有以下几步操作: (1)备份主数据库并在辅助服务器上还原主数据库的完整备份,初始化辅助数据库。具体操作如代码:backup database logTrans1 --在主数据库上备份 to disk='c:\logt.bak' --以下是将数据库还原到辅助数据库上 restore database logTrans2 from disk='c:\logt.bak' with NORECOVERY, move 'logTrans' to 'c:\logTrans2.mdf', move 'logTrans_log' to 'c:\logTrans2.ldf' (2)在主服务器上,执行sp_add_log_shipping_primary_database以添加主数据库。存储过程将返回备份作业ID和主ID,具体SQL脚本如代码:DECLARE @LS_BackupJobId AS uniqueidentifier DECLARE @LS_PrimaryId AS uniqueidentifier EXEC master.dbo.sp_add_log_shipping_primary_database @database = N'logTrans1' ,@backup_directory = N'D:\data' ,@backup_share = N'\\10.101.10.66\data' ,@backup_job_name = N'LSBackup_logTrans1' ,@backup_retention_period = 1440 ,@monitor_server = N'localhost' ,@monitor_server_security_mode = 1 ,@backup_threshold = 60 ,@threshold_alert_enabled = 0 ,@history_retention_period = 1440 ,@backup_job_id = @LS_BackupJobId OUTPUT ,@primary_id = @LS_PrimaryId OUTPUT ,@overwrite = 1 (3)在主服务器上,执行sp_add_jobschedule以添加使用备份作业的计划。为了能够尽快看到日志传送的效果,这里将日志备份的频率设置为2分钟一次。但是在实际生产环境中,一般是用不到这么高的执行频率的。添加计划的脚本如代码:DECLARE @schedule_id int EXEC msdb.dbo.sp_add_jobschedule @job_name =N'LSBackup_logTrans1', @name=N'BackupDBEvery2Min', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=4, @freq_subday_interval=2, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20080622, @active_end_date=99991231, @active_start_time=0, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT select @schedule_id 【注意:sp_add_jobschedule存储过程是在msdb数据库中,在其他数据库中是没有该存储过程的。】 (4)在监视服务器上,执行sp_add_log_shipping_alert_job以添加警报作业。此存储过程用于检查是否已在此服务器上创建了警报作业。如果警报作业不存在,此存储过程将创建警报作业并将其作业ID添加到log_shipping_monitor_alert表中。默认情况下,将启用警报作业并按计划每两分钟运行一次。添加警报作业如代码:USE master GO EXEC sp_add_log_shipping_alert_job; (5)在主服务器上,启用备份作业。启用作业使用sp_update_job存储过程,只需要输入作业名并设置状态为1即可。具体SQL脚本如代码:EXEC msdb.dbo.sp_update_job @job_name='LSBackup_logTrans1', @enabled=1 (6)在辅助服务器上,执行sp_add_log_shipping_secondary_primary,提供主服务器和数据库的详细信息。此存储过程返回辅助ID以及复制和还原作业ID,具体SQL脚本如代码:DECLARE @LS_Secondary__CopyJobId uniqueidentifier DECLARE @LS_Secondary__RestoreJobId uniqueidentifier DECLARE @LS_Secondary__SecondaryId uniqueidentifier EXEC master.dbo.sp_add_log_shipping_secondary_primary @primary_server = N'10.101.10.66' ,@primary_database = N'logTrans1' ,@backup_source_directory = N'\\10.101.10.66\data' ,@backup_destination_directory = N'D:\log' ,@copy_job_name = N'LSCopy_logTrans1' ,@restore_job_name = N'LSRestore_logTrans2' ,@file_retention_period = 1440 ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT (7)在辅助服务器上,执行sp_add_jobschedule以设置复制和还原作业的计划。这里一般将复制和还原作业计划的频率设置来和日志备份的作业频率相同,所以此处将这两个作业的频率设置为每2分钟执行一次,具体SQL脚本如代码:DECLARE @schedule_id int --设置复制作业计划 EXEC msdb.dbo.sp_add_jobschedule @job_name=N'LSCopy_logTrans1', @name=N'CopyEvery2Min', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=4, @freq_subday_interval=2, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20080622, @active_end_date=99991231, @active_start_time=0, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT select @schedule_id --设置还原作业的计划 EXEC msdb.dbo.sp_add_jobschedule @job_name=N'LSCopy_logTrans1', @name=N'RestoreEvery2Min', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=4, @freq_subday_interval=2, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20080622, @active_end_date=99991231, @active_start_time=0, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT select @schedule_id (8)在辅助服务器上,执行sp_add_log_shipping_secondary_database以添加辅助数据库,具体操作脚本如代码:  EXEC master.dbo.sp_add_log_shipping_secondary_database @secondary_database = N'logTrans2' ,@primary_server = N'10.101.10.66' ,@primary_database = N'logTrans1' ,@restore_delay = 0 ,@restore_mode = 1 ,@disconnect_users = 0 ,@restore_threshold = 45 ,@threshold_alert_enabled = 0 ,@history_retention_period = 1440 (9)在主服务器上,执行sp_add_log_shipping_primary_secondary向主服务器添加有关新辅助数据库的必需信息,具体SQL脚本如代码:EXEC master.dbo.sp_add_log_shipping_primary_secondary @primary_database = N'logTrans1' , @secondary_server = N'10.101.10.67' --辅助数据库的IP , @secondary_database = N'logTrans2' (10)在辅助服务器上,启用复制和还原作业。启用作业仍然使用sp_update_job存储过程,具体操作如代码:EXEC msdb.dbo.sp_update_job @job_name='LSCopy_logTrans1', @enabled=1 EXEC msdb.dbo.sp_update_job @job_name='LSRestore_logTrans2', @enabled=1 通过以上10部操作就完成了对日志传送的配置。现在每隔2分钟,系统将会把主服务器中的日志备份到共享文件夹中,辅助服务器访问共享文件夹将日志备份复制到本地硬盘上,然后由还原作业将复制到本地的日志还原到数据库,从而完成了日志的传送。用户可以在共享文件夹和辅助服务器的本地复制文件夹中看到备份的日志文件。
  相关解决方案