DBID
Уникальный идентификатор базы данных -- это целое положительное число большее нуля, которое хранится в генераторе gd_g_dbid. Чистая эталонная база данных, сгенерированная из скриптов, имеет нулевой идентификатор. При подключении к базе, Гедымин считывает и проверяет значение генератора и, если оно равно 0, -- формирует новый идентификатор. Формирование идентификатора происходит в методе GenerateNewDBID класса TgdcBaseManager. Его исходный код приведен ниже:
function TgdcBaseManager.GenerateNewDBID: Integer; var D: TDateTime; begin D := Abs(Now - EncodeDate(2003, 08, 06)); while D > 10 * 365 do D := D - (10 * 365) + 0.5; Result := Round(D * 24 * 60 * 60 * 6.8) + 2000; end;
Как видно, идентификатор базы данных -- это просто порядковый номер 6.8 секундного интервала начиная с 6 августа 2003 года. Каждые десять лет счетчик обнуляется. Учитывая, что наиболее вероятно создание новых баз данных в течение рабочего дня, при выходе за границы десятилетнего интервала прибавляется 12 часов (число 0.5). Таким образом уменьшается вероятность генерации неуникального идентификатора.
- Идентификатор базы данных используется при формировании RUID объекта и, как правило, не меняется в течение жизни файла базы данных.
- При создании копии существующей базы данных ей обязательно следует присвоить новый идентификатор. Для этого, при восстановлении базы данных из архива, следует установить флаг "Присваивать уникальный ИД базы".
- Диапазон идентификаторов баз данных от 1 до 1999 включительно зарезервирован для системного использования. В частности, для РУИДов всех системных бизнес-объектов, идентификатор которых менее 147000000, DBID принимается равным 17.
- Узнать идентификатор текущей базы данных можно на вкладке "База данных", окна "О программе", которое вызывается из меню "Справка" главного окна Гедымина.
- Из макросов идентификатор текущей базы данных можно получить обратившись к свойству DBID глобального объекта IBLogin.
sub ShowDBID MsgBox "Current DBID: " & IBLogIn.DBID end sub
- Идентификатор текущей базы данных можно получить так же выполнив запрос:
SELECT GEN_ID(gd_g_dbid, 0) FROM rdb$database