03
mar
10

Os mais acessados…

O Oracle ao seu alcance!Oracle Fail Over (Standby Database)

Oracle Shared Server – Como configurar

Como desinstalar o Oracle do Windows?

Oracle Essbase

Otimização e Tuning para Oracle em Red Hat

Automatic Database Diagnostic Monitoring (ADDM)

Oracle Enterprise Management Framework

configurar limitações para usuários no linux

ora-01031:cannot execute privileged statement after successful CONNECT sys AS SYSDBA

Importando Schema de Oracle Spatial

Configuração e Autenticação

Enterprise Manager 10g – Como acessá-lo quando o nome do servidor for alterado?

ora-12154 “TNS: could not resolve connect identifier specified”

ora-01991: invalid password file ‘/xx/xx’

configurar ssh para não pedir senha (aix e linux)

alertas via e-mail no linux

Como saber qual o nls_characterset do banco de dados?

06
nov
13

Quase tudo que você precisa saber sobre Data Pump

Como muitos já devem saber, Data Pump é anova tecnologia de exportação/importação desde o 10g e que, brevemente, acredito eu, irá substituir o então export/import ou exp/imp.

Bom, irei postar algumas pequenas coisas que certamente ajudarão algumas pessoas à resolver pequenos problemas e, com o passar do tempo, irei continuar postando mais informações.

Primeiramente, como fazer uma exportação sem estatísticas? No utilitário antigo (exp) é fácil, basta apenas incluir o parâmetro statistics com o atributo none mas, e no expdp? Também é fácil, basta incluir o parâmetro EXCLUDE com o atributo STATISTICS:

 

expdp usuario/senha exclude=statistics directory=diretorio dumpfile=exportacao.dmp logfile=exportacao.log

 

Simples assim.

;)

 

 

03
out
11

Oracle Essbase

O que é Oracle Essbase?

Primeiro, vamos iniciar desvendando o significado da palavra Essbase. Na verdade é um acrônimo para Extended Spread Sheet Database ou Banco de Dados com planilhas extendidas. Até o final de 2005 era comercializada pela IBM como um Servidor OLAP DB2. Oracle Essbase é um servidor OLAP (Online Analytical Processing) que fornece um ambiente para a implantação de aplicações analíticas personalizadas e aplicações corporativas de gerenciamento de desempenho. O termo OLAP foi criado pelo desenvolvedor de bancos de dados E. F. Codd em um jornal do governo que elaborava vinte regras dos sistemas analíticos, uma alusão às suas outras vinte regras que definiam o modelo relacional. O jornal, publicado pela Computerworld, foi de algum modo explícita em sua referência às qualidades do Essbase, e quando foi descoberto que Codd havia sido contratado pela Arbor Software, a Computerworld recolheu o jornal. Oracle Essbase, juntamente com o Oracle BI Suite Enterprise Edition Plus, faz parte do BI da Oracle Foundation.

Complicado né? Vamos simplificar… O Oracle Essbase é um banco OLAP multidimensional com muitas características benéficas tais como:

  • alto desempenho em cubos com grande quantidade de dados
  • permite construção de fórmulas complexas, financeiras
  • permite a utilização de excel para acessar os cubos
  • possibilita que os usuários alterem os cubos denominado whiteback
  • ele tem conhecimento financeiro como receita e despesa (acredito que, para o Brasil, precisamos customizar algumas fórmulas)

Na arquitetura do BI, você pode acessar o seu DW contruído em um Banco Oracle, fazendo ou não a utilização da option OLAP (que está contida apenas na versão Enterprise do Banco de Dados) ou, ao invés de acessar seu banco de dados Oracle ou qualquer outro banco que o BI Server permite (já que o BI Server além de possibilitar a utilização de outros bancos também permite fazer a Federação, ou seja, eu posso utilizar vários bancos simultaneamente e montar meu star schema  ou snow flake no Administration Tool), podemos acessar o inovador Essbase.

Em breve este post será atualizado com mais informações….

10
mar
10

Tudo que você precisa saber sobre DBMS_SCHEDULER

DBMS_SCHEDULER
————–

Este pacote é apenas usado no Oracle 10g ou superior.
Veja abaixo alguns exemplos:

BEGIN
    DBMS_SCHEDULER.create_job (job_name => 'job_de_teste',
                                        job_type => 'PLSQL_BLOCK',
                             job_action => 'BEGIN 
                                                                        BMS_STATS.gather_schema_stats(''ALMOXARIFADO''); 
                                                                    END;',
                                             start_date => SYSTIMESTAMP,
                                             repeat_interval => 'freq=hourly; byminute=0',
                                             end_date => NULL,
                                             enabled => TRUE,
                                             comments => 'Job criado usando a procedure CREATE JOB.');
End;
/

BEGIN
      DBMS_SCHEDULER.run_job (job_name => 'job_de_teste',use_current_session => FALSE);
END;
/

BEGIN
      DBMS_SCHEDULER.stop_job (job_name => 'job_de_teste');
END;
/

Os Jobs podem ser deletados usando a procedure DROP_JOB:

BEGIN
      DBMS_SCHEDULER.drop_job (job_name => 'job_de_teste');
END;
/

Oracle 10g:
———–

O BMS_JOB foi substutuído pelo DBMS_SCHEDULER.

Olhe as views:

V_$SCHEDULER_RUNNING_JOBS
GV_$SCHEDULER_RUNNING_JOBS
DBA_QUEUE_SCHEDULES
USER_QUEUE_SCHEDULES
_DEFSCHEDULE
DEFSCHEDULE
AQ$SCHEDULER$_JOBQTAB_S
AQ$_SCHEDULER$_JOBQTAB_F
AQ$SCHEDULER$_JOBQTAB
AQ$SCHEDULER$_JOBQTAB_R
AQ$SCHEDULER$_EVENT_QTAB_S
AQ$_SCHEDULER$_EVENT_QTAB_F
AQ$SCHEDULER$_EVENT_QTAB
AQ$SCHEDULER$_EVENT_QTAB_R
DBA_SCHEDULER_PROGRAMS
USER_SCHEDULER_PROGRAMS
ALL_SCHEDULER_PROGRAMS
DBA_SCHEDULER_JOBS
USER_SCHEDULER_JOBS
ALL_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_CLASSES
ALL_SCHEDULER_JOB_CLASSES
DBA_SCHEDULER_WINDOWS
ALL_SCHEDULER_WINDOWS
DBA_SCHEDULER_PROGRAM_ARGS
USER_SCHEDULER_PROGRAM_ARGS
ALL_SCHEDULER_PROGRAM_ARGS
DBA_SCHEDULER_JOB_ARGS
USER_SCHEDULER_JOB_ARGS
ALL_SCHEDULER_JOB_ARGS
DBA_SCHEDULER_JOB_LOG
DBA_SCHEDULER_JOB_RUN_DETAILS
USER_SCHEDULER_JOB_LOG
USER_SCHEDULER_JOB_RUN_DETAILS
ALL_SCHEDULER_JOB_LOG
ALL_SCHEDULER_JOB_RUN_DETAILS
DBA_SCHEDULER_WINDOW_LOG
DBA_SCHEDULER_WINDOW_DETAILS
ALL_SCHEDULER_WINDOW_LOG
ALL_SCHEDULER_WINDOW_DETAILS
DBA_SCHEDULER_WINDOW_GROUPS
ALL_SCHEDULER_WINDOW_GROUPS
DBA_SCHEDULER_WINGROUP_MEMBERS
ALL_SCHEDULER_WINGROUP_MEMBERS
DBA_SCHEDULER_SCHEDULES
USER_SCHEDULER_SCHEDULES
ALL_SCHEDULER_SCHEDULES
DBA_SCHEDULER_RUNNING_JOBS
ALL_SCHEDULER_RUNNING_JOBS
USER_SCHEDULER_RUNNING_JOBS
DBA_SCHEDULER_GLOBAL_ATTRIBUTE
ALL_SCHEDULER_GLOBAL_ATTRIBUTE
DBA_SCHEDULER_CHAINS
USER_SCHEDULER_CHAINS
ALL_SCHEDULER_CHAINS
DBA_SCHEDULER_CHAIN_RULES
USER_SCHEDULER_CHAIN_RULES
ALL_SCHEDULER_CHAIN_RULES
DBA_SCHEDULER_CHAIN_STEPS
USER_SCHEDULER_CHAIN_STEPS
ALL_SCHEDULER_CHAIN_STEPS
DBA_SCHEDULER_RUNNING_CHAINS
USER_SCHEDULER_RUNNING_CHAINS
ALL_SCHEDULER_RUNNING_CHAINS

08
mar
10

Tudo que você precisa saber sobre jobs

Para criar jobs no Banco de Dados em versões 9i ou inferiores, podemos utilizar a package DBMS_JOB.

Vamos simplificar este assunto indo direto ao ponto que você precisa. Para isso, conheca a package DBMS_JOB:

DBMS_JOB.SUBMIT()
DBMS_JOB.REMOVE()

DBMS_JOB.CHANGE()
DBMS_JOB.WHAT()
DBMS_JOB.NEXT_DATE()
DBMS_JOB.INTERVAL()
DBMS_JOB.RUN()

DBMS_JOB.SUBMIT()
—————–

Existe atualmente duas versões, SUBMIT() e ISUBMIT()

PROCEDURE DBMS_JOB.SUBMIT(
      job OUT BINARY_INTEGER,
      what IN VARCHAR2,
      next_date IN DATE DEFAULT SYSDATE,
      interval IN VARCHAR2 DEFAULT 'NULL',
      no_parse IN BOOLEAN DEFAULT FALSE);
PROCEDURE DBMS_JOB.ISUBMIT(
      job IN BINARY_INTEGER,
      what IN VARCHAR2,
      next_date in DATE DEFAULT SYSDATE
      interval IN VARCHAR2 DEFAULT 'NULL',
      no_parse in BOOLEAN DEFAULT FALSE);

A diferença entre ISUBMIT e SUBMIT é que ISUBMIT especifica um número para o job enquanto que SUBMIT retorna o número gerado

pela package DBMS_JOB.

Visualizando os jobs submitados:
——————————-

select job,last_date,next_date,interval,substr(what, 1, 50)
from   dba_jobs;

Criando um job:
————–

O número do job (se você estiver usando o SUBMIT()) será originado da sequence SYS.JOBSEQ

Para exemplificarmos a criação e manipulação de jobs, vamos utilizar uma procedure como mostrada a seguir Lembrando que é

apenas para exemplificação:

create or replace procedure teste is
        begin
          dbms_output.put_line('Oi Eder!');
        end;
/

Examplo 1:
———-

declare
      variable numero_job number;
begin
      DBMS_JOB.SUBMIT(:numero_job, 'teste;', Sysdate, 'Sysdate+1');
      commit;
end;
/

DECLARE
      numero_job   NUMBER;
BEGIN
      DBMS_JOB.SUBMIT(job  => numero_job,what => 'teste;',next_date => SYSDATE,interval  => 'SYSDATE+1/24');
      COMMIT;
END;
/

Supondo que você tenha criado esse job as 10:00. Então, a próxima vez que ele rodará, será as 11:00.

Examplo 2:
———-

declare
      variable numero_job number;
begin
      DBMS_JOB.SUBMIT(:numero_job, 'teste;', LAST_DAY(SYSDATE+1), 'LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE+1),1))');
      commit;
end;
/

Examplo 3:
———-

VARIABLE numero_job NUMBER
BEGIN
      DBMS_JOB.SUBMIT(:numero_job,'DBMS_DDL.ANALYZE_OBJECT(''TABLE'',''CHARLIE'',''X1'',''ESTIMATE'',NULL,50);',SYSDATE,'SYSDATE + 1');
      COMMIT;
END;
/

PRINT numero_job

NUMERO_JOB

———-
45682

Examplo 4: este job foi agendado para rodar de hora em hora
———————————————————–

DECLARE
      numero_job   NUMBER;
BEGIN
      DBMS_JOB.SUBMIT(job  => numero_job,what => 'begin space_logger; end;',next_date => SYSDATE,interval  => 'SYSDATE+1/24');
      COMMIT;
END;
/

Example 5: Examplos de intervalos
———————————

‘SYSDATE + 7′                                                                                                              :extamente sete dias da última execução
‘SYSDATE + 1/48′                                                                                                        :cada meia hora
‘NEXT_DAY(TRUNC(SYSDATE), ”MONDAY”) + 15/24′                                   :toda segunda-feira as 15:00
‘NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ”Q”), 3), ”THURSDAY”)’  :primeira quinta-feira de cada trimestre
‘TRUNC(SYSDATE + 1)’                                                                                            :todo dia a meia noite
‘TRUNC(SYSDATE + 1) + 8/24′                                                                                :todo dia as 08:00
‘NEXT_DAY(TRUNC(SYSDATE ), “TUESDAY” ) + 12/24′                                :toda terça-feira ao meio dia
‘TRUNC(LAST_DAY(SYSDATE ) + 1)’                                                                   :primeiro dia de cada mês a meia noite
‘TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ‘Q’ ) – 1/24′                              :último dia de cada trimestre as 23:00
‘NEXT_DAY(SYSDATE, “FRIDAY”) ) ) + 9/24′                                                    :cada segunda,quarta e sexta as 09:00

———————————————————————————
Examplo 6:
———-

Você tem esta procedure

create or replace procedure teste
as
      id_next number;
begin
      select max(id) into id_next from iftest;
      insert into iftest(id) values(id_next+1);
      commit;
end;
/

Suponha que, em 16 de julho as 09:26 você execute:

variable numero_job number;
begin
      DBMS_JOB.SUBMIT(:numero_job, 'teste;', LAST_DAY(SYSDATE+1), 'LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE+1),1))');
      commit;
end;
/

select job, to_char(this_date,'DD-MM-YYYY;HH24:MI'), to_char(next_date, 'DD-MM-YYYY;HH24:MI')
from dba_jobs;

JOB TO_CHAR(THIS_DAT TO_CHAR(NEXT_DAT
---------- ---------------- ----------------
25                  07-03-2010;09:26

Suponha que, em 16 de julho as 09:38 você execute:

variable numero_job number;
begin
     DBMS_JOB.SUBMIT(:numero_job, 'teste;', LAST_DAY(SYSDATE)+1, 'LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE+1),1))');
     commit;
end;
/

select job, to_char(this_date,'DD-MM-YYYY;HH24:MI'), to_char(next_date, 'DD-MM-YYYY;HH24:MI')
from dba_jobs;

JOB TO_CHAR(THIS_DAT TO_CHAR(NEXT_DAT
---------- ---------------- ----------------
25                  31-07-2004;09:26
26                  01-08-2004;09:38

Suponha que, em 16 de julho as 09:41 você execute:

variable numero_job number;
begin
     DBMS_JOB.SUBMIT(:numero_job, 'teste;', SYSDATE, 'LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE+1),1))');
     commit;
end;
/

select job, to_char(this_date,'DD-MM-YYYY;HH24:MI'), to_char(next_date, 'DD-MM-YYYY;HH24:MI')
from dba_jobs;

JOB TO_CHAR(THIS_DAT TO_CHAR(NEXT_DAT
---------- ---------------- ----------------
27                  31-08-2004;09:41
25                  31-07-2004;09:26
26                  01-08-2004;09:39

Suponha que, em 16 de julho as 09:46 você execute:

variable numero_job number;
begin
     DBMS_JOB.SUBMIT(:numero_job, 'teste;', SYSDATE, 'TRUNC(LAST_DAY(SYSDATE + 1/24 ) )');
     commit;
end;
/

select job, to_char(this_date,'DD-MM-YYYY;HH24:MI'), to_char(next_date, 'DD-MM-YYYY;HH24:MI')
from dba_jobs;

JOB TO_CHAR(THIS_DAT TO_CHAR(NEXT_DAT
--------- ---------------- ----------------
27                  31-08-2004;09:41
28                  31-07-2004;00:00
25                  31-07-2004;09:26
29                  31-07-2004;00:00

————————————————————————————–

variable numero_job number;
begin
     DBMS_JOB.SUBMIT(:numero_job, 'teste;', null, 'TRUNC(LAST_DAY(SYSDATE ) + 1)' );
     commit;
end;
/

Na definição do job, use aspas simples para determinar o que será executado e sempre coloque “;” no final da definição, como

mostrado nos exemplos.

DBMS_JOB.REMOVE()
—————–

Removendo um Job da fila de execução
Para remover um job da fila, utilize a procedure REMOVE, da package DBMS_JOB.

A seguinte declaração remove o job de número 14144 da fila de execução:

BEGIN
     DBMS_JOB.REMOVE(14144);
END;
/

DBMS_JOB.CHANGE()
—————–

Neste exemplo, o job com o número 14144 é alterado para executar a cada três dias:

BEGIN
     DBMS_JOB.CHANGE(14144, NULL, NULL, 'SYSDATE + 3');
END;
/

Se você especificar NULL para WHAT, NEXT_DATE ou INTERVAL quando você executar essa procedure, significa que você NÃO quer

alterar esses parâmetros, ou seja, eles ficarão inalterados (com a configuração anterior).

DBMS_JOB.WHAT()
—————

Você pode alterar a definição de um job executando a procedure DBMS_JOB.WHAT.
O seguint exemplo altera a definição do job com número 14144:

BEGIN
     DBMS_JOB.WHAT(14144,'DBMS_DDL.ANALYZE_OBJECT(''TABLE'',''HR'', ''DEPARTMENTS'',''ESTIMATE'', NULL, 50);');
END;
/

DBMS_JOB.NEXT_DATE()
——————–

Você pode alterar a data da próxima execução de um job. Para isso, basta executar a procedure DBMS_JOB.NEXT_DATE:

BEGIN
     DBMS_JOB.NEXT_DATE(14144, SYSDATE + 4);
END;
/

DBMS_JOB.INTERVAL()
——————-

O seguinte exemplo ilustra a alteração do intervalo de execução. Para isso foi utilizado a procedure DBMS_JOB.INTERVAL:

BEGIN
     DBMS_JOB.INTERVAL(14144, 'NULL');
END;
/

execute dbms_job.interval(<job number>,’SYSDATE+(1/48)’);

Neste caso, o job não será executado novamente após ele executar com sucesso e ainda será excluído da fila de execução de

jobs.

DBMS_JOB.BROKEN()
—————–

Um job é rotulado como broken ou non-broken. O oracle não tenta executar jobs rotulados como broken.

Examplo:

BEGIN
     DBMS_JOB.BROKEN(10, TRUE);
END;
/
Examplo:

O seguinte exemplo marca o job 14144 como not broken e seta a próxima data de execução para a próxima segunda-feira:
BEGIN
     DBMS_JOB.BROKEN(14144, FALSE, NEXT_DAY(SYSDATE, 'MONDAY'));
END;
/
Examplo:
exec DBMS_JOB.BROKEN( V_JOB_ID, true);

Examplo:

select JOB into V_JOB_ID from DBA_JOBS where  WHAT like '%SONERA%';
DBMS_SNAPSHOT.REFRESH( 'SONERA', 'C');
DBMS_JOB.BROKEN( V_JOB_ID, false);

correção de jobs brokens
————————

CREATE OR REPLACE PROCEDURE corrige_job
    AS
     /*
      || executa DBMS_JOB.BROKEN para tentar e seta
      || qualquer job broken como unbroken
     */

     /* seleciona os cursores de jobs brokens do usuário*/
     CURSOR broken_jobs_cur IS
       SELECT job FROM user_jobs WHERE broken = 'Y';
BEGIN
     FOR job_rec IN broken_jobs_cur
       LOOP
          DBMS_JOB.BROKEN(job_rec.job,FALSE);
     END LOOP;
END job_fixer;

DBMS_JOB.RUN()

—————

BEGIN
     DBMS_JOB.RUN(14144);
END;
/

Além disso, ainda podemos monitorar os jobs com a view DBA_JOBS. Vejam as colunas desta view:

   JOB
      Identificador do Job.
   LOG_USER
      Usuário que estava logado quando o job foi criado.
   PRIV_USER
      USER cujo privilégio default privileges é aplicado no job.
   SCHEMA_USER
      Essa coluna é interessante.... Se nessa coluna estiver o valor JOSE e o job executar, por exemplo, uma procedure chamada CALCULA_VALOR, o Oracle irá executar JOSE.CALCULA_VALOR.
   LAST_DATE
      Última vez, em data, na qual o job foi executado com SUCESSO!
   LAST_SEC
      Por incrível que pareça, o mesmo que LAST_DATE.
   THIS_DATE
      Se esta coluna estiver nula significa que o job não está sendo executado mas se contiver alguma data, significa que esse é o momento em que o job iniciou e ainda está sendo executado.
   THIS_SEC
      De novo, é o mesmo que THIS_DATE.
   NEXT_DATE
      Próxima data em que o job irá executar.
   NEXT_SEC
      Eu não sei porque mas, novamente, é o mesmo que NEXT_DATE.
   TOTAL_TIME
      Tempo total gasto, desde o princípio, pelo sistema, neste job.
   BROKEN
      Se Y, o job não está executando.
   INTERVAL
      Uma função de data que define o NEXT_DATE. Essa coluna determina a frequencia em que o job será executado.
   FAILURES
      Exibe quantas vezes o job executou e falhou desde a última execução bem sucedida.
   WHAT
      O que esse job irá executar. Pode ser um bloco anônimo, uma procedure ou uma package.
   NLS_ENV
      Parâmetros de sessão descrevendo o ambiente NLS para o job.
   MISC_ENV
      Outros parâmetros de sessão para a execução do job.
   INSTANCE
      ID da instância que pode executar o job. O default é 0 mas em ambiente clusterizado, isso pode mudar.

E como podemos alterar um job de outro usuário? Por exemplo, executamos a seguinte consulta: select job, log_user from dba_jobs  e obtemos uma linha com 123 e JOSE. Isso significa que o número do job é 123 e ele pertence ao schema JOSE. Mas suponhamos que estamos conectados no schema MARIA que tem permissão de DBA, para simplificar, e tentamos alterar o NEXT_DATE desse job. Certamente, a primeira tentativa seria executar o comando:

  exec dbms_job.next_date(job => 123,next_date => to_date('06/10/2011 01:00','dd/mm/rrrr hh24:mi'));

Mas teremos o seguinte erro:

ERROR at line 1:
ORA-23421: job number 123 is not a job in the job queue
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_IJOB", line 529
ORA-06512: at "SYS.DBMS_JOB", line 171
ORA-06512: at line 1

Esse erro nos diz que o usuário que executou o comando não é dono do job. E agora José? Como eu posso alterar o job do schema JOSE se, supostamente não tenho acesso à esse schema, por um motivo qualquer? Não se desespere pois um pacote não documentado está prestes à surgir, é o DBMS_IJOB. Esse cara pode fazer tudo……

Espero que tenha ajudado…

05
mar
10

Depois de alterar a senha do usuário sys ou system, o backup com rman falha

O comando no RMAN retorna os seguintes erros:

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of delete command at 09/05/2006 17:26:51
RMAN-12001: could not open channel ORA_DISK_1
RMAN-10008: could not create channel context
RMAN-10003: unable to connect to target database
ORA-01017: invalid username/password; logon denied

Esse problema também pode ocorrer depois de modificar, alterando ou adicionando parametros persistentes que são utilizados para fazer a conexão com o banco de dados alvo.

Solução
~~~~~~~~~
1) Altere a configuração para o valor correto:

exemplo:
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK CLEAR;

se o problema for senha:
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK connect ‘<username/password>';

2) Reexecute a operação que falhou.

03
mar
10

ORA-03116: invalid buffer length passed to a conversion routine

causa: Esta é uma mensagem de erro interna e incomum.

solução: Contate o Serviço de Suporte da Oracle porém, em alguns casos, se este erro for causado em uma aplicação que está sendo executado no cliente, pode ser resolvido sem qualquer alteração no Servidor ou mesmo no Banco de Dados. Para isso, basta verificar se o characterset do cliente é igual ao do Banco de Dados, se for diferente, altere o characterset do cliente para que fique igual ao do Banco de Dados, caso contrário, contate o Serviço de Suporte da Oracle.




Seguir

Obtenha todo post novo entregue na sua caixa de entrada.