2009-09-24 68 views
1

我們希望將舊數據退出Oracle倉庫。實現通用歸檔流程的最佳方式/技術

爲了給出一個非常簡單的概述,建議使用PL SQL存儲過程來開發一個過程,給定源/目錄表等參數,使用Oracle ALL_TAB_COLUMNS視圖構建一個目標表,以鏡像源表。

如果上一次運行中存在dest表,則建議的解決方案包括將源表的當前模式與目標(存檔)表進行比較,如果發現差異,則使表同步。我確信提出的功能存在侷限性,但雖然規範在這方面看起來非常雄心勃勃,但我懷疑他們是否要在PL-SQL中重新編寫Red Gate的SQL比較實用程序。

我想我有兩個問題。

1)PL/SQL真的是用於這樣的任務的正確語言。對我而言,存儲過程用於快速和快速的數據操作,而複雜的邏輯屬於我認爲更完整的客戶端語言,例如C#或其他.NET語言。我預計有一行10,000行,縮進的單存儲過程,我不得不對它進行檢查。我知道Oracle SP/Pkgs不需要那樣,但是由於某種原因,我們的開發人員在使用PL \ SQL時往往比使用.NET編寫時更少模塊化。我會歡迎你的建議和你選擇的理由。

2)是否有可用於歸檔目的的Oracle實用程序(我認爲我們在10g)?有沒有人有任何建議建議?

我會投票評論時提供任何不重複的價值。

Thx。

回答

1

你說這是一個數據倉庫。你在使用分區嗎?如果是這樣,分區方案是否標識要存檔的行?如果兩個問題的答案都是「是」,那麼partition exchange可能是您要搜索的功能。

3

首先,這聽起來像PL-SQL的任務。可以強制執行非模塊化代碼問題,使用PL-SQL將爲您提供更好的結果並且更容易編寫。

至於概念本身,如果架構將被更新,任何解決方案都會有問題 - 同步將失敗,或者更糟糕的是,它不會損壞數據。

如何讓複製服務器在主服務器上添加「刪除舊記錄」並只在離線服務器上執行插入/更新? 這將允許你有所有的數據,並保持活的一個更小。

4

PL/SQL不僅適用於「快進和快出」數據操作。有一個非常重要的應用程序構建它。對於這種任務,PL/SQL沒有任何內在的錯誤。也就是說,如果你預計在PL/SQL中編寫的10K行程序寫得不好,請不要使用它。讓程序員做他們最擅長的事情。

3

但是,你「做到了」,它需要手工完成。

RDBMS中的退休數據充滿了危險。因爲你通常不能只存檔一個表。您還需要歸檔所有依賴表。

然後是模式更改問題。不是讓您的存檔與您演變的模式保持同步,而是讓您的工具與過時的模式保持同步。這不像您可以將您當前的應用程序指向「舊數據」,並期望它可以正常工作。足夠的努力讓您的應用程序隨時掌握最新的數據,更不用說它與舊數據的合理表現。

如果你正在做數據的選擇子集,它只是更安全,更簡單,手工製作選擇和插入語句,確保完整性,檢查值等,而不是依賴某些人爲工具。它可能看起來很艱難,但它真的很乏味。

但是一旦完成,您將對導出和合並數據的方式和方式有更多的控制權。

僅僅因爲這是一個數據庫操作,所以在PL/SQL中編寫它很聰明。爲什麼要將所有數據從服務器中拖出來只是爲了將其填充回來。完成這些工作後,PL/SQL可能會有更好的整體性能。

至於確保模塊化,縮小等,那麼,這就是爲什麼發明棒球蝙蝠。

0

也許我無法正確讀取的要求,但不會簡單的

​​

就夠了?如果它已經存在,首先在dest_table上放下一個?

+0

如果目標表已存在,則不能刪除目標表,因爲它將包含所有歷史數據,歸檔數據,這些數據對於數據倉庫來說太舊了,但卻不能丟棄 – ChadD 2009-09-24 23:14:56