This is pretty simple, but I thought I would share it since it is helpful to me. I have been preparing for a large migration which involves table, index, type, function, package, and procedure changes. When I run a big migration like this I check for invalid objects before and after the migration and attempt to recompile any that are invalid. By checking before and after the migration I know which objects the migration invalidated.
Here’s the script:
select status,count(*) from dba_objects where owner='YOURSCHEMA' group by status order by status; select 'alter '||object_type||' '||owner||'.'||object_name|| ' compile;' from dba_objects where owner='YOURSCHEMA' and status='INVALID' and object_type <> 'PACKAGE BODY' union select 'alter package '||owner||'.'||object_name||' compile body;' from dba_objects where owner='YOURSCHEMA' and status='INVALID' and object_type = 'PACKAGE BODY';
Replace “YOURSCHEMA” with the schema that your objects are in.
Output is something like this:
STATUS COUNT(*) ------- ---------- INVALID 7 VALID 53581 'ALTER'||OBJECT_TYPE||''||OWNER||'.'||OBJECT_NAME||'COMPILE;' -------------------------------------------------------------- alter FUNCTION YOURSCHEMA.YOURFUNCTION compile; alter package YOURSCHEMA.YOURPACKAGE compile body;
The counts give me a general idea of how many objects are invalid and the alters gives me sql that I can paste into a script and run to attempt to compile the objects and make them valid.
Hope this is helpful to someone else. It’s helpful to me.
– Bobby
thanks Bobby
You are welcome. I hope this post was helpful to you.
Thanks very much my brother! You helped to much!
Thanks! I am glad that it was helpful.
Bobby