征集数据库可靠性方案
镜像、订阅发布、日志传送....
[解决办法]
有请小P梁.
[解决办法]
订阅发布挺好用的。
[解决办法]
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: 数据库镜像
日志传送(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分钟,系统将会把主服务器中的日志备份到共享文件夹中,辅助服务器访问共享文件夹将日志备份复制到本地硬盘上,然后由还原作业将复制到本地的日志还原到数据库,从而完成了日志的传送。用户可以在共享文件夹和辅助服务器的本地复制文件夹中看到备份的日志文件。
发布是在一台在局域网中服务器(一下缩写为W),一台有自主ip的服务器(以下缩写为L),首先把L注册到W中,具体步骤如下:详情http://www.kucode.net
L服务器具体做法:
1.建立用户(administrators组)
(方法待续)
右键“我的电脑”选择“管理”弹出对话框,选择“本地用户和组”,单击“用户”,右边右键单击“新用户...”,输入用户名如username,密码password,单击复选框“用户不能更改密码”和“密码永不过期”,单击“确定”;查看用户会多一个新用户username,然后右击“username”,选择“属性”
弹出对话框,选择“隶属于”,删掉默认的“users”,然后单击“添加”--》高级...-->立即查找,选择“administrators”,确定,确定,确定。至此完成用户添加。
2.把用户添加到数据库中
打开“企业管理器”建立连接,展开树形结构,找到“安全性”节点,右击“登录”,选择“新建登录...”,弹出对话框,填写“名称”,单击“...”,弹出对话框,选择“administrators”,然后单击“成员”,选择刚才添加的用户“username”,然后添加,确定;选择登录方式,选择“sql身份验证”,输入密码“password”,确定;
3.打开“服务器网络实用工具”,建议更改端口
“开始”--》“程序”--》“microsoft SQL server”--》“服务器网络实用工具”,弹出对话框,“常规”--》选择“tcp/ip”,单击“属性”,建议更改端口号,防止1433端口攻击(1433为sql默认端口号),确定,确定,ok
W服务器具体做法:
1.建立用户
如L服务器做法一致,用户和密码一致。
2.把用户添加到数据库中(两台服务器用户和密码相同)
如L服务器做法一致。
3.在“客户端网络实用工具”中添加网络用户
开始”--》“程序”--》“microsoft SQL server”--》“客户端网络实用工具”,弹出对话框,“常规”--》选择“tcp/ip”,单击“属性”,更改端口号,注意,w和L的端口号要保持一致。确定;燃后单击“别名”,“添加",”网络库” 选择“tcp/ip”,输入服务器别名如“sqlrss”,在“连接参数”中服务器名称填写L机器的ip地址,端口号改为以上更改的端口号。ok
5.注册“L服务器”
打开“企业管理器”,打开本地连接,右击本地库,选择“新建sql server注册...”,点击按钮“...”,选择刚刚添加的服务器“sqlrss”,选择“使用sql身份验证”,输入用户名“username”,密码“password”,确定,ok。
6.成功
连接成功,可以看到,服务器组多了一个服务器,这里可能会出现 的问题是无法建立连接,可能出现的问题是
1.L机器是否有防火墙,要把端口号给打开,
2.检查username用户是否属于administrators组
3.连接数据库的端口号是否一致
然后要做的就是发布和订阅服务器
首先我们理解一下复制的概念(部分来自互联网本人稍做修改)】
---------------------------
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
SQL复制的基本元素包括
出版服务器、订阅服务器、分发服务器、出版物、文章
SQL复制的工作原理
SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器
SQL SERVER复制技术类型
SQL SERVER提供了三种复制技术,分别是:
1、快照复制
2、事务复制
3、合并复制
只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。
--------------------------
1.更改本地服务器名
如果你的本地服务器名称为”local“或者”.“的话,那你是没法完成订阅与复制的,做法如下
a.删除本地的,右键”删除“,
b.右键单击“sql server 组”,“新建sql server注册”,服务器名称为本机的机器名称(确保无误),填写完成,选择“sql server身份验证”,输入用户 username,密码password,确定,ok。
2.发布
--------------------
(1)选中指定的服务器
(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
(3)选择要创建出版物的数据库,然后单击[创建发布]
(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器
(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
---------------------------------------------
此时,当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个“复制监视器”。同时也生成一个分发数据库(distribution) 。启动sql server agent。
3.订阅
----------------------------
1)选中指定的订阅服务器
(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅] (或者在发布服务器上点击"复制"节点,“发布内容”右键单击刚才发布的,选择“强制订阅”,这样可以起到订阅代理在发布端无法运行的问题)
(3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。
(4)单击[完成]。完成订阅操作。
完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—
注:
1.我在订阅的时候,发现在要订阅的服务器的企业管理器上无法显示出发布服务器的订阅列表,但是在发布服务器上注册订阅服务器后可以正常看到订阅列表,所以,如果可以的话,所有操作在发布服务器上进行可能比较方便。
2.由于默认的快照发布方式使用共享目录的方式进行数据同步,而我这里的两台服务器位于internet网上,所以我选择了使用Ftp模式发布快照。
3.有时在订阅服务器端完不成订阅,这样可以在发布服务器端强制订阅。
--------------------------------------------------------------------
具体操作如下:
发布服务器端:
A.选择 复制监视器--发布服务器--(服务器名)--已发布的数据库名 右健菜单 选择"属性"
B.选择"快照位置"选项框,钩选"在下列位置中生成快照",选择"订阅服务器可以使用ftp",设置Ftp服务器访问属性,建议将ftp根目录设置为快照位置
C.选择"状态"选项框,点击"立即执行代理程序",以让设置马上生效,然后试一下浏览快照,如果一切设置正确,应该能看到快照内容,如果快照为空,说明没有需要同步的内容
订阅服务器端:
A.选中要订阅的数据库,选择"请求订阅",
B.选中右边列表里的订阅项目,右健设置属性
C.在快照文件位置选项框设置使用Ftp协议下载快照
在安全性选项框输入Sqlserver身份验证密码