Transakcje (Azure Synapse Analytics i Microsoft Fabric)
Dotyczy:Azure Synapse Analytics
Analytics Platform System (PDW)
Warehouse w usłudze Microsoft Fabric
Transakcja jest grupą co najmniej jednej instrukcji bazy danych, które są całkowicie zatwierdzone lub całkowicie wycofane. Każda transakcja jest niepodzielna, spójna, izolowana i trwała (ACID). Jeśli transakcja powiedzie się, wszystkie instrukcje w niej zostaną zatwierdzone. Jeśli transakcja zakończy się niepowodzeniem, oznacza to, że co najmniej jedna z instrukcji w grupie zakończy się niepowodzeniem, cała grupa zostanie wycofana.
Początek i koniec transakcji zależy od ustawienia AUTOCOMMIT i instrukcji BEGIN TRANSACTION, COMMIT i ROLLBACK.
Obsługiwane są następujące typy transakcji:
jawne transakcje rozpocząć od instrukcji BEGIN TRANSACTION i zakończyć instrukcją COMMIT lub ROLLBACK.
transakcje automatycznego zatwierdzania inicjować automatycznie w ramach sesji i nie rozpoczynać się od instrukcji BEGIN TRANSACTION. Gdy ustawienie AUTOCOMMIT jest włączone, każda instrukcja jest uruchamiana w transakcji i nie jest konieczne jawne zatwierdzenie lub wycofywanie. Gdy ustawienie AUTOCOMMIT jest wyłączone, do określenia wyniku transakcji jest wymagana instrukcja COMMIT lub ROLLBACK. Automatyczne zatwierdzanie transakcji rozpoczyna się natychmiast po instrukcji COMMIT lub ROLLBACK lub po instrukcji SET AUTOCOMMIT OFF.
Transact-SQL konwencje składni
Nuta
Aby uzyskać więcej informacji na temat transakcji w usłudze Microsoft Fabric, zobacz Transakcje w usłudze Microsoft Fabric.
Składnia
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Argumenty
ROZPOCZNIJ TRANSAKCJĘ
Oznacza punkt początkowy transakcji jawnej.
COMMIT [ WORK ]
Oznacza koniec jawnej lub automatycznej transakcji. Ta instrukcja powoduje trwałe zatwierdzanie zmian transakcji w bazie danych. Instrukcja COMMIT jest taka sama jak COMMIT WORK, COMMIT TRAN i COMMIT TRANSACTION.
WYCOFYWANIE [ PRACA ]
Cofa transakcję na początku transakcji. Żadne zmiany transakcji nie są zatwierdzane w bazie danych. Instrukcja ROLLBACK jest taka sama jak ROLLBACK WORK, ROLLBACK TRAN i ROLLBACK TRANSACTION.
SET AUTOCOMMIT { ON | WYŁ. }
Określa sposób uruchamiania i kończenia transakcji.
NA
Każda instrukcja jest uruchamiana w ramach własnej transakcji i nie jest wymagana żadna jawna instrukcja COMMIT lub ROLLBACK. Jawne transakcje są dozwolone, gdy funkcja AUTOCOMMIT jest włączona.
OD
Usługi Azure Synapse Analytics i Microsoft Fabric automatycznie inicjują transakcję, gdy transakcja nie jest jeszcze w toku. Wszystkie kolejne instrukcje są uruchamiane w ramach transakcji, a zatwierdzenie lub wycofywanie jest niezbędne do określenia wyniku transakcji. Gdy tylko transakcja zostanie zatwierdzona lub wycofana w tym trybie operacji, tryb pozostanie wyłączony, zostanie zainicjowana nowa transakcja. Jawne transakcje nie są dozwolone, gdy AUTOCOMMIT jest WYŁĄCZONE.
Jeśli zmienisz ustawienie AUTOCOMMIT w ramach aktywnej transakcji, ustawienie będzie miało wpływ na bieżącą transakcję i nie będzie miało wpływu, dopóki transakcja nie zostanie ukończona.
Jeśli opcja AUTOCOMMIT jest włączona, uruchomienie innej instrukcji SET AUTOCOMMIT ON nie ma wpływu. Podobnie, jeśli AUTOCOMMIT jest WYŁĄCZONE, uruchomienie innego POLECENIA SET AUTOCOMMIT OFF nie ma żadnego efektu.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Spowoduje to przełączenie tych samych trybów co USTAWIENIE AUTOCOMMIT. Po włączeniu ustaw IMPLICIT_TRANSACTIONS ustawia połączenie w niejawny tryb transakcji. Gdy funkcja WYŁ., zwraca połączenie z trybem automatycznego zatwierdzania. Aby uzyskać więcej informacji, zobacz SET IMPLICIT_TRANSACTIONS (Transact-SQL).
Uprawnienia
Do uruchamiania instrukcji związanych z transakcjami nie są wymagane żadne określone uprawnienia. Uprawnienia są wymagane do uruchomienia instrukcji w ramach transakcji.
Obsługa błędów
Jeśli polecenie COMMIT lub ROLLBACK jest uruchamiane i nie ma aktywnej transakcji, zostanie zgłoszony błąd.
Jeśli transakcja BEGIN jest uruchamiana, gdy transakcja jest już w toku, zostanie zgłoszony błąd. Może się tak zdarzyć, jeśli transakcja BEGIN występuje po pomyślnym instrukcji BEGIN TRANSACTION lub gdy sesja jest w obszarze USTAW AUTOCOMMIT OFF.
Jeśli błąd inny niż błąd instrukcji czasu wykonywania uniemożliwia pomyślne zakończenie transakcji jawnej, aparat bazy danych automatycznie wycofa transakcję i zwalnia wszystkie zasoby przechowywane przez transakcję. Jeśli na przykład połączenie sieciowe klienta zostanie przerwane lub klient wyloguje się z aplikacji, wszystkie niezatwierdzone transakcje dla połączenia zostaną wycofane, gdy sieć powiadomi wystąpienie przerwania.
Jeśli w partii wystąpi błąd instrukcji czasu wykonywania, usługi Azure Synapse Analytics i Microsoft Fabric zachowują się zgodnie zXACT_ABORT programu SQL Server ustawionym na wartość ON, a cała transakcja zostanie wycofana. Aby uzyskać więcej informacji na temat ustawienia XACT_ABORT, zobacz SET XACT_ABORT (Transact-SQL).
Uwagi ogólne
Sesja może uruchamiać tylko jedną transakcję w danym momencie; punkty zapisu i transakcje zagnieżdżone nie są obsługiwane.
Obowiązkiem programisty jest wystawianie zatwierdzenia tylko w momencie, gdy wszystkie dane, do których odwołuje się transakcja, są logicznie poprawne.
Po zakończeniu sesji przed zakończeniem transakcji transakcja zostanie wycofana.
Tryby transakcji są zarządzane na poziomie sesji. Jeśli na przykład jedna sesja rozpoczyna jawną transakcję lub ustawia opcję AUTOCOMMIT na WYŁ., lub ustawia IMPLICIT_TRANSACTIONS na WŁ., nie ma wpływu na tryby transakcji żadnej innej sesji.
Ograniczenia i ograniczenia
Nie można wycofać transakcji po wydaniu instrukcji COMMIT, ponieważ modyfikacje danych zostały wprowadzone w stałej części bazy danych.
Polecenia CREATE DATABASE (Azure Synapse Analytics) i DROP DATABASE (Transact-SQL ) nie mogą być używane wewnątrz jawnej transakcji.
Usługi Azure Synapse Analytics i Microsoft Fabric nie mają mechanizmu udostępniania transakcji. Oznacza to, że w dowolnym momencie tylko jedna sesja może wykonywać pracę nad dowolną transakcją w systemie.
Zachowanie blokujące
Blokowanie zapewnia integralność transakcji i utrzymuje spójność baz danych, gdy wielu użytkowników uzyskuje dostęp do danych w tym samym czasie. Blokowanie jest używane zarówno przez niejawne, jak i jawne transakcje. Każda transakcja żąda blokad różnych typów zasobów, takich jak tabele lub bazy danych, od których zależy transakcja.
Wszystkie blokady są na poziomie tabeli lub wyższym. Blokady blokują modyfikowanie zasobów w inny sposób, co spowodowałoby problemy z transakcją żądającą blokady. Każda transakcja zwalnia blokady, gdy nie ma już zależności od zablokowanych zasobów; jawne transakcje zachowują blokady, dopóki transakcja nie zostanie ukończona, gdy zostanie zatwierdzona lub wycofana.
Przykłady:
A. Używanie jawnej transakcji
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Wycofywanie transakcji
W poniższym przykładzie pokazano efekt wycofywania transakcji. W tym przykładzie instrukcja ROLLBACK wycofa instrukcję INSERT, ale utworzona tabela nadal istnieje.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. Ustawianie AUTOCOMMIT
Poniższy przykład ustawia ustawienie AUTOCOMMIT na wartość ON
.
SET AUTOCOMMIT ON;
Poniższy przykład ustawia ustawienie AUTOCOMMIT na wartość OFF
.
SET AUTOCOMMIT OFF;
D. Używanie niejawnej transakcji z wieloma instrukcjami
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;