2016-09-28 55 views
1

我環顧四周,找到了我手中的任務,但沒有發現任何有用的信息。從軟件開發的角度來看,我主要是一個對數據庫具有豐富知識的Java人。我確實有一些DBA功能的知識,可以做什麼,不可以做什麼,但不能提出一個好的解決方案。比較在SQL Server和Oracle中創建的應用程序數據庫

我的任務是比較我們的應用程序安裝程序在SQL Server和Oracle中創建的數據庫。

我想我已經能夠在SQL Server中想出一些查詢(當然,通過在線搜索),它會給我像架構中表的數量,每個表的列中包含數據類型和索引,不同的列爲每個表創建的約束類型,觸發器等(以及它們的計數)。如果有人感興趣,我可以提供這些SQL。然而,甲骨文似乎更棘手。如果有人能夠幫助或者指引我朝着正確的方向,我將不勝感激。

我試圖找出出頭類似以下內容:

  1. 表數創建
  2. 索引數,約束(以及它們的類型),觸發器爲每個表的
  3. 號碼存儲的過程/函數創建
  4. 創建

任何幫助將不勝感激瀏覽次數: d。

謝謝。

回答

0

首先,如果您已經習慣了編寫Java代碼,我不確定我會寫一堆SQL來做這個比較。 JDBC已經有一個DatabaseMetaData類,它有類似getTables的方法來獲取所有表。這會給你一個API來處理,並讓你利用這個事實,編寫JDBC驅動程序的人已經編寫了所有的代碼來查詢你使用的任何數據庫中的數據字典表。這也可以讓您專注於應用程序感知安裝程序創建的對象的差異。

如果您要編寫特定的SQL,Oracle數據字典表非常易於使用。那些你會關心的將會遵循[user|all|dba]_<<type of thing>>的模式。前綴[user|all|dba]指示您是在查找您擁有的對象(user),您有權訪問的對象(all)或數據庫中的所有對象(dba)。普通用戶通常無法訪問dba視圖,因爲這是一個潛在的安全問題 - 通常您不希望人們知道對象存在,如果他們無法訪問它。在我的示例中,我將使用all版本的對象,但您可以將all更改爲userdba,具體取決於您的操作。

  • all_tables將向您顯示您有權訪問的所有表的信息。您可能需要在owner上爲您的安裝程序涉及的模式添加過濾器,因爲您可能有權訪問不屬於您的應用程序的表。
  • all_indexesall_constraintsall_triggers將向您顯示有關索引,約束和觸發器的信息。再次,您可能需要在owner上添加一個謂詞,以將自己限制爲您關心的模式。
  • all_procedures將向您顯示有關獨立程序和程序包中的程序和功能的信息。
  • all_views會告訴你關於所有視圖的信息。

如果你真的只是計數感興趣,你可以簡單地去all_objects,做一個計數分組通過object_type。我猜你會想看到各種對象的屬性,所以你想要去各種對象特定的視圖。

+0

謝謝賈斯汀,非常感謝!這幾乎是我所期待的。 – Gauzy