2009-08-11 66 views
3

我正在尋找有關如何在源代碼管理(我們使用的是Microsoft Visual Studio TFS)中最佳存儲DDL/DML和PL/SQL腳本的建議/一個內部開發的SaaS應用程序。Oracle DDL/DML腳本,源代碼管理中的PL/SQL

我們有一個由多達7位開發人員組成的團隊,他們正在開發基於相當直接的開發/主分支模型的項目。腳本之間有依賴關係(主要是執行順序)。

在類似的情況下,你有什麼成效?

+1

你見過http://stackoverflow.com/questions/706026/706596#706596和它的各種鏈接? – dpbradley 2009-08-11 20:04:37

+0

我在尋找關於組織和隨後部署腳本,處理優先級問題等方面的指導/最佳實踐,但感謝問題參考 - 我在搜索中錯過了那一個。 – 2009-08-11 22:30:41

+0

我在這個[相關的堆棧溢出帖子]中提出了一些意見(http://stackoverflow.com/questions/706026/how-do-you-work-on-oracle-packages-in-a-collaborative-version-controlled -environ/7122534#7122534) – 2011-08-19 13:55:08

回答

0

我們將DDL腳本保存在源代碼控制下,對於DML,我們使用了類似的東西:,但是我們的代碼是用Perl編寫的,所以它有些尷尬。

0

在我們的源代碼控制一條腿一個簡化的外觀將是:

\DatabasePatches 
    \Core 
    \Data 
\DatabaseSource 
    \Core 
    \SchemaA 
    \SchemaB 
    \SchemaC 

DDL工作的特定塊被寫入,並檢查下與DML /遷移核心補丁檢查了下數據的補丁。補丁標籤的一部分是一個序列號(每次手動添加10次允許未來插入補丁),因此補丁可能被稱爲「DATAPATCH01530 - 遷移xyz.sql」。

部署到新環境時,將運行所有核心修補程序,然後運行數據修補程序。如果DML對於核心補丁的下一部分很重要,那麼它可能包含在該核心補丁中。

第一次在新位置運行補丁後,文件在源代碼控制中被標記爲FINAL(我們使用PVCS並將該文件與名爲FINAL的用戶鎖定)以確保它不能被更改並導致不一致。任何其他更改都應該包含在單獨的補丁中。

存儲過程,函數,包等被保存並簽入DatabaseSource腳本。您無法保證在腳本運行之前這些對象是否被升級,所以我們通過在腳本中創建存根(例如視圖將被創建爲SELECT'1'FROM dual,包含虛擬過程)來適應這一點,以保證對象存在並允許您授予權限等。當實際對象得到提升時,它會替換存根並保留特權。

0

您可以通過LiquiBase嗅探(http://en.wikipedia.org/wiki/LiquiBase) LiquiBase是一個開源數據庫獨立庫,用於跟蹤,管理和應用數據庫更改。 (基於XML)

它具有構建系統,您可以按自己的方式訂購腳本。 所有你需要 - 只是把正確的順序包括。我認爲這應該有所幫助。

我打算用GIT版本控制來跟蹤數據庫DML,PLSQL的變化。

0

爲什麼要保留DDL腳本? 你永遠不能再次使用它們。無法將它們與生產進行比較,因此無法相信它們。 我保留DDL的唯一原因(除了聽起來像個好主意之外)就是通過將每個方案放在一個文件中來比較完整的基線。這將允許您在部署前進行差異查看更改。

我在許多項目中檢查了DDL,發現通過在源代碼簽出而不是在產品中建立更改。我們失去了變化。

DB與前端源代碼不同。人們有能力連接到數據庫並通過sql-plus或toad進行更改以解決緊急問題,並且不會將您的更改轉換爲源代碼控制。數據庫管理員可以做出改變......

在我看來它聽起來不錯,但在實踐中並不奏效。

+0

您所描述的問題正是使用正確且一致的版本控制有益的一些原因。當人們進行緊急修復時,他們仍應遵循適當的變更控制程序,並使用版本控制工具。 – Tim 2017-04-06 20:00:21

1

我們構建了一個工具,可以在Oracle數據庫中管理PL/SQL代碼(或可以使用CREATE OR REPLACE命令創建的任何其他對象)。它將Git掛鉤到Oracle數據庫。

您可以執行基本的Git任務,如提交,重置,分支,克隆,合併,拉動等等,而Gitora會自動更新數據庫中的PL/SQL代碼。

它不處理表格,所以仍然是手動任務。

我們決定讓Gitora免費提供給所有人。它將在14年12月推出。您可以註冊以獲得通知www.gitora.com