SQL SERVER日志传送功能可自动复制数据库的日志文件,并回存到备份服务器 (standby server) 的另外一个数据库。因此可大幅提高SQL Server数据库的可用性。因为备份数据库完整地接收来源数据库的变化情况,所以它就是一份来源数据库的复本。它们之间的差别仅在于日志复制与加载过程所产生的时间差。然而,当主服务器因故障停机时,您就可以将备份服务器更改为新的主服务器。如果原来的主服务器可重新上线使用,那么您可以将其设定为新的备份服务器 - 事实上就是对调两台服务器的角色。
主要测试SQL SERVER企业版日志自动传送、自动装载功能、主运行服务器与备份服务器的角色切换功能及通过监视服务器对日志传送及备份服务器进行维护。
将SQL SERVER主服务器上数据库的内容自动传送并应用到备份服务器的数据库上。
WINDOWS 2000,<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="512" unitname="m" w:st="on"><span lang="EN-US">512M</span></chmetcnv> Mem,1CPU,局域网,IP:172.17.8.222以下简称222
WINDOWS 2000,<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="512" unitname="m" w:st="on"><span lang="EN-US">512M</span></chmetcnv> Mem,1CPU,局域网,IP:172.17.8.220以下简称220
SQL SERVER2000企业版
主服务器(primary server) 即是实际处理业务的主运行服务器。这里设定222为主服务器。备份服务器(secondary server)上存放日志传送的目的数据库,用来复制与回存来主运行数据库的日志文件。这里设定220为备份服务器。监控服务器(monitor server)用来监控主服务器与备份服务器。这里设定220为备份服务器。SQL Server 2000使用Enterprise Manager的日志传送监控工具来监控每一组传送中的日志资料。Microsoft建议将监控用服务器安装在另一台服务器。
在SQL SERVER2000中日志传送的配置工作只能由向导完成,不能使用编码实现。
开始前要做的一些检查或操作:
1.检查所有服务器的权限设置,用来设定日志传送的Windows帐号必须拥有所有服务器上SQL Server系统管理者(sa)的权限。
2.在主/备份服务器上建立共享文件夹。首先,将来主运行数据库日志文件所在的目录设定为共享目录。接着在备份服务器上,将打算回存日志文件的目录也共享出来。并将这两个共享目录的权限开放给每一台服务器上SQL Agent所使用的Windows帐号。这里采用administrator登录,将SQLAgent服务指定给administrator用户。
3.建立并初始化备份数据库。
在主数据库上建立备份:
backup database pubs to disk='c:/pubs'
backup log pubs to disk='c:/pubslog'
在备份数据库上:
alter database pubs set single_user
USE master
GO
RESTORE DATABASE pubs
FROM disk='c:/pubs'
WITH STANDBY = 'c:/undopubs.ldf'
RESTORE LOG PUB FROM disk=’c:/pubslog’
WITH STANDBY = 'c:/undopubs.ldf'
alter database pubs set multi_user
4.在Enterprise Manager注册此222和220这两台服务器。
在完成上面的准备动作后,可以打开数据库维护计划向导来设定日志传送。依据下列步骤完成:
欢迎画面:
<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:281.25pt; height:229.5pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:title="未命名"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在下面的对话框中选取数据库:勾选“将事务日志传送到。。。。。。
<!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" style='width:327pt;height:279pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image003.png" o:title="2"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
下列这三个步骤什么都不选:即连点三下“下一步“
在下面的存储事务日志的对话框中选择共享的目录。
<!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:373.5pt;height:287.25pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image005.gif" o:title="6"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
选择网络共享:在主服务器上选择。
<!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:373.5pt;height:287.25pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image006.gif" o:title="7"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
接下来选择指定记录传送目的地:点选【Add】按钮后可开启『新增目的数据库』对话框。
里面的信息都是关于备份服务器的信息:
【服务器名称】下拉式选单会列出您在先前准备工作中曾利用Enterprise Manager所注册的Secondary Server名称。在【目录】文字字段里,请输入Secondary Server的目录名称,用以接收来源数据库日志文件复本。注意此名称为本地端路径名称,而不是分享目录名称。
有关数据库的装载状态,您有两种选项可以设定:无恢复模式(No recovery mode)与备用模式(Standby mode)。所谓的『无恢复模式』表示使用者将无法进行备份数据库的查询,唯一可执行的动作只有回存日志文件。而『备用模式』则是将数据库设定成只读状态只要不是在回存数据库的时候,您都可以查询备份数据库中的内容。窗口内还有一个【终止数据库中的使用者(建议选项)】选项,会在回存数据库或是回存日志文件时发生动作。在回存数据库或是日志文件时,『回存程序』将是数据库内唯一的使用者。所以,Microsoft建议您勾选此选项,否则其他使用者可能会影响回存动作的进行。这里选择此选项。
<!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75" style='width:303pt;height:363pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image007.gif" o:title="9"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
接下来连按几次“下一步“即完成设置。
注:日志传送的设置可以在设置完成后点击“维护计划“的属性中修改上述设置。
在服务器上执行下列存储过程,监视日志传送。 运行 sp_add_log_shipping_primary 以通知监视服务器哪台计算机在日志传送对中是主服务器。存储过程的输出将是 primary_id,它将用于sp_add_log_shipping_secondary 存储过程。运行 sp_add_log_shipping_secondary 以通知监视服务器哪台计算机在日志传送对中是辅助服务器。下例为数据库的现有日志传送对设置日志传送监视器。在手工设置该监视器之前,必须已使用数据库维护计划向导设置了日志传送。注意,在向导设置过程中也要创建监视器。
EXEC sp_add_log_shipping_primary
@primary_server_name = 'MyPrimaryServer',
@primary_database_name = 'Northwind',
@maintenance_plan_id = '9B4E380E-11D2-41FC-9BA5-A8EB<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="40" unitname="a" w:st="on">040A</chmetcnv>3DEF',
@backup_threshold = 15,
@threshold_alert = 14420,
@threshold_alert_enabled = 1,
@planned_outage_start_time = 0,
@planned_outage_end_time = 0,
@planned_outage_weekday_mask = 0
EXEC sp_add_log_shipping_secondary
@primary_id = 1,
@secondary_server_name = 'MySecondaryServer',
@secondary_database_name = 'Northwind',
@secondary_plan_id = 'B<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="5" unitname="C" w:st="on">5C</chmetcnv>330FF-1081-4FCB-83D0-955DDFB56BA5',
@copy_enabled = 1,
@load_enabled = 1,
@out_of_sync_threshold = 15,
@threshold_alert = 14421,
@threshold_alert_enabled = 1,
@planned_outage_start_time = 0,
@planned_outage_end_time = 0,
@planned_outage_weekday_mask = 0,
@allow_role_change = 0
GO
当您正确设定日志传送之后,SQL SERVER会激活监控服务器上Enterprise Manager 的日志传送监控工具程序。此外,SQL SERVER会建立两个SQL Agent 警示工作(alert job):一个用来执行工作,另一个处理同步偏离情况。使用监控工具程序的方式是,开启Enterprise Manager并连至监控服务器,展开【Management】节点,然后点选【日志传送监视器(Log Shipping Monitor)】。当您点选此工具程序时,其内会列出日志传送配对服务器的清单。您可在配对服务器上按下右键,监视其备份、复制与回存等工作的执行历史纪录。这些历史纪录十分有用,因为您从这里得到的错误讯息会比从次要服务器上(SQL Agent 复制与回存工作)得到的更为详尽。
如图所示:当您开启配对服务器之属性对话框,并进入【状态】设定页时,您可监视此配对服务器执行备份与回存程序之状态。日志文件名为first_file_000000000000.trn。这并不是实际的文件名称,只不过是用来标示Agent尚未处理任何档案而已。在【状态】设定页也会显示备份、复制以及加载(回存)等动作执行时所耗费的时间。此设定页之信息不会自动更新,所以您必须将此对话盒关闭后再开启,才能更新其资料。
<!--[if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75" style='width:347.25pt;height:404.25pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image008.gif" o:title="a"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在下面这两个对话框中可以查看在主运行服务器上的事务日志备份情况和在备份服务器上日志复制和日志装载的情况。
<!--[if gte vml 1]><v:shape id="_x0000_i1035" type="#_x0000_t75" style='width:310.5pt;height:306.75pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image009.png" o:title="b"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if gte vml 1]><v:shape id="_x0000_i1036" type="#_x0000_t75" style='width:318pt;height:321pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image011.png" o:title="c"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
日志传送支持角色转变,而角色转变需要下列基本步骤:
一、创建数据转换服务 (DTS) 包,将当前的主服务器复制到当前的辅助服务器。
二、创建作业,从当前的主服务器备份 syslogins,并将文件复制到当前的辅助服务器的某个目录下,然后执行该 DTS 包。
三、执行角色更改,使当前的辅助服务器成为当前的主服务器。
在执行日志传送角色更改前,该日志传送对的维护计划必须在辅助服务器上已经存在。可以使用数据库维护计划向导创建维护计划,或者通过使用主数据库维护计划用户界面上的"添加辅助服务器"对话框来添加辅助服务器。
使用 DTS 设计器在当前的主服务器上创建 DTS 包。将登录从当前的主服务器复制到当前的辅助服务器。该包应使用位于设计器任务列表中的"传输登录任务"。
在"源"服务器列表中的"源"选项卡上的"传输登录"对话框内,输入源服务器(当前的主服务器)。
<!--[if gte vml 1]><v:shape id="_x0000_i1037" type="#_x0000_t75" style='width:372.75pt;height:240.75pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image013.png" o:title="1"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
单击"使用 Windows 身份验证"或"使用 SQL Server 身份验证"。
在"目的服务器"列表的"目的"选项卡上,输入目的服务器(当前的辅助服务器)。
单击"使用 Windows 身份验证"或"使用 SQL Server 身份验证"。
在"登录"选项卡上,单击"包运行时检测到的所有服务器登录"或"选定数据库的登录"。
保存该包。
从当前的主服务器备份 syslogins文件,并将文件复制到当前的辅助服务器的某个目录下,然后执行该 DTS 包。选择"新建作业"以打开"常规"选项卡上的"新建作业属性"对话框。在当前的主服务器上,创建由 sa 拥有的作业,或由对两台服务器都拥有 sysadmin 权限的登录。
<!--[if gte vml 1]><v:shape id="_x0000_i1038" type="#_x0000_t75" style='width:449.25pt;height:240.75pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image015.png" o:title="1"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:449.25pt;height:240.75pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image017.png" o:title="2"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在"步骤"选项卡上单击"新建"按钮以打开"新建作业步骤"对话框,然后创建下列作业步骤:
向外大容量复制
<!--[if gte vml 1]><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:366pt;height:264pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image019.png" o:title="11"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在"类型"列表中,选择"操作系统命令 (CmdExec)"选项。在"命令"文本框内输入如下命令:
bcp master..syslogins out localpath/syslogins.dat /N /S current_primary_servername /U sa /P sa_password
单击"高级"选项卡,然后在"成功时操作"列表中选择"转到下一步"。在"失败时操作"列表中选择"退出报告失败的作业"。
复制文件
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:366pt;height:264pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image021.png" o:title="12"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在"类型"列表中,选择"Transact-SQL 脚本 (T-SQL)"。在"数据库"列表中,指定 master。在"命令"文本框内输入如下命令:
EXEC xp_cmdshell 'copy localpath/syslogins.dat destination_share'
单击"高级"选项卡,然后在"成功时操作"列表中选择"转到下一步"。在"失败时操作"列表中选择"退出报告失败的作业"。
传输登录
<!--[if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75" style='width:366pt;height:264pt'> <v:imagedata src="file:///C:/DOCUME~1/user/LOCALS~1/Temp/msohtml1/01/clip_image023.png" o:title="13"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
在"类型"列表中,选择"操作系统命令 (CmdExec)"选项。在"命令"文本框内输入如下命令:
DTSRun /Scurrent_primary_server /Uuser_nName /Ppassword /Npackage_name /Mpackage_password
在"新建作业属性"对话框中单击"调度"选项卡,然后创建运行一次或反复运行的作业调度。
必须由 SQL Server 管理员执行服务器角色转变。在标记为当前主服务器的 SQL Server 实例上运行 sp_change_primary_role。下例显示如何使主数据库不再是主数据库。current_primary_dbname 是当前主数据库的名称。
EXEC sp_change_primary_role
@db_name = 'current_primary_dbname',
@backup_log = 1,
@terminate = 0,
@final_state = 2,
@access_level = 1
GO
在标记为当前辅助服务器的 SQL Server 实例上运行 sp_change_secondary_rol。下例显示如何使辅助数据库成为主数据库。current_secondary_dbname 是当前辅助数据库的名称。
EXEC sp_change_secondary_role
@db_name = 'current_secondary_dbname',
@do_load = 1,
@force_load = 1,
@final_state = 1,
@access_level = 1,
@terminate = 1,
@stopat = NULL
GO
在标记为监视器的 SQL Server 实例上运行 sp_change_monitor_role。下例显示如何更改监视器以反映新的主数据库。new_source_directory 是主服务器转储事务日志的位置的路径。
EXEC sp_change_monitor_role
@primary_server = 'current_primary_server_name',
@secondary_server = 'current_secondary_server_name',
@database = 'current_secondary_dbname',
@new_source = 'new_source_directory'
GO
在现在标记为主服务器(从前的辅助服务器)的 SQL Server 实例上运行 sp_resolve_logins。必须从目标数据库运行存储过程。
下例显示如何用从前的主服务器中的登录解析新的主服务器上的登录。destination_path 是在复制文件作业步骤中指定的目的共享。filename 与 BCP 输出作业步骤中指定的相同,dbname 为新主数据库的名称。
EXEC sp_resolve_logins
@dest_db = 'dbname',
@dest_path = 'destination_path',
@filename = 'filename'
GO
根据对SQL SERVER日志传送功能的测试情况,可以看出SQL SERVER2000企业版中大大加强了数据库可用性这方面的功能。备份数据库不但增加了数据库的可用性,而且在主运行数据库处于高峰时也可以分担一些查询方面的业务。但目前SQL SERVER2000企业版中的日志传送功能还只能利用数据库维护计划向导来完成,出现错误不容易调试。另外主服务器和备份服务器进行角色切换的过程比较复杂,且不易成功。当切换成功后,从前的辅助服务器现在是当前的主服务器,并准备承担主服务器的功能。而从前的主服务器已不再是日志传送对的一方了。必须将从前的主服务器作为辅助服务器添加到新的主服务器,才能在两个数据库之间建立日志传送对。目前,原主服务器变化备份服务器一过程并不能自动切换。
无