防止Oracle中的重复作业

时间:2014-02-17 20:52:21

标签: sql oracle duplicates jobs

我们的一个小型客户拥有自己的数据库,他们维护着一个小型IT团队。 有时,这个小型IT团队必须对他们的数据库进行自己的修改,但有时候,他们不会验证我们公司为他们提供的脚本 - 并且可以按照自己的意愿重用它们。这有时会导致重复的作业,其中该团队的成员执行与另一个成员相同的脚本。

在我看来,即使是由我们客户的专业人士引起的,我们也有责任为我们的客户提供解决方案。我们如何防止这种情况发生?

我在Oracle中根本没有经验。我是一个javascript和.net开发人员,所以你可以猜测我在这个问题上很丢失。但是我想做一些超出我范围的事情,因为这里的大多数人并不是真的担心这个。我们每个月都有很多时间来修复这个数据库;手动删除重复项。

谢谢!

1 个答案:

答案 0 :(得分:2)

简单的日志表和标准的脚本页眉和页脚可以帮助控制数据库更改。

将这样的表添加到您的产品中:

create table script_log
(
    id              number,
    description     varchar2(4000),
    was_successful  varchar2(1) default 'N',
    create_date     date default sysdate,
    create_by       varchar2(30) default user,
    constraint script_log_pk primary key (id),
    constraint script_log_ck1 check (was_successful in ('Y', 'N'))
);

所有更改都应使用标准工具和模板运行。 SQL * Plus通常是数据库更改的最佳工具。它不是花哨的,它肯定有一些怪癖。但它可以在任何地方运行,每个Oracle专业人员都知道它。

--Header, perhaps in a .SQL file that accepts parameters.
whenever sqlerror exit
variable script_id number
exec :script_id := 1;
insert into script_log(id, description) values(:script_id, 'First script.');
commit;

<add changes here>

--Footer, may also be in a .SQL file.
update script_log set was_successful = 'Y' where id = :script_id;
commit;
prompt Script done.

如果有人第二次尝试运行该脚本,则会因此错误而失败:

*
ERROR at line 1:
ORA-00001: unique constraint (JHELLER.SCRIPT_LOG_PK) violated

一个简单的过程和一点脚本可以帮助管理变更。

但如果贵公司无法做到这样的简单解决方案,请不要感到惊讶。由于原因,我仍然不明白这种类型的系统不属于Oracle文化。