Rozproszone transakcje z wykorzystaniem usługi Service Broker w SQL Server 2008 R2 Andrzej Ptasznik.

Slides:



Advertisements
Podobne prezentacje
G.Broda Helsinki 20-22, September 2010
Advertisements

Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
STRUKTURY DANYCH.
Usługi sieciowe Wykład 9 VPN
Statistics – what is that? Statystyka dla gimnazjalistów.
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Pomysł Sukces Wstępne rozwiązanie Symulacja Wynik zadowala? Poprawa rozwiązania Nie Tak Podstawowa pętla projektowania.
Analiza wywołania i przebiegu przerwań w systemie Linux
Skrypty, procedury przechowywane i wyzwalane
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Wstęp do geofizycznej dynamiki płynów. Semestr VI. Wykład
ALLEGRO PIERWSZA GRA: WYŚCIG
In the heart of this magic city, there is an unusual place right by the charming and vibrant Cracow Old Town, in the sheltered small street - little,
Język SQL Część II.
Grupowanie wielowymiarowe w MS SQL
Netiquette Wiktoria Pacholik. Netiquette Netiquette is a collection of cyberspace rules. Netiquette is obligatory every internets user.
Copyright for librarians - a presentation of new education offer for librarians Agenda: The idea of the project Course content How to use an e-learning.
Software Engineering 0. Information on the Course Leszek J Chmielewski Faculty of Applied Informatics and Mathematics (WZIM) Warsaw University of Life.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
Rekursja Teoretyczne podstawy informatyki Wykład 5
Dzielenie relacyjne / Relational Division
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Exceptions Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Threads Prezentacja.
POLSKA SZKOŁA PODSTAWOWA IM. LECHA BĄDKOWSKIEGO W LUZINIE
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
MS SQL SERVER udział w rynku. Source: Gartner Dataquest (May 2006) Company Market Share (%) Market Share (%) Growth (%) Oracle6, ,
1 Building Integration System - Training Internal | ST-IST/PRM1 | 02/2008 | © Robert Bosch GmbH All rights reserved, also regarding any disposal,
Pierwszy dzień w collegu St. Augustin w Angers. Czwartek, 20 maja To był nasz pierwszy dzień w collegu St. Augustina w Angers, który rozpoczął się o 8:00.
Tadeusz Janasiewicz IT Group, Tadeusz Janasiewicz, WSUS, IT Group, r.
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
Prof. dr hab. Hubert Izdebski. Projekt : Odpowiedź na wyzwania gospodarki opartej na wiedzy: nowy program nauczania na WSHiP. Projekt współfinansowany.
SQL i internet PHP i MySQL. Programy MySQL: serverMySQL: server WWW serverWWW server Interpreter PHPInterpreter PHP Przeglądarka stron wwwPrzeglądarka.
Contents About Kujawiak dance About Kuyavia S. Strzeleckis Kujawiak notes Kuyavias coat of arms Song Quiz.
Porysujmy trochę czyli Łączenie SQLa, AutoCADa i Delphi
LINQ (Language-INtegrated Query) Marcin Bohdziewicz s4070.
Kosmologia realistyczna Marek Kutschera 05 V 2009 IPJ.
Dr inż. Piotr Czapiewski. Overloading Znaczenie inne niż w większości języków obiektowych Metoda dynamicznego tworzenia pól i metod Magiczne metody.
Delphi i Acad cd.. l_poz := MSpace.Count; Label3.Caption:=IntToStr(l_poz); ent:=Mspace.Item(0); for l_poz := 0 to MSpace.Count-1 do begin; ent:=Mspace.Item(l_poz);
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
BLOOD DONATION.
Click to show the screen.
db4o Kacper Skory Marcin Talarek
POLAND. we will take you on a journey during which you will learn something about us.
Wacław Sierpiński.
Na podstawie: The Illusion Of Life Disney Animation.
Podstawy licencjonowania Exchange, SharePoint oraz Lync.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
HTML cz.3 Tabele cd. oraz ramki
I L.O. im. Mikołaja Kopernika in Bielsko-Biała The following presentation has been created within the confines of Socrates- Comenius Programme Teaching.
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
1.
Bazy Danych Programowanie w SQL Wojciech St. Mościbrodzki
INSTYTUT METEOROLOGII I GOSPODARKI WODNEJ INSTITUTE OF METEOROLOGY AND WATER MANAGEMENT THE USE OF COSMO LM MODEL FOR AVIATION METEOROLOGICAL SERVICE IN.
PL/SQL – dalsza wędrówka
POLISH FOR BEGINNERS.
2 Review What is bionomial nomenclature Explain What is a genus
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
1 Procedury i funkcje CREATE PROCEDURE nazwa ([proc_parameter[,...]]) [characteristic...] routine_body CREATE FUNCTION nazwa ([func_parameter[,...]]) RETURNS.
Zapis prezentacji:

Rozproszone transakcje z wykorzystaniem usługi Service Broker w SQL Server 2008 R2 Andrzej Ptasznik

Service Broker - kilka ogólników SQL Service Broker zapewnia rozproszoną, asynchroniczną infrastrukturę pozwalającą na tworzenie rozbudowanych aplikacji korporacyjnych. Service Broker jest mechanizmem kolejkowania komunikatów dostępnym w SQL Server 2008. Asynchroniczne przekazywanie danych Wyzwalacze rozproszone Poprawia wydajność Poprawia skalowalność

Service Broker - elementy architektury Elementy architektury Service Broker Komunikaty Usługi Kolejki Konwersacje Kontrakty Węzły końcowe Service Broker Zdalne wiązanie usług Trasy

Architektura Service Broker Źródło : sqlservercentral.com

Architektura Service Broker Zależności pomiędzy obiektami architektury Service Broker Źródło : diybl.com

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – Typy komunikatów CREATE MESSAGE TYPE message_type_name [ AUTHORIZATION owner_name ] [ VALIDATION = { NONE | EMPTY | WELL_FORMED_XML | VALID_XML WITH SCHEMA COLLECTION schema_collection_name } ] [ ; ] Przykład : CREATE MESSAGE TYPE Zmiany VALIDATION = WELL_FORMED_XML;

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – Kontrakty CREATE CONTRACT contract_name [ AUTHORIZATION owner_name ] ( { { message_type_name | [ DEFAULT ] } SENT BY { INITIATOR | TARGET | ANY } } [ ,...n] ) [ ; ] Kontrakt definiuje typy komunikatów, które może wysyłać uczestnik konwersacji Kontrakt musi zawierać co najmniej jeden typ komunikatu. Przykład : CREATE CONTRACT [Replikacja] ([Potwierdzenie] SENT BY TARGET, [Zmiany] SENT BY INITIATOR)

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker - kolejki CREATE QUEUE <object> [ WITH [ STATUS = { ON | OFF } [ , ] ] [ RETENTION = { ON | OFF } [ , ] ] [ ACTIVATION ( [ STATUS = { ON | OFF } , ] PROCEDURE_NAME = <procedure> , MAX_QUEUE_READERS = max_readers , EXECUTE AS { SELF | 'user_name' | OWNER } ) [ , ] ] [ POISON_MESSAGE_HANDLING ( [ STATUS = { ON | OFF } ) ] [ ON { filegroup | [ DEFAULT ] } ] [ ; ]

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – zawartość kolejki Column name Data type Description status tinyint 0=Received message 1=Ready 2=Not yet complete 3=Retained sent message priority Reserved for future use. queuing_order bigint Message order number within the queue. conversation_group_id uniqueidentifier Identifier for the conversation group that this message belongs to. conversation_handle Handle for the conversation that this message is part of. message_sequence_number Sequence number of the message within the conversation. service_name nvarchar(512) Name of the service that the conversation is to. service_id int SQL Server object identifier of the service that the conversation is to. service_contract_name nvarchar(256) Name of the contract that the conversation follows. service_contract_id SQL Server object identifier of the contract that the conversation follows. message_type_name Name of the message type that describes the message. message_type_id SQL Server object identifier of the message type that describes the message. validation nchar(2) Validation used for the message. E=Empty N=None X=XML message_body varbinary(MAX) Content of the message. message_id Unique identifier for the message.

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker - usługi Usługa jest węzłem końcowym dla konwersacji Usługa inicjująca Usługa docelowa Każda usługa jest powiązana z jedną kolejką CREATE SERVICE service_name [ AUTHORIZATION owner_name ] ON QUEUE [ schema_name. ]queue_name [ ( contract_name | [DEFAULT] [ ,...n ] ) ] [ ; ]

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – obsługa dialogu Inicjowanie dialogu DECLARE @dialog_handle uniqueidentifier BEGIN DIALOG [ CONVERSATION ] @dialog_handle FROM SERVICE initiator_service_name TO SERVICE 'target_service_name' [ , { 'service_broker_guid' | 'CURRENT DATABASE' } ] [ ON CONTRACT contract_name ] [ WITH [ { RELATED_CONVERSATION = related_conversation_handle | RELATED_CONVERSATION_GROUP = related_conversation_group_id } ] [ [ , ] LIFETIME = dialog_lifetime ] [ [ , ] ENCRYPTION = { ON | OFF } ] ] [ ; ]

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – obsługa dialogu Wysłanie komunikatu do kolejki SEND ON CONVERSATION conversation_handle [ MESSAGE TYPE message_type_name ] [ ( message_body_expression ) ] [ ; ]

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – obsługa dialogu Odczytanie komunikatu z kolejki [ WAITFOR (] RECEIVE [ TOP ( n ) ] <column_specifier> [ ,...n ] FROM <queue> [ INTO table_variable ] WHERE { conversation_handle = conversation_handle | conversation_group_id = conversation_group_id } ] [ ) ] [ , TIMEOUT timeout ] [ ; ]

Definiowanie elementów architektury Service Broker Elementy architektury Service Broker – obsługa dialogu Zakończenie dialogu END CONVERSATION conversation_handle [ [ WITH ERROR = failure_code DESCRIPTION = 'failure_text' ] | [ WITH CLEANUP ] ] [ ; ]

Mini replikacja - przykład Baza 2 Broker Baza 1 Kolejka 2 Kolejka 1 PROC Trigger PROC msg Idmiasta Nazwa Czy_OK Idmiasta Nazwa Miasta 1 Opole 1 1 Opole Miasta

Prezentacja replikacji dla wielu subskrybentów z dystrybutorem Założenia: Jeden wydawca i wielu subskrybentów Wprowadzony wiersz w bazie wydawcy – przekazywany jest do pozostałych uczestników Wydawca rejestruje potwierdzenie dokonania zmian u subskrybentów

Prezentacja replikacji dla wielu subskrybentów Wydawca Potwierdzenie Komunikat o zmianach Subskrybent2 Potwierdzenie

Definiowanie modelu elementy Service Broker CREATE MESSAGE TYPE [Potwierdzenie] ] VALIDATION = WELL_FORMED_XML CREATE MESSAGE TYPE [Zmiany] ] VALIDATION = WELL_FORMED_XML CREATE CONTRACT [Replikacja] ([Potwierdzenie] SENT BY ANY, [Zmiany] SENT BY ANY) CREATE QUEUE [dbo].[Kolejka] WITH STATUS = ON , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[ObslugaKolejki] , MAX_QUEUE_READERS = 5 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = OFF) ON [PRIMARY] CREATE SERVICE [ObslRepl] ON QUEUE [dbo].[Kolejka] ([Replikacja])

Definiowanie modelu - tabela W bazie danych Wydawcy jest tabela o nazwie Miasta o podanej strukturze

Definiowanie modelu - wyzwalacz Dla tabeli Miasta zdefiniowany został wyzwalacz : Create trigger [dbo].[TR_Repl] on [dbo].[Miasta] after insert, update,delete as declare @operacja char(1)= case when not exists (select * from inserted) and not exists (select * from deleted) then 'P' when not exists (select * from inserted) then 'D' when not exists (select * from deleted) then 'I' else 'U' end declare @Guid uniqueidentifier

Definiowanie modelu – wyzwalacz cd. Dla tabeli Miasta zdefiniowany został wyzwalacz : if @operacja!='P' begin if @operacja in ('I','D') or ( @operacja='U' and exists (select * from inserted as i join deleted as d on i.id=d.id where i.nazwa!=d.nazwa ) ) declare @komunikat xml= Select @operacja as Operacja, (Select coalesce(i.id,d.id) as Id, coalesce(i.nazwa,d.nazwa) as Nazwa from inserted as i full join deleted as d for xml path('Wiersz'),root('Wiersze'),type ) For xml path('Zmiany') ); insert into logx(baza,dane) select DB_NAME(), @komunikat;

Definiowanie modelu – wyzwalacz cd. begin dialog @Guid from service ObslRepl to service 'S1ObslRepl' on contract Replikacja WITH ENCRYPTION = OFF; send on conversation @guid message type Zmiany (@komunikat); to service 'S2ObslRepl' end

Definiowanie modelu – procedura u sybskrybentów Create procedure [dbo].[ObslugaKolejki] as declare @guid uniqueidentifier, @typ sysname, @komunikat xml begin try begin transaction ;waitfor( receive top (1) @guid=conversation_handle, @typ= message_type_name, @komunikat=cast(message_body as xml) from kolejka ) ,timeout 6000;

Definiowanie modelu – procedura u sybskrybentów cd. if @typ='Zmiany' begin insert into wydawca.dbo.logx(baza,dane) select db_name(), @komunikat ; with tmp as ( Select k.value('../../Operacja[1]', 'char(1)') as operacja, k.value('Nazwa[1]', 'varchar(50)') as nazwa, k.value('Id[1]', 'uniqueidentifier') as Id from @komunikat.nodes('Zmiany/Wiersze/Wiersz') as t(k) ) merge miasta using tmp on miasta.id=tmp.id when matched and Operacja='D' then delete when matched and Operacja='U' then update set nazwa=tmp.nazwa when not matched then insert(id,nazwa) values(tmp.id,tmp.nazwa);

Definiowanie modelu – procedura u sybskrybentów cd. set @komunikat.modify('insert <Baza>Subskrybent1</Baza> as first into (Zmiany)[1]'); send on conversation @guid message type Potwierdzenie (@komunikat) end commit end try begin catch if @@trancount>0 rollback end catch

Definiowanie modelu – procedura u Wydawcy Create procedure [dbo].[ObslugaKolejki] as declare @guid uniqueidentifier, @typ sysname, @komunikat xml begin try begin transaction ;waitfor ( receive top (1) @guid=conversation_handle, @typ= message_type_name, @komunikat=cast(message_body as xml) from kolejka ), Timeout 6000; insert into logx(baza,dane) select 'Wydek', @komunikat;

Definiowanie modelu – procedura u Wydawcy cd. if @typ='Potwierdzenie' begin with tmp as ( Select k.value('../../Baza[1]', 'varchar(128)') as Baza, k.value('Id[1]', 'uniqueidentifier') as Id from @komunikat.nodes('Zmiany/Wiersze/Wiersz') as t(k) ) update Miasta set Ok1=case when tmp.baza='Subskrybent1' then 1 else Ok1 end, Ok2=case when tmp.baza='Subskrybent2' then 1 else Ok2 end from tmp where tmp.id=miasta.id ; end conversation @guid WITH CLEANUP

Przejdźmy do pokazu  Definiowanie modelu – procedura u Wydawcy cd. end commit tran end try begin catch if @@trancount>0 rollback end catch Przejdźmy do pokazu 