fbclone — это консольная утилита для копирования баз данных Firebird, предназначенная для создания клонов баз данных с возможностью изменения параметров, таких как размер страницы, кодировка и исключение определённых таблиц.
Готовый билд можно найти на шаре \\\Secure FTP\Share42\Develop\FBClone\
fbclone используется для:
-h, --help – выводит справку с описанием всех доступных параметров.
-v, --verbose – включает подробный режим работы, показывая больше деталей в логе.
-po, --pump-only – переносит только данные из исходной базы в целевую без создания структуры. Исходная и целевая базы должны иметь одинаковую структуру.
-e, --empty-tables – перед копированием данных очищает все таблицы в целевой базе.
-ics, --ignore-charset – игнорирует кодировку исходной базы и использует кодировку по умолчанию.
-ko, --keep-octets – сохраняет кодировку OCTETS при использовании -ics.
-ic, --ignore-collation – игнорирует настройки сортировки (collation) в исходной базе данных.
-f, --failsafe – включает безопасный режим, фиксируя (commit) транзакцию после каждой записи (эквивалентно -ci 1).
-ci, --commit-interval – задаёт интервал фиксации транзакций в количестве записей.
-d, --dump – создаёт дамп SQL из исходной базы данных и сохраняет его в указанный файл.
-rd, --repair-dump – создаёт SQL-дамп с исправлениями в файл repair.sql, если во время клонирования произошли ошибки.
-ps, --page-size – устанавливает размер страниц в целевой базе данных.
-s, --source – строка подключения к исходной базе (обязательный параметр).
-su, --source-user – имя пользователя для подключения.
-sp, --source-password – пароль для подключения.
-sl, --source-library – клиентская библиотека Firebird, используемая при подключении.
-t, --target – строка подключения к целевой базе (обязательный параметр).
-tu, --target-user – имя пользователя для подключения.
-tp, --target-password – пароль для подключения.
-tl, --target-library – клиентская библиотека Firebird, используемая при подключении.
-tc, --target-charset – кодировка целевой базы (по умолчанию совпадает с кодировкой исходной базы).
-rc, --read-charset – кодировка для чтения данных из исходной базы.
-wc, --write-charset – кодировка для записи данных в целевую базу.
-xt, --exclude-table – список таблиц, которые нужно исключить из переноса данных (через запятую).
-u, --user – имя пользователя, используемое и для исходной, и для целевой базы.
-p, --password – пароль, используемый и для исходной, и для целевой базы.
-l, --library – клиентская библиотека Firebird для подключения к обеим базам.
<alert info> Эти параметры позволяют гибко управлять процессом клонирования баз данных Firebird, адаптируя процесс под конкретные требования.
</alert>
Полное клонирование базы данных
"E:\DB\fbclone.exe" -s "source.fdb" -t "/path/to/target.fdb" -u SYSDBA -p masterkey
Клонирование с изменением размера страницы
"E:\DB\fbclone.exe" -s "source.fdb" -t "target.fdb" -u SYSDBA -p masterkey -ps 8192
Перекачивание только данных без структуры
"E:\DB\fbclone.exe" -s "source.fdb" -t "target.fdb" -po
Клонирование с исключением таблиц
"E:\DB\fbclone.exe" -s "source.fdb" -t "target.fdb" -xt "LOGS,TEMP_DATA"
Клонирование с игнорированием кодировки
"E:\DB\fbclone.exe" -s "source.fdb" -t "target.fdb" -ics
Конвертацию обязательно проводим через билд, который указан выше, т.к. там отработан момент с доменом D_STR_16384 и др..
В Firebird размер строки в типах данных VARCHAR и других строковых полях определяется не количеством символов, а количеством байт, которое может быть использовано для хранения данных. Это важно учитывать, особенно когда речь идет о многобайтовых кодировках, таких как UTF-8.
Максимальная длина строки в базе данных Firebird составляет 64 КБ (65535 байт). Однако это ограничение относится именно к количеству байт, а не символов. Это имеет важные последствия для работы с кодировками, где символы могут занимать разное количество байт.
UTF-8 — это многобайтовая кодировка, которая может использовать от 1 до 4 байт для хранения одного символа. Это означает, что строка длиной в 16384 символа может занимать от 16384 байт (если все символы — это символы ASCII) до 65536 байт (если каждый символ занимает 4 байта, как это бывает с символами, находящимися в диапазоне Unicode, для которых требуется больше байтов).
Когда в Firebird пытаются создать столбец с типом VARCHAR(16384) в кодировке UTF-8, система рассчитывает это как количество байт, а не символов. В худшем случае, если каждый символ занимает 4 байта, строка с 16384 символами будет занимать 65536 байт, что превышает максимальное ограничение Firebird в 65535 байт.
Таким образом, в UTF-8 максимальная длина строки для поля VARCHAR будет меньше, чем в однобайтовых кодировках, таких как WIN1251, поскольку каждый символ UTF-8 может занимать больше байт.
Кодировка WIN1251 — это однобайтовая кодировка, где каждый символ занимает ровно 1 байт. В случае использования этой кодировки, ограничение на 65535 байт позволяет создать строку длиной до 16384 символов (65535 байт / 1 байт на символ = 65535 символов). Это проще, потому что каждый символ занимает постоянное количество байт, и нет необходимости учитывать различные длины символов, как в случае с UTF-8.
Когда идет работа с многобайтовыми кодировками, такими как UTF-8, и пытаетесь создать строковое поле с определенным количеством символов, важно учитывать, что фактический размер строки в байтах может значительно превышать ожидания. Если вы хотите создать поле, которое может содержать 16384 символа в UTF-8, вам нужно учитывать, что в худшем случае каждый символ может занимать до 4 байт, что уменьшает фактическое количество символов, которые могут быть сохранены в строке.
Команда запуска конвертации кодировки
"E:\DB\fbclone.exe"
-s "127.0.0.1/3050:E:\DB\ARM_MC.FDB" -su "SYSDBA" -sp "masterkey" -sl "E:\Agbis\Firebird\firebird_3_client\fbclient.dll"
-t "127.0.0.1/3050:E:\DB\ARM_MC_UTF8.FDB" -tu "SYSDBA" -tp "masterkey" -tl "E:\Agbis\Firebird\firebird_3_client\fbclient.dll"
-tc UTF8 -v -f