Pular para o conteúdo principal

Verificando recursivamente as constraints que levam a uma tabela

create or replace procedure recur_constraint(v_owner in varchar2,
v_table_name varchar2,
v_fk_constraint_name varchar2 default NULL,
v_r_constraint_name varchar2 default NULL,
v_r_status varchar2 default NULL,
level number default 0) is

i integer;
v_constraint_name dba_constraints.constraint_name%type;
v_status dba_constraints.status%type;

cursor c_constraint is
select owner, table_name, constraint_name, r_constraint_name, status
from dba_constraints
where dba_constraints.r_owner = v_owner
and dba_constraints.r_constraint_name = v_constraint_name
and dba_constraints.constraint_type = 'R';

begin
select constraint_name, status
into v_constraint_name, v_status
from dba_constraints
where owner = v_owner
and table_name = v_table_name
and constraint_type = 'P';

dbms_output.put_line('Level: ' || ' ' || level || ' ' || v_owner || ' ' ||
v_table_name || ' PK: ' || v_constraint_name || ' ' ||
v_status || ' FK: ' || v_fk_constraint_name ||
' -> ' || v_r_constraint_name || ' ' || v_r_status);

for c_rec in c_constraint loop
recur_constraint(c_rec.owner,
c_rec.table_name,
c_rec.constraint_name,
c_rec.r_constraint_name,
c_rec.status,
level + 1);

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

-- Testando:

sql> set serveroutput on
sql> exec dbms_output.enable(1000000);
sql> exec recur_constraint(upper('&OWNER'),upper('&TABLE_NAME'));

Comentários

Postagens mais visitadas deste blog

Assign Backup Policy for Boot and Block Volumes - OCI

To get Availability Domain oci iam availability-domain list  #!/bin/bash OCI_AD="hQsi:SA-SAOPAULO-1-AD-1" OCI_COMPARTMENT="ocid1.compartment.oc1..aaaaaaaavgyjpoffz5qliieawamjaksfb6juxejurtduclqjkvv66ookcxja" #Get Silver policy ocid funct_get_policy(){ OCI_POL_OCID=$(oci bv volume-backup-policy list | jq -r '.data[] | select(."display-name"|contains("silver"))' | jq -r '.id') } funct_boot_vol (){ #Create a file with all boot volume ocid oci bv boot-volume list --availability-domain ${OCI_AD} -c  ${OCI_COMPARTMENT} | jq -r '.data[].id' > boot-vol.txt while IFS="" read -r p || [ -n "$p" ] do   printf 'Seeting backup policy for %s\n' "$p"   oci bv volume-backup-policy-assignment create  --asset-id  $p  --policy-id ${OCI_POL_OCID} done < boot-vol.txt } funct_block_vol (){ #Create a file with all block volume ocid oci bv volume list  -c ${OCI_COMPARTMENT} | jq -r '.data[].id' ...

OHS 12c noprompt password when stop/start component

cd $OHS_DOMAIN/bin $ ./stopComponent.sh ohs1 Stopping System Component ohs1 ... Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands Reading domain from /u01/oracle/domains/ohs_domain Please enter your password : password Connecting to Node Manager ... Successfully Connected to Node Manager. Killing server ohs1 ... Successfully killed server ohs1 Successfully disconnected from Node Manager. Exiting WebLogic Scripting Tool. Done $ OHS_HOME/oracle_common/common/bin $ wlst.sh readDomain('/u01/oracle/domains/ohs_domain') ohs_domain>cd('/SecurityConfiguration/ohs_domain') set('NodeManagerUsername','weblogic') set('NodeManagerPasswordEncrypted','password') updateDomain() closeDomain() exit() $ ./startComponent.sh ohs1  Starting system Component ohs1 ... Initializing WebLogic Scripting Tool (WLST) ... Welco...

Configurar Tamanho de UNDO e tempo de RETENÇÃO (UNDO_RETENTION)

-- Tamanho Undo Atual SELECT SUM(a.bytes) "UNDO_SIZE" FROM v$datafile a, v$tablespace b, dba_tablespaces c WHERE c.contents = 'UNDO' AND c.status = 'ONLINE' AND b.name = c.tablespace_name AND a.ts# = b.ts#; -- Blocos de UNDO por Seg. SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) "UNDO_BLOCK_PER_SEC" FROM v$undostat; --Tamanho do Bloco SELECT TO_NUMBER(value) "DB_BLOCK_SIZE [KByte]" FROM v$parameter WHERE name = 'db_block_size'; -- Select calcula UNDO RETENTION SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]", SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]", ROUND((d.undo_size / (to_number(f.value) * g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]" FROM ( SELECT SUM(a.bytes) undo_size FROM v$datafile a, v$tablespace b, dba_tablespaces c WHERE c.contents = 'UNDO' ...