01 октября 2020

Варианты подключения к Oracle в UniDAC

    Лет 20-25 тому назад каждая программа для работы с базами данных написанная на Delphi таскала за собой десятки мегабайт Borland Database Engine (BDE). Программисты и администраторы, кроме установки и настройки клиентского программного обеспечения СУБД, были вынуждены создавать и настраивать алиасы BDE. Их жизнь упростилась, когда стали появляться библиотеки, работающие с базами данных через API их клиентского программного обеспечения. Сегодня я хочу рассказать о различных вариантах подключения к серверу базы данных Oracle на примере одной из подобных библиотек - Universal Data Access Components (Devart UniDAC).

    Для начала рассмотрим используемый в UniDAC режим подключения по умолчанию - "client mode". В этом режиме для подключения к серверу базы данных Oracle используется библиотека Oracle Call Interface (OCI). Для работы через OCI необходимо, чтобы на компьютере было установлено клиентское программное обеспечение Oracle. Для наглядности, создадим тестовую базу данных у которой SID и Service Name не совпадают.

Вариант 1. На компьютере установлен клиент Oracle и настроен TNSNAMES.ORA:
uses
  Uni, OracleUniProvider;
  
procedure CreateOra;
var
  db: TUniConnection;
begin
  db := TUniConnection.Create(nil);
  db.ProviderName := 'Oracle';
  db.LoginPrompt := False;
  db.Username := 'scott';
  db.Password := 'tiger';

  db.Server := 'TestTNSname'; // наименование записи в TNSNAMES.ORA

  db.Connect;
end;
Вариант 2. На компьютере установлен клиент Oracle без настроеного TNSNAMES.ORA. Используем Oracle Service Name (SN):
uses
  Uni, OracleUniProvider;

procedure CreateOra;
var
  db: TUniConnection;
begin
  db := TUniConnection.Create(nil);
  db.ProviderName := 'Oracle';
  db.LoginPrompt := False;
  db.Username := 'scott';
  db.Password := 'tiger';

  db.Server := '192.168.1.5:1521/testSN';
  
  db.Connect;
end;
При этом порт можно не указывать:
db.Server := '192.168.1.5/testSN';
Вариант 3. На компьютере установлен клиент Oracle без настроеного TNSNAMES.ORA. Используем Oracle System Identifier (SID):
uses
  Uni, OracleUniProvider;
  
procedure CreateOra;
var
  db: TUniConnection;
begin
  db := TUniConnection.Create(nil);
  db.ProviderName := 'Oracle';
  db.LoginPrompt := False;
  db.Username := 'scott';
  db.Password := 'tiger';

  db.Server := '192.168.1.5:1521/testSID';
  
  db.Connect;
end;
Как и во 2-м варианте порт можно не указывать:
db.Server := '192.168.1.5/testSID';
    Работа с базой данных в "client mode" требует дополнительных затрат на установку и настройку клиентского программного обеспечения Oracle. Поэтому разработчики предоставили возможность подключения к БД Oracle в "direct mode". При его использовании программа подключается к БД по протоколу TCP/IP напрямую, без установки клиентского программного обеспечения. С точки зрения безопасности использование "direct mode" аналогичен использованию клиента Oracle без Oracle Advanced Security. Чтобы подключиться из UniDAC к БД Oracle в "direct mode" необходимо в SpecificOptions экземпляра объекта TUniConnection установить значение свойства "Direct" в "True":
db.SpecificOptions.Values['Direct'] := 'True';
Вариант 4. На компьютере не установлен клиент Oracle. Используем Oracle Service Name (SN):
uses
  Uni, OracleUniProvider;
  
procedure CreateOra;
var
  db: TUniConnection;
begin
  db := TUniConnection.Create(nil);
  db.ProviderName := 'Oracle';
  db.LoginPrompt := False;
  db.Username := 'scott';
  db.Password := 'tiger';

  db.SpecificOptions.Values['Direct'] := 'True';
  db.Server := '192.168.1.5:1521:sn=testSN';
  
  db.Connect;
end;
Строку параметров сервера можно указать как во втором варианте, без "sn=":
db.Server := '192.168.1.5:1521/testSN'
и даже без порта:
db.Server := '192.168.1.5/testSN';
Вариант 5. На компьютере не установлен клиент Oracle. Используем Oracle System Identifier (SID):
uses
  Uni, OracleUniProvider;
  
procedure CreateOra;
var
  db: TUniConnection;
begin
  db := TUniConnection.Create(nil);
  db.ProviderName := 'Oracle';
  db.LoginPrompt := False;
  db.Username := 'scott';
  db.Password := 'tiger';

  db.SpecificOptions.Values['Direct'] := 'True';
  db.Server := '192.168.1.5:1521:sid=testSID';

  db.Connect;
end;
Как и в 4-м варианте "sid=" и порт можно не указывать:
db.Server := '192.168.1.5/testSID'

    Следует отметить, что производительность программы и размер ее файла не зависит от выбранного режима подключения. Но "direct mode" накладывает некоторые несущественные ограничения. Например, могут возникнуть некоторые проблемы при использовании межсетевых экранов. Подробнее о подключении к серверу базы данных Oracle вы можете почитать в документации библиотеки в разделе "Using Oracle data access provider with UniDAC in Delphi".

Комментариев нет:

Отправить комментарий