Re: [oracle_br] Re: enq: HW - contention

2014-05-08 Por tôpico jlchiappa
A questão dos LOBs é que embora eles realmente tenham limites máximos 
altíssimos, as linguagens utilizadas no RDBMS (ie, SQL e PL/SQL) possuem 
limites menores para o tanto de informação que conseguem enviar/receber do 
database de uma só vez (varia de acordo com a versão, mas normalmente é de 4000 
bytes para SQL e 32767 para PL/SQL) : assim sendo, vc tem que ** quebrar ** a 
informação a receber/enviar de/para os seus LOBs em pedaços de tamanho 
adequado, okdoc ? Portanto sim, vc pode ter trocentros gigabytes no teu LOB no 
total, mas lidos/gravados de 4000 em 4000 bytes de cada vez (ou de 32767 em 
32767 bytes de cada vez, se for PL/SQL) certo ?
 Em cima disso,  o que o Analista está supondo pelo que entendi é que a tua 
aplicação está usando as APIs da linguagem SQL e por falha de programação em 
alguns casos ao invés de enviar pro banco pedaços de 4000 bytes está enviando 
pedaços de 4001 bytes, E por bug do RDBMS ao invés de rejeitar o pedaço de 
comprimento inválido ele está dando ORA-600, é isso Se for uma aplicação 
desenvolvida in-house, Confirme com os programadores se eles estão usando a 
metodologia apropriada ao trabalhar com LOBs, enviando um pedaço de cada vez da 
informação, E se for aplicação de fornecedor, acione o Suporte do fornecedor 
para verificar se eles tem notícia de bug desse tipo na Aplicação Outra 
ação que pode ser MUITO esclarecedora é vc pedir um TRACE (sem tkprof, só o 
trace bruto) de uma execução e enviar isso pro Suporte - lá fica registrado 
direitinho cada operação que a aplicação fez no banco - , ou mesmo (com a Ajuda 
do Suporte Oracle) ativar um evento que gere dump na inserção de um LOB Com 
essas ações vc Comprova ou Rejeita a Suposição do analista da Oracle...
 
 []s
 
   Chiappa
   
 OBS : outra coisa que vc pode fazer é testar por corrupção nesses LOBs - 
procure no metalink por LOB CORRUPTION que vc acha algumas notas com 
procedimentos para isso.
 

---Em oracle_br@yahoogrupos.com.br, raffaell.t...@yahoo.com escreveu:

 Chiappa, obrigado pelas ficas, ja homologuei o procedimento no database de 
homologação do SECURE FILES, enquanto isso recebi uma resposta do Suporte da 
Oracle no qual fiquei sem entender, poderia me ajudar? Eles falaram o seguinte:
  
 From the supplied trace files here, this looks to be a problem in the 
application code, in that it is attempting to update a column with a value 
greater than the maximum defined length of the column. For example, we see the 
failing statement as:
  
 UPDATE TABELA_XUXA
SET DTEXP = :DTEXP
, DTIMP = :DTIMP
, INDEXP = :INDEXP
, INDIMP = :INDIMP
, TXT = :TXT
, TXTWORD = :TXTWORD
, TXTPDF = :TXTPDF
WHERE CODDOC = :CODDOC
AND NUMSEQ = :NUMSEQ
AND CODLOCALRESP = :CODLOCALRESP
  
 In the bind values for this we see bind number 4 which equates to the 'TXT' 
column as being defined as a VARCHAR2 of length 4000 bytes, but the actual bind 
variable length is 4001 bytes, and so this overflows the column and hence 
corrupts the subsequent lob column. Therefore you need to correct the 
application code so that it uses a character value of 4000 bytes or less.
  
  
 Eu dei um desc na tabela_XUXA e a mesma me trouxe o seguinte:
  
  Name  Null?Type
 -  

 CODDOCNOT NULL NUMBER(10)
 NUMSEQNOT NULL NUMBER(4)
 TXTCLOB
 TXTWORDBLOB
 CODLOCALRESP  NOT NULL NUMBER(4)
 DTEXP  DATE
 DTIMP  DATE
 INDEXP VARCHAR2(1)
 INDIMP VARCHAR2(1)
 TXTPDF BLOB
 INDVOTOVISTA   VARCHAR2(1)
 INDVOTOCONDUTORVARCHAR2(1)
  
  
 O campo TXT é CLOB, e não VARCHAR2 como o atendente da Oracle falou acima, e o 
tamanho máximo suportado por uma coluna do tipo CLOB e BLOB é de 8TB, me 
corrijam se estiver errado. Não sei se esse exemplo que o rapaz deu, é um 
exemplo fictício para tentar demonstrar o que está ocorrendo, mas se tratando 
de um campo LOB, acho difícil alguém conseguir atualizar um dado maior do que 
uma coluna do tipo LOB suporta.
  
  
  
  
 Em Quarta-feira, 7 de Maio de 2014 14:14, jlchia...@yahoo.com.br 
jlchia...@yahoo.com.br escreveu:
 
   Bom, eu acho que vc tem duas questões diferentes em mãos - causalmente 
aconteceram no mesmo timeframe, mas pode muito bem ser que não estejam 
relacionadas com causa e efeito, ie : que o ORA-600 foi foi causado por 

Re: [oracle_br] Re: Preço Rotina de backup

2014-05-08 Por tôpico jlchiappa
Marcelo, funciona assim : na nossa área de TI, o balizador principal de preço 
ainda é mesmo o valor-hora do trabalho, ok ? No caso, ao que entendo é um 
ambiente simples, com demanda de média pra menos, e sem complexidades, então 
acho que vc deveria usar o valor-hora de DBA Pleno : querer cobrar valor-hora 
de DBA Sênior para uma atividade que não demanda conhecimentos avançados é 
esfolar o cliente, não é um procedimento profissional, tanto quanto querer 
cobrar um preço vil, certo ?? veja na sua região, mas aqui em SP tenho visto 
como custo para DBA Pleno algo em volta de R$50 a R$60, pouco mais pouco 
menos
  Encontrado o valor-hora apropriado, é somar a quantidade de horas que vc 
gastou no levantamento do ambiente deles, a qtdade de horas que gastou no 
desenho da solução, a quantidade de horas que gastou no treinamento (já que são 
eles que vão executar/monitorar a rotina e os resultados, ao que entendi) E a 
quantidade de horas que vc gastou no teste de backup E no de restore (backup 
sem um teste de restore que seja sorry, não é backup imho)
 E um ponto adicional : tem experts que acham que não se deve, mas eu gosto de 
jogar bem aberto com meus clientes, então eu mostro pra eles a lista detalhada 
de quantas horas serão/foram gastas em cada item, além do preço geral que é a 
soma de cada uma delas, okdoc ???

  []s

 Chiappa

Re: [oracle_br] Troca de idéias: Alguém par ou de usar AWR e passou a usar STATSPACK em 1 0g/11g ?

2014-05-06 Por tôpico jlchiappa
 Roland, a minha experiência em substituir o AWR (e seus amigos, como ASH e 
Advisors) pelo statspack está um tanto defasada (já há alguns anos eu não mexo 
com ele, então pode ser que algumas das obs que vou fazer mudaram) , mas foi 
bem diferente do que vc fala : existem Sim diferenças gritantes entre AWR/ASH x 
Statspack... O busílis é que PODE SER que vc não esteja usando as 
features/recursos/tools que o AWR/ASH dão e o statspack não dá (aó Óbvio que a 
transição vai ser suave) mas se estiver fique sabendo que VAI SIM haver 
problemas, e que provavelmente vc (ou o DBA do cliente, enfim, alguém) ** VAI 
** ter que escrever algo para satisfazer, esteja certo de contabilizar esse 
tempo/esforço 
  De modo geral :

 a) o statspack não é habilitado por default, nem tem as coletas agendadas 
automaticamente, requerendo ação do DBA para setup E para agendar as coletas

 b) statspack não armazena históricos, é por sua conta criar uma rotina de 
arquivamento de históricos, no estilo de 
http://www.oraclerealworld.com/ash-masters/ : isso implica também que sem essa 
customização adicional, análises do tipo comparar planos de execução 
anteriores com boa performance versus plano atual que piorou, ou impacto no 
database depois da nova versão x da aplicação não são viáveis...

 c) statspack só faz coletas ONLINE e não sobrevive a reboots/restarts do 
banco, Exigindo que o banco absolutamente não tenha sido parado no intervalo 
entre dois snapshots

 d) afaik statspack basicamente *** parou no tempo *** na versão 9ir2, a 
esmagadora maioria das novas estatísticas de performance introduzidas no 10g 
(como por exemplo a informação de I/Os extraída do SO, o plano de xecução 
Extendido - ie, colas A-ROWs e E-ROWS, por exemplo -, as estatísticas de SQl 
adicionadas ás views relacionadas à V$SQL, etc), e das novas técnicas de 
análise (como TIME MODEL, por exemplo) NÂO SÃO SUPORTADAS no statspack... Deixo 
sem comentar as capacidades do 11gr2 que o statspack não suporta, já que não 
tive a chance de comprovar num banco 11g , mas certamente imagino que devem ser 
basicamente todas

 e) statspack basicamente desconsidera as estatísticas de performance/waits 
referentes a RAC, e é single-instance : em caso de RAC é por sua conta rodar um 
report de statspack em cada nó

 f) afaik o statspack não permite análise a nível de SQL, ao contrário do AWR 
que o permite via  e o mais impactante : ao não licenciar o diag pack, além de 
perder o AWR/ASH vc perder também os ADVISORS : ok que nem sempre eles te 
salvam a cara mas algumas vezes dão sim recomendações eventualmente úteis, e 
coisas que vc não tinha pensado Neste último caso, aí não há outra solução 
que não implementar manualmente a expertise do DBA nalguma rotina escrita por 
vc (ou pelo DBA do cliente, enfim) que Simule ações do tipo das que os Advisors 
fazem...

  []s

   Chiappa

Re: [oracle_br] Troca de idéias: Alguém par ou de usar AWR e passou a usar STATSPACK em 1 0g/11g ?

2014-05-06 Por tôpico jlchiappa
 Só adicionando, algunmas refs que reportam mais ou menos  isso que eu disse, e 
dão alguma visão histórica do que veio de novo no AWR 10g e 11g (e que afaik o 
statspack não cobre, já que como eu disse iirc ele + ou - tá parado no 9ir2, 
logicamente falando) são : 
http://arjudba.blogspot.com.br/2008/08/difference-or-advantage-between-awr-and.html
 , 
http://www.remote-dba.net/oracle_10g_tuning/t_awr_statspack_statistics_comparison.htm
 , 
http://www.databasejournal.com/features/oracle/article.php/3861876/When-Tuning-Oracle-is-not-an-Option.htm
 e 
http://www.oracle-base.com/articles/10g/automatic-workload-repository-10g.php 


 []s

  Chiappa

[oracle_br] Re: Dúvidas sobre concessão de privilégios

2014-05-05 Por tôpico jlchiappa
Opa, seguinte :

   para 1), pode consultar os manuais de Administração que vc vai ver que não 
existe não um GRANT com um SCHEMA como recebedor...  O que vc faria, se não 
quisesse ter uma ROLE como recebedora (e aí todos os usuários interessados 
teriam acesso via role) é realmente executar os comandos todos necessários uma 
um, provavelmente com um script tipo :

select 'GRANT ' || case when object_type = 'SEQUENCE'  then 'SELECT' 
when object_type = 'TABLE' then 
'lista_de_privs_para_tabelas' 
when object_type = 'VIEW'  then 
'lista_de_privs_para_views'
when object_type = 'DIRECTORY' then 'READ,WRITE'
when object_type in ('PROCEDURE', 'FUNCTION', 
'PACKAGE') then 'EXECUTE'
   end 
|| ' ON '
|| owner || '.' || object_name
|| ' TO usuario_destino'
|| ';'
   from dba_objects where owner=upper('usuario_modelo')
and OBJECT_TYPE in ('TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 
'PACKAGE', 'DIRECTORY');  
select 'CREATE SYNONYM user_destino' || '.' || object_name || ' FOR ' || owner 
|| '.' || object_name || ';'
from dba_objects where owner=upper('usuario_modelo')
and OBJECT_TYPE in ('TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 
'PACKAGE', 'DIRECTORY');  

 para a pegunta 2), vc não diz mas entendo que vc quer conceder para um usuário 
qualquer compilar objetos PL/SQL que ** não pertencem ** a ele, correto ? Sendo 
isso, é necessariamente conceder os privs de ANY , ou (muito melhor) criar um 
stored procedure no schema dono dos PL/SQLs que faça o DDL desejado (** E ** 
também faça alguma auditoria/grave algum log/faça as necessárias verifs de 
segurança),  e depois conceder priv de EXECUTE nessa procedure a quem dele 
precisa...

 []s

  Chiappa

[oracle_br] Exemplo de abuso de segurança usando privilégios ANY

2014-05-05 Por tôpico jlchiappa
 Pessoal, eu pensei bastante antes de disponibilizar publicamente mas como a 
informação já anda nas interwebs já há bastante tempo (e aqui no Fórum já 
malhamos *** INSISTENTEMENTE *** , muitas e muitas vezes, que privilégios ANY 
são um rombo horrível, terrível e pavoroso de segurança - e além disso com o  
poder de des-estabilizar um database num micro-segundo, já que ANY quer dizer 
qualquer um, INCLUSIVE o schema SYS , o SYSTEM ou um dos schemas usandos 
internamente, como o DBSNMP, digamos) , achei que era positivo e que quem está 
vulnerável já foi avisado há muuuito tempo muuuitas vezes, então segue o link 
de um artigo interessante que recebi hoje exemplificando alguns hacks via 
privilégios ANY : 
http://www.red-database-security.com/wp/best_of_oracle_security_2013.pdf
 
  []s
  
 Chiappa 



[oracle_br] Re: Erro intermitente na execução de PL/SQL

2014-04-30 Por tôpico jlchiappa
Eu penso que as 3 infos Críticas e necessárias para palpitar em cima e que vc 
não dá seriam :

 a) as mensagens EXATAS e o Comportamentos de erro que acontecem

 b) confirmar se a conexão que o aplicativo abre é DEDICADA ou SHARED, e se há 
algum tipo de pool de conexão envolvido

 c) detalhamento do middleware e do método de conexão ao banco envolvido, 
incluindo versões (do middleware, dos drivers, etc) E um curtíssimo exemplo de 
conexão tal como a que o programa faz


 Com esse retorno dá pra dizer algo mais concreto, mas de cara posso dizer que 
se é um erro que só ocorre fora da aplicação, pra mim : OU existe alguma tela 
da aplicação que faz algo (exemplo, sinalizar uma variável global) que força a 
lógica a cair num IF que quando vc executa pela tool cliente não é ativado, OU 
alguma tela anterior da aplicação tá fazendo alguma coisa errada e o erro tá 
estourando na tela que chama a tal rotina, (aí tal erro não ocorre quando vc 
chama a rotina numa tool cliente), OU há algum bug no middleware e/ou nos 
drivers/código da Aplicação (digamos, incompatibilidade de 
tratamento/datatypes,retorno, etc que a tool cliente não tem mas a aplicação 
tem), ou derivações... 
  Manda  a informação, e depois se ninguém que programe/conheça vb puder dizer 
nada, aí é mesmo um trabalho de DEBUG, mesmo...

  []s

Chiappa

[oracle_br] Re: replicação x licenciamento

2014-04-30 Por tôpico jlchiappa
Eu te daria duas dicas :

a. se a replicação dessa tal tool é por blocos em disco, obtenha ** POR ESCRITO 
** do fornecedor da ferramenta que ela ** REALMENTE ** controle / locka os 
discos, que ela garante integridade dos blocos replicados, esteja o database 
primário/principal ONLINE ou OFFLINE, em archivemode ou não, não importando se 
não hora da réplica houve ou não checkpoint

e

b. já que vc usa VMWARE, muito certamente não deve estar usando o Suporte da 
Oracle, usando ao invés o Suporte da vmware ou de algum parceiro : CERTIFIQUE 
com seja quem for que está Suportando o ambiente que essa tal tool é Homologada 


 Quanto à questões de licenciamento, não vejo problema nenhum SE o ambiente de 
standby em operação normal está down (não é read-only, não é idle, é DOWN 
mesmo, desligado, totalmente inacessível, banco fechado e instãncia fora do ar 
e/ou não abrindo database nenhum), só realmente subindo quando o primário parar 
: já que a licença de uso não é amarrada por servidor, sem probs nesse cenário 
acima...
 
 []s
 
   Chiappa

[oracle_br] Re: Patch number - Oracle 12c

2014-04-29 Por tôpico jlchiappa
 Complementando : no seu caso do 12c, aonde vc só tem a base version, se vc 
quiser baixar essa versão-base em pacotes/pedaços separados (por exemplo, 
apenas os arquivos do client, ou apenas os arquivos do core do RDBMS, etc) não 
há problema : tanto o technet (use o link See all na página de download) 
quanto o e-delivery (escolhendo o Product Pack Oracle Database e a sua 
plataforma em uso) permitem isso...

 []s

   Chiappa

[oracle_br] Re: ORA-01555: snapshot too old: rollback segment number with name too small

2014-04-29 Por tôpico jlchiappa
 Tudo jóia ? Então, primeiro sobre o tipo e detecção da corrupção, é isso mesmo 
: o backup (full ou não, mas backup real, envolvendo cópia de arquivos do 
database) somente lê blocos do disco, portanto só detecta corrupção FÍSICA, 
aonde vc recebe um erro unable to read ou unable to write bloco tal - erros 
aonde a gravação/leitura do bloco foi feita sem erros de disco mas o dado 
gravado está inválido são os Lógicos, e isso somente tools que interpretam os 
dados podem detactar, tal como o export... Assim sendo, no seu 
checklist/procedimentos para detectar corrupção, vc TEM que ter além do backup 
um VALIDATE DATABASE pelo RMAN, um DBVerify , um export, sim. E claro, 
dentro do viável/possível um IMPORT de vez em quando dos dados exportados é 
Excelente adição no procedimento...
  Antes de mudar de assunto, adicionalmente se o seu database é crítico e não 
está com gargalo de performance insuportável (ie, vc tem ainda alguma 
capacidade de processamento a alocar) a Sugestão é vc ativar os checksums de 
bloco : isso Implica em overhead mas te dá Muito mais capacidade de detectar 
corrupções de qquer tipo o mais cedo possível...

 Isso posto, o teu primeiro passo deveria ser achar QUEM está causando essa 
corrupção lógica : a nota metalink que vc cita dá uma possibilidade, mas a nota 
Master Note - RDBMS Large Objects (LOBs) (Doc ID 1268771.1) lista na seção 
ORA-1555 on LOBs / LOB Corruption mais algumas possíveis, vc TEM que abrir um 
Chamado no Suporte Oracle e passar essas refs para o Analista da Oracle - só 
ele pode dizer qual delas se encaixa , ou mesmo se nenhuma se encaixa... E é 
Claro, se vc tá usando LOB de qualquer tipo no 11gr2 vc DEVERIA estar usando 
SECUREFILES, eles apresentam diversas vantagens sobre os BASICFILES, até pode 
ser que a tua situação não esteja mais ocorrendo com SECUREFILES, veja lá...

 Sobre recuperação do registro corrompido, isso depende : primeiro, fosse um 
volume que justificasse , a Oracle (e alguns parceiros) oferecem serviços de 
consultoria em recuperação de dados aonde eles usam tools capazes de extrair 
informação diretamente dos datafiles - porém, julgo que isso não é viável em 
termos de Custo dado que é tão pouca informação Assim, penso que a sua 
alternativa (SE for um CLOB, contendo caracteres, E SE vc não tiver nenhum tipo 
de encriptação envolvido) seria vc identificar quais bloocos podem conter a 
informação e pedir um DUMP desses blocos Afora isso, não vejo outra opção 
que não seja volta de backup antes da corrupção...

  []s

Chiappa

[oracle_br] Re: Job não executa

2014-04-23 Por tôpico jlchiappa
E uma perguntinha adicional : vc tem ABSOLUTA e TOTAL CERTEZA que a rotina a 
ser executada pelo JOB é mesmo (e vai SEMPRE ser, independente do crescimento 
de dados) tão simples e rápida que REALMENTE vai terminar sempre em poucos 
segundos ? Pois os jobs são controlados por um QUEUE, que tem um número Máximo 
de execuções simultâneas , no instante que começar a demorar mais as execuções 
vão se encavalar e rapidinho vc esgota o queue, aí cada vez mais execuções vão 
ficar pendentes , vai acumulando Eu realmente diria para vc QUESTIONAR 
SERIAMENTE esse schedule de 30 segundos - pra mim, de modo a se ter folga 
suficiente para o queue de jobs poder ser atendido seguramente, eu consideraria 
NO MÁXIMO execução a cada minuto, ou (melhor) a cada 5 minutos, e isso SE 
realmente for algo simplíssimo

  []s

Chiappa

Re: [oracle_br] Re: Bigfile Tablespace

2014-04-23 Por tôpico jlchiappa
   Fabio, o Aviso sobre a necessidade de somente usar BIGFILE em ambientes que 
disponham de algum tipo de distribuição de I/O / balanceamento é real e muito 
oportuno - até eu, quando falei na minha msg anterior que independe a 
performance, me esqueci desse caso, que não é comum em produção mas vale a pena 
citar Edilson, imagine por exemplo que ao invés de LUNs vc usa discos 
separados e independentes : com smallfile tablespace, vc pode criar um datafile 
da tablespace no disco D: , um no disco E: , um no disco F: (digamos), assim 
distribuindo o seu I/O ... Nesse cenário, se vc fosse usar BIGFILE como eu 
disse uma tablespace bigfile só pode ter UM e apenas UM datafiole, e um 
datafile só pode ficar num só disco  Eu não tinha avisado sobre isso porque 
sempre penso em produção, e em produção com certeza o mais comum é juntar 
todas as LUNs/discos num só volume, num só I/O device que é controlado por um 
software capaz de espalhar o conteúdo, ie, de automaticamente gravar cada 
pedacinho deo datafile em uma parte diferente dum disco/LUN diferente : isso 
pode ser feito pelo Oracle ASM, pode ser feito pelo software que controla o 
storage, pelo filesystem que contém os LUNs/discos físicos, etc
   
   Agora, Edilson : algumas coisas que a Oracle fala a gente confia 
desconfiando , vc TEm que filtrar o exagero, yes ?? Por exemplo, quando ela diz 
que é mais fácil gerenciar um arquivo do que 10 na tablespace - bancando um 
pouco o advogado do diabo, quando que vc tem que trabalhar diretamente com 
datafiles ? É quando vc vai fazer operações que interferem diretamente nele 
(digamos, resize, ou alteração de característica física) : ora, se ao invés de 
10 comandos alter vc escreveu um só ok, vc poupou, mas poupou SEGUNDOS de 
digitação, e isso numa operação não tão comum e rotineira, algo que não se faz 
todos os dias  Valeu a pena, foi lucro ?? Só vc pode dizer... 
   Outra coisa é a questão de limites maiores do DB ao se usar BIGFILES : isso 
existe, claro, mas é algo que só vai entrar no seu escopo quando o seu DB 
chegar na casa dos TERABYTES, não me parece ser o caso...
   Sobre a possível redução de tempo de checkpoint por ter menos datafiles , é 
algo possível mas não tão provável : afinal, menos datafiles significam menos 
blocos de cabeçalho para sincronizar, ok, mas o GROSSO de um database 
absolutamente não são os blocos de cabeçalho (que são POUCOS, no início de cada 
arquivo) mas sim os blocos de dados, e desses a quantidade de blocos 
absolutamente não se altera, estejam eles numa bigfile ou espalhados por vários 
datafiles, sim ? E é auqle coisa : atualizar um muitos milhares de blocos vai 
DEMORAR PRACAS, estejam esses blocos dentro de um ou dentro de x datafiles 
A quantidade de I/Os single-block vai ser RIGOROSAMENTE A MESMA, yes ?? Então 
novamente : com a BIGFILE vc poupou alguns file handlers (já que só terá um 
arquivo aberto) e poupou o I/O num punhadinho de blocos de cabeçalho, ok, mas o 
trabalho grosso continuará Rigorosamente o mesmo, ok ?? Não pense que vai ser 
uma hipermaster vantagem, que não deve ser ...
   Outra coisa é que apesar de já não ser to recente assim (foi introduzida 
no 10g) nós ** ainda ** temos na sua versão 11.2.0.3 uns tantos quantos bugs 
danados para BIGFILES, como o Bug 1409 - System hang due to TT enqueue 
contention with BIGFILE tablespace resize (Doc ID 1409.8) e o Bug 14510149 
- enq: CT - reading during bigfile tablespace backup (Doc ID 14510149.8), por 
exemplo... 
   
   Rumine bastante essas infos , esses prós e contras e analise aí
   
[]s

  Chiappa

[oracle_br] Re: PL/SQL - trigger

2014-04-22 Por tôpico jlchiappa
Sim, é totalmente Possível vc saber qual valor está sendo inserido, 
provavelmente numa variável dentro da trigger : uma opção é a cláusula 
RETURNING , que desde há muito tempo existe e faz exatamente isso, veja 
http://stackoverflow.com/questions/361304/oracle-how-do-i-get-the-sequence-number-of-the-row-just-inserted
 para um Exemplo Ou até mesmo vc pode fazer o que se fazia antes , ie : 
alterar o que vc deve estar fazendo hoje, que certamente é INSERT INTO tabela 
... VALUES (..., nomedasequence.nexval) para um V_SEQ := 
nomedasequence.nextval; INSERT INTO tabela  VALUES (..., :V_SEQ, ...) 

 Agora : uma vez que a informação está numa variável da trigger, como fazer 
para passar para a rotina que precisará disso para outro insert ?? O ** ideal 
** seria que vc não tivesse que passar esse valor, fazendo com que o INSERT 
na outra tabela que usa o valor gerado pela sequence aconteça nesse mesma 
trigger, mas SE isso não for possível, vc terá que ter uma tabela de trabalho 
com essa informação : outras opções como GTT, contexts e variáveis globais 
servem para um caso único, uma ocorrência do valor, o que Imagino que não é o 
seu caso, vc pode ter Múltiplas sessões fazendo INSERTs e disparando a trigger, 
o que invalida outra coisa que não seja uma tabela de banco, mesmo, eu acho...

  []s

Chiappa

Re: [oracle_br] Re: Melhor alternativa para leitura de arquivo e atualiz ação em tabela

2014-04-17 Por tôpico jlchiappa
Então : veja que tanto a EXTERNAL TABLE quanto a operação de MERGE que eu 
recomendo como sendo (e na Esmagadora maioria das vezes é MESMO) mais Rápida 
são built-ins, nativos DO DATABASE, então por isso se por um lado te dão a 
performance TOP (internamente elas são código C , ** compilado ** dentro do 
database, e que usa  abusa dos hooks internos do database, coisas essas 
inerentemente VEDADAS ao teu código Pl/SQL coitadinho INTERPRETADO e EXTERNO), 
por Outro lado são fechados e algo inflexíveis, fazem o que fazem e cabou  
Veja em 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:6618304976523#6623196184466
 um pouco sobre as questões de performance, em 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:150047150034606
 a opção de log de erros e em 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:35615502072484#35632246331433
 os detalhes sobre qtdade de registros processados , e decida se essas coisas 
te atendem OU se realmente vc quer trocar performance e eficiência por controle 
e log detalhado...
 SE quiser/precisar optar pela opção menos performática porém mais controlada 
de fazer o processamento EXTERNAMENTE ao database, sem ser por um só comando 
SQL, AUTOMATICAMENTE vc vai ter que escrever mais código e VAI ter que se 
preocupar com limites dos resultados E que fique CLARO, esses limites (que 
incluiriam o LIMIT da cláusula de COLLECT, e tamanhos de arrays) não são 
GENÉRICOS, eles dependem fundamentalmente do SEU ambiente, de quanta RAM vc tem 
livre, da capacidade/poder de processamento... É TOTALMENTE POR SUA CONTA, 
portanto, testar no SEU ambiente e ver até onde vc pode chegar sem queda de 
performance e sem erros ORA-40xxx de falta de recursos : os valores de 100 
registros coletados por vez que vc vai encontrar tanto na documentação quanto 
(principalmente) na maioria dos links que goolglar e/ou que vou indicar) são 
simplesmente um valor TÍPICO, mas nem de longe isso vai ser Ótimo no seu 
ambiente...
 
 Eu ** IMAGINO ** que a opção menos ruim de processamento PL/SQL aonde vc teria 
a opção de controle detalhado/log detalhado de cada registro seja a external 
table sendo joineada num cursor PL/SQL com a tabela a atualizar, sendo lida com 
BULK e o UPDATE é em múltiplos registros de uma vez com FORALL - veja 
http://www.morganslibrary.org/reference/plsql/array_processing.html , 
http://ksadba.wordpress.com/2008/06/16/updating-millions-of-rows-merge-vs-bulk-collect/
 , 
http://www.oracle-base.com/articles/9i/bulk-binds-and-record-processing-9i.php 
(e seus links do 10g) e http://psoug.org/reference/array_processing.html para 
refs/exemplos, BEM COMO os manuais Oracle correspondentes 
 
 REPITO, o que não faz sentido é vc ler 2x o arquivo de texto, sendo uma vez 
pra carregar na GTT e Outra vez para processar a GTT -  talvez a exceção seja 
se vc quiser ter o log detalhado da leitura do arquivo-texto (digamos, log dos 
registros inválidos) : como vc aprendeu, o log da external table em si é o que 
é, no formato e na localização que é : CASO realmente precise muito de algo 
diferente E não seja viável ler/transformar o log da external, não tem jeito é 
engolir o sapo e a GTT sem tempero, sim ... Aí o BULK/FOR ALL vai usar a GTT ao 
invés da external...
 
   []s
   
 Chiappa

Re: [oracle_br] Re: Melhor alternativa para leitura de arquivo e atualiz ação em tabela

2014-04-17 Por tôpico jlchiappa
 Bem, imho a pessoa ** não ** vai ter que usuário vai ter que analisar o log 
do concurrent e depois o log do LOADER/external table, pois os logs detalhados 
que são gerados para a external table são em caso de EXCEÇÕES (ie, o BADFILE eo 
DISCARDFILE), enquanto o LOGFILE propriamente dito tem poucas e curtas msgs 
...Por exemplo, veja abaixo o logfile de uma query bem-sucedida (sem exceções) 
numa external table :
 
 /tmp$ cat POP_EXT_3688.log
 
 
  LOG file opened at 04/17/14 13:08:54
 
 Field Definitions for table POP_EXT
   Record format DELIMITED BY NEWLINE
   Data in file has same endianness as the platform
   Rows with all null fields are accepted
 
   Fields in Data Source:
 
 CITYCHAR (255)
   Terminated by ,
   Trim whitespace same as SQL Loader
 COUNTRY CHAR (255)
   Terminated by ,
   Trim whitespace same as SQL Loader
 POPULATION  CHAR (255)
   Terminated by ,
   Trim whitespace same as SQL Loader
 
 /tmp$

 == é informação técnica INTERNA, absolutamente Não Interessante para o 
usuário-final, yep ?? Então imho vc simplesmente teria uma tela customizada 
aonde, SE / QUANDO o usuário  precisar, ele lê o BADFILE e o DISCARDFILE, Acho 
que é isso que o usuário precisaria ter...

 Já sobre o ponto de verificar se o registro que está vindo existe, e gerar uma 
mensagem se não existir : não sei se o MERGE aceita, mas veja lá se vc não 
poderia simplesmente pedir pro MERGE fazer o INSERT duma string numa tabela de 
erros, que depois vc apresentaria na tela de log pro usuário... Eu ACHO que não 
daria, mas veja lá...
 
 Sobre a questão de leitura dos dados e comparação, sim : para evitar o 
trabalho de carregar o arquivo-texto pra uma GTT antes de poder acessar, é o 
que vc falou, seria um OUTER JOIN, sim:
 
 for r in (SELECT dadosdesejados FROM tabelareal A, externaltable B
WHERE A.colunachave (+) = B.colunachave 
 loop
 
IF r.colunachave IS NULL then -- não houve match
   gera uma mensagem...
   
  
   claro, o PL/SQL sempre trabalha logicamente registro-a-registro mas 
OBVIAMENTE vc colocaria os registros lidos e a updatear/inserir num ARRAY, é 
isso que faz a cláusula de BULK COLLECT e o FORALL  yes ?? Se REALMENTE vc 
precisa gerar uma ação espeífica para cada registro processado, aí a solução de 
apenas SQL (que sria o MERGE) não atende, aí toca a aceitar a performance 
provavelmente inferior e programar em PL/SQL, sim
   
   
 E o último ponto, sobre a falta de índice na external table - veja, eu entendo 
que  a. a tabela real vai ser ** muito MAIOR ** que o arquivo-texto com os 
dados a carregar E QUE necessariamente os dados TODOS que estarão no 
arquivo-texto TEM QUE SER PROCESSADOS do primeiro ao último, Integralmente, sim 
??? Notar que o índice só é positivo para a performance quando vc quer 
recuperar UM, ou no máximo uma pequena FRAÇÃO do todos, aí o fato de vc 
precisar ler o arquivo-texto TODINHO inviabilizaria o uso de índice, okdoc ??? 
Por isso que a Oracle não colocou ainda a opção de indexação em external 
tables, tipicamente esses caras são dados a carregar/procesar, TEM que ser 
lidos integralmente, não compensaria para a performance. E o fato da tabela 
real de destino ser (imagino) MUITO MUITO maior e o fato de que é nela que vc 
tem que procurar para ver se o valor lido da external existe ou não indicaria 
que o índice útil aí seria é na TABELA REAL, que é Muito maior E é onde 
queremos pesquisar apenas uma linha, yep ??
 
  []s
  
Chiappa

[oracle_br] Re: Melhor alternativa para leitura de arquivo e atualiz ação em tabela

2014-04-16 Por tôpico jlchiappa
 Blz ? Então, a opção de carregar os dados do arquivo pra GTT (seja como for, 
com SQL ou PL/SQL, bulk ou não, etc), simplesmente ** NÃO FAZ SENTIDO **  
frente à opção de EXTERNAL TABLE - não sei se vc a conmhece, mas é uma feature 
relativamente antiga que permite que vc use o arquivo-texto DIRETAMENTE NUM 
SQL, como se ele fosse uma tabela , SEM a necessidade de carregar os dados pra 
dentro do banco, okdoc ?? veja vc, com GTT vc iar fazer ** DUAS ** (2) leituras 
completas no arquivo-texto, UMA para carregar o texto pra dentro da GTT e OUTRA 
para ir lendo os dados da GTT, com EXTERNAL TABLE vc simplesmente faria um JOIN 
(ou mesmo um MERGE - veja 
http://www.akadia.com/services/ora_etl.html#The%20MERGE%20Statement para um 
exemplo, e o manual de SQL Reference e o de DW Oracle para mais detalhes) !! 
Com isso num ÚNICO SQL vc já lê os dados do arquivo-texto e faz a comparação 
com os dados da tabela, SEM precisar se preocupar com limites de arrays, SEM 
precisar se preocupar com tamanhos de resultsets (pois COMO SABEMOS um SQL pode 
manipular Qualquer Quantidade de registros num database Oracle através do 
mecanismo de FETCH automático que possui), e ainda por cima via de regra vc 
obtém a melhor performance (pois um único SQL significa menos código Pl/SQL a 
analisar, um SQL puro pode se beneficiar das transformações/otimizações que o 
RDBMS pode fazer, o que um cursor PL/SQL ** TOTALMNENTE nÃO CONSEGUE **), é 
tudo de bom...
 
  []s
  
Chiappa

Re: RES: [oracle_br] Re: Problema ao Acessar ASMCDM

2014-04-15 Por tôpico jlchiappa
Só confirma que *** realmente ** vc está logado como o usuário local, que 
instalou e roda o software (tipicamente usuário de domínio, mesmo administrador 
de domínio, não funciona, tem que ser usuário LOCAL), e plz confirma EXATAMENTE 
os valores que vc digitou : isso estando certo, não tem porque não funcionar, 
veja o meu caso :

= os settings estão como :

H:\set ORACLE
ORACLE_BASE=H:\orainfra\app\oracle
ORACLE_HOME=H:\orainfra\app\11.2.0\grid
ORACLE_SID=+ASM

= veja que no PATH está em primeiro lugar o sub-diretório BIN da HOME do ASM :

H:\echo %PATH%
H:\orainfra\app\11.2.0\grid\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program
 Files\EMC\SYMCLI\bin

= estou conectado como o usuário *** local *** que instalou e roda o software :

H:\echo %username%
oracle

= taí :

H:\asmcmd
ASMCMD ls
DLLTXOCRGRP/
DLLTXPRARCGRP/
DLLTXPRDATGRP/
DLLTXPRLOG1GRP/
DLLTXPRLOG2GRP/
DLLTXPRVTDOCRGRP/
ASMCMD

 []s

  Chiappa

Re: RES: RES: [oracle_br] Re: Problema ao Acessar ASMCDM

2014-04-15 Por tôpico jlchiappa
Se vc realmente está digitando os comandos no prompt DOS (e ** não ** no 
powershell!!), com a opção de Run as Administrator, está logado com o usuário 
correto (ie, o mesmo usuário admin local que instalou e roda o software), já 
conferiu e os Valores estão corretos (ie, seu sid é REALMENTE +ASM - isso pode 
mudar), vc tá respeitando eventuais maiúsculas/minúsculas, o caminho do PATH 
está correto, e não tem caracteres especiais nem espaços em branco no comando 
SET e/ou nos valores, aí realmente não vejo o que mais poderia estar errado, 
seria mesmo caso de Chamado no Suporte Oracle...

  []s

   Chiappa

Re: [oracle_br] ORA-609

2014-04-10 Por tôpico jlchiappa
 Além de um especialista AIX, penso que vc CERTAMENTE precisará de um 
especialista em RDBMS Oracle , que deverá verificar :
 
 - se o tamanho dos redo log files está apropriado (na casa dos GBs, 
provavelmente, se a geração de redo é intensa) para evitar log file switch ou 
(ainda pior) espera por archive/limpeza se os redo log files todos já foram 
usados ? Na mesma toada, EM ALGUNS CASOS um leve aumento do log buffer possa 
ser viável, DEPENDENDO do tamanho atual
 
 - se a configuração / distribuição de I/O está adequada : os /u05 e /u06 
parecem indicar que vc está usando FILESYSTEM, e nem todos os tipos de 
filesystem permitem I/o ASÍNCRONO e em DIRECT MODE, coisas muitas vezes Vitais 
para a performance ... Em especial, via de regra é Inútil e Contra-produtivo se 
ter CACHEs nos filesystem usados pelo Oracle, pois ele Já Mantém seus próprios 
caches internos : cachear um cahe Não É recomendado na maioria dos cenários
 
 - se a configuração do dataguard está ok , com a presença de STANDBY LOGFILES, 
archives (já que deve ser dataguard físico) sendo enviados por uma rede 
DEDICADA entre os servidores (não faz o menor sentido o envio de archives 
concorrer com os usuários finais na rede Pública)
 
 - ainda sobre o dataguard, vc diz que os redos são recebidos de forma 
síncrona : o dg está operando em zero data-loss mode ?? Se sim, tranquilamente 
PODE SER que o hardware (principalmente a infra de rede) não esteja suportando 
a carga inerente a esse modo, aí OU se passa a trabalhar em maximum performance 
OU se melhora a infra
 
 - se a distribuição de RAM está OK : fiquei principalmente encafifado quando 
vc diz que dos  36gb de memória ram, 20gb para a instancia principal, 5gb para 
uma outra instancia - vc estava falando de que, SGA ?? Se sim, vc Sabe que 
também é CRUCIAL se reservar memória para PGA e para os processos locais ?? A 
regra de dedão de algo em torno de 20% a 40% (máximo) da RAM para a SGA visa 
justamente ter uma segura margem de folga de RAM para os usos AFORA a SGA , a 
SGA ** não é ** de forma nenhuma toda a RAM que o RDBMS precisa. O especialista 
em RDBMS deveria SIM considerar muito seriamente a possibilidade de diminuir 
severamente esses 20 GB se isso é o sizing da SGA
 
 - o Planejamento para aplicação dos PATCHES : 11.2.0.3.0 indica que vc IGNOROU 
TOTALMENTE PSUs/CPUs do 11.2.0.3, e também não aplicou o patchset 11.2.0.4
 
 Com isso feito, aí sim  especialista em RDBMS poderia usar as tools de análise 
cabíveis (AWR/ASH/Statspack, Trace, Consulta Periódica com Histórico das V$ de 
estatísticas de uso e execução de SQLs) para produzir um healthcheck desse 
banco, tendo assim subsídios para demandar eventuais alterações na Aplicação 
(principalmente por causa dos sintomas de grande número de commit wait e 
concorrência que vc diz ter encontrado).
 
  []s
  
Chiappa

Re: [oracle_br] ORA-609

2014-04-10 Por tôpico jlchiappa
Obs importante : o especialista AIX deverá trabalhar ** muito próximo ** ao 
especialista em RDBMs para implantar as best practices, cfrme o PDF linkado em 
http://www-03.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP100883 (as 
recomendações nele sobre DIO/Direct I/O e AIO/Asynchronous I/O são Cruciais em 
muitos casos, junto com as de caches do SO, que como eu disse em princípio não 
são usados pelo RDBMS, e as de config do kernel)... 
http://www.oracle.com/technetwork/products/clusterware/overview/rac-aix-system-stability-131022.pdf
 , apesar de falar sobre RAC também tem algumas boas dicas, e a nota metalink 
AIX: Top Things to DO NOW to Stabilize 11gR2 GI/RAC Cluster (Doc ID 
1427855.1)  lista alguns patches de Sistema Operacional ultra-importantes, o 
especialista em AIX ** tem ** que estar Ciente desses caras...

 []s
 
   Chiappa

Re: [oracle_br] ORA-609

2014-04-10 Por tôpico jlchiappa
  Bem, não esqueça de repassar os docs que citei no meu último email antes 
desse pro teu especialista AIX , E as considerações sobre RDBMS para o 
especialista em RDBMS, mas observarei em cima da sua msg :

  
Os 20gb para instnacia principal, e 5GB da instancia secundaria me refiro ao 
memory_target (SGA e PGA).

Hmmm, se não há nenhum processo extra (de aplicação, ou algum webserver, ou o 
que for) rodando nesse servidor do RDBMS, realmente só SGA+PGA não 
justificaria... É checar as configs de vmm nos docs que citei antes 
(principalmente pra ver se casualmente o AIX não tá querendo usar parte da 
memória como cache do SO), e confirmar que Realmente nenhuma sessão tá 
super-alocando PGA (pois tanto PGA_TARGET quanto MEMORY_MAX_TARGET não são 
hard-limited, são ALVOS, são IDEAIS mas que PODEM ser ultrapassados 
eventualmente , principalmente PGA cfrme 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:17748700346068277#30479600346715456
 mostra ...
  Especificamente para PGA, vc poderia fazer (REPETIDAS vezes, em Diferentes 
períodos!) uma consulta tipo :

 select s.inst_id, s.sid, s.username, s.logon_time, s.program, 
PGA_USED_MEM/1024/1024 PGA_USED_MEM, PGA_ALLOC_MEM/1024/1024 PGA_ALLOC_MEM
 from gv$session s
 , gv$process p
 Where s.paddr = p.addr
 and s.inst_id = p.inst_id
 and PGA_USED_MEM/1024/1024  10  -- pga_used memory over 10mb
 order by PGA_USED_MEM;

 e ver se detecta alguma super-utilização  SGA é mais fácil, é consultar as 
V$SGAxxx .

 = Não deixe de referenciar para o seu especialista AIX os artigos referentes 
á alocação/controle de memória no AIX em http://intermediatesql.com/ , 
principalmente a série How ORACLE Uses Memory on AIX e o artigo How AIX Paging 
Space works : use no site os marcadores AIX e MEMORY...


Sim, é filesystem e permitem I/O assincrono.

 ok, ele permite, mas o AIO *** está *** sendo efetivamente usado  Eis a 
pergunta que o seu especialista em AIX irá responder, provavelmente via 
TOPAS_nmon ... Da parte do banco de dados, já que é 11g, só confirmar que 
FILESYSTEMIO_OPTIONS está como SETALL  e DISK_ASYNC_IO está TRUE ...

 Agora : POR QUE filesystem ??? Se os devices estão num storage (é o mínimo 
esperado num ambiente Produtivo, disquinho local com braço de leitura único não 
é profissional) porque não usar raw devices com ASM, que já é algo setado 
especificamente para RDBMSs Oracle ?

  
O dataguard está trabalhando em zero data-loss mode, maximum availability.

Não tem choro nem vela : DG em zero data loss ** IMPLICA ** que o database 
primário só pode contionuar a trabalhar quando o log foi SEGURAMENTE não só 
transferido como Aplicado no DB standby , então SE vc não tiver uma 
infra-estrutura de primeira (entre outras coisas como eu disse, rede DEDICADA e 
de ALTA-PERFORMANCE entre os servers) é Ululantemente Óbvio que a performance 
vai cair no chão, os WAITs vão se acumular, sim ??? Como eu disse, tem que ser 
Avaliado in-loco e com vagar se é tecnicamente viável com esse hardware um DG 
ZDL, se for concluído que não é, OU upgrade OU DG maximum performance...

São 2 dataguards que essa instancia principal possui, um dg fisico e outro 
snapshot, com 12 STANDBY LOGFILES para os 2 dg's.

Idem acima : há indicadores que o ambiente não está suportando um DG physical, 
e ainda por cima neguim quer ter SNAPSHOTs junto ??? não sei, não, a avaliar...
 
Os redos possuem 200MB de tamanho.
Isso é um tamanho MINÚSCULO na maioria dos ambientes produtivos de alta demanda 
: eu RECOMENDO que o especialista RDBMS considere SERIAMENTE a possibilidade de 
colocar pra 1 GB , que é um valor mais comumente visto E via de regra não onera 
tanto assim nem espaço em disco nem a banda de rede para transmissão de 
archives (e o I/O lá no standby para aplicar o archive recebido).

A release é a 11.2.0.3.6
Menos mal, o .6 indica que não está tão atrasado - achoq ue é avaliar, junto 
com o Suporte Oracle, a aplicabilidade de PSUs mais recentes (o mais recente é 
.8, iirc)

Sobre o log buffer, a ausência de espera para gravação no log buffer é um bom 
indicador mas não é isso que eu pensava : a questão é que (além de outros 
gatilhos, inclusive por tempo) o log buffer pode ser esvaziado para o log file 
ao atingir um percentual do tamanho total do buffer, e elgumas vezes aumentar o 
log buffer para alguns (POUCOS!!) MBs diminui ess frequência... Então, veja lá 
como está o size do teu log buffer, se estiver abaixo da casa dos MBs 
considere/avalie a possibilidade de o aumentar, um pouco...

  []s

Chiappa

[oracle_br] Re: ORA-31655: no data or metadata

2014-04-09 Por tôpico jlchiappa
Isso Pode ser um simples WARNING , por vc não ter segmentos acessíveis na 
tablespace especificada (https://community.oracle.com/thread/1016661?tstart=0 é 
um exemplo), OU pode ser questão de permissões 
(http://oraclehandson.wordpress.com/2011/09/26/ora-31655-no-data-or-metadata-objects-selected-for-job/
 exemplifica no caso de um impdp mas em tese coisas do tipo PODEM ocorrer 
também para expdp) Assim, veja lá SE vc tem segmentos acessíveis  para o 
usuário em questão na tablespace especificada E confirme que ele tem os 
privilégios necessários para o expdp, ** E ** tambpem no DIRECTORY 
especificado...

 []s

   Chiappa

[oracle_br] Re: ORA-31655: no data or metadata

2014-04-09 Por tôpico jlchiappa
Isso Pode ser um simples WARNING , por vc não ter segmentos acessíveis na 
tablespace especificada (https://community.oracle.com/thread/1016661?tstart=0 é 
um exemplo), OU pode ser questão de permissões 
(http://oraclehandson.wordpress.com/2011/09/26/ora-31655-no-data-or-metadata-objects-selected-for-job/
 exemplifica no caso de um impdp mas em tese coisas do tipo PODEM ocorrer 
também para expdp) Assim, veja lá SE vc tem segmentos acessíveis  para o 
usuário em questão na tablespace especificada E confirme que ele tem os 
privilégios necessários para o expdp, ** E ** tambpem no DIRECTORY 
especificado...

 []s

   Chiappa

[oracle_br] Re: Capacity Planning

2014-04-09 Por tôpico jlchiappa
OBS : 

  - sobre CPU, é claro que embora o database não tenha como calcular percentual 
de uso (e por isso só registre tempo de CPU consumindo), o Sistema Operacional 
tem pleno controle e ciência de CPUs e runqueue, então ele sim tem como 
calcular % de uso - assim, além de mensurar consumo e capacidade no database, é 
Imperativo se calcular também (frequentemente e repetidas vezes, sempre no pico 
de uso para atender ao pior caso) o % de uso de CPUs no ambiente corrente e no 
POC

 - sobre espaço em disco, talvez seja mais relevante ao invés de levantar 
espaço médio gasto por sessão, se obter o espaço gasto por transação lógica : 
digamos, se é um sistema comercial, cada Venda completa utiliza x bytes para NF 
em média, y bytes para dados de Produto e z bytes para estoque e controladoria 
, aí multiplicando-se a soma desses bytes pela quantidade de vendas esperada 
por dia, vc teria a estimativa de espaço necessário
 
 
 []s
 
   Chiappa

Re: RES: [oracle_br] Re: ORA-31655: no data or metadata

2014-04-09 Por tôpico jlchiappa
É ** CONCEITUAL ** a sua questão, colega : a questão é que o export só exporta 
os DADOS, de tabelas  - os índices, sinônimos e demais objetos que não contém 
dados na forma de tabelas relacionais Não São exportados, só o DDL é gerado no 
dumpfile : vc pode confirmar isso fazendo um export de teste de uma tabela 
gigantesca , que possua x GBs de dados e y GBs de índices, vc verá que o 
tamanho do dumpfile vai ser próximo de x... Outro teste é usar a opção SQLFILE 
no impdp, que ao invés de importar só mostra o conteúdo, vc vai ver que há 
INSERTs para cada dado a inserir mas APENAS UM CREATE INDEX para o índice como 
um todo Essa é a causa do warning de no segments, o índice não tem dados a 
exportar...

 Isso é TOTALMENTE DOCUMENTADO no manual do datapump, que nos diz diretamente 
(ênfase com *s minha) :
 
 
 Tablespace Mode
 
A tablespace export is specified using the TABLESPACES parameter. In tablespace 
mode, *** only the tables *** contained in a specified set of tablespaces are 
unloaded.

é SÒ AS TABELAS, okdoc ?? Exemplo comprovando :


SYS:AS SYSDBA@xe:SQLcreate tablespace TS_TEST datafile 
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TS_TEST_01.DBF' size 100M;

Tablespace criado.

SYS:AS SYSDBA@xe:SQLcreate table HR.TABTEST (c1 number);

Tabela criada.


SYS:AS SYSDBA@xe:SQLcreate index hr.indtest on hr.tabtest(c1) tablespace 
TS_TEST;

??ndice criado.

SYS:AS SYSDBA@xe:SQLselect owner, segment_type, segment_name, tablespace_name 
from dba_segments where segment_name like '%TEST%';

OWNERSEGMENT_TYPE   
  SEGMENT_NAME
 
 
---
TABLESPACE_NAME
--
HR   TABLE  
  TABTEST
USERS

HR   INDEX  
  INDTEST
TS_TEST


SYS:AS SYSDBA@xe:SQLexit

C:\Users\p0623080expdp system/oracle DUMPFILE=TS_TEST.dmp LOGFILE=TS_TEST.log 
TABLESPACES=TS_TEST

Conectado a: Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
Iniciando SYSTEM.SYS_EXPORT_TABLESPACE_01:  system/ 
DUMPFILE=TS_TEST.dmp LOGFILE=TS_TEST.log TABLESPACES=TS_TEST
Estimativa em andamento com o método BLOCKS...
Processando o tipo de objeto TABLE_EXPORT/TABLE/TABLE_DATA
Estimativa total usando o método de BLOCKS: 0 KB
ORA-31655: não há dados ou objetos de metadados selecionados para o objetoO job 
SYSTEM.SYS_EXPORT_TABLESPACE_01 foi concluído com 1 erro(s) em 14:02:01

[]s

  Chiappa

Re: [oracle_br] Pergunta rápida sobre option s de se gurança

2014-04-08 Por tôpico jlchiappa
okdoc - apenas aviso que o principal fator que vc tem que pesar no julgamento 
entre VPD x OLS são Custo, Tempo de Implementação e Adequação a Políticas 
Complexas. Veja vc, VPD é a tecnologia básica, embutida no RDBMS Oracle (e 
portanto sem custo) que permite que automaticamente uma condição a mais seja 
incluída nos WHERE de todos os SQLs com uma programação sua, adicional, que vc 
vai escrever, enquanto o OLS é um produto que usa o VPD para criar 
automaticamente as regras/condições que serão adicionadas no WHERE...  
 Por exemplo, digamos que seus requisitos de acesso sejam bem simples, baseada 
em um id do grupo de trabalho (ie, algumas linhas da tabela só podem ser 
enxergadas por quem está no grupo CONTADORES, outras só pelos usuários que 
estão no grupo DIRETORIA, e assim por diante) : com OLS vc simplesmente teria 
uma coluna LABEL_DE_ACESSO escondida na tabela (atributo hidden) e a indicaria 
no setup do OLS como a fonte, só... Já com VPD vc Teria que escrever cada IF, 
cada SELECT para buscar os dados de acesso, enfim, teria que programar cada 
detalhe Obviamente, isso que em tese é desvantagem do VPD ** RAPIDAMENTE ** 
pode ser transformar numa Vantagem : digamos que a sua política de acesso é 
mais complexa, que vc tem que levar em conta elementos dinâmicos não-presentes 
na tabela, como IP, usuário de rede, dia da semana/hora, ou coisas do tipo : 
isso é Facilmente programado com VPD, enquanto o OLS, como não é muito 
programável e é focado em LABELS, em informação já constante na tabela a ser 
protegida, seria bem mais trabalhoso/difícil de fazer algo ... Claro, não é que 
não faça, mas é que o OLS é um pacote pronto, onde vc não programa quase nada : 
quando os defaults dele se encaixam maravilha, vc POUPOU um montão de trabalho 
e isso em tese já justificou o custo dele, mas para situações mais complexas 
não é tão simples de o ajustar, aí imho passa a ser vantajoso o VPD, se for o 
caso combinando OLS com o VPD se possível...

  De referências, além da documentação (principalmente o capítulo do VPD no 
Oracle® Database Security Guide e o manual do OLS) veja 
http://www.orafaq.com/wiki/Oracle_database_Security_FAQ , 
http://www.oracle-base.com/articles/9i/oracle-label-security-9i.php (a versão 
do exemplo é antiga mas os conceitos básicos permaneceram), 
http://www.oracle-base.com/articles/10g/database-security-enhancements-10g.php#vpd
 (equivalente para o VPD), 
http://www.oracle.com/br/products/database/options/label-security/overview/index.html
 (aqui vc acha links para os foruns especializados e alguns artigos técnicos e 
cases), http://www.oracle.com/technetwork/database/security/ols-faq-088171.html 
e  http://www.oracle.com/technetwork/tutorials/index.html (procurando por LABEL 
SECURITY e por VIRTUAL PRIVATE DATABASE vc encontra vários OBEs e Tutoriais).

[]s

  Chiappa

[oracle_br] Re: View Materializada gerando Archives

2014-04-08 Por tôpico jlchiappa
 Veja lá que CONCEITUALMENTE no RDBMS Oracle é virtualmente IMPOSSÍVEL vc não 
gerar redo algum pois, como sabemos, além de servir para a recuperação em caso 
de falha, o undo gerado para consistência de leitura - o RDBMS Oracle ** nunca 
faz leitura suja, então Qualquer DML gera UNDO - implica em geração de redo 
para as estruturas internas do RDBMS que controlam transações... Da mesma 
forma, o refresh de uma mv Necessariamente implica em geração de redo para as 
tabelas/índices internos que controlam a mv em si  Assim, o que o atributo 
de NOLOGGING faz é DIMINUIR o redo - impossibilitar geração de redo é como eu 
disse IMPOSSìVEL, ok ? 
  Isso posto, PROVAVELMENTE o que deve estar pegando no seu caso pode ser que : 
OU a mv em si está LOGGING (de repente a tablespace está com NOLOGGING mas a mv 
não foi criada assim), e/ou vc deve estar pedindo um REFRESH completo (o que 
implica em montes de dados a transacionar) , E/OU vc está usando grupo de 
refresh E/OU vc não está setando o atomic_refresh=false 

  Assim, EXTRAIA o DDL da m para ter certeza que ela está como nologging, 
analise se é viável/possível refresh incremental , E veja (vide 
https://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:15695764787749#7066764400346113957
 para um exemplo) se é o caso de setar atomic_refresh

 Adicionalmente, não se aceita achismo, esse seu APARENTEMENTE não tá legal : 
eu diria para vc, como parte da investigação, colocar na rotina que refresha a 
mv (vc não diz mas ao que entendo é isso que vc tem, é um job que faz refresh a 
cada 6 minutos) uma instrumentação , gravando/registrando o valor da 
estatística REDO SIZE antes e depois do refresh (assim vc saberá EXATAMENTE 
quanto redo está sendo gerado) 

  []s

Chiappa

 OBS : 

  a) SE vc tiver índices na mv o nologging não vai funcionar adequadamente 
(índices SEMPRE são atualizados linha-a-linha, gerando redo) 

e

  b) se vc estiver usando standby físico, CERTAMENTE o database deve estar em 
modo de FORCE LOGGING, aí Também o NOLOGGING não irá funcionar adequadamente

[oracle_br] Re: Capacity Planning

2014-04-08 Por tôpico jlchiappa
Bem, primeiro fique Claro que NENHUM software te dá toda a informação prontinha 
e mastigada - vou citar alguns comuns aqui mas SEMPRE algum trabalho de sua 
parte vai ter SIM, ok ?
  Muito bem, o primeiro passo para capacity é mensurar a capacidade máxima do 
teu hardware, começando pelo que é compartilhável, ie, I/O e rede (depois vc 
foca no que é usado por um só requisitante de cada vez, que é CPU, memória e 
espaço em disco...
  Esse primeiro passo seria :

  1. levantar a quantidade máxima teórica de I/Os e e de blocos transferidos 
pela rede num intervalo fixo de tempo (um segundo é o intervalo típico 
escolhido) - isso é algo que o fornecedor do teu hardware Deveria ser capaz de 
fornecer, e depende DRASTICAMENTE dos detalhes específicos do seu hardware, é 
particular pro teu hardware, não é algo que vc possa copiar/obter de outra 
pessoa...

  2. mensurar quanto Efetivamente o hardware é capaz de te dar : isso se faz 
(num intervalo SEM usuários, SEM nada rodando, é Óbvio!) preferencialmente com 
softwares de medição (como IOZONE, FIO, ORION, IOMETER, etc), ou (não 
preferevelmente, pois são MUITO menos exatas) com tools do SO, como iostat, 
netstat, etc, medindo scripts seus que façam I/O e transferência via rede

  OBS : é Absolutamente Normal 1 e 2 terem alguma discrepância (já que o 
Fornecedor sempre te dá o melhor dos melhores cenários possíveis, com dados 
artificiais que se aproveitam quase Sempre dos caches, que sempre cabem num 
bloco/página de rede, e sem concorrência de nenhum tipo, etc, etc), mas se for 
algo escandaloso essa diferença CERTAMENTE algum problema de setup vc tem aí 
nesse hardware

   3. mensurar quanto está sendo usado hoje pelo database hoje existente 
(SEMPRE supondo que apenas o RDBMS Oracle roda nesse servidor, como deveria 
ser) : SE vc tiver licença para consultar/usar o AWR, vc pode usar a 
dba_hist_sysmetric_summary, se não vc terá que fazer consultas às views de 
performance/estatísticas de sistema repetidas e repetidas vezes, em diferentes 
períodos, e armazenar os dados nalgum lugar para consulta posterior

 SABENDO o quanto o hardware é capaz de dar e o quanto está sendo usado, vc 
chega na margem de quanto sobra para a nova aplicação...

 O segundo passo é mensurar o consumo dos itens não-compartilhados, ie, espaço 
em disco e memória (a CPU falaremos mais abaixo) : como esses caras só podem 
atender um requisitante de cada vez em tese (quem pediu pra usar uma posição de 
memória e/ou um espaço no disco em tese só quando o liberar é que o recurso 
fica disponível aos outros), o procedimento é basicamente mensurar quanto está 
sendo usado repetidas vezes, em dias/intervalos diferentes, pra chegar num 
valor máximo que o ambiente atual precisa, aí vc compara com quanto tem... 
Novamente, SE vc tiver histórico mantido pelo AWR use-o, senão crie e mantenha 
o seu...E claro, coisas como o swapping de memória relativizam isso, mas vamos 
pensar numa utilização SADIA, sem swapping, que é uma coisa EMERGENCIAL, não 
algo rotineiro, em tese...

 Com os dois passos feitos e as infos em mão, é AÍ que vem o mais difícil, não 
tecnicamente mas politicamente : o fornecedor da Aplicação (ou os 
desenvolvedores/Analistas, se for aplicação interna) TEM que te dar um valor 
médio/esperado de memória/disco/transfer de rede/I/Os  para cada sessão na nova 
aplicação, permitindo que vc multiplique isso pelo número de sessões esperado e 
possa comparar se a sobra citada acima atende à esse cálculo ou não... Isso é 
difícil porque em 99,99% dos casos o fornecedor NÂO mede coisíssima alguma, ele 
parece considerar que memória/rede/I/O são INFINITOS :^; O que já vi muitas 
vezes é, na Ausência desses números/valores por parte do Fornecedor, a Empresa 
monta um ambiente POC com a aplicação novata e levanta os números, é isso...

 Blz ? Agora sobre a CPU : o caso da CPU é um pouquinho diferente, não há um 
valor fixo máximo - o caso é que se vc não tiver  poder de CPU para atender a 
todos os requisitantes, as requisições não-atendidas  deles *** NÂO VAI FALHAR 
***, ao contrário de espaço em disco e RAM : o que vai acontecer aí é que elas 
ficam numa FILA DE ESPERA Então absolutamente não adianta vc medir só e 
apenas os segundos de CPU que o database precisou dentro do seu intervalo de 
medida, vc TEM que medir também no SO o quanto a fila de espera por CPU (o 
runqueue) cresceu 

   []s

 Chiappa

Re: RES: [oracle_br] funcionamento do segmento de LOB

2014-04-03 Por tôpico jlchiappa
 Colega, vamos tentar te dar alguns elementos mais : 

 1. pra variar vc Não Diz se está usando 11g ou não, e se for 11g se está 
usando SECURE FILES ou não : o fato porém é que além da questão da 
possibilidade de compactação, SECURE FILES são uma opção mais refinada/moderna 
de controle de espaço - entre outras coisas, não precisam de PCTVERSION 
declarado no LOB para controlar versionamento/percentual de reuso, por 
exemplo Então considere SERIAMENTE a possibilidade de os usar se vc tá na 
versão 11g

 2. é Evidente que um CLOB pode possuir *** muito mais ** dados, muito mais 
caracteres do que todo o resto do seu registro lógico (composto por escalares 
de pequeno tamanho, como DATE, NUMBER e VARCHAR2), então Totalmente Não faz 
sentido a comparação que vc faz , tipo ah, tenho 300 GB de CLOB contra um 
número muito menor de espaço ocupado por outros dados : o que vc tem que 
analisar é a QUANTIDADE DE CARACTERES armazenados versus esses 300 GB, okdoc ?? 
Digamos que vc tem no total duzentos e muitos GBs de informação gravados nesses 
LOBs, aí ocupar 300 GB em disco é Totalmente o esperado, sim ?/ Sempre há algum 
overhead...
 A questão é que no RDBMS Oracle, por questão de performance, ele NUNCA 
aloca/grava/usa o espaço em disco byte-a-byte : ele sempre lê/usa/grava uma 
quantidade fixa de kbytes cahamado BLOCO, e ao pedir espaço em disco pro SO ** 
nunca ** pede um bloco por vez, mas sim uma quantidade de blocos 
sequencias/juntinhos, o chamado EXTENT... Assim, mesmo que vc for gravar uma 
linha que seja de informação, ao menos um extent já terá sido alocado, yep ?? E 
na hora de gravar a informação em cada bloco dentro de cada extent, o 
comportamento normal é mesmo deixar um pouco de espaço reservado para futuros 
UPDATEs... E ** NUNCA ** esqueça, necessariamente o LOB não armazena Só e 
Apenas o dado : vc vai ter também que manter um segmento de LOB INDEX, vc vai 
ter estruturas de controle Então NUNCA gravar x bytes no LOB significa que 
vc gastou x bytes em discos, é x bytes + o overhead... Para comparar dados x 
espaço gasto (se vc não já tiver essa informação) vc pode fazer algo tipo : 
select sum(dbms_lob.getlength(colunalob)) from tabelaquecontémolob; e comparar 
contra um SELECT sum(bytes) from DBA_EXTENTS WHERE tablespace_name = 
nomedatablespacequesócontémLOBsque vc diz que tem

  == Então, ** SE ** vc já pediu um SHRINK da coluna CLOB (*** Não É *** 
shrink da tabela, é DA COLUNA CLOB!!) e não teve grande alteração, eu Suponho 
que a qunatidade de dados deve ser muito grande, justificando os 300 GB Se 
vc ainda julgar o overhead grande, vc até PODE diminuir isso alterando o 
porcentual de espaço reservado, o CHUNKSIZE, etc : e como isso não funciona 
para o passado (o que já está alocado, está alocado), vc pode considerar,depois 
de ter alterado os parâmetros em questão, criar uma NOVA tablespace (sempre LMT 
e AutoAllocate, já que vc não sabe o tamanho que o dado LOB terá) e mover os 
lob segments/lobindexes para ela...

 3. Ainda por questão de performance, quando vc deleta os dados (sejam em LOBs 
ou não) o comportamento do RDBMS é ** deixar ** esse espaço ainda alocado para 
o mesmo segmento que os usou, pois ele pensa que os segmentos são dinãmicos, 
que brevemente o mesmo segmento que sofreu a deleção VAI sofrer novos INSERTs, 
e aí esse espaço VAi ser reusado, e o fato dele já estar pré-alocado acelerará 
EM MUITO essa entrada de dados, sim  E isso nem é FRAGMENTAÇÂO propriamente 
dita, pois esse espaço em branco, REPITO, vai SIM ser reutilizado nos próximos 
INSERTs, ele Absolutamente não está perdido, não é impossível de ser usado, 
como ocorre na fragmentação REAL, okdoc ??
  O shrink de lob e a movimentação (principalmente esta última) vão ser 
efetivos também neste caso de reuso de espaço deletado, se for o caso : leia 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:7246820117571 
(é uma thread longa mas Absolutamente informativa e importante), 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:3084920323218 
, 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:3998444100346949788
 e 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:3679447698936 
para refs e exemplos...

  []s

Chiappa

Re: RES: [oracle_br] funcionamento do segmento de LOB

2014-04-03 Por tôpico jlchiappa
Um exemplo para mostrar em ação o overhead do LOB (que, COMO EU DISSE, em 
muitos casos pode ser Sensivelmente Diminuído alterando-se os params de 
controle de alocação E usando sercurefiles, mas SEMPRE vai existir) :

- crio a tablespace LMT autoallocate :

SYSTEM:@xe:SQLcreate tablespace TS_LOB datafile 
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TS_LOB_01.DBF' size 1G extent management 
local autoallocate;

Tablespace criado.

= crio a tabela que contém um LOB (CLOB no caso) , desabilitando storage in 
row (para que a alocação só ocorra na tablespace dedicada a LOBs ainda que os 
dados a inserir sejam pequenos : não é uma boa idéia sempre, mas para fins 
didáticos/de exibição vamos fazer assim) :

SYSTEM:@xe:SQLcreate table T_LOB (c1 number, c2 varchar2(4000), c3 clob)
  2  lob (C3) STORE AS ( TABLESPACE TS_LOB DISABLE  STORAGE IN ROW  NOCACHE 
CHUNK 8192);

Tabela criada.

= insiro uma linha só :

SYSTEM:@xe:SQLinsert into T_LOB values (1, 'Linha 1', 'primeira linha inserida 
no CLOB');

1 linha criada.

SYSTEM:@xe:SQLcommit;

Commit concluÝdo.

= veja que já alocou um EXTENT inteiro para cada tipo de segmento que um LOB 
exige, como eu disse antes :


SYSTEM:@xe:SQLselect segment_name, segment_type, extent_id, bytes, blocks from 
dba_extents where tablespace_name='TS_LOB';

SEGMENT_NAMESEGMENT_TYPEEXTENT_ID  BYTES
 BLOCKS
--- -- -- -- 
--
SYS_LOB020052C3$$   LOBSEGMENT  0  65536
  8
SYS_IL020052C3$$LOBINDEX0  65536
  8

= vou inserir mais algumas linhas :

SYSTEM:@xe:SQLed
Gravou file afiedt.buf

  1  DECLARE
  2 l_clob clob := empty_clob();
  3  BEGIN
  4 FOR i IN 1..10 LOOP
  5INSERT INTO T_LOB (c1, c2, c3) VALUES (i+1, 'Linha:'|| to_char(i+1), 
empty_clob()) RETURNING c3 INTO l_clob;
  6-- create a 400,000 bytes clob
  7--FOR i IN 1..100 LOOP
  8--   dbms_lob.append(l_clob, rpad ('*',4000,'*'));
  9--END LOOP;
 10 END LOOP;
 11* END;
SYSTEM:@xe:SQL/

Procedimento PL/SQL concluÝdo com sucesso.

SYSTEM:@xe:SQLcommit;

Commit concluÝdo.

== Como os CLObs vazios que inseri couberam , não houveram novas alocações :

SYSTEM:@xe:SQLselect segment_name, segment_type, extent_id, bytes, blocks from 
dba_extents where tablespace_name='TS_LOB';

SEGMENT_NAMESEGMENT_TYPEEXTENT_ID  BYTES
 BLOCKS
--- -- -- -- 
--
SYS_LOB020052C3$$   LOBSEGMENT  0  65536
  8
SYS_IL020052C3$$LOBINDEX0  65536
  8

= agora vou inserir novas linhas na tabela Mas com informação nos CLOBs :

SYSTEM:@xe:SQLDECLARE
  2 l_clob clob := empty_clob();
  3  BEGIN
  4 FOR i IN 1..10 LOOP
  5INSERT INTO T_LOB (c1, c2, c3) VALUES (i+1, 'Linha:'|| to_char(i+1), 
empty_clob()) RETURNING c3 INTO l_clob;
  6-- create a 400,000 bytes clob
  7FOR i IN 1..100 LOOP
  8  dbms_lob.append(l_clob, rpad ('*',4000,'*'));
  9END LOOP;
 10commit;
 11 END LOOP;
 12* END;


Procedimento PL/SQL concluÝdo com sucesso.

= veja que cfrme os dados foram crescendo e novo espaço foi necessário, novos 
extents foram alocados :

SYSTEM:@xe:SQLselect segment_name, segment_type, extent_id, bytes, blocks from 
dba_extents where tablespace_name='TS_LOB';

SEGMENT_NAMESEGMENT_TYPEEXTENT_ID  BYTES
 BLOCKS
--- -- -- -- 
--
SYS_LOB020052C3$$   LOBSEGMENT  0  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  1  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  2  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  3  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  4  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  5  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  6  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  7  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  8  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT  9  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT 10  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT 11  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT 12  65536
  8
SYS_LOB020052C3$$   LOBSEGMENT 13  65536
  8

Re: RES: [oracle_br] funcionamento do segmento de LOB

2014-04-03 Por tôpico jlchiappa
Obs complementar : sobre CACHEs, tenha em mente que eles ABSOLUTAMENTE não 
fazem sentido SEMPRE e em Qualquer caso : qualquer tipo de CACHE só é efetivo 
SE (além de vc ter memória SUFICIENTE sobrando pra ele, não tendo que tirar de 
áreas mais nobres), os dados são lidos Constantemente - óbvio Ululante que se 
vc subiu os dados lidos para um cache mas depois ninguém mais precisou 
consultar esses mesmos dados, vc só desperdiçou espaço VERIFIQUE se a sua 
Aplicação realmente consulta repetidamente esses LOBs, sim ?? 
 Tipicamente LOBs são dados não-estruturados, descrições complementares / 
detalhes de algo, então não é comum que sejam lidos e relidos constantemente : 
Até por isso o RDBMS não implementava por default CACHING de LOBs em algumas 
versões, yep ?? É uma escolha LOCAL, sua, mas BASEADA no que vc conhece do 
comportamente DA APLICAÇÃO, sim ?? No seu caso só vc sabe dizer, mas NF é o 
tipo do documento que nromalmente NÂO é consultado frequentemente : o usuário 
quer saber é o total de vendas no dia, a movimentação de estoque, etc, coisas 
essas que (ESPERO!!) o teu sistema não te obriga a varrer um LONGO e 
DESESTRUTURADO LOB para se obter, né não ?? 

  []s

   Chiappa

Re: [oracle_br] Pergunta rápida sobre options de se gurança

2014-04-03 Por tôpico jlchiappa
Roland,  Adicionalmente, notar que desconheço a sigla OSL nesse contexto de 
produto de Segurança : será que vc não quis dizer OSB (Oracle Secure Backup), 
OLS (Oracle Label Security, provável) ou OAS (Oracle Advanced Security) ??

  []s

   Chiappa

[oracle_br] Re:

2014-04-02 Por tôpico jlchiappa
Bom, eu não usei ainda em Forms web (como é o caso do Forms 10g) essas built-in 
de OLE, mas sei que essa rotina pertence ao pacote webutil : se com a sua 
máquina de mesa atuando como webserver (creio que é isso que vc quer dizer 
quando fala Localmente) a função roda ok mas não quando o Forms roda a partir 
de outra máquina remota atuando como webserver a gente pensa que :

a. pode haver alguma restrição (ie, firewall, bloqueios no plugin java - o 
Firefox é notório por os aplicar -, UAC, algo do tipo) impedindo o acesso pelo 
webserver ao java da máquina-cliente : junto com os sysadmins verifique Todas 
as possibilidades nesse sentido

ou

b. vc pode estar caindo em bugs (afaik essa conexão envolve odbc, pode ser 
drivers desatualizados) , ou mesmo bug na webutil em si ou mesmo no Forms 
Experimente atualizar a versão da webutil, do plugin java E do Forms 10g para 
os últimos patchsets/patches disponíveis

ou

c. vc pode estar simplesmente com má-configuração nos arquivos de config e/ou 
nas variáveis de ambiente : Compare cuidadosamente como estão os arquivos .conf 
e as variáveis de ambiente na sua máquina E lá na webserver... 

[]s

  Chiappa

[oracle_br] Re:

2014-04-02 Por tôpico jlchiappa
Dicas Adicionais :

- as versões mais recentes do java endureceram a segurança : não deixe de 
comparara exatamente a versão de java que vc tem na máquina-cliente que 
funciona com a webserver, E também de ** abrir o java Console ** e olhar 
detalhadamente os eventuais logs gerados quando for executar na webserver

- vc não diz mas IMAGINO que está usando o OAS, já que é Forms 10g : sendo 
isso, veja a nota metalink How To Install Webutil on 10.1.2.x Oracle 
Application Server (Doc ID 566628.1) para um passo-a-passo de instal e config 
da webutil no webserver, E não deixe de instalar/rodar o demo do webutil para 
confirmar que tá tudo bem por esse lado

- a nota metalink Master Note - Oracle Forms WebUtil Technical FAQ (Doc ID 
270940.1) centraliza os reports de jar files expirados e quetais, Não Deixe de 
a ler também

- pode ser interessante, DEPOIS que vc verificou tudo, tentar (ou ao menos 
comparar com o seu) os exemplos das notas How to Read Data from an EXCEL 
Spreadsheet into a Form Using Webutil Client_OLE2 (Doc ID 813535.1) e How to 
Copy Records From Form Into MS Excel Using WebUtil (Doc ID 247606.1) 

[]s

  Chiappa

[oracle_br] Re: RMAN as copy

2014-04-01 Por tôpico jlchiappa
Tudo jóia ? Então, ao que entendi o que vc quer é duplexar os arquivos de 
backup, mas em devices diferentes (disco e fita, no caso) - o procedimento 
built-in para se obter isso já na hora que se faz o backup é a opção COPIES do 
comando BACKUP (ou pode setar via SET/CONFIGURE), mas o documento 
correspondente (manual Oracle® Database Backup and Recovery Reference 11g 
Release 2 (11.2) no item sobre o comando BACKUP nos diz :


COPIES integer  Sets the number of identical backups (1 - 4) that RMAN creates. 
The default value is 1.

You can use multiple format strings to specify different names and locations 
for the copies. Example 2-22 illustrates a duplexed backup to different 
locations on disk.

RMAN can duplex backups to either disk or tape, but *** cannot duplex backups 
to tape and disk simultaneously *** .

You can specify duplexing in multiple commands.


 ou seja, com a opção específica de duplex vc não consegue o que quer Vc 
teria as seguintes opções, então :
 
 1. realmente passar a fazer o backup em disco, e posteriormente copiar (não 
mover, copiar) os arquivos do backup para fita, ** por fora do RMAN **, usando 
a opção apropriada do teu software de backupgerenciamento de fita : isso vai 
te dar a vantagem da performance (já que backup para disco é via de regra mais 
rápido que para fita) E a vantagem de liberar a fita durante a janela de backup 
(essa cópia dos arqs de backup pode Inclusive ser feita durante o dia, período 
em que normalmente não há backups)... As desvantagens são : vc vai ter que 
mudar as suas rotinas de backup atuais E o gerenciamento do conteúdo da fita 
vai ser feito por fora do RMAN, o RMAN nem imagina que existe essa cópia do 
backup em fita...
 
 ou
 
 2. para vc obter o mesmo efeito que 1. acima mas com algum controle/registro 
por parte do RMAN, vc pode usar o comando BACKUP BACKUPSET (não confundir com o 
BACKUP databaseouqueobjetofor AS BACKUPSET, que vc usa para backupear o 
objeto/database em formato de backupset) : com esse comando BACKUP BACKUPSET 
(sem o AS) vc está mandando o RMAN fazer uma cópia (em fita, presumivelmente) 
do teu backupset... No mesmo manual acima citado, veja o item Backups of 
Backup Sets
 
 ou
 
 3. se for imperativo vc manter o backup principal indo para a fita, a opção 
seria vc trazer da fita os arquivos do backup recém-feito : vc até poderia usar 
as opções de restore do RMAN só trocando o local de destino e o id do database, 
mas imho o mais simples seria fazer por fora do RMAN, ie, apenas lançar mão dos 
comandos de leitura e gravação dos arquivos em fita do teu gerenciador de 
fitas/backups (Tivoli, NetBackup, seja qual for) e ler da fita e gravar em 
disco os arquivos correspondentes ao último backup - em caso de necessidade 
depois vc cataloga esses arqs em disco para o RMAN tomar conhecimento deles
  A vantagem é que vc está testando o que foi gravado na fita, em tese pegando 
erros de gravação pouco tempo depois, e a desvantagem principal é que vc VAI 
estar usando o hardware de fita por muito mais tempo, facilmente isso pode 
interferir no schedule de backup/restore de Outros ambientes que queiram usar o 
mesmo hardware...
  
  ou
  
  4. manda um backup que não seja as backupset (um image/as copy, como vc 
sugere) para disco : faz mito tempo que eu não faço isso, mas iirc sim, um 
backup do tipo cópia integral do database não interferiria no sequenciamento 
dos seus backups as backupset Testa aí no seu ambiente de 
testes/homologação mas afaik é isso mesmo
  
  Blz ? De recomendações, se eu fosse vc ia de 1 ou 2, mas em tese qquer uma 
das opções funcionaria : analise todas e veja qual a melhor pro seu caso...
  
   []s
   
 Chiappa

[oracle_br] Re: Qual a melhor forma implementar Pl/sql com Shell Script ?

2014-04-01 Por tôpico jlchiappa
Do ponto de vista do DBA, com CERTEZA ele nem sequer deveria estar envolvido 
nisso : pra começo de conversa, o DBA só atua no banco de dados (e com 
restrições no servidor de banco de dados) e normalmente nem o banco em si nem o 
servidor tem acesso à impressoras, nem á outros elementos da rede - banco de 
dados via de regra é um elemento passivo, que é conectado/acessado por muitos 
mas Não conecta nem acessa ninguém... Então imho quem tem que escrever um 
programa-cliente que conecte no banco, recupere a informação, gere um arquivo  
e conecte na impressora pra descarregar o tal arquivo é a equipe de 
DESENVOLVIMENTO, usando a tool/linguagem de programação que conheça/tenha : não 
caberia apito NENHUM para o DBA nesse caso EM ESPECIAL se for dentro de um 
pacote extensível tipo o Oracle EBS, neles já há toda uma riqueza de tools de 
extensão programáticas...

 CASO realmente um DBA seja encarregado de uma tarefa do tipo (não deveria a 
meu ver, mas enfim), no banco de dados não há muitas opções : primeiro, para 
gerar o arquivo-texto com dados, é OU usar SPOOL num script sqlplus OU gerar o 
arquivo numa rotina PL/SQL via utl_file  OU acionar (via scheduler ou java ou 
daemon) um executável externo (script shell ou  programa externo,adquirido ou 
escriot numa tool que exista no servidor Oracle) que gere o tal arquivo...  
Depois de gerado o arquivo, para enviar para outro local/dispositivo PRIMEIRO 
vc tem que se assegurar que haja conectividade entre o servidor de banco e o 
destino (como eu disse antes isso Não É comum, via de regra o servidor e/ou o 
database não acessam ninguém, só são acessados) , e SEGUNDO , já que no RDBMS 
não há em princípio uma rotina para transferência de arquivos/conexão em 
devices, vc terá que implementar algo : poderia ser a nível de SO (tipo NFS ou 
compartilhamento Samba), poderia ser sum shell script acionado pelo database 
via java ou scheduler ou daemon, OU mesmo poderia ser escrito em PL/SQL (usando 
os comandos tipo UTL_TCP e quetais)...
 Como Não É algo que um DBA faça rotineiramente, não há imho nenhuma 
Recomendação especial preferindo um ou outro .
 
  []s
  
Chiappa

[oracle_br] Re: Large Pages no Windows

2014-04-01 Por tôpico jlchiappa
 Eu ainda não tive ocasião de fazer isso nas máquinas Windows daqui, mas 
algumas obs adicionais pra vc pensar :

 a. é verdade que com memória alocada em páginas maiores, a quantidade de 
acessos necessária deverá diminuir, E também que dividindo a RAm em áreas 
maiores logicamente menos latches/controles internos vão ser necessários para o 
SO a controlar,  mas a meu ver o nenefício principal é outro : a área alocada 
em huge pages normalmente é LOCKADA, ie, vc não tem nenhum tipo de page steal, 
o SO ** não vai ** ficar tirando páginas no momento não-usadas ou com pouco 
uso dessa área lockada para atender outros processos que demandem memória : 
isso é Excelente nos casos em que vc efetivamente quer que a SGA não seja 
tocada/mexida/acessada por ninguém de fora do RDBMS, poupando muitas operações 
lógicas e latching por parte do SO... 
 A desvantagem é uma decorrência Óbvia desse lock : a memória que vc indicou 
como a ser controlada por huge pages fica permanentemente alocada e servidndo 
apenas a SGA : se houver um processo necessitando dessesperadamente de memória 
comum para a PGA, ou se o So precisar de memória para os fins internos dele, 
não tem como alocar nada dentro dessa área marcada como huge page area...

 b. a nota de huge pages para Windows (Using Large Memory Pages on 64-Bit 
Windows Systems (Doc ID 422844.1) no metalink) não cita, mas em outros 
ambientes é diretamente declarada a Incompatibilidade entre huge pages e AMM 
(Automatic Memory Management) : isso faz todo o sentido, já que a memória 
alocada em huge pages VAI estar lockada não tem como se ficar 
aumentando/diminuindo ela, nem re-alocando-se pools , ela é um bloco único 
alocado de uma vez Confirme que o seu ambiente Windows não está usando 
nenhum tipo de AMM, preferencialmente...

 []s

  Chiappa

Re: [oracle_br] Large Pages no Windows

2014-04-01 Por tôpico jlchiappa
okdoc - apenas, como eu disse, antes de pensar em implementar huge pages, além 
de desabilitar AMM, tenha certeza que :

- vc TEM memória suficiente para atender aos demais requisitantes descontando a 
SGA que vai ficar lockada, fixa e inacessível para eles

- vc historicamente NUNCA chegou numa situação de memory pressure, aonde parte 
da RAM vai pro swap file para poder atender solicitações extraordinárias

- vai seguir as obs reportadas na nota metalink que citei, EM ESPECIAL o reboot 
antes de implementar huge pages

e nem preciso dizer, vc vai implementar isso Primeiro em desenv, depois em HOMO 
e só depois em prod...

 []s
 
   Chiappa

Re: RES: [oracle_br] Large Pages no Windows

2014-04-01 Por tôpico jlchiappa
dado o fato que hugepages atende apenas SGA, na verdade a sua pergunta deveria 
ser diferente, e seria : quanto reservar para a SGA, de forma que sobre espaço 
pras OUTRAS alocações do RDBMS (como PGA) E para as necessidades do SO ??
 A resposta só pode ser DEPENDE : só vc sabe o quanto o teu database (as tuas 
aplicações, na verdade) se beneficiariam ou não de caches maiores (na verdade, 
SGA pode ser entendida como área de CACHEs, não só cache de dados mas caches de 
internos do RDBMS de um modo geral) Algumas regras de dedão falam em 
coisa de 30% para SGA (e portanto 30% como huge pages), mas isso pode variar 
Enormemente : eu recomendaria vc começar MODESTAMENTE, com algo entre 20% a 
25%, e ir aos poucos aumentando, sempre COLETANDO evidências diretas, como 
WAITs diminuídos - DESCONSIDERE cache hit ratios e quetais, imho a ** única ** 
maneira Confiável de saber se teus caches estão sendo efetivos é vc mensurar 
que a MESMA EXATA quantidade de blocos lidos, com a MESMA carga de trabalho, 
mesmo latching, tudo igual, quando o cache era de tamanho x demorava n segundos 
e com cache aumentado para y caiu para n-m segundos

  []s

  Chiappa

Re: [oracle_br] Remover Datafiles

2014-03-28 Por tôpico jlchiappa
 Eu penso cá com meus botões que mais TENSO ainda é se esse ambiente com 
não-sei-quanto clientes importantes dependendo dele não tiver nem um raio de um 
standby (bem provável, pelo jeito) , se esse hardware aí crashar sem 
recuperação possível  (como TODO e QUALQUER hardware, isso não é uma questão de 
SE, mas de QUANDO) aí que neguim vai ver o que é bom pra tosse sem ser xarope 
melagrião... Isso sem contar que não havendo um segundo hardware COM CERTEZA a 
política de backup Não foi testada NUNCA, absolutamente NUNCA foi feito um 
restore de produção pra se criar um ambiente Homologação (Homologação esse que 
Serviria também pra pré-teste de patchsets e patches), tá tudo só pra Inglês 
ver...
 Com a minha sorte de aranha eu é que nunca nem tento fazer algo do tipo...

 []s

  Chiappa

Re: [oracle_br] IMP-00016 Required Character Set Conversion Not Supported Error when Import to Oracle Database

2014-03-28 Por tôpico jlchiappa
 Na verdade, se vc tivesse Consultado a documentação, vc teria encontrado :

Oracle Error: IMP-00016

Error Description:
Required character set conversion (type number to number) not supported

Error Cause:
Import could not convert the character format of the export file into the 
native character format.

Action:
Change the user character set by setting the NLS_LANG environment variable to 
match the character set of the export file. 

== OU SEJA, poderia ter sido uma simples questão de ajustar o ambiente - SE e 
APENAS SE esse procedimento não tivesse funcionado, Aí SIM vc partiria para 
alteração no database, sim ??? E SE fosse necessária a alteração, ABSOLUTAMENTE 
não seria feita se fazendo DML nos objetos internos do database, isso é 
garantia quase CERTA de deixar um database não-suportado em caso de problemas, 
Não pe documentado nem Recomendado o procedimento que vc fez...

 Neste cenário, o que eu diria então (já que esse database tá Incerto, sabe-se 
lá se tá funcionando ou não, a partir do momento que vc faz DML no schema SYS) 
é simplesmente DROPAR esse database e RECRIAR um novo, desta vez com o 
cahracterset apropriado...

 []s

  Chiappa

[oracle_br] Re: monitoramento de suporte

2014-03-28 Por tôpico jlchiappa
 Bem, eu realmente não me lembro de ter visto uma thread assim aqui no Grupo, 
então vou responder diretamente : penso que o mais prático seria ou vc ter uma 
stored procedure dentro do banco ou vc ter um shell script no SO, e o tal DBA 
executaria é a procedure/shell de uma vez só (por mais que seja um Estagiário, 
Júnior ou coisa assim não faz o Menor Sentido desperdiçar o tempo dele exigindo 
que ele faça uma por uma as consultas, centralize todas as consultas num só 
programa, numa só coisa que ele executa de uma vez) - aí a própria coisa 
(procedure/shell/o que for) já gera um log ou criando um arquivo-texto ou 
inserindo numa tabela de log... ok ? INCLUSIVE, o log poderia ser já num 
formato mais caprichado (tabela HTML gerado pelo sql*plus, por exemplo) , que 
aí já serviria INCLUSIVE de report para a gerência/administradores (tipicamente 
esse pessoal Gosta de receber um report mostrando que foi feita a 
monitoração/checklist/whatever)...
 
  []s
  
Chiappa

Re: [oracle_br] Re: Sessão imortal

2014-03-27 Por tôpico jlchiappa
Só uma obs : se Fosse realmente 24x7 a sério, crítico de verdade, vc 
necessariamente TERIA aí OU alguma solução de alta-disponibilidade com disaster 
recover (ie, standby ou réplica para um outro local) OU pelo menos um solução 
de aumento de resiliência contra falha de servidor (ie, RAC) - aí não teria 
NENHUMA emoção envolvida no shutdwon/startup, se ele demorasse ou desse qquer 
problema vc simplesmente ativaria a solução de HA (que tipicamente leva menos 
de um minuto, ou nem isso) e o usuário-final nem saberia do problema, ENQUANTo 
vc discute opções com o Suporte Oracle...

 []s
 
   Chiappa

[oracle_br] Re: Remover Datafiles

2014-03-27 Por tôpico jlchiappa
  O que acontece no Windows é que muitas vezes mesmo quando o arquivo é 
fechado, o file handle não é liberado enquanto o processo que 
criou/solicitou/usou ele não for encerrado : isso é comum de se observar por 
exemplo quando vc abre uma arquivo num editor de texto, aí mesmo depois de 
fechar o arquivo no editor ele continua lockado enquanto o editor não for 
encerrado Com o utilitário file handle lá do pacote Sysinternals vc vê 
direitinho isso...
   Em alguns casos vc até consegue 'deletar'/liberar esse file handle com um 
utilitário específico (google por windows file unlocker que vc acha uns tantos 
quantos), mas não é garantido em 100% dos casos - aí, se vc não conseguir , o 
que vc pode fazer é OU apenas DIMINUIR esse datafile para o mínimo possível, OU 
colocar o datafile como offline OU mover os dados pra outra tablespace e 
colocar a tablespace offline, ou coisas assim, enquanto não chega na janela de 
manuteção desse db...
   
[]s

  Chiappa

Re: [oracle_br] Re: Sessão imortal

2014-03-27 Por tôpico jlchiappa
  Eu há muuuito tempo aprendi que esse pessoal :
  
  a. só entende NÚMEROS
  
  e
  
  b. só leva em consideração o que tá escrito e assinado
  
  
Assim, enquanto técnicos a nossa Obrigação é produzir um documento que mostre a 
(normalmente alta!) chance de um equipamento falhar, que liste o TEMPO 
necessário para se comprar outra máquina e reinstalar tudo/voltar backup após 
um crash (DIAS, pelo menos), o CUSTO para o negócio da indisponibilidade do 
database em questão (exemplo, multa NFs não emitidas, vendas não concretizadas 
, processos judiciais abertos por pacientes, enfim) versus o CUSTO de uma 
mínima infra de disponibilidade (se não tem $$ para RAC nem para disaster 
recover, ao menos um segundo servidor e um segundo storage), e demandar 
assinatura de ciência de quem de direitoSó isso : com esse doc na mão 
Ninguém pode alegar ignorância de custos , é isso O que é uma posição 
Arriscada é vc não fazer nada, não tem nada em mãos, aí quando acontecer um 
crash (não é SE, mas QUANDO) neguim vim te cobrar milagre, sim ?

Inclusive, cabe uma outra obs : é verdade que ninguém pode te assegurar que a 
nova versão de database (ou que um eventual patch/patchset) não vai causar 
problemas com a Aplicação, mas é JUSTAMENTE PARA ISSO que existe o ambiente de 
Homologação - simplesmente se testa, testa E RETESTA o patch/patchset/upgrade 
na máquina homologação, que é IGUALZINHA à Prod, contra um servidor homologação 
da aplicação, é isso... E esse servidor standby/disponibilidade que citei acima 
Tranquilamente poderia serveir Também como ambiente de Homologação, yes ?? E 
esse servidor servirá tambpem para vc TESTAR efetivamente a sua política de 
backup/restore de prod...

 []s
 
   Chiappa

[oracle_br] Re: Remover Datafiles

2014-03-27 Por tôpico jlchiappa
Uma opção adicional ao utilitários específicos de unlock é a opção de Close 
Handle do Process Explorer, cfrme mostrada em 
http://www.howtogeek.com/128680/how-to-delete-move-or-rename-locked-files-in-windows/
 : como já sabemos que vc tem o Process Explorer instalado da outra thread, 
tenta com ele também

 []s

   Chiappa

[oracle_br] Re: Sessão imortal

2014-03-26 Por tôpico jlchiappa
Bom, antes de tudo necessariamente se observa que  banco de dados extremamente 
crítico (para o negócio) e 24x7 mas em 10.2.0.3.0 (com o .0 indicando que 
NENHUM patch foi Aplicado, E sendo 10gr2 absolutamente sem bugfix e 
PROVAVELMENTE sem Suporte nenhum, já que dificilmente alguém se coça a pagar 
Suporte Extendido), é uma Contradição em termos - sorry, mas não parece ser tão 
crítico assim, se neguim se habilita a rodar na bamba, sem Suporte algum se 
der pau

Isso posto, a resposta : primeira coisa, não sei se vc sabe quando vc faz um 
ALTER SYSTEM KILL SESSION vc ** não ** está matando a sessão, e sim está 
mandando ela se matar - assim que puder, ela se matará cfrme vc mandou... A 
questão é que o KILL foi designado para ser graceful, ie, AVISAR gentilmente o 
usuário, dando uma mensagem Clara e Auditável para ele tipo ORA-xxx your 
session was killed, e para isso ele só encerra efetivamente quando o processo 
do usuário responde que recebeu e exibiu pro usuário final a mensagem - o 
problema é quando, por qualquer exceção/problema imprevisto o processo que 
atendia o usuário morreu/ficou bloqueado/ficou irresponsivo : nesse cenário 
logicamente o RDBMS vai ficar Eternamente esperando a resposta que nunca vai 
vir...  É por isso que se vc ** não tem certeza ** se está tudo OK, o ideal via 
de regra é pedir um ALTER SYSTEM DISCONNECT SESSION , esse cara não fica 
esperando por resposta nenhuma, sim ?? Pra este caso que vc já usou o KILL não 
adianta mais, mas fique sabendo para os próximos... Outra coisa a Avaliar para 
o futuro é vc avaliar a viabilidade de diminuir o timeout de TCP (que 
normalmente é longuíssimo no Windows), e no banco implantar DCD e via profile 
um LIMIT máximo de x horas para as sessões - muitas vezes isso melhora 
Muitíssimo o tempo que o RDBMS leva para 'perceber' que uma sessão/processo 
está zumbizando...

Continuando : antes de discutirmos , sobre as suas opções ANTES do recycle do 
database, primeiro de tudo veja em 
http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php como 
identificar a sessão e o processo envolvidos. Feito isso, consulte repetidas 
vezes (com vários minutos de intervalo) a GV$SESSION (veja as colunas de 
waits/eventos), GV$SESSION_LONGOPS (com um WHERE TIME_REMAINING  0) e a 
GV$TRANSACTION para ver se está havando algum progresso no rollback ou seja no 
que for que a sessão a ser morta tá fazendo... Vale também ver 
GV$TRANSACTION_ENQUEUE, DBA_PENDING_TRANSACTIONS (se vc usa transações remotas) 
e  GV$LOGSTDBY_TRANSACTION/GV$LOGSTDBY_TRANSACTION/GV$XSTREAM_TRANSACTION se vc 
usa tais features...

Com essa informação na mão : SE não está havendo progresso nenhum, acho que a 
opção que te resta é tentar matar a task diretamente no SO, sem confiar no 
ORAKILL : o busílis é que o ORAKILL apenas sinaliza para o process ORACLE.EXE 
no Windows eliminar a thread especificada... A idéia é (** JUNTO COM SEU 
SYSADMIN!! **) tentar matar diretamente a thread em questão via Process 
Explorer : esse cara é um utilitário Externo que a m$soft comprou, veja em 
http://technet.microsoft.com/en-us/sysinternals//bb545021.aspx ...

Eu só não sei se eu Arriscaria meu pescoço fazendo coisas do tipo num ambiente 
sem Suporte nenhum, como Creio que deve ser o caso : pensa aí se é viável ...

 []s
 
   Chiappa

Re: [oracle_br] Alteração no formato de data do ba nco.

2014-03-25 Por tôpico jlchiappa
Eduardo, não adianta muito procurar pelo em ovo, o que é, é... Está MAIS que 
documentado (vide manual Oracle SQl Reference) que ALTER SESSION altera apenas 
e tão somente a sessão corrente - desconectando da sessão vc Rigorosamente Não 
TEM como ver nenhum efeito do ALTER SESSION executado na sessão que se 
encerrou, okdoc ?? Isso é CONCEITUAL, Documentado até o extremo, não tem como 
se aceitar NENHUMA alegação sobre isso...
 O que ** PODE ** ter acontecido é algo na linha do que  o André sugeriu, ie : 
na sessão que vc fez o ALTER SESSION vc (ou o sistema via trigger ou 
assemelhados) alterou alguma tabela interna do sistema, aonde a Aplicação 
mantém o formato de datas que quer usar, okdoc ?? 
  Então o negócio é não aceitar qquer alegação, não aceitar o migué que o 
pessoal pode estar querendo te dar, e vc (junto com um DBA, se vc não for DBA) 
** e ** junto com uma Analista/alguém que conheça a Aplicação :
  
  - consultar a  v$nls_parameters, principalmente NLS_DATE_FORMAT e 
NLS_DATE_LANGUAGE  
  
  - consultar os TRIGGERS que possam estar ativos nesse database
  
  - levantar aonde a Aplicação guarda exatamente os parãmetros tipo formato de 
data, se ficar Comprovado que ela não usa o default do banco mostrado na 
v$nls_parameters
  
  []s
  
Chiappa

Re: RES: [oracle_br] Function SUBSTR

2014-03-25 Por tôpico jlchiappa
Explica melhor : ao invés de vir 10 caracteres o substr(USERNAME,1,10) tá 
trazendo mais ou menos caracteres que isso ?? Se sim,  Possibilidades :

- o banco 11g tá usando a completa inhaca do CURSOR_SHARING : há Dúzias de bugs 
com esse cara, inclusive de wrong results

ou

- vc tá usando no banco 11g um characterset double-byte, aonda são usados dois 
bytes para cada caracter representado : o manual mesmo nos diz :

SUBSTR functions

The SUBSTR functions (SUBSTR, SUBSTRB, SUBSTRC, SUBSTR2, and SUBSTR4) return a 
portion of string, beginning at a specified position in the string. The 
functions vary in how they calculate the length of the substring to return.

SUBSTR calculates lengths using characters as defined by the input 
character set.



ou

- vc tem algum caracter especial, high-ascii sendo retornado MAS o seu 
programa-cliente não os interpreta corretamente : DIFICILMENTE se usam 
caracteres especiais em identificadores internos do database JUSTAMENTE por 
questões do tipo, mas sabe-se lá...

Eu digo pra vc CONSULTAR as propriedades desse database, CONSULTAR os 
parâmetros não-default setados, CONSULTAR os eventos setados E mandar um :

select  USERNAME, dump(username), OSUSER,SID,SERIAL#,LAST_CALL_ET 
ELAPSED,MACHINE
FROM   V$SESSION
WHERE (TYPE  'BACKGROUND')
AND   (STATUS = 'SNIPED');

e veja o que vc vai ver

[]s

  Chiappa

Re: RES: [oracle_br] Function SUBSTR

2014-03-25 Por tôpico jlchiappa
Acho que entendi a questão, não tem nada a ver com o SUBSTR : pelo que entendo, 
o SUBSTR está funcionando 100%, trazendo apenas os 10 primeiros caracteres (ou 
os que existam, se a coluna for menor que 10 cacarcteres), MAS o que ocorre é 
que no sqlplus se vc não formatar ele assume como largura da coluna na tabela , 
tipo (num banco 11g) :

= veja que ** não tenho ** formato definido para a coluna :

12:24:33 SYSTEM:@sdpr:SQLcolumn username
SP2-0046: COLUMN 'username' nÒo definido

= faço a consulta :

12:26:06 SYSTEM:@sdpr:SQLl
  1  select substrb(USERNAME,1,10) USERNAME,OSUSER,SID,SERIAL#,LAST_CALL_ET 
ELAPSED,MACHINE
  2   FROM   V$SESSION
  3   WHERE (TYPE  'BACKGROUND')
  4   AND   (STATUS = 'ACTIVE')
  5*  ORDER BY ELAPSED DESC
12:26:09 SYSTEM:@sdpr:SQL/

USERNAME   OSUSERSID  SERIAL#   
 ELAPSED MACHINE
-- -- --  
-- 
SIST#  CHIAPPA1967\X5001129 208721091   
9643 CHIAPPA1967\WIN24
SIST#  DCSYSTEMINT  251422683   
 654 CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  174643987   
 105 CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  270727473   
  94 CHIAPPA1967\WIN0
   SYSTEM   137238497   
  55 WIN72
SIST#  DCSYSTEMINT   62929395   
  54 CHIAPPA1967\WIN0
   SYSTEM   137439589   
  30 WIN72
   SYSTEM   194142845   
  24 WIN72
SIST#  CHIAPPA1967\F2200237 172443379   
  10 CHIAPPA1967\NT937
SIST#  CHIAPPA1967\X5000799 232726699   
   7 CHIAPPA1967\NT937
SIST#  CHIAPPA1967\X5000506  99620817   
   3 CHIAPPA1967\NT1147
SIST#  CHIAPPA1967\F4402849 269845645   
   1 CHIAPPA1967\NT1150
SIST#  CHIAPPA1967\X5000735  41613491   
   0 CHIAPPA1967\NT1147
SYSTEM Y0623080 190911409   
   0 CHIAPPA1967\01-14207D311327

14 linhas selecionadas.

== acima, o SUBSTR ** FUNCIONOU 100% CORRETO **, mas o sqlplus, POR CONTA 
PRÓPRIA, sem formatação assumiu uma largura para a coluna... Agora VOU indicar 
que quero para a coluna uma largura de 10 :

12:26:15 SYSTEM:@sdpr:SQLcolumn username format a10
12:26:29 SYSTEM:@sdpr:SQLl
  1  select substrb(USERNAME,1,10) USERNAME,OSUSER,SID,SERIAL#,LAST_CALL_ET 
ELAPSED,MACHINE
  2   FROM   V$SESSION
  3   WHERE (TYPE  'BACKGROUND')
  4   AND   (STATUS = 'ACTIVE')
  5*  ORDER BY ELAPSED DESC
12:26:32 SYSTEM:@sdpr:SQL/

USERNAME   OSUSERSID  SERIAL#ELAPSED MACHINE
-- -- --  -- 

SIST#  CHIAPPA1967\X5001129 208721091   9660 
CHIAPPA1967\WIN24
SIST#  DCSYSTEMINT  251422683671 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  174643987122 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  270727473111 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT   62929395 71 
CHIAPPA1967\WIN0
SIST#  CHIAPPA1967\X5000799 232726699 24 
CHIAPPA1967\NT937
SIST#  CHIAPPA1967\X5000506  99620817 20 
CHIAPPA1967\NT1147
SIST#  DCSYSTEMINT  192933667  5 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  229448935  1 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT  151929621  0 
CHIAPPA1967\WIN0
SIST#  DCSYSTEMINT   58250161  0 
CHIAPPA1967\WIN0
SYSTEM Y0623080 190911409  0 
CHIAPPA1967\01-14207D311327

12 linhas selecionadas.

== TÁ VENDO (se a formatação do yahoo!groups deixar:) como está com 10 
caracteres de largura a coluna ??? Pra mim é ISSO que vc está vendo aí : SUBSTR 
funcionando 100% certo mas sqlplus ASSUMINDO uma largura para a coluna e 
portando mostrado brancos na tela, yes ??

 []s

   Chiappa

Re: [oracle_br] UTL_FILE

2014-03-24 Por tôpico jlchiappa
 Pode ser, né André ? 
  Alessandro, a ** primeira ** coisa que se faz ao debugar uma rotina PL/SQL é, 
se possível/viável, justamente se desativar temporariamente, comentando) as 
EXCEPTIONS pra vc receber o erro puro, sem tratamente de nenhum tipo...  
Outra possibilidade é que o tal banco novo 11g esteja num novo servidor, e 
nesse novo servidor o path C:\ não esteja Autorizado para o usuário do Sistema 
Operacional que instalou e roda o RDBMS Oracle, e/ou o arquivo LISTA.TXT já 
exista e o usuário em questão não tenha acesso á ele, sim ?  Ao colocar * no 
UTL_FILE_DIR, vc diz PARA O RDBMS que qquer path é válido, mas AINDA CONTINUA 
sendo preciso Autorização no Sistema Operacional... INCLUSIVE, vc não diz mas o 
C:\ indica que o servidor do RDBMS é Windows : vc ** sabe ** que nos Windows 
mais recentes (de Win7 para cima) nós temos a figura do UAC, ** e ** neles as 
pastas-ráiz dos drives via de regra Não São mais liberadas pra todo mundo, 
okdoc ? Veja isso também...
  
   []s
   
 Chiappa

[oracle_br] Re: APEX

2014-03-21 Por tôpico jlchiappa
 Embora eu já não desenvolva, alguns clientes meus estão com muito interesse no 
APEX e participei (como Suporte de banco) de uns aconselhamentos pra eles, 
então até conheço um bom tanto da teoria e fas funcionalidades básicas do 
sujeito... De modo geral, as coisas positivas do APEX são :
 
 - ele roda dentro do database Oracle, em PL/SQL, então utiliza naturalmente e 
de forma transparente todas as vantagens do PL/SQL, tais como cache próprio do 
p-code pl/sql, encapsulamento em packages, bind variables automáticas e 
transparentes, variáveis do tipo ROWTYPE para vc receber registros de dados, 
versionamento de seus programas com Editions, e todas aqueleas que já 
discutimos tantas vezes aqui no Fórum e a documentação do PL/SQL e o site 
http://www.oracle.com/technetwork/database/features/plsql/index.html 
discutem/mostram
 
 - aproveita transparentemente todas as opções de 
escalonamento/HA/segurança/performance do database (de RAC à DG, de result 
cachesets a pool de conexões nativo do database, e etc, etc, o APEX pode se 
beneficiar de modo transparente e natural, sem absolutamente nenhuma 
necessidade de re-escrita, add-ons ou quetais, já que ele roda dentro do 
database E é um produto criado pela mesma empresa do database
 
 - curva de aprendizado MUITO menor que alghumas outras alternativas : 
principalmente comparando com o mundo de programação Java, onde além da 
linguagem (que já não é nem simples nem focada em processamento de dados, ao 
contrário do PL/SQL) vc TEM que dominar um sem-número de outras 
APis/add-ons/complementos (se começa a falar rapidamente em JPA, JSP, beans, 
JADE, a sopa de letrinhas e de softwares vai longe), o APEX é consideravelmente 
mais simples... Foi exatamente essa simplicidade e leveza que levou as empresas 
que citei / atendi a desconsiderar outras opções, além do fato de que eles não 
dispunham de pessoal especializado em desenvolvimento WEB...
 
 O ponto principal negativo do APEX, porém, é bem importante : ele tem ** 
limitações **, tem máximos de recursos/componentes que vc pode usar numa página 
web : há máximo de regiões atualizáveis/dinãmicas na página, máximo de 
backgrouns, máximo de colunas a recuperar do database por página, máximo de 
itens que vc pode ter numa página A cada release esses máximos vem subindo 
mas de forma geral eles Existem : assim, se a sua aplicação é um dasboard, com 
** centenas ** de colunas/itens, com dezenas de painéis, etc, PROVAVELMENTE o 
APEX não vai te satisfazer/atender
 
 Alguns recursos bons para vc tomar conhecimento na tecnologia : 
http://www.enkitec.com/arc (um Portal de uma consultoria gringa com montes de 
exemplos, demos e artigos especificamente sobre o APEX), 
http://www.inside-oracle-apex.com/ , http://www.apex-at-work.com/ , 
http://apex2rule-the-world.blogspot.com.br/, http://discoverapex.com/ , 
https://cdivilly.wordpress.com/ , http://apexresource.wordpress.com/ , 
http://joelkallman.blogspot.com.br/ , http://www.apex-home.com , 
http://www.easyapex.com/index.php , http://dgielis.blogspot.com.br/, 
http://sysdba.wordpress.com/  e http://apex-evangelists.com/index.html (este é 
um concentrador de blogs e artigos, e não casualmente vc verá que quase TODOS 
os autores dos blogs/portais que citei tão lá)...
  Outro recurso muuuito legal é 
http://www.oracle.com/technetwork/tutorials/index.html : como a Oracle tá 
incentivando bastante o APEX, nesse portal de demos , cursos e 
tutoriais/how-tos da Oracle se vc procurar por APEX ou por Application Express 
vc acha Toneladas 
  
  []s
  
Chiappa

Re: [oracle_br] APEX

2014-03-21 Por tôpico jlchiappa
 Tudo jóia ? Então, é absolutamente válido o cenário que vc propõe : a página 
do APEX (e a de download) no technet Oracle diretamente explicita que o APEX é 
grátis em qualquer ambiente E roda inclusive no XE, e como o database 
XE/Express Edition é grátis para usar aonde quiser, com quantos usuários quiser 
conectando nele (veja no Contrato na hora do download que em nenhum momento se 
toca em qtdade de usuário, ambiente web ou nçao, nada), em hardware de produção 
ou não,  e usar como quiser com o que já vem nele, DESDE que seja uma instãncia 
só no servidor  (as opções/add-ons que demandam Licença paga, como os packs, 
RAC, dataguard avançado, etc, simplesmente Não Existem no instalador dele e não 
tem como vc as instalar depois)  SIM, vc pode usar o APEX livremente no XE até 
os limites do XE inclusive para aplicações que vá vender, para processar dados 
reais de produção, como desejar
  OBVIAMENTE as limitações de tamanho máximo/capacidade do XE são ** severas 
**, até para não canibalizar mercado dos RDBMSs de entrada da Oracle (como o 
Standard Edition), mas para uma aplicação de pequeno porte, não vejo nenhum 
issue ... Um dos meus antigos clientes na última vez que ouvi falar estava na 
reta final de implementar um módulo do sistema de frente de caixa com XE e 
APEX, sem problema algum, a não ser justamente a questão dos limites impostos 
ao XE...
  
   []s
   
 Chiappa

Re: [oracle_br] APEX

2014-03-21 Por tôpico jlchiappa
Na verdade nem é especificamente (ou somente) javascript, alguns os templates 
normalmente são custom stylesheets descritas em html, cfrme 
http://www.apexninjas.com/blog/2011/03/customizing-report-templates/ por 
exemplo exemplifica - mas realmente é como eu disse em outras msgs de outras 
threads, a principal dificuldade de quem vem do Forms é que lá vc tinha 
built-ins prontas e documentadas para mudar comportamento de tela, de 
navegação, de quase tudo, e nas tools web (já que vc está executando a 
aplicação em web browsers, que só entendem ou html ou alguma forma de java, 
principalmente) vc acaba tendo que escrever alguma coisa extra...
 Essa realmente é uma vantagem do formspyder, e é mais por isso, penso eu, que 
ele é cobrado : vc está pagando o custo dos desenvolvedores lá deles terem 
escrito as tais rotinas todas para vc... E óbvio, Nem Sempre seja qual for a 
tool vai ter Todas as rotinas que vc possa precisar para customizar 
comportamento de telas/navegação/etc no browser prontinhas - as mais comuns vão 
estar lá, ok, mas não confiemos que toda e qualquer necessidade vão ser sempre 
supridas pelas rotinas já desenvolvidas/fornecidas, Pode bem Ser que em algum 
momento ainda se precise escrever algo...
 
 []s
 
   Chiappa

Re: [oracle_br] APEX

2014-03-21 Por tôpico jlchiappa
  Só pra deixar Escrupulosamente Claro pra quem for ler essa thread no futuro : 
os limites do APEX Absolutamente Não são a quantidade de páginas na aplicação , 
não são a quantidade de dados processados... VC pode ter milhares e milhares de 
páginas, como vc testemunha, sem prob algum, a questão é por página...
O manual mesmo (Oracle® Application Express Application Builder User's Guide 
Release 4.0, apendix B : Oracle Application Express Limits) entre outros cita :



One interactive report per page

100 columns can be seen using report columns. You can edit additional columns 
using Tree view or paginating through Report Column Attributes.

999 rows per column heading filter (if no custom LOV is specified in the column 
attributes)

Forms


100 enterable items per page

32767 bytes for a text area or rich text editor item

Two columns for primary key (when using built in DML processes)

See Also: Creating Forms

Tabular Forms


1 wizard-generated tabular form per page (using built-in DML)

50 editable tabular form columns 
(apex_application.g_f01-apex_application.g_f50), generated with apex_item or 
the built-in tabular form display types


== OU SEJA, é limites POR PÁGINA como eu disse : vc pode ter quantas páginas 
quiser (ou quase isso) mas em UMA página só pode ter as x coluns acima, a PK 
deve ser de no máximo 2 colunas para Forms, no máximo 50 tabular columns 
Como eu falei, se a aplicação DEMANDA que numa única página vc tenha trocentos 
itens, centenas de colunas, etc (é um dashboard, digamos) aó é que se cai nos 
limites, se não, não se aplicam

 []s

  Chiappa

[oracle_br] Re: ORA-00904: TESTE_TESTE: invalid identifier

2014-03-20 Por tôpico jlchiappa
Pelo jeito parece ser é erro de digitação, ao invés de TESTE.TESTE, 
separada por PONTO (para indicar view TESTE que pertence schema TESTE) talvez 
vc tenha escrito TESTE_TESTE, TESTE_TESTE ou outra combinação parecida, 
separa por UNDERSCORE,  o que não faz sentido... Isso explicaria a msg de erro 
que se refere à TESTE_TESTE ...
 Mostra pra gente o comando Completo que de cara a gente já vê se é isso ou 
não...

  []s

Chiappa

Re: [oracle_br] Re: ORA-00904: TESTE_TESTE: invalid identifier

2014-03-20 Por tôpico jlchiappa
Ah, agora tá clara a mensagem : esse objeto TEXTO_FASE (deve ser uma função, 
pelo jeito) simplesmente não está acessível (vc tem que dar o privilégio de 
EXECUTE nela) e/ou está criada num schema diferente (aí OU vc indica o owner 
especificando nomedoowner.TEXTO_FASE(, OU vc cria um sinônimo TEXTO_FASE 
apontando para nomedowoner.TEXTOFASE), é isso
 E a pergunta importante : na sessão que está tentando fazer o DDDL, vc está 
conectado como TESTE ou como TESTE2 ?? Se possível, para facilitar o debug, eu 
sugiro que essa sessão que está tentando criar a view 
TESTE2.MV_PRODIST_MEDIDOR esteja conectada como TESTE2 mesmo, okdoc ?? 
 
  []s
  
Chiappa

[oracle_br] Re: Problema EXPDP...

2014-03-20 Por tôpico jlchiappa
 Então : ** primeira ** coisa que vc tem que saber é que para limpar jobs 
perdidos do datapump ABSOLUTAMENTE Não basta vc matar a sessão - vc PODE ter 
que limpar a master table, PODE ter que liberar o job... Veja 
http://arjudba.blogspot.com.br/2009/05/how-to-cleanup-orphaned-datapump-jobs.html
 como exemplo e siga os procedimentos lá
 DEPOIS que vc tiver feito os passos mostrados no link, aí sim vc vai 
re-executar , mas tomando antes o Cuidado de confirmar que : não existem 
sessões longas ativas na gv$session_longops (para isso vc faz um SELECT * FROM 
GV$SESSION_LONGOPS WHERE TIME_REMAINING  0 numa tool GUI, que permita exibir 
linhas longas sem quebra), que NÂO há outras sessões usando a API do datapump 
(SELECT DISTINCT PROGRAM, MODULE, CLIENT_INFO,PROGRAM, PROCESS, MACHINE, 
TERMINAL FROM GV$SESSION), E (além das views de jobs do datapumpt que vc 
verificou no link) veja que não há outros JOBs quebrados/conflitantes na 
DBA_JOBS e/ou na DBA_SCHEDULER_JOBS

 []s

  Chiappa

Re: [oracle_br] Re: Problema EXPDP...

2014-03-20 Por tôpico jlchiappa
Na verdade não é que segure - se vc não remover a master table E limpar as 
entradas dos jobs datapump perdidos, a re-execução vai criar outra master 
table, outro job datapump, ok, não ficando bloqueda, MAS o scheduler interno do 
datapump vai continuar tentando executar aquele job que ele acha que está 
presente, e não vai conseguir , e aí vai tentar de novo e de novo,  isso vai 
comendo e comendo recursos, pode facilmente interferir na performance a ponto 
de a re-execução aparentar estar bloqueada, sim... 

  []s
  
Chiappa
   

Re: [oracle_br] Problema EXPDP...

2014-03-20 Por tôpico jlchiappa
Muito bem lembrada, essa sempre é uma possibilidade : no caso acho que não se 
aplica, já que (iirc) o RDBMS adiciona uma entrada no alert.log quando uma 
sessão entra em resumable state e o colega lá disse que não tinha nenhuma msg 
disso no alerta, mas taí a obs, não custa ele verificar

 []s

   Chiappa

[oracle_br] Re: Como obter a linha que ocorreu um exception

2014-03-20 Por tôpico jlchiappa
Sendo banco 10g ou superior (vc Não nos diz essa crucial info) vc pode usar a 
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE , cfrme 
http://www.oracle-developer.net/display.php?id=318 exemplifica : no caso ele 
exibe via DBMS_OUTPUT, mas claro que vc pode gravar numa tabela sua...
 Só uma obs : vc pode gravar a exception numa tabela, serve inclusive para log, 
legal, mas vc ** TEM ** que sinalizar o consumidor da tua procedure que algo 
falhou, provavelmente com algum RAISE, ou mesmo com RAISE_APPLICATION_ERROR - 
se vc apenas logar e nada mais, o COnsumidor da tua procedure simplesmente NÂO 
TEM como saber que algo deu errado, aí vc estaria simplesmente MASCARANDO, 
ENGOLINDO o erro... Via de regra isso Não É uma Boa coisa
 
  []s
  
Chiappa

[oracle_br] Re: Formatar null

2014-03-19 Por tôpico jlchiappa
Dá um bico na documentação Oracle (nos itens sobre NLS e number format masks) 
que vc verá que o caracter 9 na máscara só exibe dígitos significativos, para 
exibir zeros à esquerda vc usa o caracter 0 na máscara , exemplo :

SYSTEM@O10GR2:SQLcreate table T(c1 number);

Tabela criada.

SYSTEM@O10GR2:SQLinsert into T  values (123.45);

1 linha criada.

SYSTEM@O10GR2:SQLinsert into T values (null);

1 linha criada.

SYSTEM@O10GR2:SQLselect to_char (nvl(c1,0), 'FM099G999G999D90', 
'nls_numeric_characters='',.''')  from t;

TO_CHAR(NVL(C1,
---
000.000.123,45
000.000.000,00

SYSTEM@O10GR2:SQL
 

[]s

  Chiappa

[oracle_br] Conectar como usuário sem saber a senha

2014-03-19 Por tôpico jlchiappa
Pessoal, para uma determinada atividade que precisei executar, eu tive a 
necessidade de conectar como um determinado usuário da Aplicação no banco , 
usuário esse que desconhecia a senha, E um simples ALTER SESSION SET 
CURRENT_SCHEMA não funcionaria (princiopalmente por ter que executar stored 
PL/SQLs) : não é nada tão incomum, às vezes acontece...
 Nesses casos o procedimento comum é conectar como DBA no banco, consultar a 
senha do usuário desejado criptografada na DBA_USERS (ou na USER$ se for banco 
11g), pedir um ALTER USER nomedousuario IDENTIFIED BY senhatemporariaqualquer;  
conectar no usuário desejado e imediatamente voltar a senha ao que estava antes 
com um ALTER USER nomedousuario IDENTIFIED BY VALUES 
('stringdasenhacriptografada').

 Essa técnica funciona desde sempre mas tem a desvantagem de, por uns segundos 
que seja, o usuário desejado ficar com a senha alterada, o que pode facilmente 
causar interrupção na aplicação, além de ser um tanto complexo de se fazer .  
Hoje porém eu encontrei a referência em 
http://www.dbsnaps.com/oracle/connect-as-an-oracle-user-without-knowing-the-password/
 que na versão 10g, que é o que temos aqui em produção (o recurso existe no 
sqlplus de 10gr2 em diante, iirc) o sqlplus já aceita conexão por proxy, aí 
botei a mão na consciência e me perguntei porque não usar o recurso, né ? Dãã 
pra mim... Então fiz assim :

a. conectei no banco como SYSDBA

b. temporariamente dei para um outro usuário que nós tinhamos a senha a 
permissão de conectar como se fosse o usuário desejado :

SYS:AS SYSDBA:SQLalter user USER_APLIC grant connect through 
USER_COM_SENHA_CONHECIDA;

User altered.

c. conectei num outra sqlplus como o usuário que temos a senha mas fazendo 
proxy no usuário realmente desejado :

USER_COM_SENHA_CONHECIDA::SQLconn 
USER_COM_SENHA_CONHECIDA[USER_APLIC]/senhaconhecida
Connected.

USER_APLIC::SQLshow user

USER is USER_APLIC

d. no sqlplus original removi do usuário que conhecemos a senha a permissão de 
conectar via proxy :

SYS:AS SYSDBA:SQLalter user USER_APLIC revoke connect through 
USER_COM_SENHA_CONHECIDA;

User altered.


e é isso... Achei mais simples de fazer e absolutamente não perturba a 
Aplicação nem o pool de conexões nem nada, fikadika ...

 Abraços,

  José Laurindo Chiappa

OBS : 

  a. o link não fala, mas por segurança o RDBMS exige que o usuário com a senha 
já conhecida e que vai receber o GRANT ** não seja ** um usuário privilegiado, 
senão ele rejeita a operação com ORA-28150 :

:@:SQLconn system[userdestino]/senhadosystem
ERROR:
ORA-28150: proxy not authorized to connect as client

  b. DE FORMA ALGUMA isso que eu disse é um hack, um 'segredo interno' : essa 
técnica está Plenamente Documentada nos manuais Oracle, então não temos por que 
não divulgar... 
  
  c. Falando sobre segurança, ela nos lembra o QUANTO é ultra-mega-poderoso o 
privilégio de ALTER USER, e o perigo que é dar esse privilégio para qualquer um 
que não é DBA... É um pouco parecido com o privilégio de ALTER SESSION, que 
muita gente pede e recebe sem pensar duas vezes mas que dá pra fazer muuuito 
estrago, principalmente ativando eventos na sessão

Re: [oracle_br] Oracle Database 7 e 8i

2014-03-18 Por tôpico jlchiappa
  VC pode tentar o Oracle SQL Developer mesmo, que é bem simples de configurar, 
OU o Console OEM do Oracle 9i (se vc tiver os DVDs do 9i em mãos, essa pode ser 
uma Excelente opção), pois esse console é em Java e iirc pode conectar via jdbc 
thin, sem client, OU o SQL Workbench em http://www.sql-workbench.net/ Mas 
atente que :

  a. como eu disse antes, PODE SER que vc precise baixar uma versão mais antiga 
do aplicativo (o SQL Developer iirc vc acha as versões antigas no technet da 
Oracle, mesmo) e/ou precise de um driver jdbc mais antigo que 10g (vc 
normalmente os scha no mesmo disco que o client Oracle, nos pacotes de 
instalação dos databases antigos)

  b. vc TEM que se assegurar que os bancos 7 e o banco 8.x estejam sendo 
servidor por um Listener ** anterior ** ao 10g , E QUE a conexão seja por SID, 
definido no LISTENER.ORA

  okdoc ?? E isso falando de conexão java - vc  ** TEM ** que tentar Também a 
opção de instalar numa ORACLE_HOME à parte um client mais antigo que 10g E com 
esse client (atenção à configuração da tool escolhida para que ela use ESSE 
CLIENT ANTIGO) tentar conectar nos bancos v7 e 8.x, o que normalmente vai 
exigir uma versão antiga tambpem do programa de administração : caso vc não 
tenha/não encontre versões antigas do TOAD e do PL/SQL Developer, outras tools 
clientes que vc pode tentar com o client antigo são SQLTOOLS em 
http://sourceforge.net/projects/sqlt/ (no site diz que conecta com 8i, então há 
chances de que também conecte via SID com 8.0.x e com v7), TOra em 
http://torasql.com/Download (seguindo os links de download vc acha até versão 
1.3.18 de 2005) , entre outras...

 []s

  Chiappa

 OBS : é ÓBVIO, tudo isto é á parte, além da opção simples e que  deve 
Funcionar SIM, que é usar o sqlplus que vem junto com o client antigo, OU mesmo 
simplesmente conectar no servidor v7 ou 8.0.x  e usar o sqlplus de lá, 
conectando Diretamente, sem listener, okdoc ??

[oracle_br] Re: Session Inactive

2014-03-18 Por tôpico jlchiappa
 Bom, primeiro fique Claro que se a sessão está ** REALMENTE ** inativa, ela 
não está processando NADA (não tá executando SQL nenhum, não tá esperando o SO 
fazer alguma coisa, tá realmente inativa no momento), Obviamente Não está 
consumindo nem I/O nem CPU, okdoc ?? Ambas as coisas deixam de ser consumidas 
quando o SQL que a sessão estava executando terminou... Memória E espaço 
temporário sim, em determinadas circunstâncias pode acontecer da memória que 
foi alocada e/ou do espaço temporário alocado para um SQL na sessão não ser 
liberados imediatamente após o SQL terminar de ser executado, só sendo 
liberados ao fim da transação (com COMMIT ou ROLLBACK) ou mesmo só quando a 
sessão desconecta... 
  Para vc ver a memória alocada para uma sessão (PGA, que é particular, e SGA, 
que é Compartilhada) é consultar a (g)v$sesstat, tipo :
  
 select b.sid, a.name, b.value
from v$statname a, v$sesstat b
   where a.statistic# = b.statistic#
 and a.name like '%ga memory%';

É claro, nela não consta a informação se a sessão está inativa ou não, nem há 
quanto tempo está inativa : então o ideal é juntar com a (g)V$SESSION, mesmo :

 select s.value as Memory_Usage , n.name|| '(stat#='||s.statistic#||')' as 
memory_type , a.sid 
   from v$sesstat s, v$statname n, v$session a
  where s.statistic# = n.statistic# 
and s.sid = a.sid
and a.status='INACTIVE' 
and a.type= 'USER'
and n.name like ‘%ga memory%’ order by s.value;

 Já para vc ver espaço temporário , consulte a (g)V$SORT_USAGE, tipo :
 
 select su.* 
 from v$session s, v$sort_usage su
 where s.saddr=su.session_addr
   and s.status='INACTIVE' 
   and s.type= 'USER'
   ;

 []s
 
   Chiappa
  

[oracle_br] Re: Session Inactive

2014-03-18 Por tôpico jlchiappa
Ah, um detalhe importante que esqueci : uma sessão inativa mas que possui 
Transação aberta além do eventual consumo de memória e de temp space 
evidentemente tá consumindo espaço de rollback/undo, é Claro : para vc 
consultar isso, a query seria + ou - :

column   sid format   999
column   segment_name format   a15
select b.segment_name, a.username, a.sid, a.serial#, c.used_ublk, 
c.used_urec,c.START_UBAFIL, c.START_UBABLK, c.START_UBAREC , b.status,
b.TABLESPACE_NAME, b.SEGMENT_ID, b.FILE_ID, b.BLOCK_ID   
 from v$session a, dba_rollback_segs b, v$transaction c
where b.segment_id = c.xidusn
  and a.taddr = c.addr
;

[oracle_br] Re: HELP

2014-03-18 Por tôpico jlchiappa
Bom, antes de responder lembro que num ambiente Corretamente controlado vc 
Absolutamente não precisaria disto, pois :

 a. todo e qualquer código-fonte (INCLUSIVE stored PL/SQLs) deveria estar 
contido num sistema de Vesrionamento, justamente para controlar as diferentes 
versões/releases

E

 b. na produção, apenas o DBA e/ou (no máximo) um Analista-chefe, que sabe o 
que está fazendo, é quem (mediante uma requisição de alteração formal, que 
MANTÈM um histórico pesquisável!) é quem saem fazendo DDLs de qualquer tipo

 com esses dois fatores, naturalmente vc já teria um histórico E seria capaz de 
fazer rollback de qualquer alteração, em tese E AINDA vc tem a vantagem de 
Revisão do Código : por mais perfunctório que seja o review que o 
DBA/Analista-chefe faz, ao menos algum código terrivelmente ineficiente e/ou 
malicioso em alto grau ele pega - se vc deixa qquer um sair colocando código no 
db de produção, salve-se quem puder... 

 Isto posto, a resposta : se realmente o seu ambiente ainda não está otimamente 
controlado e portanto precisa de coisas do tipo, eu não tenho código pronto 
para isso mas tenta adaptar o código mostrado em 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:267415465220#4149424900346580446
 , que vc deve ser capaz Eu IMAGINO que no seu caso vc teria uma tabela 
pré-criada á semelhança da DBA_SOURCE e no código da tal trigger (que seria 
BEFORE) aí vc identifica o objeto pelas built-ins tipo ora_dict_obj_xxx , 
consulta a DBA_SOURCE e copia as linhas da DBA_SOURCE referentes ao objeto que 
será alterado, penso... A opção de usara DBMS_METADATA também existe mas deve 
ser testada COM CUIDADO EXTREMO, dada a performance nem sempre brilhante dessa 
DBMS

  []s

Chiappa

[oracle_br] Re: Consulta ao Grupo - Off Topic

2014-03-18 Por tôpico jlchiappa
Bem, já faz tempo que não tive mais ocasião de trabalhar como Analista de 
Sistemas mas pelo que ouço falar dos amigos que trabalham nessa área aqui em 
SP/Capital, para um Sênior que além de bastante tempo de estrada de modo geral 
ainda possui Domínio completo das tools/técnicas/procedimentos de Análise que a 
Empresa usa, é algo de R$ 7.000 a R$ 8.000 como CLT ou coisa de uns R$ 60 a R$ 
65/hora como PJ Isso PODE e VAI ter variações, dependendo de fatores como 
Localização da Empresa, pacote de benefícios, plano de carreira lá dentro, etc, 
etc, mas de modo geral espere alguma coisa nessa faixa, mais ou menos...

 []s
 
   Chiappa

 OBS : ** lógico **, se a negociação evoluir positivamente, vc Não Pode deixar 
de vir até aqui (ou no mínimo pesquisar com os profissionais adequados, e/ou 
fazer um levantamento pela internet) dos teus Custos, como moradia, educação, 
transporte... O custo de vida em geral aqui está bem alto, e esses componentes 
que citei estão entre os que mais subiram recentemente...

Re: [oracle_br] Oracle Database 7 e 8i

2014-03-17 Por tôpico jlchiappa
Wanderson, pmji mas é ** natural e Esperado ** que o client 10g não funcione : 
cfrme eu disse na minha resposta anterior neste tópico, o client 10g não é mais 
Suportado em conexões a bancos mais antigos que ele mesmo... Assim, esqueça o 
client 10g e use uma das alternativas que dei na minha resposta anterior, ie :

a) client ainda mais antigo - é certeza que o client 9i conecta no db 8i e num 
eventual 8.0.x , só não tenho certeza do banco v7, veja lá... Uma vez que vc 
tenha um client compatível com os bancos antigos (client esse instalado numa 
ORACLE_HOME própria, óbvio), CONFIRA na sua tool de administração comoquefaz# 
pra que ela use o tal client antigo : nalgumas, como o TOAD, lembre que tinha 
um botão de configuração tns que permitia vc indicar a ORACLE_HOME que vc quer, 
em outras tools pode ser que vc tenha que setar TNS_ADMIN, vareia...

ou

b) passe a usar software em Java, que conecte via JDBC Thin, Sem client algum : 
há Trocentas opções pelaí, tanto free quanto não


 []s

  Chiappa

 OBS : 

  1. dada a DNA (data de nascimento Avançada) do banco v7 e dos 8.0.x/8i, até 
PODE SER que alguma das opção acima (mais provável a) , já que JDBC thin 
dificilmente tem exigência de versões) exija uma versão mais antiga do próprio 
software de administração... A conferir ...

  2. não deixe de experimentar, se tiver um DVD de instalação do banco 9i 
sobrando por aí, a opção do Console de administração 9i : dado o tempo que foi 
lançado, é Provável que ele possa ser usado com bancos mais antigos

[oracle_br] Re: RMAN restauração de backups em plataformas diferen tes

2014-03-17 Por tôpico jlchiappa
 Sobre o RESTORE, o ideal e recomendado sempre é ter a mesma exata versão do SO 
tanto na origem quanto no destino , mas sendo a diferença de SO tão pequena 
quanto o que sabemos que foi do RH 4.x para o 5.x , é quae certo que vc 
consigam, eu diria uns 99% de chance, é quase certo ** mesmo ** que vc vai 
conseguir sem probs... 
 Sobre as outras perguntas :
 
1. Backups do RMAN em versões diferentes do Oracle do 10g para o 11g funcionam, 
utilizando a mesma plataforma funciona?

Funcionam, mas já que os datafiles backupeados estão com cabeçalho formato 10g, 
E as tabelas/views internas da tablespace SYSTEM também estão na versão 10g, vc 
Logicamente vai ter que fazer o UPGRADE desse database, yep ?? Isso implica em 
rodar no 10g o script de pré-upgrade e corrigir as incompatibilidades 
encontradas/apontadas pelo script ** ANTES ** de fazer o backup no 10g , yes 
??? Vc vai ver que ele pode mandar botar uma coluninha a mais em tabelas 
internas, remover / alterar alguma feature incompatível, alterar algums params 
de inicialização, e outras coisinhas
 Isso estando OK, é simplesmente fazer o backup completo no 10g, ter um pfile 
apropriado, iniciar a instância 11g em NOMOUNT, restaurar o controlfile, deixar 
em MOUNT, se preciso catalogar o novo backup no catalog db, e aí fazer o 
restore (JUNTO com tudo mais que precise, tal como SET NEWNAME e o que mais for 
preciso... Depois vc deverpa ser totalmente capaz de abrir com alter database 
open resetlogs upgrade; e rodar os scripts de upgrade todos
 
2. Backups do RMAN com onde os bancos de dados tem a mesma versão, mas 
funcionam em plataformas com arquiteturas diferentes 32 para 64 bits?

Funciona sim : veja a nota metalink RMAN Restore a 32 bit Database to 64 bit - 
Description and Example (Doc ID 467676.1) e os links dela

3. Backups do RMAN onde os bancos de dados tem a mesma versão, mas com 
plataformas diferentes que seguem a mesma a arquitetura, por exemplo: Windows 
x64 para um RedHat x64?

Há restrições : embora o bitsize seja o mesmo, SOs diferentes podem ter 
endianness (ordenação interna de números longos, veja 
http://pt.wikipedia.org/wiki/Extremidade_%28ordena%C3%A7%C3%A3o%29) em 
diferentes formatos, e isso pode dar diferença 

== No ** SEU caso específico ** que vc pergunta (ie, Windows x64 - Linux 
x64) ambos são Little-Endian (mesmo endian-type) então vc PODE usar as opções 
de conversão para converter um backup RMAN comum completo de um para outro 
SO... Fossem ambos ambientes 64-bits mas com endian-type diferentes (por 
exemplo, Linux 64-bits - que é little-endian - para AIX ou Solaris 64-bits - 
que são big-endian), vc não conseguiria converter um database inteiro, aí vc 
teria que fazer backup a nível de tablespace incluindo os metadados  
(TRANSPORTABLE TABLESPACES) ou fazer backup lógico, via export, ou usar algum 
tipo de replicação enviando os dados de um db para o outro...
 para mais detalhes, veja a nota Migration Of An Oracle Database Across OS 
Platforms (Generic Platform) (Doc ID 733205.1)
 
 []s
 
   Chiappa

Re: [oracle_br] Executar arquivo

2014-03-14 Por tôpico jlchiappa
Seguinte, colega : nas linguagens nativas do database Oracle (ie, SQL e PL/SQL) 
vc Rigorosamente não tem NADA que permita abrir arquivos Excel, PONTO. E Muito 
menos executar macros e coisaradas do tipo...
 Sendo assim, a minha Sugestão é :
 
 - SE essa tarefa de ler dados da planilha e (presumivelmente) inserir no banco 
é algo que Não vai ser Rotineiro, simplesmente abra a planilha no Excel, faça o 
que tem que fazer e depois salve os dados num arquivo-texto (seja texto puro, 
seja HTML, seja XML, mas texto) que depois vc carrega no database... Essa é, 
Sem Dúvida, imho, a opção mais simples e direta, se vc conhecer um pouco de 
programação no Excel...
 
 - CASO isso seja rotineiro, aí sim partir pra programação, que como eu disse 
acima ** VAI ** envolver algum recurso/configuração não-padrão do database 
Poderiam ser, entre outros :
 
  a.  ** inverter ** o fluxo, ie : ao invés de abrir o arquivo no database, 
abra o arquivo nalguma máquina cliente que tenha Excel e que tenha client 
Oracle , e programar e EXCEL se conectar ao database Oracle, sim ??? 
  
  ou
  
  b. (se tiver MESMO que ser pelo RDBMS) se por acaso o RDBMS tá instalado numa 
máquina que contenha algum software de Office (seja Microsoft Office, Open 
Office, o que for), que seja capaz de abrir a tua planilha Excel, executar o 
tal software via PL/SQL
  
  ou
  
  c. instalar/configurar no database a JVM da Oracle, existem diversas 
bibliotecas/rotinas semi-prontas em Java para vc manipular arquivos Excel
  
 basicamente essas as suas opções... googla por ORACLE READ EXCEL FILE, por 
EXCEL CONNECT ORACLE DATABASE e por PL/SQL EXECUTE EXTERNAL PROGRAM que vc acha 
n refs e exemplos de todas elas...
 
  []s
  
Chiappa

Re: [oracle_br] Executar arquivo

2014-03-14 Por tôpico jlchiappa
Ops, sorry : o comentário referente á opção programática dentro do excel ser a 
mais direta obviamente se refere ao item a

 []s

  Chiappa

Re: [oracle_br] Re: Dúvidas - Licenciamento de servidor Standby/Contingência

2014-03-14 Por tôpico jlchiappa
  Yep, eu deveria ter deixado mais claro que, ALÉM do database stand-by nunca 
estar disponível, os documentos Exigem também, para que se possa usar o direito 
de failover sem licença, que o servidor de failover esteja no mesmo local e use 
o mesmo storage - como meus últimos clientes foram datacenters aonde isso 
acontecia, não explicitei No seu caso, sendo HA (o que é explicitado pela 
localização remota do servidor stand-by), afaik vc não se encaixa nas 
condições, então vc terá sim que licenciar esse standby - e no meu caso, nas 
Empresas aonde usei HA não participei do processo de licenciamento (já havia 
licença universal) então não tenho um caso real pra te repassar de exemplo...
  
  Agora , o que posso dizer é que vc deve notar, porém, é que embora todos 
exijam que o standby seja licenciado, em momento nenhum é exigido que seja no 
mesmo modelo de licença do principal em todos os casos, okdoc ? Assim, mesmo 
que o servidor primário esteja usando uma licença mais cara, por processador 
digamos, nada impede a meu ver que vc licencie por named user plus, digamos, o 
servidor standby, custando bem menos, ok ?? O documento 
http://www.oracle.com/us/corporate/pricing/data-recovery-licensing-070587.pdf 
inclusive nos diz :

 Additionally, when licensing by Named User Plus, the user minimums are waived 
on one failover node only.

 Assim para mim tá CLARO que existe a possibilidade de vc licenciar um failover 
via NUP, senão não estaria documentado, certo ?? E na minha Análise, apenas 
configurações de failover EM CLUSTER é que demandam usar a mesma exata métrica 
de licença no primary e no standby, cfrme (no mesmo documento acima, ênfase com 
*s minha) :

In a failover environment,the same license metric must be used forthe 
production and failover nodes *** when licensing a given clustered 
configuration *** 

  E quando tiver a falha/crash no banco primário e o failover tiver que ser 
acionado ? O que imho vai te cobrir aí é o fato pouco conhecido que a licença 
de uso do database produção, que está em uso, Absolutamente ** Não é ** 
amarrada a um servidor, sim ?? Então se eu estou rodando no servidor x aqui em 
são paulo meu database produção e amanhã eu cismo de desligar ele aqui e passar 
a rodar ele num servidor y lá no Rio, digamos, a Oracle não pode dar um pio : 
claramente o Contrato de Licença não indica em QUAL servidor o software precisa 
executar Assim, eu entendo que simplesmente no caso de crash funciona como 
se vc tivesse transferido o database de servidor, operação que é Absolutamente 
permitida pela licença 
  O que é exigido é que se eu num dado momento a Empresa tem x servidores com 
databases produção sendo usados, vc tem que apresentar x licenças, 
Evidentemente respeitando-se capacidade do hardware se licenciamento por 
processor ou qtdade de usuários se licenciamento por nup ...

 E eu estou falando aqui da licença básica, de uso - a exceção ao que eu disse, 
claro, são as Options e licenças opcionais : se vc usa qualquer uma delas no 
banco primary e quer (ou é obrigado a) continuar usando no banco standby, 
EVIDENTEMENTE elas tem que ser lcienciadas no standby , cfrme :

 If any Option or Management Pack (except RAC) is licensed on the primary 
server, then it must also be licensed on the Standby server. If RAC is on the 
primary server but not on the standby server, then licensing it is not 
required.

  Blz ? Evidentemente eu não sou Advogado nem especialista em Licenciamento, 
mas as coisas que te disse acima são SIM especificadas na documentação cujo 
link apresentei, então vc (ou o Jurídico da tua Empresa, devidamente municiado 
por vc com os docs e textos como este) Não Vai aceitar a alegação que 
certamente o teu representante Oracle vai apresentar, que a licença do standy 
tem que ser absolutamente igual á do primary, sim ?? Esse pessoal quer vender, 
tem metas a cumprir E a comissão é em cima do valor vendido, então é Claro que 
vão te apresentar o que custa mais, sempre... É uma negociação um tanto dura 
mas se vc ir pra ele, municiado e com doc na mão, vc já sai em vantagem...

 []s

   Chiappa

Re: [oracle_br] Re: Dúvidas - Licenciamento de serv idor Standby/Contingência

2014-03-14 Por tôpico jlchiappa
No caso de standby (físico, que ao que entendi é o que o colega lá quer usar) 
eu entendo que se houver um usuário específico que conecta no banco mount e faz 
o apply, esse usuário não-humano está suficientemente identificado e suas 
conexoes podem ser auditadas e contadas, então entendo que pode sim ser usado 
NUP... Eu realmente tentaria uma argumentação nesse sentido...

  []s
  
Chiappa
   

Re: [oracle_br] Re: Dúvidas - Licenciamento de servidor Standby/Contingência

2014-03-14 Por tôpico jlchiappa
Eu não tinha visto essa do Software Investment Guide : se ele afirma, sem 
restrições, que a licença do standby (e sem citar dataguard ou produto, ele 
está falando da técnica de standby) deve ser a mesma que o primary, miou... O 
máximo que vc vai conseguir poupar aí é a licença do RAC (se vc não vai ter RAC 
no standby), ou alguma eventual feature/add-on opcional que vc tenha no primary 
e naõ precise no standby, afora isso neca pelo jeito...

  []s
  
Chiappa

[oracle_br] Re: Store Procedure, procedure ou function

2014-03-13 Por tôpico jlchiappa
Bem, antes de responder só um Aviso - NEM DE LONGE coisas genéricas assim são 
recomendadas no RDBMS Oracle, pois podem levar aos mais diversos problemas tais 
como :

- controladoria : como os programadores e/ou usuários finais podem à volonté 
mandar o texto de SQL que quiserem (SEM validação prévia, SEM estudo de 
performance, SEM controle de versão), e na hora que quiserem (SEM respeitar 
nenhum tipo de scheduling), só imagino a bagunça pra controlar esse tipo de 
ambiente

- performance : SQL dinâmico ** necessariamente ** implica sempre em PARSE 
extra, mais gasto de CPU e recursos de modo geral, Além de não aproveitar 
plenamente os caches internos do RDBMS

- segurança : google por DYNAMIC SQL INJECTION e veja o tamanho da encrenca

- complexidade : SQl dinâmico ** necessariamente ** implica que vc vai escrever 
mais, não importa a API usada - pode ser um pouco mais só no caso de optar por 
REF CURSOR, pode ser muito mais no caso de vc ter que apelar para DBMS_SQL ou 
EXECUTE IMMEDIATE, mas que vc vai escrever mais, vai ter mais código para 
manter, é de ´praxe com SQL dinâmico...

isso posto : se REALMENTE vc quiser mesmo ir para esse caminho, veja refs e 
exemplos em 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:479021456587 
, 
http://asktom.oracle.com/pls/asktom/f?p=100:11:P11_QUESTION_ID:1288401763279
 e 
http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:1669972300346534908
 - se ancaixar na sua necessidade, vá de REF CURSOR dinâmico, aonde vc passa o 
SQL numa string e abre o REF CURSOR , caso não der aí vc usa as outras técnicas 
citadas nos links (ie, DBMS_SQL e EXECUTE IMMEDIATE ... O problema com essas 
outras técnicas é que elas não retornam um resultset per se, com elas vc teria 
que ter algum objeto temporário para conter os registros retornados

 []s
 
   Chiappa

Re: [oracle_br] Re: Store Procedure, procedure ou function

2014-03-13 Por tôpico jlchiappa
 Na verdade eu entendi que ele quer um ** resultset ** , e que inclusive seria 
** indefinido ** em tempo de desenvolvimento já que o SQL vai ser dinãmico : 
sendo isso, para retornar um RESULTSET, composto de um número indeterminado de 
linhas e colunas, e que não seja limitado pelas restrições de memória do 
PL/SQL, REF CURSOR é a resposta...
 vamos ver se a pessoa lá confirma ou não a suposição do que é que ela 
quer/precisa
 
  []s
  
Chiappa

[oracle_br] Re: Oracle 11g e iSCSI

2014-03-13 Por tôpico jlchiappa
Pelo que entendi, em um único LUN vc vai enfiar os datafiles, os redo log files 
e os archives, só mudando o sub-diretório, mas fisicamente o dispositivo é o 
mesmo pra todo mundo, é isso ?? Sendo isso, para a administração rigorosamente 
Não vejo diferença de vc ter um subdiretório ../archives ou não Eu só me 
preocuparia é em termos de performance : lembre-se que o RDBMS Oracle faz I/O 
(leitura E gravação) constantemente E de modo simultâneo nos seus arquivos 
(nada impede que a mesmo tempo que o lgwr tá gravando um log o dbwr tá 
atualizando um datafile, digamos) então vc ** tem ** que se Assegurar que não 
vai haver contenção em essa única LUn atendendo todo mundo...

 Sobre uma eventual falha de iSCSI, é assim : tudo depende do teu ambiente *** 
não perder *** nenhum byte do que estava sendo gravado e *** não corromper *** 
nada quando os disk devices voltarem a ficar onlines, EM ESPECIAL os archives e 
os datafiles Basta que vc perca uns poucos bytes duma eventual gravação dum 
datafile, que vc perca um só vetor de alteração de um log, que vc pode acabar 
com corrupção na mão, sim ??? Então ALGUÉM/ALGO (alguma opção de journaling, 
sei lá) tem que te GARANTIR que tudo que estava nos buffers de gravação FOI 
efetivamente flusheado para disco, que vc não perca nenhum I/O, aí vc consegue 
recuperar o database depois do CRASH... 
 
  []s
  
Chiappa

Re: [oracle_br] falha ao criar índice

2014-03-12 Por tôpico jlchiappa
Na verdade, olhando por cima nem o nome da tabela nem o nome do índice nem o 
nome da coluna ultrapassam 30 caracteres, então eu ACHO que esse erro é espúrio 
e que vc ainda tá tendo problemas com 's desbalanceadas ...

 PLZ vai pro sqlplus e ** DIGITE ** na mão, diretamente, o comando de criação 
antes de tentar enfiar ele em bloco dinâmico : dando certo vc sabe que é 
problemas de 's/string mal-definida, e não dando certo aí a gente tem um caso 
reproduzível, e talvez executando diretamente vc receba uma msg de erro 
melhor...
 
  []s
  
Chiappa

[oracle_br] Re: Ajuda com erro na trigger de logon: ORA-00604: ocorr eu um erro no nível 1 SQL recursivo

2014-03-12 Por tôpico jlchiappa
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:49818662859946#49822831803623
 é a sua reposta : a questão é que é *** INSEGURO *** ao extremo vc usar 
USERENV em rotinas não-interativas (ie, jobs e triggers) , usar ao invés a 
v$mystat

 []s

  Chiappa

Re: [oracle_br] Re: Ajuda com erro na trigger de log on: ORA-00604: ocorr eu um erro no nível 1 SQL recursivo

2014-03-12 Por tôpico jlchiappa
A questão é que o USERENV('sessionid') captura valores quando uma sessão é 
estabelecida a pedido do cliente : quando a sessão é criada pelo database (por 
exemplo, triggers, JOBs de database, threads derivadas da mesma sessão tal como 
o sqlplus faz quando vc ativa o AUTOTRACE, etc) ele Não Vai funcionar a 
contento (pode estar em btanco/vazio o AUDSID, já que não há entrada auditável, 
e/ou pode ter Duplicidade (no caso de triggers e threads), e DAÍ deve estar 
vindo o teu erro de a  veja o link que te passei (e procura no asktom por 
userenv('sessionid') que vc acha uns tantos quantos casos demonstrando isso...

Sobre IP :  para pegar IP da máquina que conectou (imagino que é isso que vc 
quer), afaik é seguro o sys_context('userenv','ip_address'), já que essa 
informação vem do client e é coletada no instante mesmo da conexão (e vale até 
para conexões locais) - E fique claro, o teu problema *** não é *** o 
sys_context('userenv', MAS sim o audsid -,  mas LOGICAMENTE falando ela é 
absolutamente desnecessária : se vc ativar a Auditoria via AUDIT, vc 
Automagicamente já terá na AUD$ a informação de IP ** junto ** com a de 
terminal, hostname e outras tantas

 []s
 
   Chiappa

Re: [oracle_br] RE: Sessão Travada

2014-03-12 Por tôpico jlchiappa
Fernando, é Conceitual : no RDBMS Oracle vc Absolutamente ** nunca** , de jeito 
nenhum, vai ter LOCKs gerados pelo próprio database por causa de alguma 
configuração, okdoc ?? Talvez vc esteja pensando em outros RDBMSs aonde 
existe a figura do LOCK ESCALATION (ie, em algumas condições um lock de 
registro é transfigurado num LOCK a nível de tabela) e/ou onde existem coisas 
como uma tabela interna de locks , mas no RDBMS Oracle esqueça, nada disso 
existe
 Assim, vc não ter RIGOROSAMENTE NADA a fazer em termos de configuração do 
database : com 100% de certeza o que vc está vendo é efeito causado pela 
Aplicação (ou pelos seus componentes, como Middleware, Triggers de database, 
scripts e jobs, etc), sem escapatória possível... Aí então são as fontes / 
recursos da Aplicação (ie, o Suporte da Aplicação , os Grupos de Usuários da 
Aplicação, os teuas Analistas que cuidam da Aplicação, etc) que vão poder te 
orientar melhor Aqui, a nível de RDBMS Oracle, neca...
 
 []s
 
   Chiappa

Re: [oracle_br] Aplicar PSU ou não?

2014-03-11 Por tôpico jlchiappa
Pois é : teste, teste  teste no ambiente de testes.  Numa determinada 
multinacional monocromática azulada em que trabalhei, ao menos isso funcionava 
direitinho : a maior parte (se não quase todos ,mesmo) dos clientes era meio 
que forçado a cumprir, contratualmente, a Exigência de se aplicar os PSUs (ou 
NO MÍNIMO os CPUs) no máximo 45 dias depois do lançamento deles, se nã a 
Empresa metia uma cartinha de risco e basicamente usava isso para justificar 
qquer não-conformidade da operação, e hoje em dia sou Obrigado a concordar com 
isso, correção de bugs é condição Imperativa para estabilidade
 E o melhor de tudo, isso mais ou menos forçava os cabras a terem um ambiente 
de teste : se vc deixar por conta do cliente, o que tem de neguinho que quer 
testar em produção não tá no gibi
 
 []s
 
   Chiappa

Re: [oracle_br] Aplicar PSU ou não?

2014-03-11 Por tôpico jlchiappa
 Bem, o fato é que não dá pra ficar sem as muitas correções Cruciais que um PSU 
(ou mesmo o CPU !!) te dá - no meio delas normalmente tem bugs de segurança 
terríveis, tem bugs de performance vitais , não dá pra ficar sem em nome de uma 
pseudo-segurança de eventualmente, quem sabe, o PSU ou CPU xyz introduzir novos 
bugs... E, imho, dizer que se vai aplicar os one-off patches individualmente é 
um auto-engano : via de regra há dúzias de patches encapsulados num patch 
update, eu du-vi-de-o-dó que um DBA vai ter tempo/paci~encia/oportunidade de 
Realmente os aplicar todos... Aí fica naquela de correr atrás do rabo, só 
aplicar o one-off quando a issue realmente acontece, colocar a tranca só depois 
que a porta foi arrombada Sorry, eu não compactuo com isso, não...
 
 Pra vc Minimizar a chance de se ver ás voltas com bugs introduzidos por PSU, o 
que se faz é mesmo :
 
 1. testar BEM no ambiente de teste, e depois em Homologação
 
 e
 
 2. enquanto 1. rola, acompanhar no metalink e nos Fóruns os relatos de issues 
com o patchset 
 
 Com isso vc diminui Drasticamente a possibilidade, deixando-a (imho) 
desprezível E só relembrando, CASO o pior aconteça, na remota hipótese de 
mesmo usando os procedimentos acima vc realmente caia num novo bug introduzido 
pelo PSU, vc PODE SIm na maioria das vezes DESAPLICAr o PSU, fazendo o 
proceidmento de rollback dele via opatch , ok ?? Então De Forma Alguma vc vai 
ficar parado esperando a boa vontade da Oracle em corrigir, yep ??
 
  []s
  
Chiappa

 OBS : eu citei várias vezes o CPU (Critical Patch Update) em oposição ao PSU 
(Patch Set Update) porque o CPU é, normalmente, um pacote Muito menor do que o 
PSU - o CPU foca nos bugs especialmente críticos, no melhor dos piores, okdoc ? 
Então via de regra é muitíssimo menor a chance de um CPU introduzir novos bugs, 
assim uma OUTRA opção para aqueles databases ultra-críticos aonde vc não quer 
correr riscos pode ser vc aplicar os CPUs ao invés dos PSUs , yep ?? 
  Óbvio, isso Não elimina a necessidade de se fazer os dois procedimentos 
acima, nem de talvez vc ter que eventualmente fazer rollback de algum CPU, mas 
talvez ajude no gerenciamento de riscos... 
 

Re: [oracle_br] RE: Oracle RAC 11g problema memória

2014-03-11 Por tôpico jlchiappa
  Pelo que eu saiba, não : ou se aplica patch/patchset ou desliga a feature

  []s

  Chiappa

Re: [oracle_br] Re: Retirar quebra de linha no final do texto

2014-03-11 Por tôpico jlchiappa
Bom, vc FOI na página que indiquei e viu que o caracter de LF (que é o que o 
Linux/Unix usa para indicar quebra de linha) equivale a 10, certo ?? Então ** 
VEJA ** no dump que tem SIM chr(10) ás pampas aí, okdoc ? Com certeza foi erro 
teu quando vc disse no início da thread que não achou 
 Muito bem : no caso, veja que vc nçao tem sequências longas de espaço 
(espaço=chr(32)) para fazer pular linhas, então como eu disse com certeza o que 
vc tem é combinação de quebra de página, ie, uma quebra logo depois de outra, 
confirme isso vendo no DUMP se realmente os pulos de linha equivalem aos locais 
onde aparecem dosi caracteres de código 10 juntos Sendo isso, é 
Exatamente o que eu disse, replace apenas, exemplo :

SYSTEM@xyz#1:SQLcreate table T(c1 varchar2(200));

Table created.

SYSTEM@xyz#1:SQLinsert into T values ('Linha1' || chr(10) || 'Linha2' || 
chr(10) || chr(10) || 'Linha 3' || chr(10));

1 row created.

SYSTEM@xyz#1:SQLcommit;

Commit complete.

= veja aí embaixo a linha sendo pulada pela junção de dois caracters ascii 
código 10 :

SYSTEM@xyz#1:SQLselect * from T;

C1
-
Linha1
Linha2

Linha 3


SYSTEM@xyz#1:SQLselect dump(c1) from T;

DUMP(C1)
-
Typ=1 Len=23: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51,10

== Viu no DUMP ??? pelo que vejo é EXATAMENTE esse teu caso, um simples 
REPLACE resolve :

SYSTEM@xyz#1:SQLupdate T set c1 = replace(c1, chr(10)||chr(10), chr(10));

1 row updated.

SYSTEM@xyz#1:SQLcommit;

Commit complete.

SYSTEM@xyz#1:SQLselect * from t;

C1
-
Linha1
Linha2
Linha 3


SYSTEM@xyz#1:SQL


 okdoc 

 []s

  Chiappa

Re: [oracle_br] Re: Retirar quebra de linha no final do texto

2014-03-11 Por tôpico jlchiappa
  Uma obs : agora que eu vi que vc queria fazer a operação de troca apenas no 
fim de arquivo : isso implica que vc quer substituir não TODOS os 10,10 mas 
apenas a partir do último... Ora, para identificar a ÚLTIMA ocorrência de uma 
string, o RDBMS Oracle tem (sempre teve) o INSTR(string, argumento, -1), okdoc 
?? Então é aplicar o que eu disse APENAS da posição indicada pelo INSTR em 
diante... Exemplo :


SYSTEM@xyz#1:SQLtruncate table t;

Table truncated.

SYSTEM@xyz#1:SQLinsert into T values ('Linha1' || chr(10) || 'Linha2' || 
chr(10) || chr(10) || 'Linha 3' || chr(10)
  2  || chr(10) );

1 row created.

SYSTEM@xyz#1:SQLcommit;

Commit complete.

SYSTEM@xyz#1:SQLselect * from t;

C1
-
Linha1
Linha2

Linha 3

SYSTEM@xyz#1:SQLselect dump(c1) from t;

DUMP(C1)
-
Typ=1 Len=24: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51,10,10

= legal ? Quero localizar a última sequência de linhas em branco, que 
relemebremos são indicadas (no seu caso) por LF+LF :



SYSTEM@xyz#1:SQLselect substr(c1, instr(c1, chr(10)||chr(10), -1) ) from t;

SUBSTR(C1,INSTR(C1,CHR(10)||CHR(10),-1))
-

= vamos olhar o dump, que talvez fique mais visual :

SYSTEM@xyz#1:SQLselect dump( substr(c1, instr(c1, chr(10)||chr(10), -1) )) 
from t;

DUMP(SUBSTR(C1,INSTR(C1,CHR(10)||CHR(10),-1)))
-
Typ=1 Len=2: 10,10

== Deu pra ver ?? Aí posso pedir pra exibir do início (posição 1) até o último 
par 10,10/linha em branco :

SYSTEM@xyz#1:SQLselect substr(c1, 1, instr(c1, chr(10)||chr(10), -1) -1) from 
t;

SUBSTR(C1,1,INSTR(C1,CHR(10)||CHR(10),-1)-1)
-
Linha1
Linha2

Linha 3

= vendo pelo dump :

SYSTEM@xyz#1:SQLselect dump(substr(c1, 1, instr(c1, chr(10)||chr(10), -1) -1)) 
from t;

DUMP(SUBSTR(C1,1,INSTR(C1,CHR(10)||CHR(10),-1)-1))
-
Typ=1 Len=22: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51

== TAÍ, na prática isso ** elimina ** a última linha em branco, vamos fazer o 
UPDATE com isso :

SYSTEM@xyz#1:SQLupdate t set c1=substr(c1, 1, instr(c1, chr(10)||chr(10), -1) 
-1);

1 row updated.

SYSTEM@xyz#1:SQLcommit;

Commit complete.

= resultado , removi a última linha em branco :

SYSTEM@xyz#1:SQLselect * from t;

C1
-
Linha1
Linha2

Linha 3

= pelo dump dá pra ver melhor :

SYSTEM@xyz#1:SQLselect dump(c1) from t;

DUMP(C1)
-
Typ=1 Len=22: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51

SYSTEM@xyz#1:SQL


 yes ??? COMO eu disse na resposta anterior, SE vc tem múltiplas linhas em 
branco a remover, OU vc executa o UPDATE várias vezes (a cada execuçaõ 
eliminando uma linha em branco), OU vc aninha vários REPLACEs cfrme o link que 
te dei, OU lança mão de REGEXP ou recursos mais sofisticados do tipo... 

 []s

   Chiappa

Re: [oracle_br] Re: Retirar quebra de linha no final do texto

2014-03-11 Por tôpico jlchiappa
Óbvio, essa lógica simples funciona para tirar UMA linha em branco : lá no 
finzinho do dump, por exemplo, vc tem:

...73,78,73,67,73,79,32,67,73,80,82,79,70,76,79,88,65,67,73,78,32,32,32,32,32,32,10,10,10,10,10,10,10,10

que se traduz por :

INICIO CIPROFLOXACIN









= ou seja, vc tem 8 linhas em branco O replace cortaria as linhas em 
branco à metade, substiuindo os 10,10 por 10 : CASO vc queira eliminar 
esses casos também, OU vc roda o UPDATE múltiplas vezes (viável se for volume 
pequeno), OU vc usa alguma lógica mais sofisticada : 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:13912710295209
 tem um exemplo com múltiplos REPLACEs aninhados (no caso removendo espaços em 
branco, mas seria a mesma lógica para remover CHRs(10), e/ou dá um bico na 
Documentação sobre REGEXP que na sua versão 11.2.0.3 é totalmente possível e 
viável, e/ou (em ÚLTIMO CASO) faz um LOOP num PL/SQl, mesmo 

 []s

   Chiappa

Re: [oracle_br] Re: Retirar quebra de linha no final do texto

2014-03-11 Por tôpico jlchiappa
Duhhh... Como sempre, depois que eu faço/digo alguma coisa, penso mais 
friamente e me vêm à mente a solução ótima :( ... Por isso, penso, é que fui 
mal nalguns testes, penso devagar mesmo
 Veja só : o final de algo em Inglês é TRAILING, e no 11g que é o seu (iirc 
na verdade introduzido no 10gr2) nós Já TEMOS a opção de TRAILING na função 
TRIM Então é SIMPLESMENTE usar o que temos :

SYSTEM@xyz#1:SQLtruncate table t;

Table truncated.

== vamos enfiar uma qtdade N de linhas em branco (combinações chr(10) chr(10) 
na string :

SYSTEM@xyz#1:SQLinsert into T values ('Linha1' || chr(10) || 'Linha2' || 
chr(10) || chr(10) || 'Linha 3' ||
  2  chr(10) || chr(10) ||  chr(10) || chr(10) ||  chr(10) || chr(10) ||  
chr(10) || chr(10) || chr(10) );

1 row created.

SYSTEM@xyz#1:SQLcommit;

Commit complete.

SYSTEM@xyz#1:SQLselect * from t;

C1
-
Linha1
Linha2

Linha 3










= maravilha, vamos ver via dump :

SYSTEM@xyz#1:SQLselect dump(c1) from t;

DUMP(C1)
-
Typ=1 Len=31: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51,10,10,10,10,10,10,10,10,10

= legal, vamos remover os TRAILING CHARACTERS :

SYSTEM@xyz#1:SQLupdate T set c1 = trim(TRAILING chr(10) from c1)
  2  ;

1 row updated.

SYSTEM@xyz#1:SQLcommit;

Commit complete.


== taí :

SYSTEM@xyz#1:SQLselect * from t;

C1
-
Linha1
Linha2

Linha 3


SYSTEM@xyz#1:SQLselect dump(c1) from t;

DUMP(C1)
-
Typ=1 Len=22: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51

SYSTEM@xyz#1:SQL

 né ?? Du pra mim... 

 []s

  Chiappa

[oracle_br] Re: paralelismo - range de data

2014-03-11 Por tôpico jlchiappa
Bem, ** sempre ** que se fala de planos de execução diferentes para o mesma SQL 
mas com valores diferentes  (é o caso, ao que entendi), a PRIMEIRA coisa que se 
pensa é que o CBO recebeu estatísticas diferentes para os diferentes valores em 
questão... Para vc confirmar se as estatísticas são de boa qualidade, obtenha o 
plano de execução Extendido do SQL em questão para que vc tenha as colunas de 
E-ROWS e A-ROWS (ie, qtdade de linhas estimadas e efetivas) e veja se está com 
diferença significativa ou não... CASO esteja, pode ser o caso de melhorar a 
qualidade das estatísticas aumentando SIZE de histogramas na coluna em questão, 
indicando cardinalidade diferente com o hint de cardinalidade, ou coisas 
assim...
  Mas antes de qualquer coisa : tenha CERTEZA que o CBO não está mesmo fazendo 
a coisa certa gerando um plano diferente - no plano diferente, sem paralelismo, 
a performance é pior ou melhor  
 E finalmente : vc tem CERTEZA que os recursos necessários para se fazer 
Parallel sql estavam disponíveis quando foi gerado o plano diferente ?? É Claro 
que se outros SQLs estavam ocupando os parallel slaves não sobraram recursos 
pra vc

  []s

  Chiappa

Re: [oracle_br] RE: Upgrade Oracle 11.2.0.2 para 11.2.0.3

2014-03-11 Por tôpico jlchiappa
Ah, diquinha : hoje no blog de Oracle upgrade o autor colocou um pequeno 
lembrete, relembrando que falta menos de um ano para o fim do Premier Support 
do 11gr2, E que o tradicional 1 ano de extended support na faixa só vai valer 
Apenas e Tão Somente para o 11.2.0.4 !!! Então considere Seriamente a 
possibilidade de já pular para o 11.2.0.4 ao invés do 11.2.0.3, sim ??? Aí vc 
Evita a correria de retestar/remigrar para 11.2.0.4 no fim de ano para 
aproveitar o 1 ano de extended support free...

 []s

  Chiappa

[oracle_br] Re: CRS e CSS não sobem

2014-03-11 Por tôpico jlchiappa
  Ah, detalhe importante : outra tool que pode ajudar Muitão é a RACcheck, que 
pode ser usada a partir do 10.2.0.4 e portanto serve pra vc... Só não sei se 
com a recente mudança de nome e introdução de novas features ele continua 
compatível com 10.2.0.4, consulte os detalhes na nota metalink ORAchk - Oracle 
Configuration Audit Tool (Doc ID 1268927.2), e se for o caso baixe as versões 
anteriores

 []s

   Chiappa

[oracle_br] Re: CRS e CSS não sobem

2014-03-11 Por tôpico jlchiappa
Bom, primeiro de tudo *** muito dificilmente *** o crs pára de funcionar do 
nada : com quase Absoluta certeza, alguma mudança teve aí... O difícil é que 
muitas vezes a mudança é de rede e/ou do próprio servidor, aí o pessoal de rede 
jura de pé junto que não, que não, mas depois de uma longa e difícil 
investigação aí vc descobre coisas como conflito de IPs (o um dos IPs quew 
deveria estar reservado para o cluster RAC não foi reservado no DNS e algum 
outro device na rede o quis usar, digamos), vc descobre que o monstrengo do 
sysadmin mudou senha e/ou detalhes do usuário oracle quebrando a conectividade 
ssh entre as máquinas, que neguim fez update no SO, que algum software idiótico 
de segurança remover os privilégios de 
CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE do usuário que roda o CRS, 
coisas assim...
 A primeira coisa então é investigar ** EXATAMENTE ** o que mudou Uma 
ferramenta que pode ser utilíssima é o CVU, ele tem DIVERSOS checks (de 
hardware, de conectividade, de packages, etc) que vc pode pedir, baixe no 
metalink a versão mais recente dele...Infelizmente , coisas INTERNAs como DNS 
malconfigurado, conflito de IPs e quetais nem sempre com ele vc pega... na 
mesma toada, recomenda-se Muito que vc instale e rode o diagcollection.pl, o 
RDA e um oswatcher : todos esses te dão bons insgights e servem como material 
para um possível futuro chamado no Suporte Oracle... Essas coisas não são 
invenção da minha cabeça, estão nas notas :
 
 Data Collecting for Troubleshooting Oracle Clusterware (CRS or GI) And Real 
Application Cluster (RAC) Issues (Doc ID 289690.1)

e

Oracle Clusterware 10gR2/ 11gR1/ 11gR2/ 12cR1 Diagnostic Collection Guide 
(Doc ID 330358.1) ...

  Segunda coisa, checks de interesse em troubleshoot de CRS : veja a nota 
metalink CRS can not Start After Node Reboot (Doc ID 733260.1) , que ela 
lista diversos cenários comuns... Sobre logs,  veja que além dos logs do crs 
(que INCLUSIVE a nota anterior mostra que nem todos estão abaixo do CRS_HOME), 
os logs ** do sistema ** (como /var/log/messages) ABSOLUTAMENTE tem que serem 
checados...
  
  
  Outro teste MUITO válido é : pedir o  ./init.cssd stop , se ASSEGURAR que não 
há entradas perdidas em /var/.oracle, /tmp e quetais, e aí pedir o ./init.cssd 
start (sempre como o usuário que roda o CRS, of course:) : com isso vc recebe 
Diretamente as msgs de erro, às vezes isso ajuda... E sempre recheque o  
cssdout.log após suas tentativas...

 E finalmente : o VIP não subir num outro nó após uma falha com reboot é 
Extremamente comum : para verificar essa possibilidade, siga a nota How to 
Troubleshoot CRS Not Starting a VIP Resource (Doc ID 372643.1) ...
 
  []s
  
Chiappa

[oracle_br] RE: Oracle RAC 11g problema memória

2014-03-10 Por tôpico jlchiappa
Dá um look na nota metalink Cluster Health Monitor (CHM/OS) osysmond.bin High 
Resource (CPU, Memory and FD etc) Usage (Doc ID 1554116.1) que vc acha 
Diversos bugs desse cara consumindo em excesso, e CONFIRME com um Chamado no 
Suporte Oracle em qual/quais vc pode estar caindo E Como vc vai notar, 
Diversos deles foram corrigidos em PSUs recentes (os quais ao que parece vc Não 
Aplicou nenhum, pois tua versão está  11.2.0.3.0, com algum PSU ela iria para  
11.2.0.3.x) e/ou no patchset 11.2.0.4 : muito provavelmente o Suporte vai 
INSISTIR para que vc, se não puder aplicat p atchset 11.2.0.4,  que ao menos vc 
aplique o PSU mais recente...
 E é claro, o Cluster Health Monitor é um processo ** auxiliar e Opcional ** , 
absolutamente nada impede vc de o parar (via crsctl stop resource ora.crf -init 
, normalmente) para estabilizar o ambiente enquanto vc investiga mais...

 []s

   Chiappa

[oracle_br] RE: Problema com Proc enviando e-mail

2014-03-10 Por tôpico jlchiappa
Depende : ** SE ** vc tem total certeza que os dados / registros sendo lidos 
absolutamente nunca ultrapassam o limite máximo de uma variável string no 
PL/SQL (ie, 32767 bytes), vc simplesmente redimensiona a variável V_EMAIL_CORPO 
para varchar2(32767), continua concatenando cada registro lido nela que nem vc 
faz hoje e apenas MOVE a chamada da WENVIA_EMAIL_3 para fora do loop 
 Já se pode acontecer do tamanho total do corpo do email (contando cabeçalhos e 
todos os registros de dados lidos/concatenados) crescer mais que isso, aí a 
solução é vc gravar um arquivo-texto (com UTL_FILE) com os dados e alterar a 
rotina de envio de email para que envie o arquivo como um attachment : se for 
esse o caso, nos diga a versão exata do banco e nos diga se a tal 
WENVIA_EMAIL_3 usa UTL_MAIL ou UTL_SMTP pra enviar o email, que a gente pode 
indicar links e refs

 []s

  Chiappa

[oracle_br] RE: Por que SYS não usa sua TEMPORARY_TABLESPACE no expdp ?

2014-03-09 Por tôpico jlchiappa
  Bom, eu desconheço Documentação a respeito, mas a partir do momento em que o 
sujeitim se mete a NÃO usar a recomendação da Oracle, a pessoa tá por conta 
própria , Óbvio que pode (alguns dizem VAI) cair nalgum buraco 
não-documentado : o DOCUMENTADO só mesmo o recomendado, yep ?? E no caso a 
recomendação para ** nunca ** de forma Alguma, de jeito nenhum usar o SYS para 
tarefas de administração rotineira é clara, sim : no instante que o poessoal aí 
se mete a usar o SYS para outra coisa que não seja 
startup/shutdown/patching/manutenção interna do database, coisas inesparedas 
poidem e vão ocorrer : o SYS é interno, é especial, e não tem por onde...
  A única ref que eu conheço na documentação é sobre a propriedade de DEFAULT 
TABLESPACE , que é documentada se ser ** ignorada ** pelo SYS , no manual 
Oracle® Database Security Guide 11g Release 2 (11.2), cap. 2 - Managing 
Security for Oracle Database Users (ênfase com *s minha) :
  
  

Assigning a Default Tablespace for the User

Each user should have a default tablespace. When a schema object is created in 
the user's schema and the DDL statement does not specify a tablespace to 
contain the object, Oracle Database stores the object in the default user's 
tablespace.

The default setting for the default tablespaces of all users is the SYSTEM 
tablespace. If a user does not create objects, and has no privileges to do so, 
then this default setting is fine. However, if a user is likely to create any 
type of object, then you should specifically assign the user a default 
tablespace, such as the USERS tablespace. Using a tablespace other than SYSTEM 
reduces contention between data dictionary objects and user objects for the 
same data files. In general, do not store user data in the SYSTEM tablespace.

You can use the CREATE TABLESPACE SQL statement to create a permanent default 
tablespace other than SYSTEM at the time of database creation, to be used as 
the database default for permanent objects. By separating the user data from 
the system data, you reduce the likelihood of problems with the SYSTEM 
tablespace, which can in some circumstances cause the entire database to become 
nonfunctional. 

=== ** This default permanent tablespace is not used by system users, that 
is, SYS, SYSTEM, and OUTLN ** , whose default permanent tablespace is 
SYSTEM.



 []s
 
   Chiappa

Re: [oracle_br] Software repositório de scripts

2014-03-07 Por tôpico jlchiappa
 okdoc... Inclusive, em verdade essa opção de se ter os scripts centralizados 
no servidor de gateway (e ou acessados pelos servidores Oracle num mountpoint 
NFS no gateway ou coisa do tipo, ou mesmo executados a partir do gateway 
conectando nos servidores Oracle - seja via client por sqlplus, seja acesso SEM 
client através de jdbc thin, como por exemplo via Oracle SQL Developer) eu não 
vejo nem como quebra-galho, mas como uma Solução definitiva e perfeitamente 
possível/viável ...
  Por exemplo, num cliente anterior nós não só tinhamos os scripts no gateway 
mas Também cada DBA tinha uma pasta própria no servidor de gateway (limitada em 
tamanho numa quota razoável, óbvio) para podermos guardar/transportar arquivos 
entre/de/para os servidores Oracle e nossas máquinas pessoais - digamos, um 
trace file ou um alert log que vc precisa trazer pra sua máquina pessoal e 
enviar por email para a Oracle, um arquivo-texto grande e/ou um dumpfile que vc 
precise transportar entre as máquinas, coisas assim...
 
  []s
  
   Chiappa

[oracle_br] RE: Executar um comando do Linux via PL/SQL

2014-03-07 Por tôpico jlchiappa
Bom, provavelmente vão te passar rotinas java e outras complicações quetais, 
mas sendo 10g ou acima pra mim Não Tem Por Onde, a maneira fácil e simples de 
se executar comandos do SO e/ou programas externos via PL/SQL é com o 
DBMS_SCHEDULER , veja em 
http://halisway.blogspot.com.br/2007/05/run-system-commands-from-oracle-with.html
 um exemplo um tanto mais sofisticado mas válido... Não exige NENHUM componente 
a mais a ser instalado (ao contrário do java, que Exige vc ter instalado a 
opção de JVM no database), Não exige privilégios extraordinários.. O Único 
senão é que (OBVIAMENTE) vc vai estar executando o comando como o usuário linux 
que instalou e roda o RDBMS - se precisar executar alguma coisa como root ou 
como outro usuário, aí vc vai precisar de alguma coisa extra no SO, como 
permissão no sudo, abrir um novo shell conectando com a senha do tal usuário, 
ou coisas assim...

 []s
 
  Chiappa

Re: [oracle_br] Software repositório de scripts

2014-03-06 Por tôpico jlchiappa
O que vc descreve são softwares tipo o SourceSafe, que além de armazenar o 
código-fonte ainda possuem features de versionamento e controle de alterações, 
que pelo jeito ao que entendi vc não vai usar... Como alternativas (afaik TODOs 
tem a capacidade de copiar/colar o fonte) de freeware vc pode tentar o SVN, ou 
o Mercurial, Git, AnkhSVN, ou se tiver uma verbinha de pago mas não tão caro 
pode ser o visualsvn : googla por eles que vc já deve cair no site deles 
todos
 Eu particularmente não uso nenhum deles (prefiro sempre que possível 
simplesmente ter um mountpoint NFS ou Samba ou coisa que o valha acessível 
diretamente pelos servidores, pois aí nem o trabalho de copiar/colar eu tenho, 
já executo Diretamente pelo servidor Oracle o script que quero...
 
  []s
  
   Chiappa

Re: [oracle_br] Software repositório de scripts

2014-03-06 Por tôpico jlchiappa
E é claro, há outras possibilidades : uma delas é se vc tiver uma máquina 
desktop, sua, de onde vc possa conectar em todos os databases a partir dela, vc 
simplesmente  mantem num diretório dessa máquina teus scripts e cadastra os 
databases todos no TNSNAMES do client Oracle que vc vai ter lá... Uma variação 
desta possibilidade é instalar um software tipo o muSQL ou o TOAD script 
manager ou mesmo o Oracle OEM nessa máquina central e cadastrar os seus 
databases-alvos todos nesse software - isso te dá a vantagem de poder executar 
um único script de uma vez só contra múltiplos databases (digamos, um script de 
checklist ou de healthcheck rápido) 

  Mas isso só e apenas se TODOS os databases estão na mesma subnet (ou pelo 
menos são acessíveis de um ponto central na rede), é claro...
  
   []s
   
 Chiappa

  1   2   3   4   5   6   7   8   9   10   >