SQL SERVER资料之四:数据库维护高度可用性

这是我初学时候的笔记,帖出来抛砖引玉!



CHAPTER  10.维护高度可用性


简单的说可用性就是有多少时间系统是可访问的!如银行的数据库就是用户随时可以访问的,还有我们上网的时候所见到的网上商店,这都要求非常高的可用性,几近永久可用!


本单元讨论了调度可用性的含义,以及如何在Microsoft.NET企业服务器环境中获得调度可用性;然后讨论了如何通过故障转移群集增加SQLSERVER2000的可用性,最后讨论了如何创建备用服务器,以用如何利用日志传送技术来维护工作自动化!


1. 我们先简单简介一下可用性:我们使用可用性来描述给定系统的运行时间!如果在关键系统中经常发生数据链接中断,一定会打击用户的积极性!


确定可用性要求:运行时间:工作时间还是全部时间。连通性要求:持久的联机和脱机可用性;紧密./疏松耦合:同步(用户所做更改立即返回数据库服务器)和异步(把数据先插入应用程序,稍后由应用程序与数据库进行交互)


可用性和可伸缩性:可用性就是系统能否提供要求的时间量为用户服务;而可伸缩性是系统能否提供要求的并发用户数对数据库进行操作!为了提高可伸缩性,我们可以采用扩大和扩张的方法:所谓扩大,就是通过向服务器中增加硬件资源(RAM和CPU)来增加服务器所能处理的并发用户请示数目!扩张,我们可以把处理负荷分布到多个服务器中(复制,只读备用服务器,服务器联合体),来增加可处理的并发用户请求!


2. 我们现在就说一下如何利用故障转移群集(Failover)增加可用性,由两个或者是多个协同工作的自主计算机所组成,它们共享一下公共名称。这们通过它可以做到当某个群集成员发生故障,那个其它的成员可以确保业务运转不受影响。它包括两种方式:


主动/被动:这种方式下,只有一台计算机处于主动状态,只有在主节点发生故障的时候,辅助节点才能够转变为主动状态。同时辅助节点也可以提供数据服务!


主动/主动故障转移群集:每个节点可作为单个或者是多个虚拟服务器的主服务器,同时还作为其它虚拟服务器的辅助服务器!但是在发生故障的时候,性能会有所下降!


3. 备用服务器(Standby Server)和日志传送:这是我们学习的重点,我们过会还做这个实验。


备用服务器是包含主服务器镜像的第二个服务器,当我们的主服务器发生故障的时候,我们可以使用备用服务器来替代它,通过将备用服务器使用数据库的只读副本,用户还可以从主服务器中卸载负荷!因为是要传送事务日志,所以我们一定要把主服务器使用完全还愿模型!


日志传达过程:在主服务器中SQL Server Agent执行日志备份到某个共享文件夹中,然后备用服务器中的SQL Server Agent执行复制,将主服务器的日志备份复制到备用服务器上的文件夹中!最后备用服务器中SQL Server Agent执行装载作业,将上述日志备份文件恢复到备用服务器数据库中!


我们可以通过数据库维护向导配置日志传送!我们做实验的时候将详细讲解!


如果主服务器发生故障,我们可以利用备用服务器来替代主服务器,为了能够实现替代工作,我们要执行复制登录的DTS包,然后执行角色更改。在执行角色更改的时候我们将用到下面的存储过程:


sp_change_primary_role:将禁用事务日志的备份!


sp_change_secondary_role:禁用日志复制作业,并将事务日志恢复到备用服务器数据库中,同时将该数据库作为新的主服务器


sp_change_monitor_role: 更新监视器来发映新的主服务器,新的辅助数据库以有新的事


务日志备份目录!


sp_resolve_login:将原来主服务器上的备份更新数据库登录!~


实验1:实验日志传送


1. 准备主服务器和备用服务器:我们将用一台计算机上的两个实例(分别为CREATE和create\stddatabase)来模拟!


2. 创建PUBS数据库的副本(主服务器):我们将使用DTS导入/导出向导来创建主服务器中的数据库副本,在create(默认实例)上右键pubs数据库――[All Tasks]――导出数据,其中需要注意的是我们要新建一个数据库pubLogShip作为传达目的,同时选中所有对象!


3. 现在我们配置pubLogShip数据库允许事务日志备份(在主服务器中),刷新企业管理器,右键pubLogShip――属性――option—将还原模型改为完全!


4. 现在我们验证启动两个实例的SQL Server Agent!如果没有启动,手动启动!


5. 在主服务器中创建备份文件夹,我们新建D:\publogs来容纳主服务器的事务日志备份,并共享它!


6. 在备份服务器上创建恢复文件夹:我们新建D:\Shipedlogs 容纳从主服务器上传送到备份服务器上的事务日志!D:\newpublogs文件夹,存放新的主服务器的事务日志!


7. 创建备用数据库和配置日志传送:通过数据库维护计划向导,我们将创建pubsLogShip数据库备份,并将其复制到备用服务器中,并且还使得日志备份过程自动化!这一步是关键,我们要选择日志调度!主服务器名称,备份服务器名称,各种所在的文件夹,数据库装载模式为备用模式,还要允许数据库承担主角色!


创建作业,从当前的主服务器备份 syslogins,并将文件复制到当前的辅助服务器的某个目录下,然后执行该 DTS 包 


1. 选择"新建作业"以打开"常规"选项卡上的"新建作业属性"对话框。在当前的主服务器上,创建由 sa 拥有的作业,或由对两台服务器都拥有 sysadmin 权限的登录。


2. 在"步骤"选项卡上单击"新建"按钮以打开"新建作业步骤"对话框,然后创建下列作业步骤: 


• 向外大容量复制 


在"类型"列表中,选择"操作系统命令 (CmdExec)"选项。在"命令"文本框内输入如下命令: 


bcp master..syslogins out localpath\syslogins.dat /N /S current_primary_servername /U sa /P sa_password


单击"高级"选项卡,然后在"成功时操作"列表中选择"转到下一步"。在"失败时操作"列表中选择"退出报告失败的作业"。


• 复制文件 


在"类型"列表中,选择"Transact-SQL 脚本 (T-SQL)"。在"数据库"列表中,指定 master。在"命令"文本框内输入如下命令: 


EXEC xp_cmdshell 'copy localpath\syslogins.dat destination_share'


单击"高级"选项卡,然后在"成功时操作"列表中选择"转到下一步"。在"失败时操作"列表中选择"退出报告失败的作业"。


• 传输登录 


在"类型"列表中,选择"操作系统命令 (CmdExec)"选项。在"命令"文本框内输入如下命令:


DTSRun /Scurrent_primary_server /Uuser_nName /Ppassword /Npackage_name /Mpackage_password


3. 在"新建作业属性"对话框中单击"调度"选项卡,然后创建运行一次或反复运行的作业调度。 


建议使作业运行时间尽可能接近角色转变的时间,以便作业从主服务器获得最多的当前登录信息。


8. 


9. 我们在主服务器上执行活动,如删除一个表dbo.aa,然后创建一个表dbo.test


drop table dbo.aaa 

create table dbo.test1 

(  

id1 int identity(1,1), 

aa varchar(3) 

)



10. 在备份服务器上打开 管理—log shipping monitor,查看属性信息,然后 我们打开C:\shiplogs查看内容,查看是否有一个初始备份和一个或者是多个日志备份!


11. 更改服务器角色:


在标记为当前主服务器的 SQL Server 实例上运行 sp_change_primary_role。下例显示如何使主数据库不再是主数据库。current_primary_dbname 是当前主数据库的名称。


 use msdb 


Exec sp_change_primary_role 'pubLogShip',


@final_state=3                


然后在在标记为当前辅助服务器的 SQL Server 实例上运行 sp_change_secondary_role。下例显示如何使辅助数据库成为主数据库。current_secondary_dbname 是当前辅助数据库的名称。 use msdb


exec sp_change_secondary_role 'pubsLogShip'


在标记为监视器的 SQL Server 实例上运行 sp_change_monitor_role。下例显示如何更改监视器以反映新的主数据库。new_source_directory 是主服务器转储事务日志的位置的路径:use msdb 

exec sp_change_monitor_role 'create','create\stddatabase', 

'pubsLogShip','E:\newpublogs'



下例显示如何根据来自以前的主服务器的登录解析新的主服务器上的登录。"db2"是新的主数据库的名称。"syslogins.dat"包含来自以前主数据库的大容量复制 syslogins 表并存储在 'c:\bulkoutput\' 目录中。


EXEC sp_resolve_logins @dest_db = 'db2', 

   @dest_path = 'c:\bulkoutput\', 

   @dest_filename = 'syslogins.dat'