1. Общее

1.1. Предназначение

1.1.1. Утилита (shift2sql.exe и её переименованные копии) заменяет собой обычный механизм выгрузки данных в SQL (в обычном режиме выгрузкой занимается сам сервер справочников/отчетов).
1.1.2. При настройках, описанных ниже, выгрузка пойдет автоматически с использованием утилиты, что позволит разгрузить сервер и ускорить процесс.
1.1.3. Ручной режим запуска утилиты нужен только для экспериментов и/или массовой загрузки файлов смен в другую базу. Т. е. все остальные механизмы остаются теми же (обрабатываются файлы из incoming, используется та же самая БД SQL, которую использует сервер отчетов и т. д.). Изменяется только механизм передачи в БД SQL. Всё, что Вам необходимо сделать - внести изменения в .ini файл и перезапустить сервер. Дальше все будет работать в автоматическом режиме.

1.2. Преимущества утилиты

1.2.1. Не нагружает *.exe сервера(refsrv.exe или rkReportsServer.exe)

1.2.2. Можно модифицировать алгоритм выгрузки, не затрагивая сервер

1.2.3. Можно запускать параллельно несколько процессов загрузки данных

1.2.4. Можно использовать память, не отнимая её у сервера

1.2.5. Утечки памяти не так критичны

1.3. Виды утилит

1.3.1. В современных версиях RK7 имеются три копии описанного файла приложения, которые переименованы:

refsToSQL.exe - для выгрузки справочников

shift2sql.exe - для выгрузки накопительных данных

logsToSQL.exe - для выгрузки журнала

1.4. Алгоритм работы

1.4.1. Приложением создаются копии входных наборов данных.

1.4.2. Переносит данные с учетом разного рода проверок в наборы данных в памяти.

1.4.3. Затем переносит данные из памяти в MS SQL.

1.5. Условия

1.5.1. Использование утилиты возможно в версиях сервера справочников/отчетов не ниже 7.4.21.265. Если версия ниже - необходимо обновить сервер, занимающийся выгрузкой во внешнюю БД (соответственно, может потребоваться обновление вышестоящих серверов).

1.5.2. С версий 7.5.4.0 shift2sql включен по умолчанию, т.е. в ini файле не нужно производить дополнительных настроек.

2. Использование утилиты

2.1 Автоматически

2.1.1. Файл (shift2sql.exe) должен присутствовать в каталоге, где расположен *.exe файл сервера, осуществляющего выгрузку во внешнюю БД.
Внимание: в версиях старше 7.4.21.289 файл присутствует в стандартной поставке, ручное обновление не требуется (только если не тестируете новую версию).
 
2.1.2. В ini файле сервера отчетов/справочников (в зависимости от используемого сервера) следует добавить в секции CONFIG опцию UseShift2SQL(для версий ниже 7.5.4.xxx):

[CONFIG]
...
UseShift2SQL = "1"
...
TEXT

2.2 Ручной

2.2.1. Для ручного запуска необходимо в командной строке или исполняемом файле составить текст согласно следующему шаблону:



MS SQL

shift2sql.exe "ConnectionString" "shiftsFileName" "X:\SomePath\chckconv.xml"

MS SQL (прим 2)

shift2sql.exe "ConnectionString" "shiftsFileName" "X:\SomePath\chckconv.xml" 0 "dataload" "sql\Data2MSq.exe"

PostgreSQL

shift2sql.exe "ConnectionString" "shiftsFileName" "X:\SomePath\chckconv.xml" 0 "dataload" "sql\Data2pgs.exe"

shift2sql.exe "ConnectionString" "shiftsFileName" "C:\SomePath\chckconv.xml" 0 "dataload" "sql\data2msq.exe"

Всего используется 6 параметров, имена параметров используются в логах, доступ к параметрам по номерам:




1ConnectionString

Строка соединения, вида



MS-SQL"Provider=SQLNCLI10.1;Persist Security Info=True;Initial Catalog=RK7xBASEUPGx20;Data Source=310-RK7-ALAN\SQLEXPRESS;User ID=SA;Password=SomeStrongPAssword" - Полная строка подключения ADO - Включает в себя имя пользователя и пароль. или dataBaseConnection , вида "ByHandle=2888" , где значением параметра ByHandle= является указатель открытого временного файла.
Временный файл создаётся с флагом FILE_FLAG_DELETE_ON_CLOSE, с bInheritHandle=true в структуре _SECURITY_ATTRIBUTES
PostgreSQL

DRIVER={PostgreSQL UNICODE};DATABASE=refbase;SERVER=localhost;PORT=5432;UID=postgres;MaxVarcharSize=2048

  • refbase - имя БД
  • postgres - имя пользователя PostgreSQL
  • SERVER=localhost;PORT=5432 - IP и порт сервера PostgreSQL

Для корректной работы нужен драйвер psqlodbc. Взять можно здесьhttps://ftp.postgresql.org/pub/odbc/versions/msi/psqlodbc_13_02_0000-x86.zip

2shiftsFileNameИмя файла выгружаемой смены (shift.udb) С полным путём, если это необходимо, имя выгружаемого файла. Пример приведен для сервера MS SQL.
С полным путём, если это необходимо 
или имя файла-источника данных shiftsDataFileName 
3dbExportConfigFileПолный путь к файлу описания структуры chckconv.xml. Данный файл с правилами преобразования данных, создается по умолчанию в папке /base/ (в случае использования сервера справочников для отчетов) после первой закачки смены с использованием утилиты (shift2sql.exe) или также LOGToSQL.xml в подпапке \base\refs2sql\
4parentProcIDToWait Идентификатор родительского процесса ОС. Это число. При смерти родительского процесса shift2sql.exe так же завершает свою работу. Не обязателен
5sqlDataLoadingMode

Режим загрузки данных в SQL , регулирует перезапись. Может иметь значение:

  • "dataover" (выгрузить весь файл, удалив имеющиеся в MS SQL данные)- Перезапись данных: данные во всех таблицах будут сперва удалены, а затем добавлены из указанного файла
  • "datasync" - сверяет ключи записей и штампы (RECSTAMP) и добавляет/удаляет/обновляет только то, что было изменено, synchronize
  • "schmover" - Создание структуры: все таблицы будут пересозданы, все данные будут удалены, schmmake
  • "dataload" или "load" - Добавление данных: данные добавляются к имеющимся в таблицах. Значения, пересекающиеся по ключам, будут обновлены.
  • "schmsync" - Создание структуры БД: существующие таблицы будут модифицированы (режим обновления накопительной БД. Опциональный - необязательный.
6LowLevelExe

Путь к утилите нижнего уровня, которая будет производить непосредственную выгрузку на sql-сервер. На текущий момент поддержаны два сервера:

  • sql\data2msq.exe - утилита нижнего уровня, занимающаяся выгрузкой в MS SQL;
  • sql\data2pgs.exe - утилита нижнего уровня, занимающаяся выгрузкой в PostgreSQL;


2.2.2. При желании можно включить логирование в файл, указав имя файла-лога в качестве места перенаправления вывода командной строки:
shift2sql.exe "ConnectionString" "shiftsFileName" "C:\SomePath\chckconv.xml" > logs.txt
 
2.3. Для пакетной обработки нескольких смен можно использовать bat-файл со следующим содержимым:

:: Batch import of shift files
:: a.glazunov@rkeeper.ru
:: 27.10.2024
@echo off
:: The path to the r_keeper folder containing shift2sql.exe
set dir_win=d:\UCS\INST7.7.0.x\bin\win\
:: The path to the folder containing the shift files
set dir_shifts=D:\UCS\169283\
:: Shift File Mask
set mask_shift_files=*.udb
:: The path to chckconv.xml
set path_chckconv=..\..\base\chckconv.xml
:: MSSQL Connection String
set SQLConnectionString=Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=test3;Data Source=192.168.1.150, 1419;User ID=sa;Password=123

Pushd %dir_win%
@echo start
 for %%i in (%dir_shifts%%mask_shift_files%) do (
    echo import %%i
    call "shift2sql.exe" "%SQLConnectionString%" "%%i" "%path_chckconv%" >> %dir_shifts%res_shiftsimport_logs.txt
)
echo Script execution completed
pause
TEXT

Для указания в скрипте пути к файлу chckconv.xml, предварительно настройте его сохранение: как это сделать, описано в следующей главе.

Генерация файла chckconv.xml

По умолчанию файл chckconv.xml создается при импорте смены и по окончанию импорта удаляется.
Чтобы файл не удалялся:

  1. Откройте rk7srv.ini
  2. В секции [CONFIG] параметру DelChckconv выставьте значение 0

    [CONFIG]
    DelChckconv=0
    CODE
  3. Перезапустите сервер справочников и выполните импорт смены.

По умолчанию файл сохраняется в папку базы (base) с именем в формате 'chckconv-%d.xml'.