Настройка работы SAS с БД Oracle

Всем привет!
Данная статья посвящена тому, как правильно надо настраивать систему для работы с БД Oracle в системах Windows. Так или иначе, какая-то часть информации уже и ранее была опубликована на нашем сайте. Тут будет собрана вся необходимая информация в одном месте!

1. На первом этапе, необходимо убедиться, что SAS Access To Oracle есть в лицензии и установлен. Для этого заходим в SAS Base Enterprise guide и вводим следующий код:

proc setinit;
run;
В логе будет отображён список, где и ищем —SAS/ACCESS Interface to Oracle.
2. Далее, устанавливаем правильную версию клиента Oracle, разрядность которой будет соответствовать разрядности установленного SAS. Для этого заходим на сайт ORACLE, где и ищем необходимую версию и разрядность клиента или базы. После чего скачиваем и устанавливаем дистрибутив. Желательно перезагрузить систему.
Замечу, что изначально рекомендуется установить Oracle Client до установки SAS.
3. В файле TNSNAMES.ORA указываем параметры доступа к нашей БД.
Примерно по следующему пути можно найти необходимый файл:
С:APPPRODUCT11.2.0CLIENT_1NETWORKADMIN
В TNS указываются следующие параметры:
NAME =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = HOST_NAME)(PORT = PORT))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SID_NAME)
    )
  )
Подчёркнутое прописывать ручками =)
На этом этапе может возникнуть сразу несколько разных нюансов.
4. Клиент SAS неправильно отображает символы из БД. Это может происходить по нескольким причинам:
Меняем параметры системного файла sas9.cfg. Сначала заходим в sas9.cfg, который лежит по адресу ниже:
!ROOTSASSASHomeSASFoundation9.3
!ROOT — это корень где лежит SAS. Это обычно C:Program Files или просто C:. В общем, то место куда устанавливался SAS.
В этом файле прописан путь к другому sas9.cfg файлу, который нас и интересует. В моём случае это:
-config «C:SASSASHomeSASFoundation9.3nlsu8sasv9.cfg»
 Далее переходим к этому файлу. Обязательно делаем копию этого файла, а далее в конце списка добавляем следующие строки или заменяем те, которые уже как-то есть в списке.
-DBCS
-LOCALE ru_RU
-encoding=utf-8 
Перезапускаем SAS Base и смотрим далее. Если картинка изменилась, но всё равно непонятные символы, то переходим к следующему шагу, иначе сразу к шагу 6.
5. Изменение записей в реестре.
Для правильного отображения меняем параметр NLS_LANG.
Переходим в HKEY_LOCAL_MACHINESOFTWAREoracleKEY_OraClient11g_home1
И далее меняем параметр на AMERICAN_AMERICA.AL32UTF8
Теперь отображение значений должно быть в норме.
6. Последний момент связан с созданием таблиц на стороне БД. Проблема возникает когда примерно следующий код создаёт табличку:
LIBNAME TEST ORACLE <options>;
PROC SQL;
     CREATE TABLE TEST.A
              (X CHAR(250));
QUIT:
А далее делаем
PROC CONTENTS DATA=TEST.A; RUN;
 
Причём, даже если «провалиться» на БД и написать код, то всё равно размерность будет в 4 раза больше.
Вот такую скромную размерность создаёт SAS при работе с Oracle.
Если посмотреть эту же табличку через SQL Developer, то увидим:
Name  Null               Type          
—-       —-                —————
X                               VARCHAR2(1002)
Всё это происходит по тому, что SAS при работе с Unicode увеличивает размер в 4 раза, как на уровне создания таблички, так и на уровне возвращения запроса.
Для того, чтобы данную проблему избежать необходимо указывать следующие параметры при указании библиотек:
LIBNAME TEST ORACLE <options> DBSERVER_MAX_BYTES=1 DBCLIENT_MAX_BYTES=1;
Теперь SQL Developer возвращает:
Name  Null               Type          
—-       —-                —————
X                               VARCHAR2(250)
Если запустить в SAS процедуру CONTENTS, то она уже возвращает:

На этом всё! Спасибо за внимание!

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.