2014-02-17 7 views
1

У одного из наших небольших клиентов есть своя база данных, в которой они поддерживают небольшую ИТ-команду. Иногда эта небольшая команда ИТ должна внести свои собственные изменения в свою базу данных, но иногда они не проверяют сценарии, которые наша компания предоставляет для них, и повторно используют их по своей воле. Иногда это приводит к дублированию заданий, когда член этой команды выполняет те же скрипты, что и другой член.Предотвращение дублирования заданий в Oracle

С моей точки зрения, даже это вызвано профессионалами нашего клиента, мы несете ответственность за предоставление решения для нашего клиента. Как мы можем предотвратить такие последствия?

Я не испытываю вообще в Oracle. Я разработчик javascript и .net, так что вы можете догадаться, что я полностью потерял эту проблему. Но я хотел сделать что-то сверх моего масштаба, так как большинство людей здесь не очень обеспокоены этим. Мы теряем каждый месяц хорошее время, фиксирующее эту базу данных; Удаление дубликатов вручную.

Спасибо!

+0

С помощью дублированных заданий вы имеете в виду задания планировщика или что-то еще? Другой способ взглянуть на это, если это меньший клиент, и вы теряете время либо заряжаете больше, либо бросаете их ... – Ben

+0

Эй, @Ben. Запланированные задания, да. Извините за это, английский не мой родной язык. – Malavos

+1

Добавление кода в каждый скрипт, чтобы проверить, был ли он уже запущен или если он должен быть запущен, является одним из способов ограничить ущерб, который может вызвать случайное многократное выполнение. – Brian

ответ

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.

+0

Привет, Джоерлес. Спасибо за этот ответ; Я сделаю некоторые тесты с этим и смоделирую эту ошибку с одним из моих начальников; Я попытаюсь показать тогда, что такая ситуация может быть предотвращена, и, возможно, если кто-то более опытный в компании с Oracle изучит ее, мы можем это предотвратить. Большое спасибо! Я подожду еще немного, прежде чем принять ваш ответ, так как там могут быть другие люди в этой ситуации или какие-то другие идеи о том, как это решить. +1 в любом случае! – Malavos

+0

Последствия всего этого .. Я не мог убедить тогда сделать этот простой журнал. Они просто изменили создание сценария на уникальный идентификатор и очистили дубликаты. * вздыхает * Спасибо в любом случае! – Malavos

Смежные вопросы