SQL Azure, czyli SQL Server w chmurze

Udostępnij na: Facebook

Autor: Piotr Zieliński

Opublikowano: 2010-12-06

Wprowadzenie

SQL Azure stanowi implementację  w chmurze silnika bazodanowego SQL Server.  Dzięki SQL Azure osiągamy wysoką skalowalność i niezawodność. Ponadto współpraca z SQL Azure wygląda bardzo podobnie do pracy z klasycznym SQL Server. Oczywiście są pewne różnice, o których będzie mowa w dalszej części artykułu.

Utworzenie serwera oraz uzyskanie niezbędnych do połączenia danych

  1. Wchodzimy na stronę https://sql.azure.com i logujemy się na nasze konto.

  2. Klikamy na nazwie projektu oraz po przeczytaniu regulaminu akceptujemy warunki korzystania z usługi.

  3. Jeśli nie zostało jeszcze założone konto (serwer), podajemy stosowne dane i klikamy na Create Server:

  4. Pojawi się okno Server Administration, które pozwala na zarządzanie bazami (tworzenie, sprawdzanie połączenia, podglądanie connection string itp.).

    W oknie również możemy zobaczyć nazwę serwera oraz login – te dane będą potrzebne, aby zalogować się do SQL Azure z poziomu SQL Server Management Studio.

  5. Druga zakładka Server Administration zawiera ustawienia firewalla. Domyślnie wszelkie połączenia są odrzucane. Aby umożliwić zdalne połączenie z SQL Azure, należy w zestawie reguł dodać swój adres ip:

Podstawowa konfiguracja została właśnie przeprowadzona. Następnym zadaniem będzie utworzenie bazy danych.

Zarządzanie bazami z poziomu SQL Server Management Studio

 

SQL Azure może być zarządzany tak jak zwykła baza danych z poziomu SQL Management Studio. Spróbujmy więc stworzyć przykładową bazę za pomocą SSMS:

  1. Uruchamiamy SQL Management Studio R2. Jeśli nie mamy jeszcze tej aplikacji, pobieramy ją ze strony Microsoftu.

  2. W oknie podajemy adres serwera, login oraz hasło. Wszystkie dane dostępne są z poziomu  przedstawionego wcześniej w panelu Server Administration.

  3. Po połączeniu się z SQL Azure można wykonywać już operację tak samo, jak z wykorzystaniem klasycznego SQL Server. Stwórzmy na przykład bazę danych, aby przekonać się, że rzeczywiście SSMS współpracuje z SQL Azure (w tym celu z menu kontekstowego należy wybrać Create Database).

Migracja z klasycznego SQL Server do SQL Azure

SQL Azure nie jest w pełni kompatybilny z SQL Server. Ze względu na architekturę występują pewne różnice. Spróbujmy więc przenieść bazę danych osadzoną w klasycznym SQL Server do SQL Azure:

  1. Uruchamiamy SSMS i logujemy się na serwer SQL Server, z którego chcemy przenieść bazę.

  2. Zaznaczamy źródłową bazę danych i z menu kontekstowego wybieramy Tasks->Generate Scripts. Pojawi się okno kreatora służącego do wygenerowania skryptów tworzących wskazaną bazę danych:

  3. Klikamy Next i na następnym ekranie zaznaczamy naszą bazę.

  4. Jak już na początku wspomniano, SQL Azure różni się nieco od SQL Server. Po wygenerowaniu skryptów będziemy musieli ręcznie je zmodyfikować, aby działały również na SQL Azure. Możemy jednak zmniejszyć ilość kodu, który będziemy musieli ręcznie zmienić poprzez odpowiednią konfigurację:

    • ustawiamy Convert UDDTs to base types na True – SQL Azure nie wspiera typów danych zdefiniowanych przez użytkownika,
    • ustawiamy Script extended properties na False – SQL Azure nie wspiera rozszerzonych właściwości,
    • ustawiamy Script USE DATABASE na false – SQL Azure nie wspiera komendy USE DATABASE.

  5. Na następnych ekranach zaznaczamy wszystkie pozycje i przechodzimy do końca kreatora.

Po wygenerowaniu skrypty zostaną wyświetlone w oknie SSMS. Połączmy się teraz z SQL Azure, zaznaczmy docelową bazę i wybierzmy New Query, a następnie wklejmy wygenerowany skrypt. Niestety, w tej chwili musimy dokonać kilku ręcznych zmian na skrypcie, aby dostosować go do SQL Azure:

  1. SQL Azure nie wspiera autoryzacji Windows, jeśli więc w wygenerowanym skrypcie znajduje się poniższy fragment kodu, należy go usunąć:

    CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] WITH DEFAULT_SCHEMA=[dbo]
    GO

  2. Nie są wspierane typy zdefiniowane przez użytkownika. Z tego względu należy usunąć wszystkie wystąpienia CREATE TYPE. Podczas generowania skryptów zaznaczyliśmy opcję, aby typy zdefiniowane przez użytkownika były zamieniane na typy bazowe, ale i tak skrypt będzie zawierał operacje CREATE TYPE (z tym że zamiast UDDT będą występować typy bazowe).

  3. SQL Azure nie obsługuje również FileGroup (grupy plików). Usuwamy więc wszystkie wystąpienia ON [PRIMARY].

  4. Usuwamy wszystkie  wystąpienia NOT FOR REPLICATON.

  5. Nie jest wspieranych wiele ustawień indeksów (PAD_INDEX, ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS). Znajdujemy więc:

    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)

    A następnie zastępujemy poniższym fragmentem kodu:

    WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)

  6. Usuwamy wszystkie wystąpienia CREATE XML SCHEMA COLLECTION.

  7. Po usunięciu poleceń tworzących schematy należy też usunąć wszystkie odniesienia do nich. W tym celu najlepiej szukać słowa „content”, a następnie zmieniać definicje kolumn z:

    [AdditionalContactInfo] [xml](CONTENT [Person].[AdditionalContactInfoSchemaCollection]) NULL

    na:

    [AdditionalContactInfo] [xml] NULL

  8. Indeksy XML nie są wspierane, należy więc znaleźć i usunąć wszystkie polecenia typu CREATE PRIMARY XML.

  9. Atrybut ROWGUIDCOL nie jest obsługiwany i należy oczywiście usunąć wszystkie wystąpienia.

  10. Usuwamy następujące wywołania:

    SET ANSI_NULLS ON

Większość nieobsługiwanych rzeczy już usunęliśmy lub zmodyfikowaliśmy. Resztę niezgodności najlepiej usuwać na bieżąco. Zwykle należy po prostu usunąć nieobsługiwaną funkcjonalność.  Jedną z częstych przyczyn błędu jest brak zdefiniowanego indeksu na tabeli – wszystkie tabele w Azure muszą mieć zdefiniowany indeks klastrowany.

SQL Azure Migration Wizard

Przedstawiona wyżej „ręczna” migracja z SQL Server do SQL Azure jest dość skomplikowana i czasochłonna, dlatego warto zainteresować się darmowym narzędziem SQL Azure Migration Wizard. Program umożliwia konwersję z:

  • SQL Server do SQL Azure,
  • SQL Azure do SQL Server,
  • SQL Azure do SQL Azure.

Aplikacja umożliwia, oprócz migracji, również analizę baz (pod kątem kompatybilności) na podstawie skryptów T-SQL, logu z SQL Profiler czy czystej struktury bazy. Cały proces jest realizowany za pomocą prostego kreatora, więc obsługa nie powinna sprawiać problemów. Warto przyjrzeć się zawartości pliku NotSupportedByAzureFile.Config – zawiera on informacje o niewspieranych klauzurach oraz wartości, jakimi powinny być one zastąpione.

Zakończenie

Korzystanie z SQL Azure praktycznie niczym nie różni się od SQL Server. Jeśli programista ma doświadczenie z pracą z  SQL Server, z pewnością poradzi sobie też z wersją w chmurze. Connection string oraz inne dane (login, adres serwera) można uzyskać z przedstawionego na początku panelu Server Administration. Najtrudniejszą kwestią może być migracja bazy – wersja Azure nie wspiera kilku funkcjonalności. W zamian jednak dostajemy skalowalny, wydajny system bazodanowy z wysoką dostępnością. Co warto również zaznaczyć – w przypadku SQL Azure nie musimy kłopotać się jej utrzymaniem, zarządzaniem czy dostarczeniem stosownej infrastruktury sprzętowej.


          

Piotr Zieliński

Absolwent informatyki o specjalizacji inżynieria oprogramowania Uniwersytetu Zielonogórskiego. Posiada szereg certyfikatów z technologii Microsoft (MCP, MCTS, MCPD). W 2011 roku wyróżniony nagrodą MVP w kategorii Visual C#. Aktualnie pracuje w General Electric pisząc oprogramowanie wykorzystywane w monitorowaniu transformatorów . Platformę .NET zna od wersji 1.1 – wcześniej wykorzystywał głównie MFC oraz C++ Builder. Interesuje się wieloma technologiami m.in. ASP.NET MVC, WPF, PRISM, WCF, WCF Data Services, WWF, Azure, Silverlight, WCF RIA Services, XNA, Entity Framework, nHibernate. Oprócz czystych technologii zajmuje się również wzorcami projektowymi, bezpieczeństwem aplikacji webowych i testowaniem oprogramowania od strony programisty. W wolnych chwilach prowadzi blog o .NET i tzw. patterns & practices.