Выгрузка данных в бинарном виде
Выгрузка данных в текстовом виде обычно требуется в очень редких случаях. Как правило, это необходимо при миграции базы между несовместимыми платформами, например, с Windows на Linux, или в случае серьёзных физических повреждений базы данных для того, чтобы сохранить остатки информации.
В обычных рабочих условиях, например, когда меняется физическая структура базы данных, количество и параметры областей хранения, переход на области хранения второго типа или просто, когда необходима дефрагментация данных, прибегают к бинарной выгрузке, так как этот метод наиболее быстрый и эффективный.
Для бинарной выгрузки содержимого таблиц применяется утилита proutil с классификатором dump. Эта утилита позволяет выполнить выгрузку из таблицы в многопоточном режиме, а также выполнять выборочную выгрузку данных согласно установленным критериям.
Синтаксис команды proutil для бинарной выгрузки:
proutil <db-name> -C dump <table-name> <target-directory>
Здесь:
- table-name – имя таблицы, содержимое которой предстоит выгрузить;
- target-directory – каталог, в котором будут создаваться бинарный файлы с расширением «.bd».
Пример бинарной выгрузки содержимого таблицы Customer:
proutil sports -C dump customer D:\dump\
После выполнения этой команды в каталоге D:\dump\ будет создан бинарный файл с именем customer.bd.
Примечание: если таблица имеет размер больше 2Гб, и при этом файловая система не имеет 2Гб ограничения, то утилита proutil dump создаст одни бинарный файл со всем содержимым таблицы. Но если файловая система не поддерживает работу с большими файлами, то будет создано несколько бинарных файлов по 2Гб. В этом случае необходимо быть внимательным при загрузке этих файлов в целевую базу данных, чтобы не пропустить ни один из них.
Если таблица имеет большой размер, то выгрузка её содержимого может занять много времени. Значительно сократить это время можно с помощью многопоточной выгрузки, при условии, что у вас установлена лицензия OpenEdge Enterprise RDBMS. Такая выгрузка выполняется исключительно на стартованной базе данных, что позволяет утилите proutil параллельно выполнять несколько процессов выгрузки для одной таблицы. В этом случае будут созданы несколько бинарных файлов, каждый из которых будет сгенерирован отдельным потоком многопроцессорной системы. Например, customer.bd, customer.bd2, customer.bd3 …
Синтаксис команды proutil для многопоточной выгрузки:
proutil <db-name> -C dump <table-name> <target-directory> -thread n
-threadnum nthreads -dumplist <dumplist-file>
Здесь:
- -thread n – указывает режим выгрузки:
- 0 – однопоточная выгрузка;
- 1 – многопоточная выгрузка.
- -threadnum nthreads – указывает максимальное количество потоков в многопоточной выгрузке. По умолчанию количество потоков равно количеству CPU.
- -dumplist <dumplist-file> – имя файла, в котором будет сохранен список всех бинарных файлов, созданных многопоточной выгрузкой. В будущем этот файл будет использован в качестве параметра для загрузки содержимого таблицы в целевую базу.
Примечание: в Windows утилита proutil в командной строке поддерживает только девять параметров, но полная команда для многопоточной выгрузки превышает этот лимит. В результате утилита может пропустить некоторые параметры, когда она выполняется в среде Windows. Чтобы избежать этой проблемы используйте файл параметров (.pf), в котором необходимо указать значения всех параметров для многопоточной выгрузки.
В некоторых ситуациях целесообразно выполнять выгрузку содержимого не всей таблицы, а только её части согласно некоторому условию. Для этого применяется утилита proutil с классификатором dumpspecified. С её помощью можно экспортировать большие объёмы данных очень больших таблиц без необходимости выполнения полной выгрузки всей таблицы, тем самым сокращая время выгрузки с нескольких часов до нескольких минут.
Синтаксис команды proutil для выборочной выгрузки:
proutil <db-name> –C dumpspecified <table-name.field-name>
<comparison-operator> <field-value> <target-directory>
Здесь:
- table-name.field-name – имя таблицы и имя проиндексированного поля в этой таблице, значение которого будет служить критерием для выборочной выгрузки.
- comparison-operator – оператор сравнения. Допустимые значения:
- EQ (равно);
- GT (больше чем);
- LT (меньше чем);
- GE (больше или равно);
- LE (меньше или равно).
- field-value – значение, с которым будет сравниваться содержимое поля.
Пример выгрузки содержимого таблицы Order, записи которой были созданы до 1 января 2016 года. Бинарный файл будет создан в текущем рабочем каталоге:
proutil sports –C dumpspecified order.orderdate LT 01-01-2018 .