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

Imenovanje transakcija u MSsql-u

[es] :: MS SQL :: Imenovanje transakcija u MSsql-u

[ Pregleda: 3184 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Imenovanje transakcija u MSsql-u09.04.2007. u 18:56 - pre 206 meseci
Nisam do sada koristio MS SQL. koristio sam samo access.

Mene interesuje sljedece:

-Ima li MS SQL mogucnost imenovanja transakcija? (pretpostavljam da ima)

Trebam pisati program u C++ -u koji ce se konektovati na MS SQL i tu skladistiti podatke.

Najkomplikovanije sto se moze desiti je da se na tu bazu u isto vrijeme konektuje nekoliko korisnika, i kada pokusaju unijeti ili izbrisati iz baze , njihovim transakcijama bih zelio dati imena, npr. korisniku 1: trans1 , korisniku 2 : trans2 da bi, ako korisnik 2 pogrijesi mogao samo uraditi rollback trans2 a da korisnik 1 normalno uradi commit trans1 i da mu trans2 nista ne unisti tj. ne rollback-uje...

Da li je ovo moguc/dobar koncept u MS SQL-u?
Negdje u ranijoj temi sam vidio i izraz save ime_transakcije koji se uvijek (kako je predlagao autor tog teksta) teba koristiti uz begin ime_transakcije.
Citiram:

Citat:

- posle svakog begin transaction <ime transakcije> dodajte red save transaction <ime snimljene transakcije>
Code:

begin transaction <ime transakcije>
save transaction <ime snimljene transakcije>

- ako dodje do greske i morate raditi rollback radite ga na sledeci nacin
Code:

rollback transaction <ime snimljene transakcije>
commit transaction <ime transakcije>

- ako je ceo kod izvrsen kako treba i nema gresaka uradite normalan commit a snimljena transakcija ce se sama zatvoriti
Code:

commit transaction <ime transakcije>


Ima li potrebe za ovim u ovom slucaju? napominjem: nikakve komplikovane transakcije se nece koristiti, samo mogucnost unosa , brisanja, ili mjenjanja nekog zapisa.
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Imenovanje transakcija u MSsql-u09.04.2007. u 20:05 - pre 206 meseci
Ukratko, mozes da imenujes transakcije. Pogledaj BOL. Nego, izgleda da si nesto pogresno shvatio oko transakcija ili si pogresno opisao problem. Kada pokrenes transakciju ona se izvrsava cela ili nista (unit of work kako ih jos nazivaju), tu nema nikakvih drugih transakcija, naravno ako ne komplikujes stvari. To znaci da ces svaku transakciju izvrsiti svaki user posebno, nema tu nikakvog mesanja, transakcija se uradi ili odbacuje, jedino sto bi ti savetovao da pogledas ISOLATION LEVEL u BOL za detalje oko izvrsavanja a i samih performansi. Inace mislim da je praksa da sve to strpas u SP i iz programa samo pozoves proceduru sa prosledjenim parametrima.
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: Imenovanje transakcija u MSsql-u09.04.2007. u 21:10 - pre 206 meseci
Npr. koliko ja znam, u accessu se ne mogu imenovati transakcije, vec samo begin transaction i commit ili rollback , mozda grijesim, ali koliko znam i koliko mi je asistent na faxu rekao, tako je...

Sta se desavalo: korisnik otpocne neku transakciju u kojoj se mjenja nekih N tabela . U isto vrijeme u drugom prozoru, drugi korisnik pokrene neku transakciju koja utice na X tabela i zavrsi prije prvog, prvi odradi rollback, i sve se rollbackuje i od prvog i drugog...e sad, ako postoji imenovanje transakcija i u accesu, to se moze sprijeciti. kazem, koliko sam upoznat - ne moze, ali nije ni vazno, interesuje me ovo za MS SQL...

Ja sad zelim da se transakcija onog prvog zove trans1 a drugog trans2 i da se svaki rollback uradi samo za onu transakciju koja ga je pozvala...


there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.lanaco.com.



+1 Profil

icon Re: Imenovanje transakcija u MSsql-u10.04.2007. u 07:26 - pre 206 meseci
Kada se transakcija pokrene ako nisi drugcije specificirao(po defaultu) ona zakljuca sve resurse koji ucestvuju u transakciji znaci sve tabele ....
tako ako drugi covek pokrene nakon toga drugu transakciju njemu se ispise poruka deadlock victim i ne moze izvsriti svoju transakciju dok se prva nezavrsi.
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: Imenovanje transakcija u MSsql-u10.04.2007. u 12:32 - pre 206 meseci
hvala na odgovorima...
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

zelbi

Član broj: 17006
Poruke: 17
*.vtx.ch.



Profil

icon Re: Imenovanje transakcija u MSsql-u12.04.2007. u 02:15 - pre 206 meseci
Kao sto ti je predlozio negyxo, kodiraj svu logiku i pravila programa u SP (stored procedures)
Onda sto se tica tranzakcija, imas mnogo mogucnosti oko blokiranja, izolacije, itd.
Ako uzmemo tvoj primjer korisnik1 i korisnik2 :

1. korisnik1 otvori tvoj program
1.1 konektira se u bazu
1.2 trazi od baze sve artikle "whisky"
2. korisnik2 isto sve uradi, otvori program, konektira se u bazu, itd.
3. korisnik1 hoce da ispravi artikl "whisky" u "Whisky", zatim klikne na dugme "update" na tvom programu, ti ides opet u bazu i zovnes proceduru
exec test_update_article @IdArticle = 1, @Name = 'Whisky'
4. sta sada ako korisnik2 zamjeni "whisky" u "Sljivovica" u isto vrijeme ?
exec test_update_article @IdArticle = 1, @Name = 'Sljivovica'

korisnik2 ce biti blokiran sve dok korisnik1 ne zavrsi svoju tranzakciju. Ali obadvije tranzakcije ce biti izvrsene.
Samo tu dolazi sada drugi problem, sta je tacno, koji je upravu ?

Evo ti jedan primjer, koji vecinom upotrebljavam u svim procedurama koje kodiram :

-----------------

CREATE PROCEDURE Model1
@ID int,
@Name varchar(50)
AS

set nocount on
set xact_abort on --vrlo bitno ako imas run-time gresku, pogledaj u BOL detaljnije

-----------------------------------
--PROVIJERE
-----------------------------------
if exists(select * from dbo.Table1 where id = @ID)
Begin
RaisError('Not valid id', 16, 1)
return -1
End

if coalesce(@Name, '') = ''
Begin
RaisError('Name is empty', 16, 1)
return -1
End


-----------------------------------
--TRANZAKCIJA
-------------------------------------
--ako vec jedna tranzakcija postoji, netreba mi druga
--to je vecinom ako zoves proceduru iz procedure koja vec ima zapocetu tranzakciju
--work unit
declare @Commit bit
select @Commit = Case @@Trancount When 0 Then 1 Else 0 End


if @Commit = 1 BEGIN TRANSACTION

--update, insert, delete itd.
Update Table1 With(Rowlock) Set
Name = @Name
Where ID = @ID


if @@Error != 0
Begin
--Ako je tranzakcija zapoceta u ovoj proceduri
if @Commit = 1 and @@Trancount > 0 ROLLBACK TRANSACTION
RETURN -1
End

if @Commit = 1 COMMIT TRANSACTION
RETURN 0


-----------------

pozdrav
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: Imenovanje transakcija u MSsql-u12.04.2007. u 10:28 - pre 206 meseci
hvala jos jednom na odgovorima.

Nisam , kazem, do sada radio u MS Sql-u, pa cu morati prvo provjeriti sve ovo kako se ponasa u praksi, pa ako tada budem imao kakvih pitanja - javicu se ...

Hvala jos jednom...
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl.static.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Imenovanje transakcija u MSsql-u13.04.2007. u 16:03 - pre 206 meseci
Citat:
zelbi:
4. sta sada ako korisnik2 zamjeni "whisky" u "Sljivovica" u isto vrijeme ?


Nemoguce je da korisnik2 zameni "whisky" u "Sljivovica" u "isto vreme".

Citat:

exec test_update_article @IdArticle = 1, @Name = 'Sljivovica'
korisnik2 ce biti blokiran sve dok korisnik1 ne zavrsi svoju tranzakciju. Ali obadvije tranzakcije ce biti izvrsene.
Samo tu dolazi sada drugi problem, sta je tacno, koji je upravu ?


Nisam bas najbolje razumeo, sta si mislio pod time "koji je u pravu"?

Pozdrav

 
Odgovor na temu

[es] :: MS SQL :: Imenovanje transakcija u MSsql-u

[ Pregleda: 3184 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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