2014-02-17 45 views
1

我們的一個小型客戶機擁有自己的數據庫,在這個數據庫中維護着一個小型IT團隊。 有時候,這個小團隊的IT部門必須對其數據庫進行自己的修改,但有時候,他們不會驗證我們公司爲他們提供的腳本 - 並且可以根據自己的意願重新使用它們。這有時會導致重複的工作,這個團隊的成員執行與其他成員相同的腳本。防止在Oracle中發生重複作業

在我看來,即使是由我們客戶的專業人員造成的,我們有責任爲我們的客戶提供解決方案。我們如何防止這種情況發生?

我在Oracle中並沒有經驗過。我是一個JavaScript和.net開發人員,所以你可以猜測我對這個問題很迷茫。但是我想做一些超出我的範圍的事情,因爲這裏的大多數人都不擔心這一點。我們每個月都會損失很多時間修復這個數據庫;手動刪除重複項。

謝謝!

+0

通過重複的工作你的意思是調度工作或其他?看着它的另一種方式是,如果它是一個較小的客戶,並且你失去時間要麼收取更多的費用,要麼丟掉它們...... – Ben

+0

嘿@本。定時工作,是的。對不起,英文不是我的母語。 – 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

你好Jonearles。感謝這個答案;我會用這個做一些測試,並且和我的一個上級一起模擬這個錯誤。我會試着表明,這種情況是可以避免的,也許如果有人對甲骨文公司更有經驗的人進行調查,我們可以防止這種情況發生。非常感謝你!在接受你的答案之前,我會等一會兒,因爲在這種情況下可能還有其他人,或者有關如何解決這個問題的其他想法。無論如何+1! – Malavos

+0

所有的後果..我無法說服然後做出這個簡單的日誌。他們只是將腳本創建更改爲唯一的ID並清除重複項。 *嘆息*謝謝! – Malavos