使用同义词链

为了继续前面的示例,假设将一台新的计算机添加到网络中。它的名称是 db_crunch。将 customer 表和其他表移至该计算机上以降低 avignon 上的负载。尽管可以非常容易地在新的数据库服务器上重新生成该表,但如何能够将所有访问重定向到它呢?一种方法是安装同义词以替换旧表,如以下示例所示:
DATABASE stores_demo@avignon EXCLUSIVE;
RENAME TABLE customer TO old_cust;
CREATE SYNONYM customer FOR stores_demo@db_crunch:customer;
CLOSE DATABASE;

当在 stores_demo@avignon 中执行查询时,对表 customer 的引用将找到该同义词并重定向至新计算机上的版本。在前一示例中,对于从数据库服务器 nantes 执行的查询,也会发生此类重定向。数据库 stores_demo@nantes 中的同义词仍将对 customer 的引用重定向至数据库 stores_demo@avignon;在该数据库中,新的同义词将查询发送至数据库 stores_demo@db_crunch

当您想要在一个操作中将对某个表的所有访问重定向时(就像在本示例中一样),同义词链非常有用。然而,您应该尽快更新所有用户的数据库,以使它们的同义词直接指向该表。如果不这样做,数据库服务器处理额外的同义词时就会产生额外的开销,并且如果链中的任何计算机已关闭,就会找不到该表。

可以对本地数据库运行某个应用程序并且以后对另一台计算机上的数据库运行同一个应用程序。该程序在这两种情况下可以运行得一样好(尽管运行速度在网络数据库上可能会慢得多)。如果数据模型相同,程序无法区分两个数据库之间的差别。