[oracle_br] Re: Sqlloader
O sql*loader é um programa executável externo, assim como qquer outro programa executável pode ser executado a partir dum stored PL/SQL com as seguintes técnicas : - criando-se um programa daemon (ou mesmo shell script) que receba o texto do comando a executar (via pipes ou va pooling em arquivo-texto), em qquer versão do banco e/ou - via exteral procedure ou java, se banco 8i ou 9i e/ou - via scheduler, se banco 10g pesquise em http://asktom.oracle.com por cada uma das técinas, que vc acha diversos exemplos. E claro, lembro também que vc ** NÃO ** mais precisa necessariamente executar o sql*loader pra carregar/ler arquivos texto desde a versõ 9i do banco, pois passou a existir a figura da EXTERNAL TABLE, que com ela vc lê e carrega dados de um arquivo-texto SEM ter que chamr o executável do loader, pense nela como uma versão melhorada e nativa do loader... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" <[EMAIL PROTECTED]> escreveu > > Pessoa, > > Alguem sabe se existe alguma forma de chamar a execução do sqlloader via > PL/SQL? > > > -- > Atenciosamente > Francisco Porfirio Ribeiro Neto > > > [As partes desta mensagem que não continham texto foram removidas] >
[oracle_br] Re: Sqlloader
Sim, o que torna o sql*loader tão rápido é a possibilidade de inserir os dados com DIRECT=Y (ie, em APPEND-MODE), gerando apenas um mínimo de redo e undo, E a possibilidade de paralelismo (tanto na busca dos dados quanto no INSERT, ambas vc pode obter com as external tables, fazendo ALTER SESSION ENABLE PARALLEL DML e INSERT /*+ APPEND PARALLEL(T, degreedesejado) */ INTO tabelareal (select * from externaltable T), e é claro desabilitando índices na tabela real, se preciso desabilitando o PGA automático e setando manualmente sort_area_size e hash_area_size pro máximo (dando assim mais recursos pra sessão que faz a carga) []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" <[EMAIL PROTECTED]> escreveu > > Ok Chiappa obrigado. > > Só mais uma dúvida, o EXTERNAL TABLE é tão rápido quanto o sqlloader para > realziar carregamento de dados em massa? > > -- > Atenciosamente > Francisco Porfirio Ribeiro Neto > > > [As partes desta mensagem que não continham texto foram removidas] >
[oracle_br] Re: Sqlloader
Não um substituto, mas uma outra opção para se fazer o mesmo : o que ocorre é quemuita coisa que é built-in no loader, ativado bvia param apenas (como Parelelismos, controle de COMMITs/transação, carga de binários, etc, etc) na EXTERNAL TABLE exige uma pequena programação (cfrme mostrei em msg anterior), no loader não, mas de modo geral o que um faz o outro faz, e SIM, já comparei, se corretamente programada/usada a external table possui performance via de regra muito muito semelhante ao loader na maioria dos casos... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Ivan Ricardo Schuster" <[EMAIL PROTECTED]> escreveu > > Chiappa, > > voce considera external table como um substituto do loader? > Voce ja comparou a performance dos dois? > > 2008/4/12 jlchiappa <[EMAIL PROTECTED]>: > > O sql*loader é um programa executável externo, assim como qquer outro > > programa executável pode ser executado a partir dum stored PL/SQL com > > as seguintes técnicas : > > > > - criando-se um programa daemon (ou mesmo shell script) que receba o > > texto do comando a executar (via pipes ou va pooling em > > arquivo-texto), em qquer versão do banco > > > > e/ou > > > > - via exteral procedure ou java, se banco 8i ou 9i > > > > e/ou > > > > - via scheduler, se banco 10g > > > > pesquise em http://asktom.oracle.com por cada uma das técinas, que vc > > acha diversos exemplos. E claro, lembro também que vc ** NÃO ** mais > > precisa necessariamente executar o sql*loader pra carregar/ler > > arquivos texto desde a versõ 9i do banco, pois passou a existir a > > figura da EXTERNAL TABLE, que com ela vc lê e carrega dados de um > > arquivo-texto SEM ter que chamr o executável do loader, pense nela > > como uma versão melhorada e nativa do loader... > > > > []s > > > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" > > escreveu > > > > > > > > Pessoa, > > > > > > Alguem sabe se existe alguma forma de chamar a execução do sqlloader via > > > PL/SQL? > > > > > > > > > -- > > > Atenciosamente > > > Francisco Porfirio Ribeiro Neto > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > -- > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -- > > >Funções, Procedures, propostas de emprego - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > > > > > >
[oracle_br] Re: Sqlloader
Além dessas opções, você tem também o UTL_FILE, que pode ser utilizado dentro de um pl/sql para carregar esses arquivos textos. Adriano --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" <[EMAIL PROTECTED]> escreveu > > Essa minha dúvida surgiu, porque eu pensei em realizar uma procedure que eu > apenas informasse o arquivo que seria carregado, e a procedure ficaria > encarregada em chamar operações do sqlloader. > > Sendo assim, acredito que com um script shell dentro da pl/sql funciona. > > Ireie realizar alguns testes ainda com o EXTERNAL TABLE, conforme citado por > Chiappa. > > Agradeço a resposta de todos. > > > -- > Atenciosamente > Francisco Porfirio Ribeiro Neto > > > [As partes desta mensagem que não continham texto foram removidas] >
[oracle_br] Re: Sqlloader
Deixe-me entender : na tabela o campo está definido como NUMBER e vc o define como CHAR no control file, é isso ? Se sim, de repente pode estar vindo um espacinho em branco, uma vírgula ou ponto diferente do formato numérico padrão (que é o que vc usa quando pede conversão implícita , vc faz isso especificando char por number), deve ser prob do tipo. Faz o seguinte : manda um CREATE TABLE dessa tabela e umas poucas linhas desse arquivo que deram erro, que a gente pode tentar reproduzir... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Manoel" <[EMAIL PROTECTED]> escreveu > > Ola!! > Estou fazendo uma carga de dados e gero um spool de um banco para > carga em outro: > > SPOOL boger_sist_obs.txt > > > SELECT > ASSISTENTE , > CENTRAL_TECNOLOGIA , > COD_ENCERRAMENTO , > D_CRIACAO, > D_ENCERRAMENTO, > D_ENTRADA, > ID_AREA , > ID_BOLETIM , > ID_BX_CAUSA , > ID_LOCALIDADE , > ID_RESULTADO_EXAME , > TERMINAL_NUMERO , > 1, > ID > FROM sir.Boletim PARTITION (FEV2006_27_05) > where TO_CHAR(D_CRIACAO,'DD-MM-')='02-03-2006'; > exit > > porem as colunas abaixo de ID_AREA nao sao carrregas elas são > numericas : > arquivo de carga: > > sqlldr bo/[EMAIL PROTECTED] control=boger_carga_sist.ctl > data=boger_sist_obs.txt log=boger_carga_sist_obs.log > bad=boger_carga_sist_obs.b > ad discard=boger_carga_sist_obs.dsc errors= DIRECT = > TRUE > > arquivo de ctl: > > OPTIONS (BINDSIZE=1800, ROWS=5000, > ERRORS=5000) > load > data > > infile 'boger_sist_obs.txt' > > append > > into table > TB_BOLETIM_GER_AUX > FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' trailing > nullcols > (ASSISTENTE CHAR(15)TERMINATED > BY ';' , > CENTRAL_TECNOLOGIA CHAR(75) TERMINATED > BY ';' , > COD_ENCERRAMENTO CHAR(6)TERMINATED > BY ';' , > D_CRIACAO > DATE , > D_ENCERRAMENTO > DATE , > D_ENTRADA > DATE , > ID_AREA CHAR(30) TERMINATED > BY ';', > ID_BOLETIM CHAR(30) TERMINATED > BY ';' , > ID_BX_CAUSA CHAR(30) TERMINATED > BY ';' , > ID_LOCALIDADE CHAR(30) TERMINATED > BY ';' , > ID_RESULTADO_EXAME CHAR(30) TERMINATED > BY ';' , > TERMINAL_NUMERO CHAR(16) TERMINATED > BY ';' , > QTDE CHAR(10) TERMINATED > BY ';' , > ID CHAR > (30) ) > > > Alguem já teve esse tipo de problema ? > > Grato, > -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine __ Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL
Re: [oracle_br] Re: Sqlloader
Chiappa, voce considera external table como um substituto do loader? Voce ja comparou a performance dos dois? 2008/4/12 jlchiappa <[EMAIL PROTECTED]>: > O sql*loader é um programa executável externo, assim como qquer outro > programa executável pode ser executado a partir dum stored PL/SQL com > as seguintes técnicas : > > - criando-se um programa daemon (ou mesmo shell script) que receba o > texto do comando a executar (via pipes ou va pooling em > arquivo-texto), em qquer versão do banco > > e/ou > > - via exteral procedure ou java, se banco 8i ou 9i > > e/ou > > - via scheduler, se banco 10g > > pesquise em http://asktom.oracle.com por cada uma das técinas, que vc > acha diversos exemplos. E claro, lembro também que vc ** NÃO ** mais > precisa necessariamente executar o sql*loader pra carregar/ler > arquivos texto desde a versõ 9i do banco, pois passou a existir a > figura da EXTERNAL TABLE, que com ela vc lê e carrega dados de um > arquivo-texto SEM ter que chamr o executável do loader, pense nela > como uma versão melhorada e nativa do loader... > > []s > > Chiappa > --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" > <[EMAIL PROTECTED]> escreveu > > > > > Pessoa, > > > > Alguem sabe se existe alguma forma de chamar a execução do sqlloader via > > PL/SQL? > > > > > > -- > > Atenciosamente > > Francisco Porfirio Ribeiro Neto > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > -- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira > >responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -- > >Funções, Procedures, propostas de emprego - O GRUPO ORACLE_BR TEM SEU > >PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > >
Re: [oracle_br] Re: Sqlloader
Ok Chiappa obrigado. Só mais uma dúvida, o EXTERNAL TABLE é tão rápido quanto o sqlloader para realziar carregamento de dados em massa? -- Atenciosamente Francisco Porfirio Ribeiro Neto [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: Sqlloader
Essa minha dúvida surgiu, porque eu pensei em realizar uma procedure que eu apenas informasse o arquivo que seria carregado, e a procedure ficaria encarregada em chamar operações do sqlloader. Sendo assim, acredito que com um script shell dentro da pl/sql funciona. Ireie realizar alguns testes ainda com o EXTERNAL TABLE, conforme citado por Chiappa. Agradeço a resposta de todos. -- Atenciosamente Francisco Porfirio Ribeiro Neto [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: Sqlloader
-- -- TB_BOLETIM_GER_AUX (Table) -- CREATE TABLE TB_BOLETIM_GER_AUX ( ASSISTENTE VARCHAR2(7), CENTRAL_TECNOLOGIA VARCHAR2(10), COD_ENCERRAMENTO VARCHAR2(6), D_CRIACAO DATE, D_ENCERRAMENTO DATE, D_ENTRADA DATE, ID_AREA NUMBER, ID_BOLETIM NUMBER, ID_BX_CAUSA NUMBER, ID_LOCALIDADE NUMBER, ID_RESULTADO_EXAME NUMBER, TERMINAL_NUMERO VARCHAR2(8), QTDE NUMBER, ID VARCHAR2(15) ) TABLESPACE USERS PCTUSED 40 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 10K NEXT 10K MINEXTENTS 1 MAXEXTENTS 121 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT ) LOGGING NOCACHE NOPARALLEL; 037038 ;PR-TRP RA ;0261A7;02-MAR-06; ; ; 603; 220823981; 2; 6360; 15;34240270; 1;BDA-10069130 ;AL-S12 ; ;02-MAR-06;07-MAR-06;02-MAR-06; 6373; 220821756; ; 6245; ;46992540; 1;OSS-09084030 ;ER-AXE T ; ;02-MAR-06;07-MAR-06;02-MAR-06; 1273; 220821759; ; 645; ;47185904; 1;OSW-12676421 ;AL-S12 ; ;02-MAR-06;07-MAR-06;02-MAR-06; 26641; 220819537; ; 5966; ;39283284; 1;OSW-12671811 ;EQ-EWSD ; ;02-MAR-06;07-MAR-06;02-MAR-06; 6317; 220822720; ; 475; ;46581038; 1;OSS-09085404 ;EQ-EWSD ; ;02-MAR-06;07-MAR-06;02-MAR-06; 6317; 220822724; ; 475; ;46581038; 1;OSS-09085405 Quando copio esses dados pro email perde a formatação mas todos estao alinhados a direita menos as datas e ASSISTENTE , CENTRAL_TECNOLOGIA . O ultimo campo ID tem um caracter especial exemplo = OSS-09085405 Obrigado chiappa pela atençao , jlchiappa <[EMAIL PROTECTED]> escreveu: Deixe-me entender : na tabela o campo está definido como NUMBER e vc o define como CHAR no control file, é isso ? Se sim, de repente pode estar vindo um espacinho em branco, uma vírgula ou ponto diferente do formato numérico padrão (que é o que vc usa quando pede conversão implícita , vc faz isso especificando char por number), deve ser prob do tipo. Faz o seguinte : manda um CREATE TABLE dessa tabela e umas poucas linhas desse arquivo que deram erro, que a gente pode tentar reproduzir... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Manoel" <[EMAIL PROTECTED]> escreveu > > Ola!! > Estou fazendo uma carga de dados e gero um spool de um banco para > carga em outro: > > SPOOL boger_sist_obs.txt > > > SELECT > ASSISTENTE , > CENTRAL_TECNOLOGIA , > COD_ENCERRAMENTO , > D_CRIACAO, > D_ENCERRAMENTO, > D_ENTRADA, > ID_AREA , > ID_BOLETIM , > ID_BX_CAUSA , > ID_LOCALIDADE , > ID_RESULTADO_EXAME , > TERMINAL_NUMERO , > 1, > ID > FROM sir.Boletim PARTITION (FEV2006_27_05) > where TO_CHAR(D_CRIACAO,'DD-MM-')='02-03-2006'; > exit > > porem as colunas abaixo de ID_AREA nao sao carrregas elas são > numericas : > arquivo de carga: > > sqlldr bo/[EMAIL PROTECTED] control=boger_carga_sist.ctl > data=boger_sist_obs.txt log=boger_carga_sist_obs.log > bad=boger_carga_sist_obs.b > ad discard=boger_carga_sist_obs.dsc errors= DIRECT = > TRUE > > arquivo de ctl: > > OPTIONS (BINDSIZE=1800, ROWS=5000, > ERRORS=5000) > load > data > > infile 'boger_sist_obs.txt' > > append > > into table > TB_BOLETIM_GER_AUX > FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' trailing > nullcols > (ASSISTENTE CHAR(15)TERMINATED > BY ';' , > CENTRAL_TECNOLOGIA CHAR(75) TERMINATED > BY ';' , > COD_ENCERRAMENTO CHAR(6)TERMINATED > BY ';' , > D_CRIACAO > DATE , > D_ENCERRAMENTO
[oracle_br] Re: Sqlloader e triggers
Obrigado, André e Maria, Achei pelo Metalink esta informação abaixo e estou começando a ler. Com acho que pode ser útil para outros, estou disponibilizando. Atenciosamente, Pedro. -- Direct Loads, Integrity Constraints, and Triggers - With the conventional path load method, arrays of rows are inserted with standard SQL INSERT statements--integrity constraints and insert triggers are automatically applied. But when you l oad data with the direct path, SQL*Loader disables some integrity constraints and all database triggers. This section discusses the implications of using direct path loads with respect to these features. Integrity Constraints - During a direct path load, some integrity constraints are automatically disabled. Others are not. For a description of the constraints, see the information on maintaining data integrity in the Oracle9i Application Developer's Guide - Fundamentals. Enabled Constraints --- The constraints that remain in force are: NOT NULL UNIQUE PRIMARY KEY (unique-constraints on not-null columns) NOT NULL constraints are checked at column array build time. Any row that viol ates the NOT NULL constraint is rejected. UNIQUE constraints are verified when indexes are rebuilt at the end of the load. The index will be left in an Index Unusable state if a violation of a UNIQUE constraint is detected. See Indexes Left in an Unusable State. Disabled Constraints During a direct path load, the following constraints are automatically disabled by default: CHECK constraints Referential constraints (FOREIGN KEY) You can override the disabling of CHECK constraints by specifying the EVALUATE_CHECK_CONSTRAINTS clause. SQL*Loader will then evaluate CHECK constraints during a direct path load. Any row that violates the CHECK constraint is rejected. ... Database Insert Triggers Table insert triggers are also disabled when a direct path load begins. After the rows are loaded and indexes rebuilt, any triggers that were disabled are automatically reenabled. The log file lists all triggers that were disabled for the load. There should not be any errors reen abling triggers. Unlike integrity constraints, insert triggers are not reapplied to the whole table when they are enabled. As a result, insert triggers do not fire for any rows loaded on the direct path. When using the direct path, the application must ensure that any behavior associated with inser t triggers is carried out for the new rows. Replacing Insert Triggers with Integrity Constraints Applications commonly use insert triggers to implement integrity constraints. Most of these application insert triggers are simple enough that they can be replaced with Oracle's automatic integrity constraints. When Automatic Constraints Cannot Be Used - Sometimes an insert trigger cannot be replaced with Oracle's automatic integrity constraints. For example, if an integrity check is implemented with a table lookup in an insert trigger, then automatic check constraints cannot be used, because the automatic constraints can only reference constants and columns in the current row. This section describes two methods for duplicat ing the effects of such a trigger. Preparation --- Before either method can be used, the table must be prepared. Use the following general guidelines to prepare the table: Before the load, add a 1-byte or 1-character column to the table that marks rows as "old data" or "new data." Let the value of null for this column signify "old data," because null columns do not take up space. When loading, flag all loaded rows as "new data" with SQL*Loader's CONSTANT parameter. After following this procedure, all newly loaded rows are identified, making it possible to operate on the new data without affecting the old rows. Using an Update Trigger --- Generally, you can use a database update trigger to duplicate the effects of an insert trigger. This method is the simplest. It can be used whenever the insert trigger does not raise any exceptions. Create an update trigger that duplicates the effects of the insert trigger. Copy the trigger. Change all occurrences of "new.column_name" to "old.column_name". Replace the current update trigger, if it exists, with the new one. Update the table, changing the "new data" flag to null, thereby firing the update trigger. Restore the original update trigger, if there was one. Depending on the behavior of the trigger, it may be necessary to have exclusive update access to the table during this operation, so that other users do not inadvertently apply the trigger to rows they modify. -- --- Em oracle_br@yahoogrupos.com.b
[oracle_br] Re: SQLLoader para importar, e o que para exportar?
Sim, spool via sql*plus é a alternativa default : quanto á performance, na verdade , 500 mil linhas é café pequeno num banco Oracle ** decente **, otimizado, com um hardware de servidor (** não sendo ** portanto o PCzinho com discos IDE ;), usando o sql*plus CORRETAMENTE (ie, conexão LOCAL, SEM perder tempo exibindo a informação na tela do plus), etc... Segue meu teste na máquina de desenvolvimento : SQL> select count(*) from usu.TAB_SIS_REC_INE; COUNT(*) -- 1368807 sid=srv_dev:srv_dev:/home/oracle>cat teste_spool.sql set term off feedback off verify off pages 0 lines 500 trimspool on head off spool sai.txt select TICKET_RETORNO_RECH_ID, FECHA_LLAMADA, NOMBRE_ARCHIVO from usu.TAB_SIS_REC_INE; spool off exit sid=srv_dev:srv_dev:/home/oracle>date Thu Aug 4 10:29:12 BRA 2005 sid=srv_dev:srv_dev:/home/oracle>nohup sqlplus usu/usu @teste_spool.sql & [1] 5077 sid=srv_dev:srv_dev:/home/oracle>Sending output to nohup.out sid=srv_dev:srv_dev:/home/oracle>ls -ltr -rw-r- 1 oracle dba194 Jul 20 14:53 2.sql -rw-r- 1 oracle dba194 Aug 4 10:28 teste_spool.sql -rw--- 1 oracle dba439 Aug 4 10:30 nohup.out -rw-r--r-- 1 oracle dba104032413 Aug 4 10:30 sai.txt sid=srv_dev:srv_dev:/home/oracle>wc -l sai.txt 1368807 sai.txt Ou seja, alguns minutos pra descarregar mais de um milhão, serve ?? Tudo bem que a máquina estava "parada", o pessoal não está no momento testando nada grande, e é uma máquina boa (4 CPUs, com discos RAID0+1), e que o SELECT aqui usado é simples, tá, mas mesmo assim 500 mil linhas o absolutamente NÂO É caso pra demorar mais que uns 20 minutos, e isso se a máquina estiver em produção pesada, acho eu. Mais que isso, vc TEM problemas aí, acho eu... ==>> LOGICAMENTE, o plus tem limitações (entre elas os fatos que só pode gravar um arquivo por vez, que não é uma aplicação multi- thread), então se vc esbarrar nessas limitações aí vc deve escrever uma rotina pra isso, o programa pro*c mostrado em http://asktom.oracle.com/pls/ask/f? p=4950:8:F4950_P8_DISPLAYID:459020243348 é um bom início, eu já o usei com sucesso também, C quase sempre tem mesmo uma performance muito boa em I/O. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Maurício Bertolucci <[EMAIL PROTECTED]> escreveu > Senhores, bom dia, > > Em uma maquina client Oracle 9i, eu tenho o recurso SQL Loader para "subir" um arquivo texto muito rapidamente para o banco, agora qual o recurso disponivel que eu tenho para fazer o contrario, quero gerar um arquivo texto no client... somente o spool do sqlplus??? Ele eh muito lento naum...? A tabela que quero "exportar" possui media de 500 mil linhas.. > > Alguma ideia? > > Muito Obrigado, > > Mauricio > > [As partes desta mensagem que não continham texto foram removidas] __ Histórico: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ Falar com os Moderadores:([EMAIL PROTECTED]) Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar __ Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html