ocidiff utility is one of my own version of DBDiff utilities. There are several key tasks in this utility, let's see how it works?
How to get the SQLs to create the missing tables? In this utility I compare the table names with a merge logic, when missing table found, I write down the table name in memory, and finally use the export (exp) utility to extract the SQLs. First export these tables with "rows=no" options from the source database, and then run import (imp) utility with "show=yes" and "indexfile=" options to get the SQL syntax, still connect to the source database, and then process the index log file, remove the tablespace clause. Because it's hard to write a function to extract the SQL syntax correctly, and the DBMS_METADATA package does not work well. So when you start to use this utility, make sure the export and import utilities are version compatible to your source database version.
How to get the missing column added? When the same tables appear in both source and target database, I will compare the columns, column order is not important. The first step is to check the column name, the second is to check the column type (include precision and scale). If missing column found then write a add column SQL. Else write a modify column SQL. However, the default value property is not copied, and all the constraints (except the not null property) is not copied also.
How to get the missing indexes fixed? This step is not smart enough, because it compare the index by name only. And the index creation SQLs may not be extracted correctly.
How to get the views fixed? If the view is missing on target or the view is in invalid status on target or the last DDL time is newer than the target database, it will be recreated. For the source (types, functions, procedures, packages, triggers), use the same logic as views.
It's seems not a official software, but it fits for us, a command line DBDiff utility.
