Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Replikacija i identity kolona i opsezi...

[es] :: MS SQL :: Replikacija i identity kolona i opsezi...

[ Pregleda: 1288 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

M E N E
borislav
Temerin

Član broj: 30434
Poruke: 231
*.nspoint.net.



+1 Profil

icon Replikacija i identity kolona i opsezi...24.12.2007. u 09:18 - pre 198 meseci
Recimo da imam dve baze na dve lokacije. B1 je primarna, glavna, centralna, a B2 je isturena lokacija.

Zamisao:
Posto obe baze generisu jednake dokumente, a povremeno se svi dokumenti iz B2 prebacuju u B1, treba mi PK koji se nece preklapati. GUID ne volim, vec pomisljam da stavim neki bigint koji ce biti identity, i kojeg cu izdeliti na ospege: npr: u B1 ce biti generisani u PK brojevi (000...001), (000...002), (000...003),... a u B2 ce identiity biti (100...001),(100...002),(100...003)... (stavio sam ih u zagrade da bi se jasnije videlo na sta mislim - tj. da se od tacaka i zareza razazna broj :-) )
Koristio bih replikaciju da dokumenti iz B2 povremeno pune i B1 (centralnu) bazu.

E, sve to lepo zvuci, osim sto mi se identity brojac na B1 bazi (tacnije nekoj tamo tabeli u B1) poremeti prilikom unosa polja iz B2. Mislio sam da omogucim unos sa

SET IDENTITY_INSERT [T1] ON

a posle unosa da ga ugasim sa OFF, ali opet mi se brojac pomeri i nastavlja od najveceg broja u koloni.
Druga fora je da zapamtim najveci iz zeljenog opsega u promenljivoj, npr @MojBrojac
a posle unosa uradim

DBCC CHECKIDENT(T1, reseed, @MojBrojac) --vracanje brojaca na zeljenu vrednost

pa da nastavi da puni identity odatle (iako nisam siguran kako ce to raditi)

Ako u PK na oba mesta unesem i neki identifikator lokacije, morao bih sam odrzavati brojace, sto mi se ne radi, sporije je i potencijalno kobno (konkurentni pristup... generisanje istog kljuca od strane dva razlicita unosa)

Ne bih da se vracam na GUID. Jednostavno ga ne volim :-)

Pala mi je na pamet i fora da u B1 (centralnu) bazu postavim brojac u najveci moguci opseg (da ide npr sa brojevima 9900...001, 9900...002,... pa da znam da ce udaljene lokacije slati samo dokumente koji imaju manji PK od centralne baze. Tada bi brojac i posle unosa (valjda) ostao na 9900... ospegu i nastavio da generise dobre kljuceve. Opet ostaje problem kako u samom procesu replikacije poterati skriptove koji ce mi uopste omoguciti unos IDENTITY polja (gore navedeni red "set identity_insert T1 on")

1. da li razmisljam u dobrom pravcu? Ako ne, otreznite me odmah, i kazite mi kako se to radi (da ne smisljam toplu vodu)
2. Ako ideja nije losa (meni se pogotovo svidja da centralna baza ima najveci opseg generisanja kljuca, pa da udaljene lokacije salju manje brojeve i ne poremete identity brojac) kako u postupak replikacije uneti na pocetku SET IDENTITY_INSERT T1 ON, a na kraju replikacije da mi se izvrsi SET IDENTITY_INSERT T1 OFF?
3. Koja replikacija da se koristi? Ako transakciona bukvalno prenosi transakcije u bazu B1, onda ce generisanje PK biti u B1 iznova, sto ce mi srusiti relacije! Treba mi sirovi prenos podataka.

Mislim da sam, iako nasiroko i nadugo, bio jasan, pa, eto... ako je nekom do kucanja... :-)


[Ovu poruku je menjao M E N E dana 24.12.2007. u 10:29 GMT+1]
Uhvatili ste me nespremnog
 
Odgovor na temu

[es] :: MS SQL :: Replikacija i identity kolona i opsezi...

[ Pregleda: 1288 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.