目前,我有一个场景涉及在计划作业完成后切换同义词定义。该作业将创建一个标识符为even
或odd
对应于偶数或奇数小时的表。我们目前正在做的是这样的:
odd_job:
create foo_odd ...
replace foo_syn as foo_odd
和
even_job:
create foo_even ...
replace foo_syn as foo_even
发生的事情是在正常生产期间foo_syn
处于锁定状态。因此,我们正在寻找一种能够交换同义词定义的生产方式。
问题是我们如何在 Oracle 10g 中以最少的用户中断来交换生产级系统中的同义词定义?
从评论中
foo_syn 是否有任何依赖对象?
Nofoo_syn
只不过是指向我生成的表的指针。也就是说,不需要为此开关重新编译任何程序。
这听起来像是一件很奇怪的事情。你能解释一下那个开关的用途/它是如何使用的吗?
当然。我们有一个与数据库接口的应用程序,从 Java(业务逻辑查询)执行的 SQL 具有对foo_syn
. 由于数据的动态特性,可以保证每小时交换将提供新的结果,这对于我们试图接近实时是很重要的。在此之前,它是每天一次,并且对它类型的场景感到满意。
交换的原因是我不希望动态 SQL(就表名而言)成为我的应用程序查询的一部分。因此,数据库在不更改作为我的应用程序的一部分引用的同义词的名称的情况下对较新的数据集进行切换。