Jako DBA, jak przejść do przejścia z Oracle na SQL Server?


Odpowiedzi:


49

W ciągu ostatnich kilku lat zamieniłem się pracą nad Oracle i SQL Server i napisałem odruch, że poszedłem w drugą stronę . Istnieje wiele idiomatycznych i architektonicznych różnic, a różne fragmenty terminologii są różnie wykorzystywane przez dostawców i społeczności deweloperów / DBA otaczających każdy produkt.

Architektura fizyczna

SQL Server organizuje różne rzeczy nieco inaczej niż Oracle i ma jedną lub dwie kluczowe koncepcje, które nie mają bezpośrednich analogów w Oracle.

  • „Baza danych” to osobny element w SQL Server, z własnymi uprawnieniami użytkowników, schematami / przestrzeniami nazw i pamięcią. Jeśli znasz Sybase, działają one tak samo jak bazy danych w Sybase, ze względu na wspólne pochodzenie produktu.

  • Grupy plików są w przybliżeniu równoważne obszarom tabel, chociaż są lokalne dla bazy danych.

  • Schemat jest odmienną koncepcją niż użytkownik bazy danych w SQL Server, chociaż użytkownicy mogą mieć domyślny schemat.

  • MVCC działa nieco inaczej w SQL Server. Jest to stosunkowo nowa funkcja, utrzymująca różne kopie wiersza, dopóki nie zostaną zwolnione blokady starej wersji. SQL Server nie ma bezpośredniego odpowiednika dla segmentu wycofania. Domyślnie nie jest aktywny w bazach danych SQL Server.

  • Tempdb jest znacznie częściej wykorzystywany w SQL Server. System używa go do tymczasowych tabel i pośrednich wyników łączenia. Więcej o tempdb później.

  • Partycjonowanie tabel jest nieco bardziej niezręczne niż Oracle. Musisz skonfigurować funkcję partycji, która utworzy klucz partycji na podstawie tego, co go dostarczasz, a następnie schemat partycji nad tą funkcją partycji. Schemat partycji zachowuje się trochę jak grupa plików, ponieważ następnie tworzysz tabelę na schemacie partycji.

    Zamiana partycji na i z niej wymaga ustawienia ograniczenia dla pustej tabeli we właściwej strukturze. Ograniczenie gwarantuje, że wartości klucza partycji są odpowiednie dla partycji, na którą zamierzasz zamienić.

  • Widoki zmaterializowane są nazywane widokami indeksowanymi w programie SQL Server. GROUP BYKlauzula ma CUBEoperatora, a dokumentacja nawiązuje do cechy przepisywania zapytań. Jednak ta funkcja nie jest dobrze udokumentowana i może nie być zbyt dojrzała. YMMV.

  • SQL Server nie obsługuje transakcji autonomicznych, chociaż obsługuje zatwierdzanie dwufazowe za pośrednictwem protokołów transakcyjnych XA lub OLEDB.

  • Indeksy klastrowe różnią się nieznacznie od tabel uporządkowanych według indeksu w Oracle, ponieważ nie wymagają one wszystkich kolumn w tabeli, aby uczestniczyć w indeksie klastrowym. Są one znacznie szerzej stosowane w architekturze SQL Server niż IOT w Oracle.

  • SQL Server obsługuje indeksy, ale nie ma indeksów złączeń. Indeksy bitmapowe nie są obsługiwane, chociaż ma operator przecięcia indeksu / transformatora gwiazdy, który może obliczać przecięcia bez trafiania w tabelę faktów.

  • Sekwencje są stosunkowo nowym dodatkiem do SQL Server. Tradycyjnie autoinkrementacja kluczy odbywa się za pomocą kolumn tożsamości. Możesz załadować wartości do kolumny tożsamości poprzez set identity_insert on.

Programowanie

Idiomatic T-SQL ma pewne różnice w stosunku do idiomatic PL / SQL. Działa na tyle inaczej, że niektóre z paradygmatycznych różnic zasługują na wyjaśnienie bardziej szczegółowo.

  • T-SQL nie ma pojęcia pakietu. Wszystkie procedury i funkcje przechowywane w bazie danych znajdują się we wspólnej przestrzeni nazw, chociaż schematy można złamać, a przestrzeń nazw jest lokalna dla bazy danych.

  • Dowiedz się, jak korzystać z tabel tymczasowych i SELECT INTO. Dosyć rzadko spotykany jest kod T-SQL, który faktycznie wymaga kursora; tabele tymczasowe pozwalają na podział operacji na etapy, które można wykonać za pomocą ustawionych operacji. SELECT INTOw tempdb jest minimalnie rejestrowany i jest logowany minimalnie również w niektórych trybach odzyskiwania w bazach danych użytkowników, więc jest tak samo szybki jak operator zapytania, który utrzymuje pośredni wynik łączenia.

    Idiomatic T-SQL użyje tabel tymczasowych w roli, jaką zobaczysz zmienne kursora w PL / SQL, ale znacznie lepiej wykorzysta ustawione operacje. Tabele temperatur mogą jednak powodować dość tępy kod, więc używaj go ostrożnie.

  • Słownik danych systemowych był o wiele bardziej tępy niż Oracle w starszych wersjach, ale stał się znacznie lepszy dzięki SQL Server 2005. Chociaż narzędzia dostarczane przez Microsoft mają dość dużo introspekcji wbudowanych w eksploratorze SSMS, nadal warto znać swój obejść słownik danych. To nie rozróżnia ALL, USERa DBAwidoki obiektów DB, choć.

  • SSMS ma wbudowaną przeglądarkę planu zapytań.

  • Identyfikatory w kodzie T-SQL mogą być cytowane za pomocą [] i mogą zawierać wszelkiego rodzaju śmieci, jeśli są cytowane. Jednakże, jeśli złapiemy dzwonisz kolumny „Bezpośredni / Transfer”, to będzie zgrać swoje wnętrzności na zewnątrz.

  • SQL Server ma funkcje okna (od 2005 IIRC), więc możesz teraz zamawiać, uruchamiać sumy i tym podobne w grupach.

  • T-SQL nie ma bezpośredniego odpowiednika CONNECT BY, chociaż rekurencję można wykonać za pomocą rekurencyjnych CTE.

  • Jeśli chcesz napisać kod, który przeskakuje między bazami danych (w przeciwieństwie do schematów w bazie danych), rozważ użycie publicznych synonimów do aliasu obiektów na coś lokalnego i odwołaj się do aliasów w kodzie. Pozwala to uniknąć zakodowanych na stałe zależności od nazw baz danych.

  • Jeśli unikniesz zakodowanych na stałe zależności od nazw baz danych, bazy danych ułatwiają utrzymanie wielu środowisk na tym samym serwerze.

  • Niektóre rzeczy, takie jak niestandardowe funkcje agregujące, można zaimplementować tylko przy użyciu sproców CLR. Ponadto, jeśli chcesz wyjść z kontekstu transakcji (np. W celu sfałszowania transakcji autonomicznej w celu rejestrowania błędów w celu przywrócenia zabezpieczeń), możesz użyć sproc CLR, ponieważ może on utworzyć połączenie lokalne poza bieżącym kontekstem transakcji.

Bezpieczeństwo

Loginy są zdefiniowane na poziomie instancji SQL Server, ale każde logowanie jest mapowane na zero lub więcej baz danych jako „użytkownik bazy danych”. Kamery uprawnień można przypisywać zarówno do „loginów” (serwera), jak i „użytkowników” (bazy danych), ale w bazie danych zwykle używa się „ról”. Użytkownicy należą do ról, uprawnienia są przypisywane do ról. SQL Server 2012 dodaje „role serwera”.

  • SQL Server 2012 wprowadza koncepcję zwaną „częściowo zawartymi bazami danych”, która pozwala przechowywać informacje o użytkownikach i rolach lokalnie w tej bazie danych.

  • W bazie danych pojęcie użytkownika i schematu jest oddzielone. Użytkownik lub rola można przypisać do schematu, a schemat jest właścicielem obiektów bazy danych.

  • Uwierzytelnianie systemu Windows wykorzystuje informacje logowania za kulisami w celu uwierzytelnienia użytkownika na komputerze lub w domenie przy użyciu loginu SQL Server. Obsługa IIRC jest opcjonalna w Oracle.

  • Specjalna rola „dbo” (skrót od „właściciel bazy danych”) ma rodzaj uprawnień superużytkownika w ramach konkretnej bazy danych. Każda baza danych ma rolę „dbo”, a użytkowników można przypisać do roli „dbo” w danej bazie danych.

  • Istnieje również domyślny schemat „dbo”. Obiekty mogą należeć do schematu dbo - Obiekty tworzone przez użytkowników z rolą „dbo” (lub uprawnienia administratora w całym systemie) będą domyślnie należeć do schematu dbo, chyba że inny schemat zostanie podany jawnie.

  • Informacje bezpieczeństwa nie są przechowywane w kopii zapasowej pojedynczej bazy danych. Użytkownicy muszą i role muszą być jawnie skonfigurowane na serwerze, na którym przywrócono kopię zapasową. SQL Server 2012 pozwala lokalnie przechowywać dane użytkowników i ról w bazie danych dzięki nowej funkcji „częściowo zawartych baz danych”.

  • Z SQL Server 2005 procedury składowane mogą być wykonywane w kontekście bezpieczeństwa wywołującego, twórcy, schematu będącego właścicielem lub określonego użytkownika.

  • W widoku SQL Server uprawnienia do bazowych tabel są oparte na uprawnieniach schematu, który jest właścicielem widoku. Uprawnienia użytkownika w bazowych tabelach nie uczestniczą w zabezpieczeniach, chociaż definicja widoku może obejmować filtry, które pobierają informacje z sesji. W Oracle uprawnienia użytkowników w bazowych tabelach mogą wpływać na widok, w zależności od konfiguracji przyznania.

Monitorowanie i dostrajanie

TBA - architektura pamięci vs. SGA itp. W Oracle

Kopii zapasowych i odzyskiwania

TBA

Obróbka

Microsoft łączy zestaw otaczających narzędzi z SQL Server. Niektóre z głównych dostarczonych produktów to:

  • SQL Server Management Studio (SSMS): Działa to podobnie do SQL Developer na Oracle - zapewnia edytor i funkcję wykonywania kodu. Niektóre przydatne funkcje obejmują przeglądarkę obiektów bazy danych i przeglądarkę planu zapytań.

  • Usługi SQL Server Analysis Services (SSAS): jest to serwer OLAP, który jest inny niż serwer bazy danych. Używa własnego języka zapytań (MDX) i API (XML / A) do komunikacji klient-serwer. Nie można zapytać za pomocą SQL. SSMS posiada narzędzie do edycji MDX i nieprzetworzonych zapytań XMLA oraz wyświetlania wyników. Dostarczone jest również narzędzie do zapytań wiersza poleceń o nazwie ASCMD.EXE.

  • SQL Server Reporting Services (SSRS): To internetowe narzędzie do raportowania do publikowania raportów. Raporty można budować za pomocą BI Development Studio (BIDS) lub Konstruktora raportów i publikować w portalu internetowym. Sam serwer SSRS ma interfejs API usługi sieci Web do programowego zarządzania serwerem. Pamiętaj, że raporty SSRS mogą pobierać dane z różnych źródeł, nie tylko z SQL Server. Narzędzie wiersza polecenia o nazwie RS.EXE jest dostarczane do programowego zarządzania serwerami SSRS.

  • SQL Server Integration Services (SSIS): Jest to narzędzie ETL dostarczane z SQL Server. Architektonicznie różni się od OWB lub ODI tym, że nie jest narzędziem do generowania kodu. Środowisko wykonawcze znajduje się po stronie klienta i może znajdować się na innym komputerze niż serwer bazy danych. Pakiety SSIS można opracowywać za pomocą BIDS i wykonywać niezależnie za pomocą narzędzia wiersza polecenia o nazwie DTEXEC.EXE.

  • BI Development Studio (BIDS): Jest to środowisko graficzne do tworzenia raportów, pakietów SSIS i kostek SSAS. Jeśli zainstalowane są inne narzędzia programistyczne oparte na VS (np. VS Professional), można je zintegrować w jednym środowisku i wspólnej grupie projektowej.

  • Kopiowanie zbiorcze (BCP): narzędzie do masowego wstawiania / wyciągania wiersza poleceń podobne do SQL * Loader

  • SQLCMD: narzędzie do zapytań wiersza poleceń podobne do SQL * plus

  • SQL Profiler: narzędzie do śledzenia i profilowania, które może przechwytywać i oceniać informacje śledzenia z SQL Server, SSAS i innych narzędzi w pakiecie.

  • SQL Server Agent: narzędzie do planowania zadań, które może uruchamiać okresowe zadania jednego rodzaju innego.


1
W przypadku T-SQL vs. PL / SQL: T-SQL nie ma różnych kontekstów programowania, takich jak PL / SQL, więc możesz swobodnie mieszać czyste instrukcje SQL i T-SQL. Na przykład możesz uruchomić TRUNCATE TABLE ...równolegle DML bez konieczności robienia odpowiednika EXECUTE IMMEDIATE. W T-SQL możesz także zwracać zestawy wyników do klienta, używając SELECTinnych operacji, podczas gdy w PL / SQL musisz skierować wyjście SELECTs do tabeli lub innego miejsca docelowego. W Oracle tylko czysty SQL może zwrócić zestaw wyników do klienta.
Nick Chammas,

1
Należy również pamiętać, że procedury składowane, których nazwa zaczyna się od „sp_”, są traktowane specjalnie. Nie nadawaj nazwy przechowywanym procesom w ten sposób, chyba że importujesz procedurę systemową z nowszej wersji serwera SQL. Technicznie można to wykorzystać do tworzenia procedur przechowywanych w bazie danych, ale nie jest to zalecane, ponieważ przyszłe wersje mogą utworzyć nową systemową procedurę przechowywaną o tej samej nazwie.
Kevin Cathcart

1
Czy warto tutaj dodać trochę o eskalacji blokady? Myślę, że zaskoczyłoby nas to, że lud Oracle wywierał na nielimitowane zamki na poziomie rzędu
Jack Douglas

8

Nasz główny produkt działa zarówno na SQL Server, jak i Oracle, oto kilka innych różnic, nad którymi musieliśmy pracować i warto pamiętać:

  • Obsługa daty i czasu jest bardzo różna: różne dokładności, inny zestaw funkcji do pracy

  • Puste ciągi są zerowe w Oracle, a nie w SQL Server

  • Obsługa kodowania znaków i Unicode jest bardzo różna. W SQL Server możesz mieszać kolumny normal ( varchar) lub Unicode ( nvarchar) w tej samej bazie danych, w Oracle decydujesz na poziomie bazy danych, jakiego rodzaju kodowania użyć.


Oracle umożliwia także mieszanie typów char / varchar2 i nchar / nvarchar2 z dwoma różnymi kodowaniami - patrz Znaki Unicode można przechowywać w bazie danych Oracle na dwa sposoby .
George3,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.