[oracle_br] Re: Ajuda - SQL
Diego, Bom dia Você pode tentar melhorar sua varredura pela expressão regular, fazendo com que ele só considere a primeira ocorrência do delimitador encontrado.
Re: [oracle_br] Re: Ajuda sql de monitoramento de jobs.
Chiappa, sou seu fã. De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 24 de Julho de 2013 20:16 Assunto: [oracle_br] Re: Ajuda sql de monitoramento de jobs. Colega, Absolutamente não é difícil : primeiro, talvez vc tenha pensado em GROUP BY em algum momento (agrupando por JOB_NAME), e isso TOTALMENTE NÃO se encaixa aqui : a questão é o GROUP BY *** faz um SANDUÍCHE dos n registros, agrupando os n registros do grupo numa linha só... Nessa linha vc pode ter uma CONTAGEM indicando quantos registros foram agrupados, pode ter um máximo, um mínimo, uma média, etc, MAS o fato é que a informação individual é logicamente eliminada, os N registros do grupo viraram um só Isso não sendo possível, uma opção interessante é nós (dentro dos dados ordenados por JOB_NAME), usarmos alguma alguma funcionalidade que atribua (digamos) 1 para a primeira linha do JOB_NAME sendo lido, 2 para a segunda execução, 3 para a terceira, etc, E QUE quando mudar de JOB_NAME resete a contagem Aí ficaria MUITO FÁCIL, é só perguntar no WHERE para filtrar esse número de linha dependente do JOB_NAME Tal funcionalidade existe há MITO TEMPO (desde as priscas eras do Oracle 8i), e é dada pelas funções analíticas - que, claro, servem para OUTRAS coisas também... Na verdade, sempre que vc quer processar a linha anteriormente lida - no seu caso para saber se mudou de JOB_NAME -, a primeira coisa que se pensa é em alguma função analítica... Vamos a um exemplinho (com os MEUS dados, no MEU database, que obviamente não vão ser os mesmos que o seus) : =primeiro, vamos ver os dados brutos, só ordenados : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS' order by job_name, log_date; JOB_NAME STATUS LOG_DATE - -- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:00 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 16:48:46,115000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 17:46:22,135000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 19:20:50,18 -03:00 16 linhas selecionadas. == legal : como eu falei acima, vamos Classificar , dar um número, para cada linha com o mesmo JOB_NAME : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE, RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'; JOB_NAME STATUS LOG_DATE NUM_DA_EXEC - -- --- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:001 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:002 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:003 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:004 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:005 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:006 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:007 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:008 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:009 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:001 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:002 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:003 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:004 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 16:48:46,115000 -03:005 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 17:46:22,135000 -03:006 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 19:20:50,18 -03:007 16 linhas selecionadas. = Taí, EXATAMENTE o que queríamos : o RANK indica que vc vai ter uma classificação dentro de um contador, o PARTITION BY JOB_NAME indica que o contador vai ser em cima da coluna JOB_NAME (ier, assim que mudar o JOB_NAME o
[oracle_br] Re: Ajuda sql de monitoramento de jobs.
Friendão, fico contente de poder ter ajudado, e espero ter conseguido passar um pouco de conhecimento, sempre o objetivo aqui... De resto, não esquenta : quando inventarem o whisky por e-mail, manda pra gente um 18 aninhos que tá tudo certo :).. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca raffaell.ti77@... escreveu Chiappa, sou seu fã. De: J. Laurindo Chiappa jlchiappa@... Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 24 de Julho de 2013 20:16 Assunto: [oracle_br] Re: Ajuda sql de monitoramento de jobs. Colega, Absolutamente não é difícil : primeiro, talvez vc tenha pensado em GROUP BY em algum momento (agrupando por JOB_NAME), e isso TOTALMENTE NÃO se encaixa aqui : a questão é o GROUP BY *** faz um SANDUÍCHE dos n registros, agrupando os n registros do grupo numa linha só... Nessa linha vc pode ter uma CONTAGEM indicando quantos registros foram agrupados, pode ter um máximo, um mínimo, uma média, etc, MAS o fato é que a informação individual é logicamente eliminada, os N registros do grupo viraram um só Isso não sendo possível, uma opção interessante é nós (dentro dos dados ordenados por JOB_NAME), usarmos alguma alguma funcionalidade que atribua (digamos) 1 para a primeira linha do JOB_NAME sendo lido, 2 para a segunda execução, 3 para a terceira, etc, E QUE quando mudar de JOB_NAME resete a contagem Aí ficaria MUITO FÁCIL, é só perguntar no WHERE para filtrar esse número de linha dependente do JOB_NAME Tal funcionalidade existe há MITO TEMPO (desde as priscas eras do Oracle 8i), e é dada pelas funções analíticas - que, claro, servem para OUTRAS coisas também... Na verdade, sempre que vc quer processar a linha anteriormente lida - no seu caso para saber se mudou de JOB_NAME -, a primeira coisa que se pensa é em alguma função analítica... Vamos a um exemplinho (com os MEUS dados, no MEU database, que obviamente não vão ser os mesmos que o seus) : =primeiro, vamos ver os dados brutos, só ordenados : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS' order by job_name, log_date; JOB_NAME STATUS LOG_DATE - -- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:00 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 16:48:46,115000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 17:46:22,135000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 19:20:50,18 -03:00 16 linhas selecionadas. == legal : como eu falei acima, vamos Classificar , dar um número, para cada linha com o mesmo JOB_NAME : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE, RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'; JOB_NAME STATUS LOG_DATE NUM_DA_EXEC - -- --- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:001 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:002 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:003 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:004 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:005 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:006 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:007 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:008 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:009 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:001 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:002 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:003 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:004 RLM$SCHDNEGACTION SUCCEEDED
[oracle_br] Re: Ajuda sql de monitoramento de jobs.
Rafael, Tem formas mais elegantes de fazer isto, mas rapidinho aqui eu fiz com subselect (substitua com o nome do seu job em B.JOB_NAME): select * from (SELECT rownum linha, a.* FROM ( SELECT B.LOG_ID, B.OWNER, B.JOB_NAME, B.LOG_DATE FROM dba_scheduler_job_run_details B WHERE B.JOB_NAME = 'RLM$EVTCLEANUP' AND TRUNC(B.LOG_DATE)=TRUNC(SYSDATE) ORDER BY 4 ) a ) where linha 6 Ederson Elias DBA Oracle http://br.linkedin.com/pub/ederson-elias/24/8b/8b0 Labor improbus omnia vincit --- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca raffaell.ti77@... escreveu SELECT to_char(log_date, 'DD-MON-YY HH24:MI:SS') TIMESTAMP, job_name, status, SUBSTR(additional_info, 1, 300) ADDITIONAL_INFO FROM dba_scheduler_job_run_details where owner = 'XUXA' ORDER BY log_date desc; Pessoal, eu queria que essa consulta me retornasse as últimas 5 execuções por nome do JOB. Com essa consulta ele me mostra tudo. Alguém poderia ajudar?
Re: [oracle_br] Re: Ajuda SQL
Abaixo segue select demonstrando tanto o que foi pedido quanto outras funções. SELECT NOME, AVG(TAM_ATUAL-NVL(TAM_ANTERIOR,TAM_ATUAL)) MEDIA_CRESCIMENTO,-- usado o NVL para quando for o primeiro dia o crescimento ser zero MIN(TAM_ATUAL-NVL(TAM_ANTERIOR,TAM_ATUAL)) MENOR_CRESCIMENTO,-- usado o NVL para quando for o primeiro dia o crescimento ser zero MAX(TAM_ATUAL-NVL(TAM_ANTERIOR,TAM_ATUAL)) MAIOR_CRESCIMENTO,-- usado o NVL para quando for o primeiro dia o crescimento ser zero COUNT(*) QTD_REGISTROS, MAX(DATA) ULTIMA_DATA, MIN(DATA) PRIMEIRA_DATA FROM (select A.TOTAL_USADO TAM_ATUAL, (SELECT MAX(B.TOTAL_USADO) FROM TESTE_ B WHERE B.NOME_TABLESPACE = A.NOME_TABLESPACE AND B.DATA A.DATA) TAM_ANTERIOR, A.DATA, A.NOME_TABLESPACE NOME from TESTE_ a WHERE A.DATA BETWEEN '21/01/2013' AND '25/07/2013') DADOS GROUP BY DADOS.NOME On 26/06/2013 19:13, J. Laurindo Chiappa wrote: NOME_TABLESPACEDATA TOTAL_USADO [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: Ajuda sql de monitoramento de jobs.
Colega, Absolutamente não é difícil : primeiro, talvez vc tenha pensado em GROUP BY em algum momento (agrupando por JOB_NAME), e isso TOTALMENTE NÃO se encaixa aqui : a questão é o GROUP BY *** faz um SANDUÍCHE dos n registros, agrupando os n registros do grupo numa linha só... Nessa linha vc pode ter uma CONTAGEM indicando quantos registros foram agrupados, pode ter um máximo, um mínimo, uma média, etc, MAS o fato é que a informação individual é logicamente eliminada, os N registros do grupo viraram um só Isso não sendo possível, uma opção interessante é nós (dentro dos dados ordenados por JOB_NAME), usarmos alguma alguma funcionalidade que atribua (digamos) 1 para a primeira linha do JOB_NAME sendo lido, 2 para a segunda execução, 3 para a terceira, etc, E QUE quando mudar de JOB_NAME resete a contagem Aí ficaria MUITO FÁCIL, é só perguntar no WHERE para filtrar esse número de linha dependente do JOB_NAME Tal funcionalidade existe há MITO TEMPO (desde as priscas eras do Oracle 8i), e é dada pelas funções analíticas - que, claro, servem para OUTRAS coisas também... Na verdade, sempre que vc quer processar a linha anteriormente lida - no seu caso para saber se mudou de JOB_NAME -, a primeira coisa que se pensa é em alguma função analítica... Vamos a um exemplinho (com os MEUS dados, no MEU database, que obviamente não vão ser os mesmos que o seus) : =primeiro, vamos ver os dados brutos, só ordenados : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS' order by job_name, log_date; JOB_NAME STATUS LOG_DATE - -- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:00 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:00 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 16:48:46,115000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 17:46:22,135000 -03:00 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 19:20:50,18 -03:00 16 linhas selecionadas. == legal : como eu falei acima, vamos Classificar , dar um número, para cada linha com o mesmo JOB_NAME : SYSTEM@o10gr2:SQLSELECT JOB_NAME, STATUS, LOG_DATE, RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'; JOB_NAME STATUS LOG_DATE NUM_DA_EXEC - -- --- RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:19:43,712000 -03:001 RLM$EVTCLEANUPSUCCEEDED 23/07/13 20:41:15,008000 -03:002 RLM$EVTCLEANUPSUCCEEDED 24/07/13 13:55:58,362000 -03:003 RLM$EVTCLEANUPSUCCEEDED 24/07/13 14:41:14,72 -03:004 RLM$EVTCLEANUPSUCCEEDED 24/07/13 15:41:14,803000 -03:005 RLM$EVTCLEANUPSUCCEEDED 24/07/13 16:41:14,959000 -03:006 RLM$EVTCLEANUPSUCCEEDED 24/07/13 17:41:14,106000 -03:007 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:20:49,353000 -03:008 RLM$EVTCLEANUPSUCCEEDED 24/07/13 19:41:14,698000 -03:009 RLM$SCHDNEGACTION SUCCEEDED 23/07/13 20:19:43,962000 -03:001 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 13:55:58,939000 -03:002 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 14:53:34,171000 -03:003 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 15:51:10,22 -03:004 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 16:48:46,115000 -03:005 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 17:46:22,135000 -03:006 RLM$SCHDNEGACTION SUCCEEDED 24/07/13 19:20:50,18 -03:007 16 linhas selecionadas. = Taí, EXATAMENTE o que queríamos : o RANK indica que vc vai ter uma classificação dentro de um contador, o PARTITION BY JOB_NAME indica que o contador vai ser em cima da coluna JOB_NAME (ier, assim que mudar o JOB_NAME o contador é zerado, voltando a 1 no próximo JOB_NAME), e dentro de cada JOB_NAME as linhas devem ser ordenadas por LOG_DATE, é o que o ORDER BY faz, e essa coluna com o ranking, com a
Re: [oracle_br] Re: Ajuda SQL
André, Agradeço! Ja consegui me virar usando sub-query e union. Raphael De: Andre Santos andre.psantos...@gmail.com Para: oracle_br@yahoogrupos.com.br Enviadas: Sexta-feira, 28 de Junho de 2013 14:40 Assunto: Re: [oracle_br] Re: Ajuda SQL Raphael Se quiser, posso ajudar a montar a query, usando função analítica (ao invés de proc.). Ok? [ ] André Em 27 de junho de 2013 12:12, Raphael Franco pha...@yahoo.com.br escreveu: ** Miltão, Acho que minha calc ta com defeito... rsrs. Valeu... é por ai mesmo! O unico problema é que se tiver um buraco de 3 dias, por exemplo, a media nao vai diaria. Vou tratar em uma Proc mesmo. t+ Raphael De: Milton Bastos Henriquis Jr. miltonbas...@gmail.com Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 27 de Junho de 2013 10:35 Assunto: Re: [oracle_br] Re: Ajuda SQL Há um erro bem grosso de matemática no teu e-mail! 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Na minha calculadora dá 23, e não 19,68... rs Não é mais fácil você pegar o valor da data mais recente e subtrair da data mais antiga? 25-JUN-13 604.88 27-MAY-13 553.13 604,88 - 553,13 = 51,75 Além disso, aplique a mesma conta para as próprias datas: 25/06/2013 - 27/05/2013 = (ACHO que se vc subtrair duas datas no Oracle ele vai te retornar a diferença em DIAS, o que é perfeito pra vc). Assim vc tem o número de dias e também o crescimento total. Divide o crescimento total pelo numero de dias e vc tem a média de crescimento diário. Se quiser essa média quinzenal, basta multiplicar por 15. Fui claro? Isso no select é bem fácil... GROUP BY pela tablespace, como os colegas já passaram; Pegue o MAX() e MIN() das datas; Pegue os valores dessas duas datas pra diminuir um pelo outro conforme expliquei acima. Att, Miltão http://certificacaobd.com.br 2013/6/27 Raphael Franco pha...@yahoo.com.br ** Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACE DATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas
Re: [oracle_br] Re: Ajuda SQL
Miltão, Acho que minha calc ta com defeito... rsrs. Valeu... é por ai mesmo! O unico problema é que se tiver um buraco de 3 dias, por exemplo, a media nao vai diaria. Vou tratar em uma Proc mesmo. t+ Raphael De: Milton Bastos Henriquis Jr. miltonbas...@gmail.com Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 27 de Junho de 2013 10:35 Assunto: Re: [oracle_br] Re: Ajuda SQL Há um erro bem grosso de matemática no teu e-mail! 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Na minha calculadora dá 23, e não 19,68... rs Não é mais fácil você pegar o valor da data mais recente e subtrair da data mais antiga? 25-JUN-13 604.88 27-MAY-13 553.13 604,88 - 553,13 = 51,75 Além disso, aplique a mesma conta para as próprias datas: 25/06/2013 - 27/05/2013 = (ACHO que se vc subtrair duas datas no Oracle ele vai te retornar a diferença em DIAS, o que é perfeito pra vc). Assim vc tem o número de dias e também o crescimento total. Divide o crescimento total pelo numero de dias e vc tem a média de crescimento diário. Se quiser essa média quinzenal, basta multiplicar por 15. Fui claro? Isso no select é bem fácil... GROUP BY pela tablespace, como os colegas já passaram; Pegue o MAX() e MIN() das datas; Pegue os valores dessas duas datas pra diminuir um pelo outro conforme expliquei acima. Att, Miltão http://certificacaobd.com.br 2013/6/27 Raphael Franco pha...@yahoo.com.br ** Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACE DATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [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
Re: [oracle_br] Re: Ajuda SQL
Raphael Se quiser, posso ajudar a montar a query, usando função analítica (ao invés de proc.). Ok? [ ] André Em 27 de junho de 2013 12:12, Raphael Franco pha...@yahoo.com.br escreveu: ** Miltão, Acho que minha calc ta com defeito... rsrs. Valeu... é por ai mesmo! O unico problema é que se tiver um buraco de 3 dias, por exemplo, a media nao vai diaria. Vou tratar em uma Proc mesmo. t+ Raphael De: Milton Bastos Henriquis Jr. miltonbas...@gmail.com Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 27 de Junho de 2013 10:35 Assunto: Re: [oracle_br] Re: Ajuda SQL Há um erro bem grosso de matemática no teu e-mail! 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Na minha calculadora dá 23, e não 19,68... rs Não é mais fácil você pegar o valor da data mais recente e subtrair da data mais antiga? 25-JUN-13 604.88 27-MAY-13 553.13 604,88 - 553,13 = 51,75 Além disso, aplique a mesma conta para as próprias datas: 25/06/2013 - 27/05/2013 = (ACHO que se vc subtrair duas datas no Oracle ele vai te retornar a diferença em DIAS, o que é perfeito pra vc). Assim vc tem o número de dias e também o crescimento total. Divide o crescimento total pelo numero de dias e vc tem a média de crescimento diário. Se quiser essa média quinzenal, basta multiplicar por 15. Fui claro? Isso no select é bem fácil... GROUP BY pela tablespace, como os colegas já passaram; Pegue o MAX() e MIN() das datas; Pegue os valores dessas duas datas pra diminuir um pelo outro conforme expliquei acima. Att, Miltão http://certificacaobd.com.br 2013/6/27 Raphael Franco pha...@yahoo.com.br ** Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX11-JUN-13 627.56 SYSAUX25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACEDATA TOTAL_USADO -- - --- SYSAUX27-MAY-13 553.13 SYSAUX11-JUN-13 627.56 SYSAUX25-JUN-13 604.88 SYSTEM27-MAY-13 450.94 SYSTEM11-JUN-13 459.94 SYSTEM25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são
Re: [oracle_br] Re: Ajuda SQL
Há um erro bem grosso de matemática no teu e-mail! 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Na minha calculadora dá 23, e não 19,68... rs Não é mais fácil você pegar o valor da data mais recente e subtrair da data mais antiga? 25-JUN-13 604.88 27-MAY-13 553.13 604,88 - 553,13 = 51,75 Além disso, aplique a mesma conta para as próprias datas: 25/06/2013 - 27/05/2013 = (ACHO que se vc subtrair duas datas no Oracle ele vai te retornar a diferença em DIAS, o que é perfeito pra vc). Assim vc tem o número de dias e também o crescimento total. Divide o crescimento total pelo numero de dias e vc tem a média de crescimento diário. Se quiser essa média quinzenal, basta multiplicar por 15. Fui claro? Isso no select é bem fácil... GROUP BY pela tablespace, como os colegas já passaram; Pegue o MAX() e MIN() das datas; Pegue os valores dessas duas datas pra diminuir um pelo outro conforme expliquei acima. Att, Miltão http://certificacaobd.com.br 2013/6/27 Raphael Franco pha...@yahoo.com.br ** Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACEDATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [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/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair
Re: [oracle_br] Re: Ajuda SQL
Raphael Neste caso, você pode montar uma consulta com funções analíticas. Procure pelas funções LEAD e LAG. A função AVG também aceita sintaxe/uso como função analítica (definindo uma janela e ordenação). Mas analise bem o que fará sentido, pois o que você nos explicou seria um ponto médio [(a+b)/2]... não exatamente uma média [somatória / num_ocorrências]. [ ] André Em 27 de junho de 2013 09:31, Raphael Franco pha...@yahoo.com.br escreveu: ** Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchia...@yahoo.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACEDATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [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/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ 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: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] Re: Ajuda SQL
Sim, com ABSOLUTA certeza vc não especificou adequadamente : como eu disse, GROUP BY transforma os n registros em um só, e para isso os valores distintos tem que ser agrupados também, seja somando, contando, calculando a média,mas o fato é que num GROUP BY os valores individuais são eliminados no grupo, não há como vc os acessar O que vc está diendo agora é que a sua necessidade é DIFERENTE, vc quer saber o valor inicial (o primeiro registro, ordenado por data) do grupo, o valor final do último registro do grupo (ainda ordenado por data) E fazer uma conta de menos com esses valores para saber o Crescimento... Aí é CLARO que o GROUP BY não serve para isso - quem ter a possibilidade de agrupar logicamente registros SEM eliminar valores não-chave de grupo são as funções analíticas Dá um look nas msgs recentes do grupo que tiveram algumas discussões/demonstrações e no site asktom vc acha diversos exemplos, como http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:122801500346829407#125077500346844087 ... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchiappa@... Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACE DATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: Ajuda SQL
Chiappa, eu entendo que ele pode sim usar o GROUP BY, pegando MAX(data) e MIN(data), conforme expliquei no meu e-mail... Concorda? 2013/6/27 J. Laurindo Chiappa jlchia...@yahoo.com.br ** Sim, com ABSOLUTA certeza vc não especificou adequadamente : como eu disse, GROUP BY transforma os n registros em um só, e para isso os valores distintos tem que ser agrupados também, seja somando, contando, calculando a média,mas o fato é que num GROUP BY os valores individuais são eliminados no grupo, não há como vc os acessar O que vc está diendo agora é que a sua necessidade é DIFERENTE, vc quer saber o valor inicial (o primeiro registro, ordenado por data) do grupo, o valor final do último registro do grupo (ainda ordenado por data) E fazer uma conta de menos com esses valores para saber o Crescimento... Aí é CLARO que o GROUP BY não serve para isso - quem ter a possibilidade de agrupar logicamente registros SEM eliminar valores não-chave de grupo são as funções analíticas Dá um look nas msgs recentes do grupo que tiveram algumas discussões/demonstrações e no site asktom vc acha diversos exemplos, como http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:122801500346829407#125077500346844087... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchiappa@... Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACEDATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [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/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle
[oracle_br] Re: Ajuda SQL
Não, colega : se ele pedir um SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA) GROUP BY NOME_TABLESPACE; ele vai obter a data inicial e a data final para cada grupo, okdoc, MAS como obter os valores-detalhe do grupo, ie, para cada data o TOTAL_USADO ??? Com GROUP BY vc não consegue agrupar SEM perder acesso aos detalhes, e é Justamente o detalhe não-parte da chave que ele precisa Ele conseguiria facilmente obter o resultado via GROUP BY ** SE ** e APENAS SE o objetivo dele fosse agrupar/transformar num só valor a informação detalhe, tipo : SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA), AVG(TOTAL_USADO) GROUP BY NOME_TABLESPACE; mas isso dá a média DENTRO DO GRUPO, e ele já disse em outra msg que não é isso que ele quer, ele PRECISA dos valores-detalhe dentro do grupo para calcular o crescimento - a média da utilização pura e simplesmente não o atende []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Milton Bastos Henriquis Jr. miltonbastos@... escreveu Chiappa, eu entendo que ele pode sim usar o GROUP BY, pegando MAX(data) e MIN(data), conforme expliquei no meu e-mail... Concorda? 2013/6/27 J. Laurindo Chiappa jlchiappa@... ** Sim, com ABSOLUTA certeza vc não especificou adequadamente : como eu disse, GROUP BY transforma os n registros em um só, e para isso os valores distintos tem que ser agrupados também, seja somando, contando, calculando a média,mas o fato é que num GROUP BY os valores individuais são eliminados no grupo, não há como vc os acessar O que vc está diendo agora é que a sua necessidade é DIFERENTE, vc quer saber o valor inicial (o primeiro registro, ordenado por data) do grupo, o valor final do último registro do grupo (ainda ordenado por data) E fazer uma conta de menos com esses valores para saber o Crescimento... Aí é CLARO que o GROUP BY não serve para isso - quem ter a possibilidade de agrupar logicamente registros SEM eliminar valores não-chave de grupo são as funções analíticas Dá um look nas msgs recentes do grupo que tiveram algumas discussões/demonstrações e no site asktom vc acha diversos exemplos, como http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:122801500346829407#125077500346844087... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchiappa@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACEDATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226
Re: [oracle_br] Re: Ajuda SQL
Então... Eu faria o seguinte: 1 - Usaria o MAX(data) e o MIN(data) para capturar as datas (dentro de uma subquery); 2 - Na query mais externa eu pegaria os VALORES correspondentes dessas datas extremas; 3 - tendo o valor da primeira data e o valor da última data, subtraio um valor do outro; 4 - subtraio também as próprias datas (para ver o número de dias do intervalo das duas); Pronto, tendo isso fica fácil Divido o Valor pelo Intervalo das datas e tenho o crescimento diário médio. No meu entendimento esse valor da média de crescimento não se altera (afinal, é uma média) se eu calcular todos os intervalos um por um (a cada 15 dias) ou se eu pegar o período TODO de uma vez com os valores extremos, estou errado? 2013/6/27 J. Laurindo Chiappa jlchia...@yahoo.com.br ** Não, colega : se ele pedir um SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA) GROUP BY NOME_TABLESPACE; ele vai obter a data inicial e a data final para cada grupo, okdoc, MAS como obter os valores-detalhe do grupo, ie, para cada data o TOTAL_USADO ??? Com GROUP BY vc não consegue agrupar SEM perder acesso aos detalhes, e é Justamente o detalhe não-parte da chave que ele precisa Ele conseguiria facilmente obter o resultado via GROUP BY ** SE ** e APENAS SE o objetivo dele fosse agrupar/transformar num só valor a informação detalhe, tipo : SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA), AVG(TOTAL_USADO) GROUP BY NOME_TABLESPACE; mas isso dá a média DENTRO DO GRUPO, e ele já disse em outra msg que não é isso que ele quer, ele PRECISA dos valores-detalhe dentro do grupo para calcular o crescimento - a média da utilização pura e simplesmente não o atende []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Milton Bastos Henriquis Jr. miltonbastos@... escreveu Chiappa, eu entendo que ele pode sim usar o GROUP BY, pegando MAX(data) e MIN(data), conforme expliquei no meu e-mail... Concorda? 2013/6/27 J. Laurindo Chiappa jlchiappa@... ** Sim, com ABSOLUTA certeza vc não especificou adequadamente : como eu disse, GROUP BY transforma os n registros em um só, e para isso os valores distintos tem que ser agrupados também, seja somando, contando, calculando a média,mas o fato é que num GROUP BY os valores individuais são eliminados no grupo, não há como vc os acessar O que vc está diendo agora é que a sua necessidade é DIFERENTE, vc quer saber o valor inicial (o primeiro registro, ordenado por data) do grupo, o valor final do último registro do grupo (ainda ordenado por data) E fazer uma conta de menos com esses valores para saber o Crescimento... Aí é CLARO que o GROUP BY não serve para isso - quem ter a possibilidade de agrupar logicamente registros SEM eliminar valores não-chave de grupo são as funções analíticas Dá um look nas msgs recentes do grupo que tiveram algumas discussões/demonstrações e no site asktom vc acha diversos exemplos, como http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:122801500346829407#125077500346844087... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchiappa@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data
[oracle_br] Re: Ajuda SQL
Ah sim, é o que se fazia antes das funções analíticas, acessar a(s) tabela(s) 2x : uma vez para se agrupar, e uma segunda vez (numa outer query) para buscar os detalhes que foram suprimidos na agrupação, sim é possível O que não é possível é Só e Apenas com o GROUP BY, como eu disse... E é claro, Muito Provavelmente a função analítica, por não forçar a acessar 2x a(s) tabela(s) - com Analytics no momento mesmo em que os dados estão sendo lidos a janela de agrupamento vai sendo montada - , deve ser mais performática... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Milton Bastos Henriquis Jr. miltonbastos@... escreveu Então... Eu faria o seguinte: 1 - Usaria o MAX(data) e o MIN(data) para capturar as datas (dentro de uma subquery); 2 - Na query mais externa eu pegaria os VALORES correspondentes dessas datas extremas; 3 - tendo o valor da primeira data e o valor da última data, subtraio um valor do outro; 4 - subtraio também as próprias datas (para ver o número de dias do intervalo das duas); Pronto, tendo isso fica fácil Divido o Valor pelo Intervalo das datas e tenho o crescimento diário médio. No meu entendimento esse valor da média de crescimento não se altera (afinal, é uma média) se eu calcular todos os intervalos um por um (a cada 15 dias) ou se eu pegar o período TODO de uma vez com os valores extremos, estou errado? 2013/6/27 J. Laurindo Chiappa jlchiappa@... ** Não, colega : se ele pedir um SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA) GROUP BY NOME_TABLESPACE; ele vai obter a data inicial e a data final para cada grupo, okdoc, MAS como obter os valores-detalhe do grupo, ie, para cada data o TOTAL_USADO ??? Com GROUP BY vc não consegue agrupar SEM perder acesso aos detalhes, e é Justamente o detalhe não-parte da chave que ele precisa Ele conseguiria facilmente obter o resultado via GROUP BY ** SE ** e APENAS SE o objetivo dele fosse agrupar/transformar num só valor a informação detalhe, tipo : SELECT NOME_TABLESPACE, MIN(DATA), MAX(DATA), AVG(TOTAL_USADO) GROUP BY NOME_TABLESPACE; mas isso dá a média DENTRO DO GRUPO, e ele já disse em outra msg que não é isso que ele quer, ele PRECISA dos valores-detalhe dentro do grupo para calcular o crescimento - a média da utilização pura e simplesmente não o atende []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Milton Bastos Henriquis Jr. miltonbastos@ escreveu Chiappa, eu entendo que ele pode sim usar o GROUP BY, pegando MAX(data) e MIN(data), conforme expliquei no meu e-mail... Concorda? 2013/6/27 J. Laurindo Chiappa jlchiappa@ ** Sim, com ABSOLUTA certeza vc não especificou adequadamente : como eu disse, GROUP BY transforma os n registros em um só, e para isso os valores distintos tem que ser agrupados também, seja somando, contando, calculando a média,mas o fato é que num GROUP BY os valores individuais são eliminados no grupo, não há como vc os acessar O que vc está diendo agora é que a sua necessidade é DIFERENTE, vc quer saber o valor inicial (o primeiro registro, ordenado por data) do grupo, o valor final do último registro do grupo (ainda ordenado por data) E fazer uma conta de menos com esses valores para saber o Crescimento... Aí é CLARO que o GROUP BY não serve para isso - quem ter a possibilidade de agrupar logicamente registros SEM eliminar valores não-chave de grupo são as funções analíticas Dá um look nas msgs recentes do grupo que tiveram algumas discussões/demonstrações e no site asktom vc acha diversos exemplos, como http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:122801500346829407#125077500346844087... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@ escreveu Chiappa e Rodrigo, Acho que não me expressei bem. O que eu quero é a media de crescimento das tablespaces. Ou seja, primeiro eu tenho que achar a diferença entre as 2 datas (quanto cresceu ou diminuiu): SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 627,56 - 553,13 = aumentou 74 Mbytes de 27 de maio a 11 de junho. 604,56 - 627,56 = diminuiu 19,68 Mbytes de 11 de junho a 25 de junho. Somaria os 2 resultados = 54,32 e divide por 2 (que equivale a cada 15 dias) = 27,16 Mbytes A media de crescimento da tablespace SYSAUX a cada 15 dias é de 27,16 Mbytes. att. Raphael De: J. Laurindo Chiappa jlchiappa@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 26 de Junho de 2013 19:13 Assunto: [oracle_br] Re: Ajuda SQL Pelo que entendi, o que vc quer é montar um Grupo de registros com
[oracle_br] Re: Ajuda SQL
Pelo que entendi, o que vc quer é montar um Grupo de registros com NOME_TABLESPACE como chave de grupo, nesse grupo vc terá N registros agrupados/transformados em um só (é o que o GROUP BY faz) , e para cada conjunto de registros vc quer calcular a média : sendo isso mesmo, é afaik um simples caso de : SELECT NOME_TABLESPACE, AVG(TOTAL_USADO) FROM TESTE GROUP BY NOME_TABLESPACE; okdoc ?? Ia ficar mais complexo se vc quisesse se referenciar a algum dos valores dos registros que foram agrupados (digamos, além média do do Grupo vc quer saber/quer exibir na query qual foi a menor e a maior data, digamos - isso vc não faz com GROUP BY, ele ensanduicha os N registros transformando-os num só, vc perde os detalhes)), mas como não é o caso (vc só quer saber a média do grupo, não importando nem data nem qtdade de registros agrupados), é bem simples... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Raphael Franco phadba@... escreveu Pessoal, Como estou meio enferrujado no SQL, poderiam me ajudar Tenho a seguinte tabela: SQL select * from teste; NOME_TABLESPACE DATA TOTAL_USADO -- - --- SYSAUX 27-MAY-13 553.13 SYSAUX 11-JUN-13 627.56 SYSAUX 25-JUN-13 604.88 SYSTEM 27-MAY-13 450.94 SYSTEM 11-JUN-13 459.94 SYSTEM 25-JUN-13 459.94 USERS 27-MAY-13 155.94 USERS 11-JUN-13 193.56 USERS 25-JUN-13 226 Gostaria de calcular a media de crescimento (Total_Usado) entre as datas. POr exemplo: SYSAUX 627,13 - 553,13 = 74,00 604,88 - 627,56 = -19,68 Calcula a media do resultado = (74,00)+(-19,68) / 2 = 27,16 (media) Teria como fazer isso via SQL ou terei que usar um bloco PL mesmo. vlws Raphael [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: Ajuda SQL Loader
--- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] O comando SQLLDR tenho de utilizar no prompt ou no sqlplus ??? loader é um programa-executável : C:\oraclexe\app\oracle\product\10.2.0\server\BINdir *sqlldr* O volume na unidade C não tem nome. O número de série do volume é 507A-DFA1 Pasta de C:\oraclexe\app\oracle\product\10.2.0\server\BIN 02/02/2006 00:43 450.560 sqlldr.exe 1 arquivo(s)450.560 bytes 0 pasta(s) 5.598.797.824 bytes disponíveis como tal, ele pode ser executado num prompt de comando, OU via shell script/script de comandos do teu SO, OU com a tool de digitação execução de comandos do teu SO (botão iniciar opção executar se for m$win, menu do sistema se for linux), ou similares Vc até pode executar programas externos de dentro do sqlplus, via instrução HOST, seria tipo : SQLhost pathenomedo programaquequero == MAS o plus tem limitações pra isso, eu prefiro sempre usar a linha de comandos. Preciso setar alguma coisa ??? Bom, primeiro a recomendação para performance ótima é SEMPRE que vc tenha o arquivo-texto, o controlfile e o executável do loader locais na MESMA máquina que o banco, evitando tráfego de rede excessivo... Quanto à setar, depende : SE vc só tem o banco de produto Oracle nessa máquina, certamente as vars de home, sid e path já estarão certas, não precisará de nada. Já se vc tiver algum outro produto Oracle, vc provavelmnete VAI ter várias homes (ie, vários diretórios), aí vc precisaria indicar, seria algo do tipo : C:\SET ORACLE_SID=siddobancoemquestão C:\SET ORACLE_HOME=discoepathcompletodooraclehome C:\SET PATH=%ORACLE_HOME\BIN%;%PATH% e aí sim vc chama o loader com sqlldr usuario/senha data=nomedoarq == eu NÂO passei o @hoststring justamente para ser conexão LOCAL, sim ?? E é claro, aqui usei a sintaxe de prompt de comandos win, se for unix/linux use o correspondente adequado... []s Chiappa -- 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 __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. 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
Re: [oracle_br] Re: Ajuda SQL Loader
No caso eu estou na maquina cliente e quando tento executar o SQLLDR no prompt DOS da como se o comando nao existise. Sera que eu tenho de estar na maquina servidor ??? Obrigado, Rodrigo jlchiappa [EMAIL PROTECTED] escreveu: --- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] O comando SQLLDR tenho de utilizar no prompt ou no sqlplus ??? loader é um programa-executável : C:\oraclexe\app\oracle\product\10.2.0\server\BINdir *sqlldr* O volume na unidade C não tem nome. O número de série do volume é 507A-DFA1 Pasta de C:\oraclexe\app\oracle\product\10.2.0\server\BIN 02/02/2006 00:43 450.560 sqlldr.exe 1 arquivo(s)450.560 bytes 0 pasta(s) 5.598.797.824 bytes disponíveis como tal, ele pode ser executado num prompt de comando, OU via shell script/script de comandos do teu SO, OU com a tool de digitação execução de comandos do teu SO (botão iniciar opção executar se for m$win, menu do sistema se for linux), ou similares Vc até pode executar programas externos de dentro do sqlplus, via instrução HOST, seria tipo : SQLhost pathenomedo programaquequero == MAS o plus tem limitações pra isso, eu prefiro sempre usar a linha de comandos. Preciso setar alguma coisa ??? Bom, primeiro a recomendação para performance ótima é SEMPRE que vc tenha o arquivo-texto, o controlfile e o executável do loader locais na MESMA máquina que o banco, evitando tráfego de rede excessivo... Quanto à setar, depende : SE vc só tem o banco de produto Oracle nessa máquina, certamente as vars de home, sid e path já estarão certas, não precisará de nada. Já se vc tiver algum outro produto Oracle, vc provavelmnete VAI ter várias homes (ie, vários diretórios), aí vc precisaria indicar, seria algo do tipo : C:\SET ORACLE_SID=siddobancoemquestão C:\SET ORACLE_HOME=discoepathcompletodooraclehome C:\SET PATH=%ORACLE_HOME\BIN%;%PATH% e aí sim vc chama o loader com sqlldr usuario/senha data=nomedoarq == eu NÂO passei o @hoststring justamente para ser conexão LOCAL, sim ?? E é claro, aqui usei a sintaxe de prompt de comandos win, se for unix/linux use o correspondente adequado... []s Chiappa - Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas! [As partes desta mensagem que não continham texto foram removidas] -- 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 __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. 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
[oracle_br] Re: Ajuda SQL Loader
Como eu disse, TER QUE estar no servidor vc não tem, embora isso seja ALTAMENTE recomendável por questão de performance. Ocorre que os utilitários Oracle ** não são ** obrigatórios de serem instalados nas máquinas clientes, é opcional, tranquilamente PODE SER mesmo que nessa máquina não esteja instalada, verifique o sub-diretório BIN abaixo do diretório oracle_home onde está instalado o software Oracle client dessa máquina , se vc não encontrar o executável sqlldr isso quer dizer que ele não foi instalado, se vc quiser rodar a partir dessa máquina peça pro DBA ou quem quer que esteja com os CDs de instalação que te instale ele. É claro, nesse caso vai ser uma conexão remota ao banco, então além de tudo vc TEM QUE ter o TNSNAMEs.ORA configurado, tem que ter acesso pela rede ao servidor Oracle, normal... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] escreveu No caso eu estou na maquina cliente e quando tento executar o SQLLDR no prompt DOS da como se o comando nao existise. Sera que eu tenho de estar na maquina servidor ??? Obrigado, Rodrigo jlchiappa [EMAIL PROTECTED] escreveu: --- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] O comando SQLLDR tenho de utilizar no prompt ou no sqlplus ??? loader é um programa-executável : C:\oraclexe\app\oracle\product\10.2.0\server\BINdir *sqlldr* O volume na unidade C não tem nome. O número de série do volume é 507A-DFA1 Pasta de C:\oraclexe\app\oracle\product\10.2.0\server\BIN 02/02/2006 00:43 450.560 sqlldr.exe 1 arquivo(s)450.560 bytes 0 pasta(s) 5.598.797.824 bytes disponíveis como tal, ele pode ser executado num prompt de comando, OU via shell script/script de comandos do teu SO, OU com a tool de digitação execução de comandos do teu SO (botão iniciar opção executar se for m$win, menu do sistema se for linux), ou similares Vc até pode executar programas externos de dentro do sqlplus, via instrução HOST, seria tipo : SQLhost pathenomedo programaquequero == MAS o plus tem limitações pra isso, eu prefiro sempre usar a linha de comandos. Preciso setar alguma coisa ??? Bom, primeiro a recomendação para performance ótima é SEMPRE que vc tenha o arquivo-texto, o controlfile e o executável do loader locais na MESMA máquina que o banco, evitando tráfego de rede excessivo... Quanto à setar, depende : SE vc só tem o banco de produto Oracle nessa máquina, certamente as vars de home, sid e path já estarão certas, não precisará de nada. Já se vc tiver algum outro produto Oracle, vc provavelmnete VAI ter várias homes (ie, vários diretórios), aí vc precisaria indicar, seria algo do tipo : C:\SET ORACLE_SID=siddobancoemquestão C:\SET ORACLE_HOME=discoepathcompletodooraclehome C:\SET PATH=%ORACLE_HOME\BIN%;%PATH% e aí sim vc chama o loader com sqlldr usuario/senha data=nomedoarq == eu NÂO passei o @hoststring justamente para ser conexão LOCAL, sim ?? E é claro, aqui usei a sintaxe de prompt de comandos win, se for unix/linux use o correspondente adequado... []s Chiappa - Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas! [As partes desta mensagem que não continham texto foram removidas] -- 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 __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. 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
Re: [oracle_br] Re: Ajuda SQL Loader
Verifique o SQLLDR no BIN e não tem, vou ter de rodar na maquina do servidor. Obrigado pela Ajuda. Rodrigo jlchiappa [EMAIL PROTECTED] escreveu: Como eu disse, TER QUE estar no servidor vc não tem, embora isso seja ALTAMENTE recomendável por questão de performance. Ocorre que os utilitários Oracle ** não são ** obrigatórios de serem instalados nas máquinas clientes, é opcional, tranquilamente PODE SER mesmo que nessa máquina não esteja instalada, verifique o sub-diretório BIN abaixo do diretório oracle_home onde está instalado o software Oracle client dessa máquina , se vc não encontrar o executável sqlldr isso quer dizer que ele não foi instalado, se vc quiser rodar a partir dessa máquina peça pro DBA ou quem quer que esteja com os CDs de instalação que te instale ele. É claro, nesse caso vai ser uma conexão remota ao banco, então além de tudo vc TEM QUE ter o TNSNAMEs.ORA configurado, tem que ter acesso pela rede ao servidor Oracle, normal... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] escreveu No caso eu estou na maquina cliente e quando tento executar o SQLLDR no prompt DOS da como se o comando nao existise. Sera que eu tenho de estar na maquina servidor ??? Obrigado, Rodrigo jlchiappa [EMAIL PROTECTED] escreveu: --- Em oracle_br@yahoogrupos.com.br, Rodrigo Lether [EMAIL PROTECTED] O comando SQLLDR tenho de utilizar no prompt ou no sqlplus ??? loader é um programa-executável : C:\oraclexe\app\oracle\product\10.2.0\server\BINdir *sqlldr* O volume na unidade C não tem nome. O número de série do volume é 507A-DFA1 Pasta de C:\oraclexe\app\oracle\product\10.2.0\server\BIN 02/02/2006 00:43 450.560 sqlldr.exe 1 arquivo(s)450.560 bytes 0 pasta(s) 5.598.797.824 bytes disponíveis como tal, ele pode ser executado num prompt de comando, OU via shell script/script de comandos do teu SO, OU com a tool de digitação execução de comandos do teu SO (botão iniciar opção executar se for m$win, menu do sistema se for linux), ou similares Vc até pode executar programas externos de dentro do sqlplus, via instrução HOST, seria tipo : SQLhost pathenomedo programaquequero == MAS o plus tem limitações pra isso, eu prefiro sempre usar a linha de comandos. Preciso setar alguma coisa ??? Bom, primeiro a recomendação para performance ótima é SEMPRE que vc tenha o arquivo-texto, o controlfile e o executável do loader locais na MESMA máquina que o banco, evitando tráfego de rede excessivo... Quanto à setar, depende : SE vc só tem o banco de produto Oracle nessa máquina, certamente as vars de home, sid e path já estarão certas, não precisará de nada. Já se vc tiver algum outro produto Oracle, vc provavelmnete VAI ter várias homes (ie, vários diretórios), aí vc precisaria indicar, seria algo do tipo : C:\SET ORACLE_SID=siddobancoemquestão C:\SET ORACLE_HOME=discoepathcompletodooraclehome C:\SET PATH=%ORACLE_HOME\BIN%;%PATH% e aí sim vc chama o loader com sqlldr usuario/senha data=nomedoarq == eu NÂO passei o @hoststring justamente para ser conexão LOCAL, sim ?? E é claro, aqui usei a sintaxe de prompt de comandos win, se for unix/linux use o correspondente adequado... []s Chiappa - Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas! [As partes desta mensagem que não continham texto foram removidas] - Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas! [As partes desta mensagem que não continham texto foram removidas] -- 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 __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. 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