我有一個很多行的表。
爲了測試目的,我的同事也使用同一張表。問題是,他有一段時間刪除了我正在測試的行和一些時間I.
那麼在oracle中有什麼方法可以讓某些特定的行只能讀取,所以其他的不應該刪除和編輯它?使表中的行只讀在oracle上?
謝謝。
我有一個很多行的表。
爲了測試目的,我的同事也使用同一張表。問題是,他有一段時間刪除了我正在測試的行和一些時間I.
那麼在oracle中有什麼方法可以讓某些特定的行只能讀取,所以其他的不應該刪除和編輯它?使表中的行只讀在oracle上?
謝謝。
您可以創建一個防止刪除某些特定行的觸發器。
CREATE OR REPLACE TRIGGER trg_dont_delete
BEFORE DELETE
ON <your_table_name>
FOR EACH ROW
BEGIN
IF :OLD.ID in (<IDs of rows you dont want to be deleted>) THEN
raise_application_error (-20001, 'Do not delete my records!!!');
END IF;
END;
當然,你可以把它更聰明 - 使if
聲明依靠user
,或獲取記錄的ID從另一個表等
+1好的親愛的。 – Addicted
有許多不同的方法來解決這個問題。
由於Sun Tzu said,如果您和您的同事使用不會發生碰撞的數據集,那麼最好的辦法是。
例如,也許你可以在本地PC上各自擁有自己的數據庫實例;這是否適合取決於許多因素,其中最重要的是與Oracle的許可安排。或者,您可以在共享數據庫中有單獨的模式;取決於你的應用程序,你可能需要給你同義詞或特殊連接。
另一種方法:每個人都建立自己的數據集,稱爲測試夾具。這是一個很好的策略,因爲測試只有在違背已知狀態時才真正有效;如果我們對數據的存在或缺失做出假設,我們的測試結果的有效性如何?重點是,測試應該自行清理,刪除在燈具中創建的數據和運行測試。採用這種策略,您需要同意每個團隊成員的ID範圍:他們只能使用其範圍內的記錄進行測試或開發工作。
我喜歡這些各種各樣的做法,因爲他們沒有真正改變應用程序的工作方式(可以說,除了使用不同的模式和同義詞)。更嚴厲的方法可用。
如果你有企業版,您可以使用行級安全性來保護您的記錄。這是最後一點的延伸:您需要一種機制來識別您的記錄,以及一些基礎架構來識別會話中的所有權。但除了防止其他用戶ROM刪除你的數據,你也可以防止它們插入,更新或者甚至觀看這與你的ID的範圍內記錄。 Find out more。
更輕的解決方案是use a trigger as A B Cade suggests。您仍需要確定你的記錄和誰連接(因爲那時從時間到時間你仍然要刪除的記錄
最後一個策略:把你的球回家獲取表中。說明您想要它,使數據泵的出口。對於額外的鬥氣,你可以在這一點上截斷表,然後你想用你運行一個數據泵導入表的任何時間,這將重置表的狀態,消滅任何現有的數據,這只是測試腳本創建自己的數據的極端版本。
對於每個測試者的不同模式將是更好的解決方案 – kevinsky