2016-09-28 34 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