比较在 SQL Server 和 Oracle 中创建的应用程序数据库

Compare application database created in SQL Server and Oracle

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

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

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

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

  1. 创建的 table 数量
  2. 索引数、约束(及其类型)、每个 tables
  3. 的触发器
  4. 已创建procedures/functions的存储数量
  5. 创建的观看次数

任何帮助将不胜感激。

谢谢。

首先,如果您已经习惯编写 Java 代码,我不确定我是否会编写一堆 SQL 来进行此比较。 JDBC 已经有一个 DatabaseMetaData class,它有像 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 进行计数分组。我猜您会希望查看各种对象的属性,因此您会希望转到各种特定于对象的视图。