Introdução

A partir da versão 12.1.18, os produtos da linha RM passarão a utilizar o "Direct Mode" do provider de conexão (Devart), utilizado para bases de dados Oracle.

O "Direct Mode" implementa a conexão da aplicação RM sem a necessidade de utilizar dll's, providers ou outros artefatos de terceiros para conexão a base Oracle. Antes da implementação, utilizávamos a Oracle Call Interface (OCI) para conexão ao banco de dados Oracle. Esta configuração exigia a existência do Client Oracle, tanto nas máquinas Client, quanto nas máquinas Server, além de demandar a existência do Client em 32 (x86) e 64 (x64) bits.

Para saber mais sobre o "Direct Mode", acesse o artigo Oracle Direct Mode.

Vantagens

As vantagens em se utilizar o "Direct Mode" são:

PERFORMANCE


Este trecho envolve conteúdo extremamente técnico.


Iremos mostrar abaixo, os resultados dos testes de comparação de performance, realizados pela empresa Devart, utilizando o "dotConnect for Oracle" (DirectMode) em relação a outros providers ADO .NET, como: "Oracle Client""OLE DB" e "ODP.NET".

  • Todos os testes foram realizados em um ambiente que utilizava o Sistema Operacional Windows 2000 Professional;
  • Servidor: Intel P4 2.4 / 512 Mb RAM, Oracle9i Enterprise Edition Release 9.2.0; 
  • Estação de Trabalho: Intel P4 2.0 / 512 Mb RAM, Oracle client 9.2.0;

Operações realizadas em banco:

CreatePerf
CREATE TABLE Master (
  Code NUMBER,
  Field1 VARCHAR(100),
  Field2 VARCHAR(100),
  Field3 VARCHAR(100)
);

CREATE TABLE Detail (
  Code NUMBER,
  Master NUMBER,
  Field1 VARCHAR(100),
  Field2 VARCHAR(100)
);

CREATE TABLE Loaded (
  Code NUMBER,
  Field1 VARCHAR(100),
  Field2 VARCHAR(100),
  Field3 VARCHAR(100),
  Field4 VARCHAR(100),
  Field5 VARCHAR(100)
);

declare
  i INTEGER;
begin
  for i in 1..1000 loop
    INSERT INTO Master (
       Code,
       Field1,
       Field2,
       Field3)
    VALUES (
       i,
       '01234567890123456789',
       '12345678901234567890',
       '23456789012345678901');
  end loop;

  for i in 1..10000 loop
    INSERT INTO Detail (
       Code,
       Master,
       Field1,
       Field2)
    VALUES (
       i,
       mod(i,1000) + 1,
       '01234567890123456789',
       '12345678901234567890');
  end loop;

  COMMIT;
end;
/

CREATE INDEX Detail_IND ON Detail (Master);
/

CREATE OR REPLACE
PROCEDURE Master_Insert (
  p_Code NUMBER,
  p_Field1 VARCHAR2,
  p_Field2 VARCHAR2,
  p_Field3 VARCHAR2
)
is
begin
  NULL;
end;
/


Os teste realizados foram:

1° Teste - Obtenção dos Dados

Esse teste demonstra a obtenção de várias linhas começando com 1000. Para realizar esse teste a classe DataReader é usada diretamente. Nesse teste o valor padrão do parâmetro Fetch Block Size foi usado.


O comando SQL utilizado nesse teste é:

fetch.test
SELECT * FROM Detail WHERE RowNum <= :Recs


Resultado:

OraDirect. NET - Test 1.Fetch

2º Teste - Preechimento dos Dados

Esse teste demonstra o preenchimento de um DataSet por um DataAdapter com várias linhas.


O comando SQL utilizado nesse teste é:

fill.test
SELECT * FROM Detail WHERE RowNum <= :Recs


Resultado:

OraDirect. NET - Test 2. Fill

3º Teste - Execução Múltipla

Executa um número específico X de vezes o comando INSERT.

O teste usa a tabela DETAIL.


Resultado:

OraDirect. NET - Test 3. Multi executing

4º Teste - Chamada a uma Stored Procedure

Esse teste demonstra um número específico X de chamadas a uma Stored Procedure com parâmetros. Os Parâmetros são passados cada vez que a Store Procedure é chamada. A Stored Procedure foi criada antes dos testes de Execução (4º Teste)

Nome da Stored Procedure: Master_Insert

Parâmetros a sêr submetidos: p_Code, p_Field1, p_Field2, p_Field3


Resultado:

OraDirect. NET - Test 4. Stored procedure call


Caso queira conferir o artigo oficial do teste, acesse DotConnect for Oracle Performance.

Links Úteis

Caso tenha algum problema na comunicação entre o AppServer (Host) e o banco de dados, consulte o artigo CannotConnect ao utilizar Direct mode (Oracle).