5.故障转移集群在SQL 2005中是怎么工作的?
故障转移集群在SQL 2005中是怎么工作的?它与Oracle和DB2的故障支持相比怎么样?
在SQL Server 2005中故障转移集群功能在很多方面都得到了很大扩展。
首先,运行于Windows 2000 Datacenter 的SQL Server 2000仅限于四个服务器的集群。现在运行在Windows 2003 Server的SQL Server 2005可以支持八个结点(取决于Windows 2003的版本)。
现在故障也被支持于更多种类的服务。分析服务、通知服务、复制和SQL Server代理都是SQL Server 2005中的集群意义上的服务。这对于那些利用这些特性和需要维护高可用性的公司来说是个重要的因素。
但是在数据库可用性方面最大的改进根本不是故障转移集群。一个叫做“数据库镜像”的新的特性将证明是一个更具吸引力的维护正常运行时间的方式。
这个特性可以被认为是日志传送的更实时的方式。事务被连续的从一个活动的结点传送到另一台一直保持恢复状态的服务器上的正在等待中的数据库中。当或如果这个活动结点传送过来,这个镜像几乎可以立即接收。这是对滞后的一个非常巨大的改善——有时几分钟——这可以同故障转移集群一起使用。
关于这个和数据库管理员感兴趣的其它特性的更多信息,可以在TechNet文章里看到,提供给数据库管理员的SQL Server 2005 Beta 2概述
—Adam Machanic,SQL Server 2005专家
6.可以在同一台机器上安装不同的SQL Server版本吗?
你可以在同一台机器上安装两个不同版本的SQL Server吗?
是的,你可以。虽然你理论上可以以任何顺序来安装它们,但我总是愿意建议以发布的顺序来安装软件:先是SQL Server 2000,然后是SQL Server 2005。
—Greg Low,开发专家
7.在SQL Server 2005中可以调用一个扩展存储过程吗?
我在java中使用用于SQL Server 2005的JDBC调用一个扩展存储过程(特别是xp_cmdshell)时遇到了问题。通过使用用于SQL Server 2000 Service Pack 3的JDBC,我可以调用它就像调用一个普通的存储过程一样。对于SQL Server 2005,我得到下面的信息:
om.microsoft.sqlserver.jdbc.SQLServerException:对存储过程‘xp_cmdshell’的请求失败了 因为'xp_cmdshell'是一个存储过程对象。
它是一个SQL Server 2000服务器。我想用新的2005JDBC,因为在手动事务模式下克隆连接使用没有问题。我在我的webserver上遇到了关于selectMethod=cursor属性的问题,它看起来没起作用。它在开发过程中在我的本地webserver上运行良好,但是由于某种原因在运行在动态webserver上时不能正常工作。是否可以调用这个扩展存储过程呢?<.p>
是的,默认的,它在2005中是不可用的,因为它不被认为是安全的。如果你认为它是适当的,你可以使用外围应用配置器(Surface Area Configuration Tool)工具来设置它为可用的。
8.我怎么为一个SQL Server数据库创建用户名和密码?
我创建了一个SQL Server 2005数据库,我计划用一个用户名和密码来保护它。我不清楚这要怎么做。我怎样用我的新数据库的安全对象为它建立一个安全系统?
这有一篇Steve Jones写的很好的文章,它会让你从SQL用户和登录开始:开始SQL Server——登录和用户。
—Steven Andres,安全专家
9.我可以同时运行SQL 2000和SQL 2005实例吗?
你可以在同一台机器上运行SQL 2000和SQL 2005实例吗?有什么问题是和这两个实例运行在一起相关联的吗?
是的,他们可以运行在一起。我看过的唯一问题是当2000在2005之后安装的,因为共享dll被旧的替代了而出现了一些问题。安装另一个2005的实例看起来总是可以解决这一问题。
—Greg Low,开发专家
10.你能提供一些SQL Server 2005升级问题的例子吗?
从SQL Server 2000移植到SQL Server 2005时可能会遇到什么问题?在移植过程中所应该采取的预防措施都有哪些?
在做移植时你可能会遇到很多问题——而在这里很难解释所有的问题。幸运的是,微软已经发布了一个工具来帮助移植。你可以在我的文章“使用SQL Server 2005升级顾问减少升级未知数”里读到所有关于升级的问题。
要知道更多的关于移植的信息,我邀请你听我的webcast升级到SQL Server 2005:你必须知道的事情,在其中我分享了许多提示以帮助确保顺利的转变到新的版本。
—Adam Machanic,SQL Server 2005专家
11. 在SQL Server 2005中会出现什么存储过程并发问题?
我在SQL Server 2005遇到了一个并发问题。在我卖票的公交车上有一些免费的座位。在插入一个售出的票之前我要检查是否还留有免费的座位。我的存储过程像下面所示:
CREATE PROCEDURE add_ticket -- parameters DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats = COUNT(*) FROM tickets WHERE seat_is_not_taken IF free_seats <> 0 INSERT INTO tickets VALUES(...) -- some other statements END TRANSACTION
问题是两个进程可以并发的读取免费票的数量,并都可以保留一张票,即使已经没有免费票了。我需要一种方法使运行add_ticket存储过程的进程在没有插入一张新的票之前,其它进程被阻止读取免费票的数量。SET TRANSACTION ISOLATION LEVEL在这种情况下不起作用,对吧?
你是对的;一个更高的隔离级别不能帮助保证多个读者不会同时读取同一行数据。不过,你可以采取几种方式来完成这个工作。例如,你可以分配给每一个座位一个唯一的标识(意思是,一个唯一的键,没有必要是全局统一标识符),并创建一个表储存已经被占用的座位。在这个表上加一个UNIQUE约束,这样就能保证一个座位不能插入两次。
我认为一个更有趣的选择可能是使用SQL Service Broker。你可以为每一辆公交车建立一个会话,将这个会话句柄存储在一个表里,读者在作接受之前可以参考这个表。通过这种方法,读者可以简单的按其需要接受这个信息(在进程中,保留汽车上的座位)。Service Broker会确保没有信息会被接受两次,这意味着你不会再遇到任何并发问题。
—Adam Machanic,SQL Server 2005专家
12. SQL Server 2005数据库可以移植回SQL Server 2000吗?
在移植到SQL Server 2005的过程中,许多组织仍然会被要求支持SQL Server 2000安装。结果,一个普遍的要求是能够反向移植:将数据库从SQL Server 2005移植会SQL Server 2000。
不幸的是,这并不是那么简单。从SQL Server 2005实例备份的数据库不能恢复到SQL Server 2000实例中。分离的SQL Server 2005数据库也不能重新绑定到SQL Server 2000中。
因为不支持备份/恢复和分离/绑定,对于移动数据从SQL Server 2005到SQL Server 2000的唯一可用的方法是基于复制数据。数据和schemas可以用一个工具例如Red Gate的SQL Packager来跟踪,脚本可以应用于SQL Server 2000上。另一个选择是使用像DTS或SSIS之类的工具,这些工具都包含数据复制向导。
然而,复制数据和schema是一个潜在的麻烦经历。SQL Server 2005支持许多SQL Server 2000种没有的特性,而这在交叉移植过程中会引起问题。在试图为两种平台开发解决方案时谨慎是很重要的,我的建议是开发应该采用SQL Server 2000来完成,而代码和数据应该移植到SQL Server 2005中。