Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
здравствуйте! есть БД DB2 (скажем главная) в ней имеется табличка, так же есть другие БДх DB2(второстепенные) в них тоже есть идентичная табличка. время от времени таблички с второстепеных БД реплецируются на на главную.к базам подключены приложения благодаря которым заполняются как таблица в главной базе так и во второстепенных. как сделать что-бы было какоето одно поле благодаря которому можно былобы однозначно определить строку в головной БД и соответственно чтобы в результате репликаций небыло никаких косяков?какие будут варианты? писать дату не предлагать. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 11:07 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Во второстепенных базах определите это поле как generated always as ('номер_базы'). Т.е. для каждой базы - свой. В главной базе определите это поле как обычное (не generated) с каким-нибудь значением по умолчанию, отличным от тех во второстепенных базах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 11:41 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
CHARACTER(13) FOR BIT DATA & GENERATE_UNIQUE() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 11:42 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Добавить еще одно текстовое поле. В каждой "маленькой" БД сделать различные DEFAULT значеня для этого поля. Например, БД 1 - DB001, БД 2 - DB002 и т.д. Тогда в центральной будет уникальный идентификатор из двух полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 13:10 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Alexey PopovCHARACTER(13) FOR BIT DATA & GENERATE_UNIQUE() ? Что в разных базах не совпадут - гарантии нет. Для гарантии необходимо идентифицировать источник каким-то способом (явно или неявно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 09:32 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Уточнение: поле хотят "интовым" с головной БД данные также реплицируются на вторичные ----------------------------------- пока планируется следущее: завести в таблице 2 поля -скажем счетчик(УнНом) -признак в головная\мелкая БД в мелкой БД будет 2 идентичные таблицы одна из них скажем временная схема работы: если добавление происходит в головную то просто берем УнНом= max(УнНом)+1 далее репликация на мелкие БД если ввод данных происходит в мелкой БД то: пишем в временную УнНом= max(УнНом из постоянной)+1 реплецируем на головную, там ставим тригер смотрим если УнНом совпал то УнНом= max(УнНом головной)+1 далее репликация с головы вниз на мелкую в постоянную таблицу если кто что понял выскажитесь) когда лучше пулять тригер до репликации или после? понимаю что таблички придется блокировать но не понимаю какие где и когда чтоб небыло переизбыточной блокировки. PS: я далек от БД) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 10:16 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что самый простой и правильный способ для этого предложил gals . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 10:31 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinМне кажется, что самый простой и правильный способ для этого предложил gals . вот то что он предлагал newj.... -признак в головная\мелкая БД ... просто этого мало, оно будет уникально только в случае 1 записи а если уникальное поле сделать чаром и склеивать то newj.... Уточнение: поле хотят "интовым" а как "дефолтные" значения с "перемеными" склить в интах я не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 10:53 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Вы куда-то не туда посмотрели... Он предлагал: galsДобавить еще одно текстовое поле. В каждой "маленькой" БД сделать различные DEFAULT значеня для этого поля. Например, БД 1 - DB001, БД 2 - DB002 и т.д. Тогда в центральной будет уникальный идентификатор из двух полей.С учетом новых ваших требований: Добавьте новое целое, а не строковое поле во все базы с уникальным для каждой базы DEFAULT значением. Включите это поле в уникальный ключ таблиц. И реплицируйте таблицы с этим новым ключом без проблем. Помните только, чтоб приложение само не пыталось писать в это новое поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 14:04 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Не могу похвастаться тем, что понимаю, что пишет и что хочет newj. Но всё равно выскажусь ;-). Не обязательно обозначать базу-источник явно. Напр., если мы уверены, что вспомогательных баз будет менее 10, то пользоваться автоинкрементным полем или sequence с шагом 10, а начальное значение задать как номер базы. Главная пусть генерирует последовательность 0, 10, 20, 30,..., первая вспомогательная 1, 11, 21, 31,... и т.д. Параноик может взять шаг 100-1000 и хранить числа в BIGINT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 14:26 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
IMHO по принципу: Главная БД: TABLE1 (ID) Второстепенная: TABLE1(ID, GLOBAL_ID) PRIMARY KEY (ID) Где GLOBAL_ID заполнялся бы при реплицировании в головную БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 17:21 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
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 заполнялся бы при реплицировании в головную БД. пытаюсь понять смысл предложенного..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 10:09 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
BIGINT'а в автоинкременте хватит кому угодно, даже параноику (а параноик - это похвала (тем, кто этого заслуживает, конечно); админ так вообще обязан быть параноиком, а прочим просто полезно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 11:38 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaBIGINT'а в автоинкременте хватит кому угодно, даже параноику (а параноик - это похвала (тем, кто этого заслуживает, конечно); админ так вообще обязан быть параноиком, а прочим просто полезно). беру свои слова обратно! пересчитал все под себя лет на 50 должно и ИНТа хватить за это время мона много... много раз старье убрать а потом и второй круг не страшен)))) ----- шаг должен быть следующим "1 и ноликов столько сколько количество цифер в количестве баз" + номер базы по порядку и тогда значения одной БД никогда не совпадут со значениями другой! т.е. если баз меньше 10 то инкремент=10+номер БД <100 то 100+№БД потрясающе... надеюсь это понравится "озадачивающим людям" ----- BIG THANKS Victor Metelitsa ОТДЕЛЬНОЕ ПАСИБО! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 15:43 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
Надеюсь, вы учитывали последствия кеширования значений (коим автоинкрементные поля и sequences обладают по дефлоту), из-за которого в генерируемых последовательностях значений могут образовываться дырки. Скорее всего, это неважно, но на всякий случай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 22:26 |
|
||
|
Уникальный идентификатор
|
|||
|---|---|---|---|
|
#18+
manualСчетчик для IDENTITY столбца увеличивается или уменьшается вне транзакции. Поэтому соблюдайте осторожность при использовании режима CACHE, запрашивающего подготовку и сохранение в кэше некоторого количества заготовленных значений. Если возникает сбой DB2 подсистемы, эти значения теряются и возникает “дырка” в значениях столбца. у меня еще пара вопросов: -сильно ли падает скорость если кеш вырубить(хотя мне и с дырками должно хватить)? -как отловить "номерок" своей вводимой строки а не чужой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 08:29 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=34383712&tid=1604728]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 377ms |

| 0 / 0 |
