Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用事务和隔离级别

复制和并发


您的网络上有些计算机可能是便携式计算机。人们可能会将这些便携式计算机从办公室中拿走,或者,这些计算机可能偶尔才连接到该网络上。这些计算机的用户可能希望在未连接到网络的时候也能使用某些数据库应用程序。

数据库复制是这个问题的最理想的解决方案。使用 SQL Remote 或 MobiLink 同步技术,您可以将统一数据库(或称作主数据库)中的信息发布到任意数量的其他计算机上。您可以精确地控制复制到任一特定计算机上的信息。任何人都可以接收到特定的表,甚至表中的部分行和列。通过对每个人接收到的信息进行自定义,可以确保他们的数据库副本只包含他们所需的信息,而不会没有必要地增大。

另外两本名为 SQL Remote 用户指南MobiLink 同步用户指南的手册中提供了有关 SQL Remote 复制>和 MobiLink 同步的详细信息。因此,本节并未提供完整的信息,而仅仅介绍了一些与锁定和并发问题直接相关的概念。

使用 SQL Remote 和 MobiLink 可以从中央(统一)数据库更新被复制的数据库,也可以通过在远程计算机上处理事务来更新这个相同的中央数据库。由于更新在两个方向上都可以进行,因此这项功能称作双向复制

由于无论在中央计算机上处理事务,还是在远程计算机上处理事务,其结果都可能会影响统一数据库,即具有处理并发事务的效果。

事务可能同时在不同的计算机上发生,甚至可能涉及相同的数据。但在这个例子中,这些计算机可能并没有物理地连接在一起。远程计算机无法与统一数据库进行联系以设置任何形式的锁定,或标识哪些行已被更改。因此,锁定并不能象所有事务都由一台服务器处理时那样防止不一致。

而且,由于任何给定的远程计算机上都没有数据库的完整副本,这使得情况更为复杂。假设有一个直接在主(统一)数据库上执行的事务。该事务可能会影响两个或多个表中的行。可能不会在远程数据库上执行相同的事务,因为无法确保该计算机上复制了一个受影响的表,还是两个表都复制了。即使有相同的表,这些表中包含的信息也可能不完全一样,这取决于最近一次同步这两个数据库中的信息的时间。

要克服以上约束,应基于操作而不是事务进行复制。操作是指对表中一行的更改。这个更改可能是执行 UPDATE、INSERT 或 DELETE 语句的结果。UPDATE 或 DELETE 语句产生的操作标识各列的初始值,而 INSERT 或 UPDATE 语句产生的事务记录最终值。

一个事务可能会产生零个、一个或多个操作。一个操作不可能从两个或多个事务产生。如果有两个事务修改了表,那么将产生两个或多个相应的操作。

如果一个操作是从远程计算机上处理的事务产生的,那么必须将它传递到统一数据库,从而可以合并信息。另一方面,如果一个操作是从统一计算机上的事务产生的,那么可能需要将该操作发送到某些远程站点,但不需要发送到其他站点。由于每个远程站点都可能包含完整数据库的一部分的复本,因此只有在该操作影响到数据库的那一部分时,SQL Remote 才知道将该操作传递到远程站点。

基于事务日志的复制 

SQL Remote 使用的是基于事务日志的复制机制。在一台计算机上激活 SQL Remote 时,它将扫描事务日志,找出它必须传送的操作,并准备一条或多条消息。

SQL Remote 可以使用多种方法在计算机间传递这些消息。它可以创建包含这些消息的文件,并将它们存储到指定的目录中。SQL Remote 也可以使用任何一种最常用的消息传送协议来传递消息。您或许可以使用现有的电子邮件系统。

将来自远程站点的操作合并到统一数据库时,可能会出现冲突。例如,分别位于不同远程站点的两个人可能更改了同一个表中的同一个值。虽然 Adaptive Server Anywhere 的内置锁定功能可以消除由同一台服务器处理的并发事务之间的冲突,但对于两个都具有更改同一个值的权限的用户,则不可能自动消除他们之间的所有冲突。

作为数据库管理员,您可以对数据库进行适当的设计,或编写用于解决冲突的算法,从而避免这个潜在问题。例如,您可以决定只让一个人负责在特定的表中更新特定范围的值。如果这种采取限制的做法不切实际,则可以使用 SQL Remote 的冲突解决功能实施触发器和过程,以适合于所涉及的数据的方式来解决冲突。

SQL Remote 提供了充分利用数据库复制所需要的工具和编程功能。有关详细信息,请参见 SQL Remote 用户指南MobiLink 同步用户指南


Collection Contents 上一页 下一页 PDF