1

我四处寻找我手头上的这项任务,但没有发现任何有用的东西。从软件开发的角度来看,我主要是一个对数据库有深入了解的 Java 人员。我确实对 DBA 功能有一些了解,知道什么可以做,什么不能做,但无法提出一个好的解决方案。

我的任务是比较我们的应用程序安装程序在 SQL Server 和 Oracle 中创建的数据库。

我想我已经能够在 SQL Server 中提出一些查询(当然,通过在线搜索),这些查询会给我一些信息,例如架构中的表数、每个表的列与数据类型和索引、不同类型的约束,为每个表创建的触发器等(及其计数)。如果有人感兴趣,我可以提供这些 SQL。不过,甲骨文似乎更棘手。如果有人可以提供帮助或指出正确的方向,我将不胜感激。

我正在尝试找出以下内容:

  1. 创建的表数
  2. 每个表的索引、约束(及其类型)、触发器的数量
  3. 创建的存储过程/函数的数量
  4. 创建的视图数

任何帮助将不胜感激。

谢谢你。

4

1 回答 1

0

首先,如果您已经习惯了编写 Java 代码,我不确定我是否会编写一堆 SQL 来进行此比较。JDBC 已经有一个DatabaseMetaData类,它具有getTables获取所有表的方法。这将为您提供一个可使用的 API,并让您利用这样一个事实,即编写 JDBC 驱动程序的人已经编写了所有代码来查询您正在使用的任何数据库中的数据字典表。这也将让您关注安装程序创建的对象如何被应用程序感知的差异。

如果您要编写特定的 SQL,Oracle 数据字典表很容易使用。你会关心的人会遵循这种模式[user|all|dba]_<<type of thing>>[user|all|dba]前缀表示您是在查找您拥有的对象 ( ) user、您有权访问的对象 ( all) 还是数据库中的所有对象 ( dba)。普通用户通常无权访问dba视图,因为这是一个潜在的安全问题——通常您不希望人们知道如果他们无权访问某个对象存在。在我的示例中,我将使用all对象的版本,但您可以更改alluserdba取决于您所追求的。

  • all_tables将向您显示有关您可以访问的所有表格的信息。您可能希望为owner安装程序触及的模式添加过滤器,因为您可能有权访问不属于您的应用程序的表。
  • all_indexes, all_constraints,all_triggers并将显示有关索引、约束和触发器的信息。同样,您可能希望添加一个谓词owner以将自己限制在您关心的模式中。
  • all_procedures将向您显示有关独立和包中的过程和功能的信息。
  • all_views将向您显示有关所有视图的信息。

如果你真的只是对计数感兴趣,你可以简单地去进行all_objects计数分组object_type。我猜你会想查看各种对象的属性,所以你会想去各种对象特定的视图。

于 2016-09-28T18:35:01.127 回答