powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Уникальный идентификатор
17 сообщений из 17, страница 1 из 1
Уникальный идентификатор
    #34383592
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте!

есть БД DB2 (скажем главная) в ней имеется табличка, так же есть другие БДх DB2(второстепенные) в них тоже есть идентичная табличка. время от времени таблички с второстепеных БД реплецируются на на главную.к базам подключены приложения благодаря которым заполняются как таблица в главной базе так и во второстепенных. как сделать что-бы было какоето одно поле благодаря которому можно былобы однозначно определить строку в головной БД и соответственно чтобы в результате репликаций небыло никаких косяков?какие будут варианты? писать дату не предлагать.
спасибо.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34383703
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Во второстепенных базах определите это поле как generated always as ('номер_базы').
Т.е. для каждой базы - свой.
В главной базе определите это поле как обычное (не generated) с каким-нибудь значением по умолчанию, отличным от тех во второстепенных базах.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34383712
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CHARACTER(13) FOR BIT DATA
&
GENERATE_UNIQUE()
?
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34384072
gals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавить еще одно текстовое поле.
В каждой "маленькой" БД сделать различные DEFAULT значеня для этого поля.
Например, БД 1 - DB001, БД 2 - DB002 и т.д.
Тогда в центральной будет уникальный идентификатор из двух полей.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34386032
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey PopovCHARACTER(13) FOR BIT DATA
&
GENERATE_UNIQUE()
?
Что в разных базах не совпадут - гарантии нет. Для гарантии необходимо идентифицировать источник каким-то способом (явно или неявно).
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34386191
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнение:
поле хотят "интовым"
с головной БД данные также реплицируются на вторичные
-----------------------------------
пока планируется следущее:
завести в таблице 2 поля
-скажем счетчик(УнНом)
-признак в головная\мелкая БД

в мелкой БД будет 2 идентичные таблицы одна из них скажем временная
схема работы:
если добавление происходит в головную то просто берем УнНом= max(УнНом)+1 далее репликация на мелкие БД

если ввод данных происходит в мелкой БД то:
пишем в временную УнНом= max(УнНом из постоянной)+1
реплецируем на головную, там ставим тригер смотрим если УнНом совпал то УнНом= max(УнНом головной)+1 далее репликация с головы вниз на мелкую в постоянную таблицу

если кто что понял выскажитесь)
когда лучше пулять тригер до репликации или после?
понимаю что таблички придется блокировать но не понимаю какие где и когда чтоб небыло переизбыточной блокировки.
PS: я далек от БД)
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34386238
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что самый простой и правильный способ для этого предложил gals .
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34386318
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinМне кажется, что самый простой и правильный способ для этого предложил gals .
вот то что он предлагал
newj....
-признак в головная\мелкая БД
...

просто этого мало, оно будет уникально только в случае 1 записи
а если уникальное поле сделать чаром и склеивать то
newj....
Уточнение:
поле хотят "интовым"


а как "дефолтные" значения с "перемеными" склить в интах я не знаю
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34387202
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы куда-то не туда посмотрели...
Он предлагал:
galsДобавить еще одно текстовое поле.
В каждой "маленькой" БД сделать различные DEFAULT значеня для этого поля.
Например, БД 1 - DB001, БД 2 - DB002 и т.д.
Тогда в центральной будет уникальный идентификатор из двух полей.С учетом новых ваших требований:
Добавьте новое целое, а не строковое поле во все базы с уникальным для каждой базы DEFAULT значением.
Включите это поле в уникальный ключ таблиц.
И реплицируйте таблицы с этим новым ключом без проблем.
Помните только, чтоб приложение само не пыталось писать в это новое поле.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34387290
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу похвастаться тем, что понимаю, что пишет и что хочет newj. Но всё равно выскажусь ;-). Не обязательно обозначать базу-источник явно. Напр., если мы уверены, что вспомогательных баз будет менее 10, то пользоваться автоинкрементным полем или sequence с шагом 10, а начальное значение задать как номер базы. Главная пусть генерирует последовательность 0, 10, 20, 30,..., первая вспомогательная 1, 11, 21, 31,... и т.д. Параноик может взять шаг 100-1000 и хранить числа в BIGINT.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34388060
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO по принципу:

Главная БД:
TABLE1 (ID)

Второстепенная:
TABLE1(ID, GLOBAL_ID)
PRIMARY KEY (ID)
Где GLOBAL_ID заполнялся бы при реплицировании в головную БД.
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34389311
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinВы куда-то не туда посмотрели...
Он предлагал:
galsДобавить еще одно текстовое поле.
В каждой "маленькой" БД сделать различные DEFAULT значеня для этого поля.
Например, БД 1 - DB001, БД 2 - DB002 и т.д.
Тогда в центральной будет уникальный идентификатор из двух полей.С учетом новых ваших требований:
Добавьте новое целое, а не строковое поле во все базы с уникальным для каждой базы DEFAULT значением.
Включите это поле в уникальный ключ таблиц.
И реплицируйте таблицы с этим новым ключом без проблем.
Помните только, чтоб приложение само не пыталось писать в это новое поле.

(вроде говорил)надо что-бы было какоето одно поле благодаря которому можно былобы однозначно определить строку, а не два.но идею учту может "там" передумают)

Victor Metelitsa Не могу похвастаться тем, что понимаю, что пишет и что хочет newj. Но всё равно выскажусь ;-). Не обязательно обозначать базу-источник явно. Напр., если мы уверены, что вспомогательных баз будет менее 10, то пользоваться автоинкрементным полем или sequence с шагом 10, а начальное значение задать как номер базы. Главная пусть генерирует последовательность 0, 10, 20, 30,..., первая вспомогательная 1, 11, 21, 31,... и т.д. Параноик может взять шаг 100-1000 и хранить числа в BIGINT.

я конечно параноик и шизофреник и крыша едет каждый день, но я точно знаю что баз будет более 10.
предположим берем шаг 10 :
база 1 :
ввод 0 1 ... 111
значение 1 11... 1111
база 11:
ввод 0 111
значение 110 1111
а если взять очень большой шаг то при активной работе авто инкремент быстро себя исчерпает


Alexey Popov IMHO по принципу:

Главная БД:
TABLE1 (ID)

Второстепенная:
TABLE1(ID, GLOBAL_ID)
PRIMARY KEY (ID)
Где GLOBAL_ID заполнялся бы при реплицировании в головную БД.

пытаюсь понять смысл предложенного.....
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34389673
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BIGINT'а в автоинкременте хватит кому угодно, даже параноику (а параноик - это похвала (тем, кто этого заслуживает, конечно); админ так вообще обязан быть параноиком, а прочим просто полезно).
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34390684
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor MetelitsaBIGINT'а в автоинкременте хватит кому угодно, даже параноику (а параноик - это похвала (тем, кто этого заслуживает, конечно); админ так вообще обязан быть параноиком, а прочим просто полезно).

беру свои слова обратно!
пересчитал все под себя лет на 50 должно и ИНТа хватить за это время мона много... много раз старье убрать а потом и второй круг не страшен))))
-----
шаг должен быть следующим
"1 и ноликов столько сколько количество цифер в количестве баз" + номер базы по порядку и тогда значения одной БД никогда не совпадут со значениями другой!

т.е. если баз меньше 10 то инкремент=10+номер БД
<100 то 100+№БД

потрясающе...
надеюсь это понравится "озадачивающим людям"

-----
BIG THANKS
Victor Metelitsa ОТДЕЛЬНОЕ ПАСИБО!
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34391698
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь, вы учитывали последствия кеширования значений (коим автоинкрементные поля и sequences обладают по дефлоту), из-за которого в генерируемых последовательностях значений могут образовываться дырки. Скорее всего, это неважно, но на всякий случай...
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34392015
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manualСчетчик для IDENTITY столбца увеличивается или уменьшается вне транзакции.
Поэтому соблюдайте осторожность при использовании режима CACHE, запрашивающего подготовку и сохранение в кэше некоторого количества заготовленных значений. Если возникает сбой DB2 подсистемы, эти значения теряются и возникает “дырка” в значениях столбца.


у меня еще пара вопросов:
-сильно ли падает скорость если кеш вырубить(хотя мне и с дырками должно хватить)?
-как отловить "номерок" своей вводимой строки а не чужой?
...
Рейтинг: 0 / 0
Уникальный идентификатор
    #34392029
newj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-и как лучше всего сделать ,что если в случае наш инкремент д.б. минимальным(самвя первая запись или 1я в новом круге) ставить определенную цифиру
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Уникальный идентификатор
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]