我已经掌握了语法,但我想知道是否有人可以提供一个很好的使用场景,说明数据库同义词的用处。
我已经掌握了语法,但我想知道是否有人可以提供一个很好的使用场景,说明数据库同义词的用处。
对于测试时的模拟表格,使用它非常出色。例如,如果您的源表包含数百万条记录,而您想测试数据的一个小子集,您可以使用同义词将源表重定向到您控制的较小表格,以便您可以进行各种场景的模拟。
这样,您可以更新/删除模拟表格中的数据,而不会影响源表。当您准备使用源表时,您只需要重新指向同义词即可。
我通常看到同义词用于DBA希望将数据库对象分成不同模式,但希望/需要一些这些对象对其他模式可见(但不想直接访问它们)的情况。
最近我看到的一个例子:同一公司运行的多个Web应用程序。用户通常可以访问这些应用程序中的多个,并且他们只有一个用户帐户来访问这些应用程序。用户帐户信息存储在USER_ACCOUNTS
模式中,所有其他应用程序都在自己的模式中,并通过同义词访问USER_ACCOUNTS
模式。
当你在现有代码中硬编码数据库对象名称时。
使用同义词可能会避免重写旧代码的痛苦,有时这些代码来自多个源,而这些源有其自己的表或数据库名称。
例如,我曾经看到一段为某个生产服务器编写的代码。编写者方便地将主表的名称硬编码为 test_data
,这在他的工作站上可以正常工作。使用同义词而不是重写他的代码让我提前回家了。
比如说,当你需要让一个糟糕编写的应用程序(没有使用 ALTER SESSION SET CURRENT_SCHEMA
)能够针对其他模式运行时。
同义词通常被用作这种情况下的解决方法。如果有一个正确编写的应用程序,你几乎不需要使用它们。
ALTER SESSION SET CURRENT_SCHEMA
将无法工作。 - Jeffrey Kemp