[oracle_br] Comunicação entre VM's
Cenário: Virtual box 5.1.8 Linux: 6.5 64 bits OEL Senhores, gostaria que me ajudassem com um probleminha que estou enfrentando. Estou tentando que duas Maquinas virtuais consigam se comunicar entre si, estou tentando montar um lab para realizar algumas tarefas com o DG. Segue o passo a passo que eu realizei: ===> Maquina virtual 1 obs: Criei a interface de rede Bridge chamada eth2hostname: oel65 [root@oel65 Desktop]# ifconfigeth1 Link encap:Ethernet HWaddr 08:00:27:B0:A3:AC inet6 addr: fe80::a00:27ff:feb0:a3ac/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:258 (258.0 b) eth2 Link encap:Ethernet HWaddr FA:D1:DB:FF:B0:F0 inet addr:20.0.0.10 Bcast:20.0.255.255 Mask:255.255.0.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:78 errors:0 dropped:0 overruns:0 frame:0 TX packets:78 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6372 (6.2 KiB) TX bytes:6372 (6.2 KiB) [root@oel65 Desktop]# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost410.0.2.15 oel65.localdomain oel6520.0.0.10 oel65.localdomain oel6520.0.0.20 db_standby.localdomain db_standby ===> Maquina Virtual 2 hostname: db_standby [root@db_standby Desktop]# ifconfigeth0 Link encap:Ethernet HWaddr 08:00:27:77:4A:ED inet6 addr: fe80::a00:27ff:fe77:4aed/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:258 (258.0 b) eth2 Link encap:Ethernet HWaddr F6:F3:31:7D:C8:84 inet addr:20.0.0.20 Bcast:20.0.255.255 Mask:255.255.0.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:86 errors:0 dropped:0 overruns:0 frame:0 TX packets:86 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7156 (6.9 KiB) TX bytes:7156 (6.9 KiB) [root@db_standby Desktop]# cat /etc/hosts127.0.0.1 localhost.localdomain localhost410.0.2.15 db_standby.localdomain db_standby20.0.0.20 db_standby.localdomain db_standby20.0.0.10 oel65.localdomain oel65 Configurações identicas para ambas as VM's NETMASK: 255.255.0.0GETWAY: 20.0.0.1DNS SERVER: 20.0.0.1 --- ==> Maquina virtual 1 [root@oel65 Desktop]# ping 20.0.0.10 -- PINGANDO PARA A MAQUINA LOCAL eth2 está OKPING 20.0.0.10 (20.0.0.10) 56(84) bytes of data.64 bytes from 20.0.0.10: icmp_seq=1 ttl=64 time=0.044 ms64 bytes from 20.0.0.10: icmp_seq=2 ttl=64 time=0.059 ms64 bytes from 20.0.0.10: icmp_seq=3 ttl=64 time=0.120 ms [root@oel65 Desktop]# ping oel65 -- USANDO O HOSTNAME DA MAQUINA LOCAL PING oel65.localdomain (10.0.2.15) 56(84) bytes of data.^C--- oel65.localdomain ping statistics ---3 packets transmitted, 0 received, 100% packet loss, time 2702ms [root@oel65 Desktop]# [root@oel65 Desktop]# ping 20.0.0.20 -- TENTANDO COMUNICACAO COM A MAQUINA VIRTUAL 2PING 20.0.0.20 (20.0.0.20) 56(84) bytes of data.From 20.0.0.10 icmp_seq=1 Destination Host UnreachableFrom 20.0.0.10 icmp_seq=2 Destination Host UnreachableFrom 20.0.0.10 icmp_seq=3 Destination Host Unreachable OBS: O mesmo comportamento acontece com a maquina virtual 2. Após não obter sucesso, o que fiz foi deletar a interface de rede eth0 de ambas as máquinas e apagar as linhas do /etc/hosts de ambas as maquinas; 10.0.2.15 db_standby.localdomain db_standby 10.0.2.15 oel65.localdomain oel65 Após isso, reiniciei ambas as máquinas. Após a mudança realizada, as configurações ficaram da seguinte maneira: MAQUINA VIRTUAL 1 [root@oel65 Desktop]# ifconfigeth1 Link encap:Ethernet HWaddr 08:00:27:B0:A3:AC inet6 addr: fe80::a00:27ff:feb0:a3ac/64 Scope:Link
Re: [oracle_br] Re: Comparar dados
Obrigado Chiappa! Em 6 de dezembro de 2016 10:45, jlchia...@yahoo.com.br [oracle_br] < oracle_br@yahoogrupos.com.br> escreveu: > > > Em termos de performance vai acabar dando no mesmo, vc vai ter que fazer > ler todos os registros da primeira tabela comparando com todos os registros > da segunda - provavelmente vc acaba pagando um precinho em termos de > performance E em termos de complexidade ao abrir vários cursores (que tem > que ser processados/loopeados, tem que ser abertos, tem que ser fechados, > etc - compare a qtdade de linhas da solução SQL-only com a sua solução) mas > não foge disso > O que eu indiquei em termos de modelo (a aplicar se fosse uma tarefa > rotineira e repetitiva) era o óbvio, ie : SE a informação estivesse na > mesma tabela vc poupa JOIN, e SE não tem como, uma opção seria vc calcular > um desvio de caracteres numa coluna virtual (via SOUNDEX, digamos) aí vc > faz o JOIN por essa coluna, que pode estar Indexada por um function index, > talvez... > > []s > > Chiappa > > > ---Em oracle_br@yahoogrupos.com.br, escreveu: > > Chiappa, > > Bom Dia > > Obrigado pelo retorno, muito bacana sua solução e já foi guardada para > posterior uso, com certeza. > Mas acabei criando uma procedure com 2 cursores, onde o primeiro lê cada > registro do segundo, pois os registros não estão na mesma linha nas > tabelas, e tudo no final se resumiu a: > > IF (UTL_MATCH.EDIT_DISTANCE_SIMILARITY (v_descricao, v_descricao2) >=85 ) > THEN > > dbms_output.put_line('PRODUTO - ' || v_descricao || ' compatível'); (claro > aqui fiz o que precisava, não só mostrar) > > END IF; > > Obrigado pela ajuda de sempre Chiappa. > > > Em 5 de dezembro de 2016 18:22, jlchia...@yahoo.com.br [oracle_br] < > oracle_br@yahoogrupos.com.br> escreveu: > > > > Colega, seguinte : em sendo esse modelo que vc propõe (ie, há um dado em > cada tabela) para poder comparar dados em tabelas diferentes vc em > princípio tem que fazer um JOIN, e para isso (salvo possibilidades como > coluna virtual computando um SOUNDEX ou coiisa do tipo) vc (já que não há > CHAVE se repetindo nas duas tabelas) vai ter que fazer uma leitura e > comparação full das duas tabelas, tipo : > > bdtest10g:SQL>create table tbl1 (c1 number, descricao1 varchar2(50)); > > Tabela criada. > > bdtest10g:SQL>create table tbl2 (c2 number, descricao2 varchar2(50)); > > Tabela criada. > > bdtest10g:SQL>insert into tbl1 values(1, 'FEIJAO UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(2, 'MACARRAO UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(3, 'ARROZ UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(4, 'CARNE KG'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl2 values(1, 'ARROZ KG'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl2 values(2, 'FAROFA PCT'); > > 1 linha criada. > > bdtest10g:SQL>commit; > > Validação completa. > > bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2 from tbl1 > t1, tbl2 t2 order by 1,3; > > C1 DESCRICAO1C2 DESCRICAO2 > -- - -- --- > 1 FEIJAO UN 1 ARROZ KG > 1 FEIJAO UN 2 FAROFA PCT > 2 MACARRAO UN1 ARROZ KG > 2 MACARRAO UN2 FAROFA PCT > 3 ARROZ UN 1 ARROZ KG > 3 ARROZ UN 2 FAROFA PCT > 4 CARNE KG 1 ARROZ KG > 4 CARNE KG 2 FAROFA PCT > > 8 linhas selecionadas. > > ==> ok ? Ou seja, cada uma das linhas da tab1 é comparada com cada uma das > linhas da tab2, dá pra ver isso acima ?? A linha 1 da tab1 foi comparada > com a linha 1 e a 2 da tab2, a linha 2 da tab1 foi comparada com a linha 1 > e 2 da tab2, assim por diante. Isso feito, agora que já tenho ambas as > colunas na íntegra para poderem ser comparadas sendo indicadas como > Argumento prea função de comparação, é simples : > > bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2, > UTL_MATCH.EDIT_DISTANCE_ SIMILARITY(t1.descricao1, t2.descricao2) DISTANCIA > from tbl1 t1, tbl2 t2 order by 1,3; > > C1 DESCRICAO1C2 DESCRICAO2 DISTANCIA > -- - -- -- - > 1 FEIJAO UN 1 ARROZ KG 12 > 1 FEIJAO UN 2 FAROFA PCT20 > 2 MACARRAO UN1 ARROZ KG 37 > 2 MACARRAO UN2 FAROFA PCT19 > 3 ARROZ UN 1 ARROZ KG 75 > 3 ARROZ UN 2 FAROFA PCT30 > 4 CARNE KG 1 ARROZ KG 50 > 4 CARNE KG 2 FAROFA PCT30 > > 8 linhas selecionadas. > > ==> Vc que adicionar uma cláusula de WHERE comparando a distância ? Entre > outros métodos, a comparação pode ser feita assim : > > bdtest10g:SQL>select * from (select t1.c1, t1.descricao1, t2.c2, > t2.descricao2, UTL_MATCH.EDIT_DISTANCE_ SIMILARITY(t1.descricao1, > t2.descricao2) DISTANCIA > 2from tbl1 t1, tbl2 t2) > 3* where distancia > 70; > >C1 DESCRICAO1 C2 > DESCRICAO2 DISTANCIA > - --
Re: [oracle_br] Re: Comparar dados
Em termos de performance vai acabar dando no mesmo, vc vai ter que fazer ler todos os registros da primeira tabela comparando com todos os registros da segunda - provavelmente vc acaba pagando um precinho em termos de performance E em termos de complexidade ao abrir vários cursores (que tem que ser processados/loopeados, tem que ser abertos, tem que ser fechados, etc - compare a qtdade de linhas da solução SQL-only com a sua solução) mas não foge disso O que eu indiquei em termos de modelo (a aplicar se fosse uma tarefa rotineira e repetitiva) era o óbvio, ie : SE a informação estivesse na mesma tabela vc poupa JOIN, e SE não tem como, uma opção seria vc calcular um desvio de caracteres numa coluna virtual (via SOUNDEX, digamos) aí vc faz o JOIN por essa coluna, que pode estar Indexada por um function index, talvez... []s Chiappa ---Em oracle_br@yahoogrupos.com.br, escreveu: Chiappa, Bom Dia Obrigado pelo retorno, muito bacana sua solução e já foi guardada para posterior uso, com certeza. Mas acabei criando uma procedure com 2 cursores, onde o primeiro lê cada registro do segundo, pois os registros não estão na mesma linha nas tabelas, e tudo no final se resumiu a: IF (UTL_MATCH.EDIT_DISTANCE_SIMILARITY (v_descricao, v_descricao2) >=85 ) THEN dbms_output.put_line('PRODUTO - ' || v_descricao || ' compatível'); (claro aqui fiz o que precisava, não só mostrar) END IF; Obrigado pela ajuda de sempre Chiappa. Em 5 de dezembro de 2016 18:22, jlchia...@yahoo.com.br mailto:jlchia...@yahoo.com.br [oracle_br] mailto:oracle_br@yahoogrupos.com.br> escreveu: Colega, seguinte : em sendo esse modelo que vc propõe (ie, há um dado em cada tabela) para poder comparar dados em tabelas diferentes vc em princípio tem que fazer um JOIN, e para isso (salvo possibilidades como coluna virtual computando um SOUNDEX ou coiisa do tipo) vc (já que não há CHAVE se repetindo nas duas tabelas) vai ter que fazer uma leitura e comparação full das duas tabelas, tipo : bdtest10g:SQL>create table tbl1 (c1 number, descricao1 varchar2(50)); Tabela criada. bdtest10g:SQL>create table tbl2 (c2 number, descricao2 varchar2(50)); Tabela criada. bdtest10g:SQL>insert into tbl1 values(1, 'FEIJAO UN'); 1 linha criada. bdtest10g:SQL>insert into tbl1 values(2, 'MACARRAO UN'); 1 linha criada. bdtest10g:SQL>insert into tbl1 values(3, 'ARROZ UN'); 1 linha criada. bdtest10g:SQL>insert into tbl1 values(4, 'CARNE KG'); 1 linha criada. bdtest10g:SQL>insert into tbl2 values(1, 'ARROZ KG'); 1 linha criada. bdtest10g:SQL>insert into tbl2 values(2, 'FAROFA PCT'); 1 linha criada. bdtest10g:SQL>commit; Validação completa. bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2 from tbl1 t1, tbl2 t2 order by 1,3; C1 DESCRICAO1C2 DESCRICAO2 -- - -- --- 1 FEIJAO UN 1 ARROZ KG 1 FEIJAO UN 2 FAROFA PCT 2 MACARRAO UN1 ARROZ KG 2 MACARRAO UN2 FAROFA PCT 3 ARROZ UN 1 ARROZ KG 3 ARROZ UN 2 FAROFA PCT 4 CARNE KG 1 ARROZ KG 4 CARNE KG 2 FAROFA PCT 8 linhas selecionadas. ==> ok ? Ou seja, cada uma das linhas da tab1 é comparada com cada uma das linhas da tab2, dá pra ver isso acima ?? A linha 1 da tab1 foi comparada com a linha 1 e a 2 da tab2, a linha 2 da tab1 foi comparada com a linha 1 e 2 da tab2, assim por diante. Isso feito, agora que já tenho ambas as colunas na íntegra para poderem ser comparadas sendo indicadas como Argumento prea função de comparação, é simples : bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2, UTL_MATCH.EDIT_DISTANCE_ SIMILARITY(t1.descricao1, t2.descricao2) DISTANCIA from tbl1 t1, tbl2 t2 order by 1,3; C1 DESCRICAO1C2 DESCRICAO2 DISTANCIA -- - -- -- - 1 FEIJAO UN 1 ARROZ KG 12 1 FEIJAO UN 2 FAROFA PCT20 2 MACARRAO UN1 ARROZ KG 37 2 MACARRAO UN2 FAROFA PCT19 3 ARROZ UN 1 ARROZ KG 75 3 ARROZ UN 2 FAROFA PCT30 4 CARNE KG 1 ARROZ KG 50 4 CARNE KG 2 FAROFA PCT30 8 linhas selecionadas. ==> Vc que adicionar uma cláusula de WHERE comparando a distância ? Entre outros métodos, a comparação pode ser feita assim : bdtest10g:SQL>select * from (select t1.c1, t1.descricao1, t2.c2, t2.descricao2, UTL_MATCH.EDIT_DISTANCE_ SIMILARITY(t1.descricao1, t2.descricao2) DISTANCIA 2from tbl1 t1, tbl2 t2) 3* where distancia > 70; C1 DESCRICAO1 C2 DESCRICAO2 DISTANCIA - -- - -- - 3 ARROZ UN1 ARROZ KG 75 bdtest10g:SQL> ok ?
Re: [oracle_br] Re: Comparar dados
Chiappa, Bom Dia Obrigado pelo retorno, muito bacana sua solução e já foi guardada para posterior uso, com certeza. Mas acabei criando uma procedure com 2 cursores, onde o primeiro lê cada registro do segundo, pois os registros não estão na mesma linha nas tabelas, e tudo no final se resumiu a: IF (UTL_MATCH.EDIT_DISTANCE_SIMILARITY (v_descricao, v_descricao2) >=85 ) THEN dbms_output.put_line('PRODUTO - ' || v_descricao || ' compatível'); (claro aqui fiz o que precisava, não só mostrar) END IF; Obrigado pela ajuda de sempre Chiappa. Em 5 de dezembro de 2016 18:22, jlchia...@yahoo.com.br [oracle_br] < oracle_br@yahoogrupos.com.br> escreveu: > > > Colega, seguinte : em sendo esse modelo que vc propõe (ie, há um dado em > cada tabela) para poder comparar dados em tabelas diferentes vc em > princípio tem que fazer um JOIN, e para isso (salvo possibilidades como > coluna virtual computando um SOUNDEX ou coiisa do tipo) vc (já que não há > CHAVE se repetindo nas duas tabelas) vai ter que fazer uma leitura e > comparação full das duas tabelas, tipo : > > bdtest10g:SQL>create table tbl1 (c1 number, descricao1 varchar2(50)); > > Tabela criada. > > bdtest10g:SQL>create table tbl2 (c2 number, descricao2 varchar2(50)); > > Tabela criada. > > bdtest10g:SQL>insert into tbl1 values(1, 'FEIJAO UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(2, 'MACARRAO UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(3, 'ARROZ UN'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl1 values(4, 'CARNE KG'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl2 values(1, 'ARROZ KG'); > > 1 linha criada. > > bdtest10g:SQL>insert into tbl2 values(2, 'FAROFA PCT'); > > 1 linha criada. > > bdtest10g:SQL>commit; > > Validação completa. > > bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2 from tbl1 > t1, tbl2 t2 order by 1,3; > > C1 DESCRICAO1C2 DESCRICAO2 > -- - -- --- > 1 FEIJAO UN 1 ARROZ KG > 1 FEIJAO UN 2 FAROFA PCT > 2 MACARRAO UN1 ARROZ KG > 2 MACARRAO UN2 FAROFA PCT > 3 ARROZ UN 1 ARROZ KG > 3 ARROZ UN 2 FAROFA PCT > 4 CARNE KG 1 ARROZ KG > 4 CARNE KG 2 FAROFA PCT > > 8 linhas selecionadas. > > ==> ok ? Ou seja, cada uma das linhas da tab1 é comparada com cada uma das > linhas da tab2, dá pra ver isso acima ?? A linha 1 da tab1 foi comparada > com a linha 1 e a 2 da tab2, a linha 2 da tab1 foi comparada com a linha 1 > e 2 da tab2, assim por diante. Isso feito, agora que já tenho ambas as > colunas na íntegra para poderem ser comparadas sendo indicadas como > Argumento prea função de comparação, é simples : > > bdtest10g:SQL>select t1.c1, t1.descricao1, t2.c2, t2.descricao2, > UTL_MATCH.EDIT_DISTANCE_SIMILARITY(t1.descricao1, t2.descricao2) > DISTANCIA from tbl1 t1, tbl2 t2 order by 1,3; > > C1 DESCRICAO1C2 DESCRICAO2 DISTANCIA > -- - -- -- - > 1 FEIJAO UN 1 ARROZ KG 12 > 1 FEIJAO UN 2 FAROFA PCT20 > 2 MACARRAO UN1 ARROZ KG 37 > 2 MACARRAO UN2 FAROFA PCT19 > 3 ARROZ UN 1 ARROZ KG 75 > 3 ARROZ UN 2 FAROFA PCT30 > 4 CARNE KG 1 ARROZ KG 50 > 4 CARNE KG 2 FAROFA PCT30 > > 8 linhas selecionadas. > > ==> Vc que adicionar uma cláusula de WHERE comparando a distância ? Entre > outros métodos, a comparação pode ser feita assim : > > bdtest10g:SQL>select * from (select t1.c1, t1.descricao1, t2.c2, > t2.descricao2, UTL_MATCH.EDIT_DISTANCE_SIMILARITY(t1.descricao1, > t2.descricao2) DISTANCIA > 2from tbl1 t1, tbl2 t2) > 3* where distancia > 70; > >C1 DESCRICAO1C2 > DESCRICAO2 DISTANCIA > - -- - > -- - > 3 ARROZ UN 1 > ARROZ KG 75 > > > bdtest10g:SQL> > > > ok ?? Nem preciso dizer. uma modelagem desse tipo está Longe de ser > Ótima , se as tabelas fosse de grande volume de dados vc Provavelmente > vai ter probs de performance > > []s > > Chiappa > >