мета-данные страницы
FBCLONE
fbclone — это консольная утилита для копирования баз данных Firebird, предназначенная для создания клонов баз данных с возможностью изменения параметров, таких как размер страницы, кодировка и исключение определённых таблиц.
Общее назначение программы
fbclone используется для:
- Копирования базы данных Firebird из одного файла в другой.
- Переноса данных между базами с возможностью фильтрации таблиц.
- Автоматического дампа SQL-скрипта из базы.
- Ремонтного дампа SQL, если во время копирования возникают ошибки.
- Перекодировки данных между разными наборами символов (charset).
- Изменения размера страниц (page size) у целевой базы данных.
Подробное описание флагов и параметров 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 для подключения к обеим базам.
Примеры использования
Полное клонирование базы данных
"E:\fbclone-master\fbclone.exe" -s "localhost:/path/to/source.fdb" -t "localhost:/path/to/target.fdb" -u SYSDBA -p masterkey
Клонирование с изменением размера страницы
"E:\fbclone-master\fbclone.exe" -s "source.fdb" -t "target.fdb" -u SYSDBA -p masterkey -ps 8192
Перекачивание только данных без структуры
"E:\fbclone-master\fbclone.exe" -s "source.fdb" -t "target.fdb" -po
Клонирование с исключением таблиц
"E:\fbclone-master\fbclone.exe" -s "source.fdb" -t "target.fdb" -xt "LOGS,TEMP_DATA"
Клонирование с игнорированием кодировки
"E:\fbclone-master\fbclone.exe" -s "source.fdb" -t "target.fdb" -ics
Конвертация базы с win1251 в UTF8
Конвертацию обязательно проводим через билд, который указан выше, т.к. там отработан момент с доменом D_STR_16384.
В Firebird размер строки в типах данных VARCHAR и других строковых полях определяется не количеством символов, а количеством байт, которое может быть использовано для хранения данных. Это важно учитывать, особенно когда речь идет о многобайтовых кодировках, таких как UTF-8.
Ограничения Firebird по размеру строки
Максимальная длина строки в базе данных 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 байт, что уменьшает фактическое количество символов, которые могут быть сохранены в строке.
Команда запуска конвертации кодировки
123123