Мельница данных  (01.05.2024)
Перекачка данных

Для осуществления перекачки данных необходимо:

  1. Иметь права владельца схемы в БД - приемнике.
  2. Иметь права владельца схемы в БД - источнике.
  3. Если не задан ключ /M, то БД - приемник должен быть пустой схемой, не содержащей никаких объектов.
Эти условия контролируются утилитой dbsetup.exe.

Перекачка данных осуществляется в любом направлении. Ниже представлены варианты сочетания источников и приемников данных. В случае, если попытка использовать тот или иной оптимизационный механизм оказалась неудачной, производится стандартная перекачка.

Приемник Источник
БД MSSQL БД Firebird БД Oracle БД PostgreSQL Папка, файл, zip-архив
БД MSSQL Стандартная перекачка данных
БД Firebird Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("external table"). Предпринимается попытка использовать механизм "внешний источник данных" ("external data source"). Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("external table").
БД Oracle Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("table organization external"). Предпринимается попытка использовать механизм "связи БД" ("database link").
Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("table organization external").
БД PostgreSQL Предпринимается попытка использовать механизм загрузки данных из внешнего текстового файла оператором COPY. Предпринимается попытка использовать расширение "dblink". Предпринимается попытка использовать механизм загрузки данных из внешнего текстового файла оператором COPY.
Папка, файл, zip-архив Стандартная перекачка данных Предпринимается попытка собрать на сервере blob, содержащий целевой xml-документ. Не имеет смысла.
Просто скопируйте файлы.

Используемые параметры и ключи командной строки:

Для перекачки данных используюется команда pump. В строке соединения указывается БД-приемник, кроме случая перекачки данных из БД в папку, файл или zip-архив. Для всех случаев кроме случая перекачки данных из БД в папку, файл или zip-архив командная строка содержит кляузу pump from. Для случая перекачки данных из БД в папку, файл или zip-архив командная строка содержит кляузу pump to.
Пример
Перекача данных из БД Oracle в БД Firebird:
dbsetup.exe fb#sysdba/masterkey@host:database pump from ora#dataowner/password@host/sid.dataowner
    
Перекача данных из zip-архива в БД Firebird:
dbsetup.exe fb#sysdba/masterkey@host:database pump from c:\dbbackup.zip
    
Перекача данных из БД Firebird в zip-архив:
dbsetup.exe fb#sysdba/masterkey@host:database pump to c:\dbbackup.zip
    

Ключ Назначение
/J <Целое число> Определяет число потоков, осуществляющих перекачку данных. По умолчанию соответствует количеству ядер процессора.
/H <Целое число> Определяет базовое количество записей в блоке перекачки. По умолчанию - 1 млн. записей. Для таблиц, содержащих большие объекты (blob и/или clob) размер блока перекачки определяется как базовый размер блока, деленный на 100. Если источником является папка, файл или zip-архив - ключ игнорируется.
/M Пропустить этап создания таблиц и последовательностей в БД (таблицы и последовательности должны быть созданы заранее).
/G Пропустить этап заливки данных, произвести только создание таблиц и последовательностей в БД.
/K <Список таблиц> Не перекачивать данные указанных таблиц. Список таблиц разделяется символом ";" (точка с запятой).
/NODBLINK Принудительно отключает механизмы связи между БД на сервере.
/NOCSV Принудительно отключает механизмы загрузки данных из внешнего файла.
/NOXML Принудительно отключает механизмы cборки xml-документа на сервере.

Важно!
Информация о значениях типа "внешние данные" будет перенесена из источника в приемник, сами внешние данные при этом перенесены в хранилище не будут.

При перекачке данных учитыватся табличное пространство ("группа файлов") каждой таблицы в случае, если это понятие релевантно для источника и приемника. При использовании папки, файла или zip-архива имя табличного пространства каждой таблицы сохраняется в файле RTTI, и будет использовано, если окажется релевантным. Если в приемнике имеется возможность разместить таблицу в табличное пространство с тем же именем, которое указано в источнике, то это будет сделано.

При перекачке данных таже осуществляется перенос последовательностей. При этом переносится текущее значение каждой из последовательностей. Значение кеша последовательности переносится только в том случае, если это понятие релевантно для источника и для приемника. При использовании папки, файла или zip-архива значение кеша сохраняется в файле Sequences, и будет использовано, если окажется релевантным.

После завершения перекачки данных в схеме-приемнике остаются следующие объекты:

  • Таблицы данных.
  • Первичные ключи таблиц данных.
  • Последовательности.
  • Заголовки системных объектов платформы.

Этот набор минимально достаточен, чтобы с помощью синхронизации (загрузив метаданные из таблиц, с ключем /T) восстановить метаданные БД в соответствующей схеме, и работать с ней средствами платформы.

Особенности перекачки данных в папку, файл или zip-архив:

При использовании папки она рассматривается как хранилище файлов перекачки. При использовании файла он рассматривается как хранилище файлов перекачки в формате Microsoft Compound File. При использовании zip-архива он рассматривается как хранилище файлов перекачки. Хранилище файлов перекачки содержит следующие файлы:

  • FormatSettings - xml-файл с информацией о региональных настройках процесса, сформировавшего хранилище.
  • Sequences - xml-файл с информацией о текущих значениях последовательностей.
  • RTTI - xml-файл с информацией о таблицах и полях. Также содержит информацию о табличных пространствах.
  • <Имя Таблицы> с возможным числовым постфиксом в скобках - xml-файл с данными таблицы в стандартном xml-представлении.
  • #<Длина файла в 16-ричном представлении, 16 символов><CRC файла в 16-ричном представлении, 8 символов> - двоичный файл с содержимым blob/clob. Такие файлы формируются для объектов, чей размер превышает 1MB.

Остальные файлы в хранилище будут проигнорированы (если хранилище используется как источник) или удалены (если хранилище используется как приемник).

Если в качестве приемника используется zip-архив, то механизм перекачки данных будет использовать информацию об уже содержащихся в архиве файлах, и не будет повторно "пересжимать" уже имеющиеся файлы. Таким образом, можно удобно релизовать "инкрементальное резервное копирование", указывая в качестве приемника перекачки данных один и тот же zip-архив.