Re: RES: RES: RES: RES: RES: [oracle_br] Re: delete
Nelson, na verdade a nota é bem específica, reportando sobre o bug "ACCESSING REMOTE OBJECT ON 10.2 DB THRU DBLINK FROM 9.2.0.7 DB FAILS", que acontecia em conexões entre 9.2.0.7 x 10.2.0.3 - ele já foi corrigido nos patchsets posteriores 9.2.0.8 e 10.2.0.4/acima ... Como o colega lá reportor que o banco 9i já está em 9.2.0.8 E o banco 11g está em 11.2.0.4, com certeza esse bugfiz já está presente... Já que a nota Oficial de compatibilidade entre client x server (nota "Client / Server Interoperability Support Matrix for Different Oracle Versions" (Doc ID 207303.1) ) confirma Suporte entre conexões 9.2.0.8 x 11.2.0.4 em princípio nós CREMOS que deveria funcionar sem probs - eu até Recomendei acesso ao Suporte, para que seja verificada a remota chance de re-raise desse bug ou de similares, mas isso em pricnípio É suportado e Não deveria acontecer aqui... A minha Suposição na situação reportada pelo colega não é de bug nem de incompatibilidade já detectada mas sim de questão local causando demora anormal : digamos, o tempo de resposta do acesso ao dicionário no banco remoto tá anormalmente alto, ou alguém/alguma coisa tá usando recurso (tabela, latch) necessário para o PL/SQL, que aí fica waiting []s Chiappa
Re: RES: RES: RES: RES: RES: [oracle_br] Re: delete
Amigo, Só uma coisa que acho que não se ligou. Conexão entre oracle 9i e 11g não são suportadas pela oracle, principalmente através de packages. Da uma olhada nesse doc id no metalink ID:340597.1 Abraços Att, Nelson Cartaxo Enviado via iPhone > Em 16 de set de 2016, às 15:15, 'Ednilson Silva' ednilson.si...@jbs.com.br > [oracle_br] escreveu: > > Chiappa, > > Segue resultados dos scripts, do Banco Origem. No Banco Destino nem chega a > abrir sessão. > > > > No 9i não existe o DBMS_STATS.gather_dictionary_stats então fui executar o > dbms_stats.gather_schema_stats('SYS'); e ocorreu erro. > > > > ERROR at line 1: > > ORA-01422: exact fetch returns more than requested number of rows > > ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 160 > > ORA-06512: at "SYS.DBMS_STATS", line 10031 > > ORA-06512: at "SYS.DBMS_STATS", line 10324 > > ORA-06512: at "SYS.DBMS_STATS", line 10378 > > ORA-06512: at "SYS.DBMS_STATS", line 10355 > > ORA-06512: at line 1 > > > > Não sei informar como esta as estatísticas do SYS, por isso pensei em > executar. Com qualquer outro usuário executa com sucesso. > > > > SQL> set linesize 132 > > SQL> SELECT a.sid, a.saddr, b.ses_addr, a.username, b.xidusn, b.used_urec, > b.used_ublk > > FROM v$session a, v$transaction b > > WHERE a.saddr = b.ses_addr; > > 23 > >SID SADDRSES_ADDR USERNAME XIDUSN > USED_UREC USED_UBLK > > -- -- -- > -- -- > > 18 6920A568 6920A568 PRODUCAO3 > 1 1 > > 12 6B206C24 6B206C24 PRODUCAO4 > 21646254 > > > > SQL> SELECT * from dba_waiters; > > > > no rows selected > > > > SQL> SELECT > > DECODE(request,0,'Holder: ','Waiter: ')||sid sess, > > id1, id2, lmode, request, type > > FROM V$LOCK > > WHERE (id1, id2, type) IN > >(SELECT id1, id2, type FROM V$LOCK WHERE request>0) > > ORDER BY id1, request; > > 234567 > > no rows selected > > > > SQL> SELECT > > 2 a.osuser || ':' || a.username UserID > > 3, a.sid || '/' || a.serial# usercode > > 4, b.lock_type Type, b.mode_held Hold > > 5, c.owner || '.' || c.object_name Object > > , ROUND(d.seconds_in_wait/60,2) WaitMin > > 67, a.program Program > > FROM > > v$session a > > 89 10, dba_locks b > > 11, dba_objects c > > 12, v$session_wait d > > 13 WHERE > > 14a.sid= b.session_id > > 15AND b.lock_type IN ('DML','DDL') > > 16AND b.lock_id1 = c.object_id > > 17AND b.session_id = d.sid > > 18 / > > > > USERID > > - > > USERCODE > TYPE > > - > -- > > HOLD > > > > OBJECT > > > >WAITMIN PROGRAM > > -- > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_MOV_TEMPORANEA_EURO > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_MOV_TEMPORANEA_EURO_AUX > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_STATUS_TEMPORANEA_EURO > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_RASTR_TEMPORANEA_EURO > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_FILA_RASTR_TEMP > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_FILA_RASTR_TEMP_HIST > > 0 > > > > :PRODUCAO > > 12/4 > DML > > Row-X (SX) > > PRODUCAO.IND_RASTR_TEMPORANEA_PER > > 0 > > > > > > 7 rows selected. > > > > SQL> select substr(username,1,12) "User", > > substr(lock_type,1,18) "Lock Type", > > substr(mode_held,1,18) "Mode Held" > >from sys.dba_lock a, v$session b > >where lock_type not in ('Media Recovery','Redo Thread')
Re: RES: RES: RES: RES: RES: [oracle_br] Re: delete
Opa : então, foi cortada a sua msg, provavelmente por causa de limite de tamanho - sobe um arquivo-texto pra algum serviço de compartilhamento de arquivos e passa o link pra gente A gente não conseguiu ver mas ** creio ** que vc executou os scripts nos ** DOIS ** bancos (nos DOIS, pois mesmo que não haja sessão sendo criada ainda nós Queremos ver os outros waits/locks/acessos/transações que possam estar havendo), no momento em que a sessão que está tentando criar a package tá em waiting/congelada, né ? Nós queremos ver Principalmente o resultado nos dois bancos de algumas execuções intervaladas daquele script para consultar sessões e seus WAITs, executadas nesse intervalo de tempo em que a sessão tentando criar a package congela... Bem, mesmo sem a info completa algumas coisas podemos comentar : => sim, poderia ser questão de estatísticas faltantes/incompletas no dicionário de dados, mas iirc na versão 9i ainda NÂO EXISTIA como vc as coletar manualmente (a DBMS_STATS.GATHER_FIXED_STATS só foi introduzida na 10g), ou mesmo (por causa de tablespace SYSTEM não criada como LMT) possa ser fragmentação NO caso, na época do 9i justamente por não termos outra opção quando tínhamos algum problema desse tipo de estatísticas o Suporte Oracle indicava algum HINT, ou te autorizava a recriar os objetos do SYS... Imagino que vc não tem Contrato de Suporte extendido ativo pra esse database 9i, pra eventualmente abrir um Chamado e solicitar atuação desse tipo do Suporte, né ? => eu vi em msgs anteriores que vc só tava botando dentro de BEGIN/END o DELETE, ie, tava usando um bloco anônimo : vc Testou colocando ao invés o DELETE num stored procedure nomeado, seja Procedure, Function ou Package ? É o mesmo sintoma ? => para tentar evitar envio de dados do banco remoto pela rede, vc já pensou em criar Lá no banco remoto uma procedure/function/package que faça o DELETE (aí, obviamente, vc não terá refereência a dblink na rotina, tudo será acesso local ao dicionário local) ? Se isso for bem, aí vc simplesmente executa no banco local a procedure remota que está criada lá no banco-remoto com um @nomedoplsql@nomedodatabaselink => teste também o HINT de DRIVING SITE, cfrme o manual 9i de Tuning , online em https://docs.oracle.com/cd/B10500_01/server.920/a96533/hintsref.htm#5699 []s Chiappa
RES: RES: RES: RES: RES: [oracle_br] Re: delete
Chiappa, Segue resultados dos scripts, do Banco Origem. No Banco Destino nem chega a abrir sessão. No 9i não existe o DBMS_STATS.gather_dictionary_stats então fui executar o dbms_stats.gather_schema_stats('SYS'); e ocorreu erro. ERROR at line 1: ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 160 ORA-06512: at "SYS.DBMS_STATS", line 10031 ORA-06512: at "SYS.DBMS_STATS", line 10324 ORA-06512: at "SYS.DBMS_STATS", line 10378 ORA-06512: at "SYS.DBMS_STATS", line 10355 ORA-06512: at line 1 Não sei informar como esta as estatísticas do SYS, por isso pensei em executar. Com qualquer outro usuário executa com sucesso. SQL> set linesize 132 SQL> SELECT a.sid, a.saddr, b.ses_addr, a.username, b.xidusn, b.used_urec, b.used_ublk FROM v$session a, v$transaction b WHERE a.saddr = b.ses_addr; 23 SID SADDRSES_ADDR USERNAME XIDUSN USED_UREC USED_UBLK -- -- -- -- -- 18 6920A568 6920A568 PRODUCAO3 1 1 12 6B206C24 6B206C24 PRODUCAO4 21646254 SQL> SELECT * from dba_waiters; no rows selected SQL> SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess, id1, id2, lmode, request, type FROM V$LOCK WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM V$LOCK WHERE request>0) ORDER BY id1, request; 234567 no rows selected SQL> SELECT 2 a.osuser || ':' || a.username UserID 3, a.sid || '/' || a.serial# usercode 4, b.lock_type Type, b.mode_held Hold 5, c.owner || '.' || c.object_name Object , ROUND(d.seconds_in_wait/60,2) WaitMin 67, a.program Program FROM v$session a 89 10, dba_locks b 11, dba_objects c 12, v$session_wait d 13 WHERE 14a.sid= b.session_id 15AND b.lock_type IN ('DML','DDL') 16AND b.lock_id1 = c.object_id 17AND b.session_id = d.sid 18 / USERID - USERCODE TYPE - -- HOLD OBJECT WAITMIN PROGRAM -- :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_MOV_TEMPORANEA_EURO 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_MOV_TEMPORANEA_EURO_AUX 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_STATUS_TEMPORANEA_EURO 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_RASTR_TEMPORANEA_EURO 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_FILA_RASTR_TEMP 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_FILA_RASTR_TEMP_HIST 0 :PRODUCAO 12/4 DML Row-X (SX) PRODUCAO.IND_RASTR_TEMPORANEA_PER 0 7 rows selected. SQL> select substr(username,1,12) "User", substr(lock_type,1,18) "Lock Type", substr(mode_held,1,18) "Mode Held" from sys.dba_lock a, v$session b where lock_type not in ('Media Recovery','Redo Thread') and a.session_id = b.sid; 23456 User Lock Type Mode Held -- -- XR Null PRODUCAO TransactionExclusive PRODUCAO JQ Exclusive PRODUCAO CU Exclusive PRODUCAO DMLRow-X (SX) PRODUCAO DMLRow-X (SX) PRODUCAO TransactionExclusive PRODUCAO DMLRow-X (SX) PRODUCAO DMLRow-X (SX) PRODUCAO DMLRow-X (SX) PRODUCAO DMLRow-X (SX) PRODUCAO DMLRow-X (SX) 12 rows selected. SQL> SQL> select substr(username,1,12) "User", substr(owner,1,8) "Owner", substr(name,1,15) "Name", substr(a.type,1,20) "Type", substr(mode