Dupa cum am mai discutat in unele articole, Microsoft SQL Server permite crearea de link-uri catre diverse data source-uri OLE DB, link-uri pe care Microsoft le numeste linked servers. Dupa link-area unui data source OLE DB se pot interoga tabele din server-ul link-at, se pot joina intre ele tablele din mai multe servere, de fapt, se pot executa aceleasi query-uri ca pe baza locala, bineinteles tinand cont de restrictiile providerului OLE DB.

Fiecare query distribuit poate referentia mai multe servere si poate executa operatii de update, insert sau read intre fiecare server in parte. Un singur query distribuit poate executa operatii de read intre mai multe servere si poate executa operatii de update peste acestea in mod individual. Microsoft SQL Server are nevoie de suport de la provider-ul OLE DB pentru a efectua tranzactii distribuite, ori de cate ori datele de pe unul sau mai multe servere necesita a fi actualizate intr-o tranzactie. Astfel, tipurile de query-uri acceptate de serverele link-ate depind de tipul suportului pentru tranzactii oferit de provider-ul OLE DB.

Teoria despre tranzactiile distribuite este mult mai complexa, dar o puteti citi din manualele SQL Server. Ce vreau eu sa precizez acum, este urmatorul lucru: Pentru providerii care nu suporta tranzactii imbricate (nested transactions), operatiile de update sunt permise in transactiile distribuite doar daca XACT_ABORT este setat pe ON.

SET XACT_ABORT ON

Ce face XACT_ABORT in SQL Server? De fapt acesta specifica Serverului SQL daca sa faca roll back  automat tranzactiei currente in momentul in care aceasta arunca o eroare de run-time.

Cand SET XACT_ABORT este ON, daca un statement dintr-o tranzactie SQL distribuita arunca o eroare de run-time, intreaga tranzactie este terminata si se face roll back.
Cand SET XACT_ABORT este OFF, doar statement-ul din tranzactiea SQL distribuita care a aruncat eroarea va face roll back si tranzactia isi va continua procesarea. Erorile de compilare, cum ar fi erorile de syntaxa, nu sunt afectate de SET XACT_ABORT.

Articole pe aceiasi tema:
- Creare Link catre o baza DB2, din SQL Server
- Creare Link intre doua baze SQL Server