Pular para o conteúdo principal

Mostrando Recursivamente as dependencias ou o reverso: quais objetos são dependes de...

Em alguns casos, você quer saber quais são as dependências de um objeto, por exemplo:
- O que acontece se recompilar o objeto em questão
- Objetos que evitam a compilação do objeto em questão (exemplo: data-dictionary e objeto no esquema errado)

Uma outra questão pode ser que os objetos são dependentes de um objeto específico (dependências reversa), por exemplo:
- Objetos que serão invalidados caso eu dropar objeto em questão.
- Qual é a dependência em cascata para este objeto específico.

Como a view dba_dependencies não tem as informações necessárias podemos utilizar as procedures abaixo (Lembre que para compilar, é necessário grant nas views dba_dependencies e dba_objects)


-- Mostrar dependencias de um objeto:

create or replace procedure denilson.recur_object(v_owner in varchar2,
v_object_name varchar2,
v_object_type varchar2,
level number default 0) is
cursor c_depen is
select referenced_owner, referenced_name, referenced_type
from sys.dba_dependencies
where dba_dependencies.owner = v_owner
and dba_dependencies.name = v_object_name
and dba_dependencies.type = v_object_type;
i integer;
object_id dba_objects.object_id%type;
datum varchar2(25);
time_stamp dba_objects.timestamp%type;
v_status dba_objects.status%type;
begin
select object_id,
to_char(last_ddl_time, 'dd-mon-yyyy hh24:mi:ss'),
timestamp,
status
into object_id, datum, time_stamp, v_status
from sys.dba_objects
where dba_objects.owner = v_owner
and dba_objects.object_name = v_object_name
and dba_objects.object_type = v_object_type;
dbms_output.put_line('Level: ' || ' ' || level || ' ' || object_id || ' ' ||
v_owner || ' ' || v_object_name || ' ' ||
v_object_type || ' ' || datum || ' ' || time_stamp || ' ' ||
v_status);
for c_rec in c_depen loop
recur_object(c_rec.referenced_owner,
c_rec.referenced_name,
c_rec.referenced_type,
level + 1);
end loop;
exception
when no_data_found then
dbms_output.put_line('No record found for: ' || ' ' || v_owner || ' ' ||
v_object_name || ' ' || v_object_type);
end;
/

-- Testando:
sql> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
sql> set linesize 256sql> set trimspool onsql> set serveroutput onsql> exec dbms_output.enable(1000000);

exec recur_object(upper('&owner'),upper('&object_name'),upper('&object_type'));



-- -- Mostrar dependencias para um objeto:

create or replace procedure denilson.recur_object_reverso(v_owner in varchar2,
v_object_name varchar2,
v_object_type varchar2,
level number default 0) is
cursor c_depen_reverse is
select owner, name, type
from dba_dependencies
where dba_dependencies.referenced_owner = v_owner
and dba_dependencies.referenced_name = v_object_name
and dba_dependencies.referenced_type = v_object_type;

i integer;
object_id dba_objects.object_id%type;
datum varchar2(25);
time_stamp dba_objects.timestamp%type;
v_status dba_objects.status%type;
begin
select object_id,
to_char(last_ddl_time, 'dd-mon-yyyy hh24:mi:ss'),
timestamp,
status
into object_id, datum, time_stamp, v_status
from dba_objects
where dba_objects.owner = v_owner
and dba_objects.object_name = v_object_name
and dba_objects.object_type = v_object_type;

dbms_output.put_line('Level: ' || ' ' || level || ' ' || object_id || ' ' ||
v_owner || ' ' || v_object_name || ' ' ||
v_object_type || ' ' || datum || ' ' || time_stamp || ' ' ||
v_status);

for c_rec in c_depen_reverse loop
recur_object_reverse(c_rec.owner, c_rec.name, c_rec.type, level + 1);

end loop;
exception
when no_data_found then
dbms_output.put_line('No record found for: ' || ' ' || v_owner || ' ' ||
v_object_name || ' ' || v_object_type);
end;
/

-- Testando:sql> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';sql> set linesize 256sql> set trimspool onsql> set serveroutput onsql> exec dbms_output.enable(1000000);sql> exec recur_object_reverse(upper('&owner'),upper('&object_name'),upper('&object_type'));

-- Mostra todas as dependencias recursivamente no schema:

create or replace procedure recur_owner(v_owner in varchar2) is
cursor c_obj is
select object_name, object_type
from dba_objects
where dba_objects.owner = v_owner
order by object_name, object_type;
begin
for c_rec in c_obj loop
dbms_output.put_line('.');
recur_object(v_owner, c_rec.object_name, c_rec.object_type);
end loop;
end;
/

-- Testando:
sql> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';sql> set linesize 256sql> set trimspool onsql> set serveroutput onsql> exec dbms_output.enable(1000000);sql> exec recur_owner(upper('&owner'));

Comentários

  1. Realmente muito útil... só algo que percebi, posso estar errado, mas quando as dependências em uma procedure encontra-se dentro de um CURSOR ele não identifica, correto?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Webcenter Content - Cache Configuration for JdbcFileStore configuration

The configuration values below, control the temporarily cached files keep in FileCache table. FsCacheThreshold Specifies the maximum cache size, in megabytes (default=100) Once the threshold is met, Content Server starts deleting files that are older than the minimum age, as specified by the FsMinimumFileCacheAge parameter FsMaximumFileCacheAge The age at which files are deleted, expressed in days. The default is 365 days FsMinimumFileCacheAge The minimum age at which cached files can be deleted This parameter is used in conjunction with the FsCacheThreshold parameter to determine when to delete cached files FsCleanUpCacheDuringIndexing This parameter activates vault cache cleaning, while FsCacheThreshold, FsMaximumFileCacheAge and FsMinimumFileCacheAge are controling its behaviour.  Expect, when this is enabled on a system that currently has a large number of files in the FileCache table, the first cycle will take a long time to complete. How to Confi...

How to Disable WebLogic Server Diagnostic Framework (WLDF)

[weblogic@yourhost ]$ cd $MW_HOME/oracle_common/common/bin/ [weblogic@yourhost bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline> connect('weblogic','password','t3://host_ip:port') Connecting to t3://xx.xx.xx.xx:7001 with userid weblogic ... Successfully connected to Admin Server "AdminServer" that belongs to domain "WeblogicDomain". Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/WeblogiDomain/serverConfig/> edit() Location changed to edit tree. This is a writable tree with DomainMBean as the root. To make changes you will need to start an edit session via startEdit(). For more help, use help('edit'). wls:/WeblogiDomain/edit/> startEdit() Starting an edit session ... Started edit session, be sure...

Recompile JSP EBS - R12.2

1. Backup $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/ $ mv _pages _pages_old 2. Stop services cd $ADMIN_SCCRIPTS_HOME ./adapcctl.sh stop ./admanagedsrvctl.sh stop oafm_server1 ./admanagedsrvctl.sh stop oacore_server1 3. Compile the jsps manually  cd $FND_TOP/patch/115/bin/ perl $FND_TOP/patch/115/bin/ojspCompile.pl --compile --flush -p             4. Checking $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/_pages $ ls -ltr  5. Start services cd $ADMIN_SCCRIPTS_HOME ./admanagedsrvctl.sh start oacore_server1 ./admanagedsrvctl.sh start oafm_server1 ./adapcctl.sh start 6. Clear your web browser cache