Migracja I Integracja Bazy

3,347 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Migracja I Integracja Bazy

  1. 1. Migracja i integracja bazy danych napisanej w MS Access do MS SQL 2005 
  2. 2. Wstęp <ul><li>Omówienie środowiska MS Access </li></ul><ul><li>Przygotowanie do migracji </li></ul><ul><li>Migracja danych z bazy Access do Bazy MS SQL </li></ul><ul><li>Migracja zapytań SQL-a z Access-a do MS SQL-a </li></ul><ul><li>Integracja MS SQL-a z zewnętrznymi źródłami danych </li></ul><ul><li>Wykorzystanie funkcjonalności MS SQL w codziennej pracy po migracji </li></ul><ul><li>Zagrożenia związane z migracją </li></ul>
  3. 3. Środowisko MS Access <ul><li>Relacyjna baza danych zintegrowana z środowiskiem programistycznym </li></ul><ul><li>Ścisła integracja z VBA i DAO </li></ul><ul><li>Wszechobecne kreatory </li></ul><ul><li>Baza i aplikacja w postaci pojedynczego pliku </li></ul><ul><li>W wersji podstawowej baza wymaga aplikacji Access z możliwością jej skompilowania do samodzielnego pliku </li></ul><ul><li>Wbudowane mechanizmy importu i eksportu danych </li></ul><ul><li>Możliwość protezowania SQL-a za pomocą funkcji VBA </li></ul>
  4. 4. Dostępne elementy <ul><li>Zróżnicowany dostęp do danych </li></ul><ul><ul><li>Silnik JET i linki ODBC do zewnętrznych źródeł danych - MDB </li></ul></ul><ul><ul><li>„ projekt programu Microsoft Access ” - ADP </li></ul></ul><ul><li>Formularze </li></ul><ul><li>Raporty </li></ul><ul><li>Strony dostępu HTML </li></ul><ul><li>Makra </li></ul><ul><li>Moduły VBA </li></ul>
  5. 5. Silnik JET <ul><li>Brak Triggerów </li></ul><ul><li>Baza danych jest tylko w postaci pliku </li></ul><ul><li>Blokady </li></ul><ul><li>Transakcje </li></ul><ul><li>Model relacyjny z możliwością kaskadowego poprawiania i kasowania </li></ul><ul><li>Podstawowe bezpieczeństwo oparte o zewnętrzny plik lub hasło w bazie </li></ul>
  6. 6. Ograniczenia JET-a <ul><li>Maksymalny rozmiar bazy danych to 2 GB (w tej przestrzeni muszą się również zmieścić obiekty systemowe, np. indeksy), </li></ul><ul><li>Maksymalna liczba obiektów w bazie: 32 768 , </li></ul><ul><li>Maksymalna liczba jednoczesnych użytkowników: 255 (w praktyce dużo mniej), </li></ul><ul><li>Maksymalna liczba pól w tabeli: 255 , </li></ul><ul><li>Maksymalny rozmiar tabeli: 2 GB (wraz z obiektami systemowymi) </li></ul>
  7. 7. JET bez Access-a <ul><li>Możliwość tworzenia plików oraz dostęp do danych za pomocą ADOX/ADO z poziomu np. skryptu VBS </li></ul><ul><li>Pliki MDB są obsługiwane przez inne aplikacje bez konieczności instalowania Access-a </li></ul>
  8. 8. Częste praktyki występujące w środowisku Access <ul><li>Architektura Frontend – Backend </li></ul><ul><li>Kaskadowanie kwerend </li></ul><ul><li>Tworzenie baz pośredniczących </li></ul><ul><li>Dynamiczne tworzenie kwerend za pomocą DAO </li></ul><ul><li>Wykorzystanie dynamicznych kwerend krzyżowych – PIVOT-y </li></ul><ul><li>Odwołania do formularzy wprost z SQL-a </li></ul><ul><li>Umieszczanie funkcji z VBA w kodzie SQL </li></ul><ul><li>Wykonywanie kodu SQL z poziomu VBA </li></ul>
  9. 9. Środowisko docelowe <ul><li>SQL Server 2005/2008 Express SQL Server 2005/2008 Express Edition with Advanced Services </li></ul><ul><ul><li>Pojedyncza baza do 4 GB </li></ul></ul><ul><ul><li>1 GB RAM </li></ul></ul><ul><ul><li>1 CPU </li></ul></ul><ul><li>SQL Server 2005/2008 </li></ul><ul><ul><li>Brak ograniczeń </li></ul></ul>
  10. 10. Przygotowanie do migracji <ul><li>Zapoznanie z migrowaną aplikacją i jej specyfiką </li></ul><ul><li>Określenie celu migracji </li></ul><ul><ul><li>Ominięcie ograniczeń </li></ul></ul><ul><ul><li>Przyspieszenie działania </li></ul></ul><ul><ul><li>Całkowita migracja do nowego środowiska </li></ul></ul><ul><li>Określenie elementów które chcemy migrować </li></ul><ul><li>Oszacowanie czasu potrzebnego na wykonanie zadania </li></ul><ul><li>Zminimalizowanie ewentualnych szkód w przypadku niepowodzenia </li></ul>
  11. 11. Warunki niezbędne do powodzenia <ul><li>Kopia bezpieczeństwa migrowanych danych </li></ul><ul><li>Dostęp do bazy SQL Serwer oraz Odpowiedni poziom uprawnień w ramach SQL Serwer-a </li></ul><ul><li>W przypadku gdy dane są współdzielone dostęp do serwera dla innych użytkowników </li></ul><ul><li>Odpowiednią ilość miejsca na dysku (plik danych i pliku log) </li></ul>
  12. 12. Włączenie obsługi TCPIP dla instancji SQL <ul><li>Konieczny restart instancji </li></ul><ul><li>Dodanie wyjątku w zaporze – port 1434 TCP i UDP </li></ul>http://support.microsoft.com/kb/841251/pl
  13. 13. Połączenie z Instancją <ul><li>Jeżeli docelowa baz danych jest bez specyficznej nazwy łączymy się z nią wpisując: </li></ul><ul><ul><li>NAZWA-KOMPUTERA // nazwę w sieci lokalnej </li></ul></ul><ul><ul><li>192.168.11.12 // IP w sieci lokalnej </li></ul></ul><ul><ul><li>(local) // jeżeli łączymy się lokalnie </li></ul></ul><ul><li>Jeżeli docelowa instancja bazy posiada nazwę SQLEXPRESS to: </li></ul><ul><ul><li>NAZWA-KOMPUTERASQLEXPRESS </li></ul></ul><ul><ul><li>192.168.11.12SQLEXPRESS </li></ul></ul><ul><ul><li>(local)SQLEXPRESS </li></ul></ul>
  14. 14. Migracja
  15. 15. Kreator rozszerzenia
  16. 18. Wynik Migracji
  17. 20. Podsumowanie <ul><li>Migruje tylko Tabele wraz z ograniczeniami </li></ul><ul><li>Całkiem nieźle sobie radzi z relacjami </li></ul><ul><li>Tworzy linki po zakończeniu procesu </li></ul><ul><li>Baza jest gotowa do użycia tuż po migracji </li></ul>
  18. 21. Microsoft SQL Server Migration Assistant for Access
  19. 22. Prezentacja procesu migracji
  20. 24. Wynik Migracji
  21. 25. Podsumowanie <ul><li>Migracja Tabel i Kwerend </li></ul><ul><li>Część relacji się nie migruje </li></ul><ul><li>Nie linkują się widoki </li></ul><ul><li>Dziwny sposób migrowania obiektów </li></ul><ul><li>Konieczne poprawki ręczne, niewygodne przy większych projektach </li></ul><ul><li>Tworzone są linki do bazy docelowej </li></ul><ul><li>Baza po migracji jest gotowa do pracy </li></ul>
  22. 26. Migracja Ręczna
  23. 27. Podsumowanie <ul><li>Migracja dowolnego obiektu zwracającego dane (Tabela, kwerenda, tabela połączona) </li></ul><ul><li>Konieczność wykonania poprawek po przeniesieniu danych, np. Włączenie autonumerowania, relacje, ograniczenia itp. </li></ul><ul><li>Konieczność stworzenia linku po przeniesieniu danych </li></ul>
  24. 28. Kreator DTS
  25. 31. Podsumowanie <ul><li>Jako jedyny pozwala wybrać schemat do którego migrujemy dane </li></ul><ul><li>Nie migruje informacji o relacjach </li></ul><ul><li>Kwerendy są migrowane jako tabele </li></ul><ul><li>Konieczność odbudowania struktury bazy danych </li></ul>
  26. 32. Ręczne podlinkowanie obiektu
  27. 33. Migracja zapytań <ul><li>Prostsze zapytania można migrować kreatorem lub przenieść bezpośrednio do tworzonego obiektu </li></ul>CREATE VIEW dbo.[Add or Delete Reports] AS /* migrowane kreatorem */ SELECT TOP 9223372036854775807 WITH TIES Reports.ReportName FROM Reports ORDER BY Reports.ReportName Kwerenda: Add or Delete Reports SELECT Reports.ReportName FROM Reports ORDER BY Reports.ReportName;
  28. 34. Migracja SQL-a <ul><li>NZ(Value, ValueToReturnIfNull) </li></ul><ul><li>WHERE Column LIKE &quot;*string*&quot; </li></ul><ul><li>IIF(Condition, ReturnIfTrue, ReturnIfValue) </li></ul><ul><li>WHERE SomeDate = #1/1/2005# </li></ul><ul><li>date(), Time(), Format() </li></ul><ul><li>TRUE, FALSE </li></ul><ul><li>ISNULL(Value, ValueToReturn) </li></ul><ul><li>WHERE Column LIKE '%string%' </li></ul><ul><li>CASE WHEN Condition THEN ReturnIfTrue ELSE ReturnIfFalse END WHERE SomeDate = '1/1/2005‘ </li></ul><ul><li>Za pomocą funkcji użytkownika </li></ul><ul><li>1, 0 </li></ul>http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/ Quick-Access-JET-SQL-to-T-SQL-Cheatsheet.aspx MS SQL Access
  29. 35. Zapytania zawierające parametry DECLARE @D_START datetime DECLARE @D_STOP datetime SET @D_START = '1/1/1994' SET @D_STOP = '1/1/2999' SELECT Orders.ShippedDate, Orders.OrderID, [Order Subtotals].Subtotal, cast(year(Orders.ShippedDate)as nvarchar(4)) as Rok FROM Orders INNER JOIN [Order Subtotals] ON Orders.OrderID = [Order Subtotals].OrderID WHERE (Orders.ShippedDate IS NOT NULL) AND (Orders.ShippedDate BETWEEN @D_START AND @D_STOP ) PARAMETERS [Forms]![Sales by Year Dialog]![BeginningDate] DateTime, [Forms]![Sales by Year Dialog]![EndingDate] DateTime; SELECT Orders.ShippedDate, Orders.OrderID, [Order Subtotals].Subtotal, Format ([ShippedDate],’yyyy’) AS [Rok] FROM Orders INNER JOIN [Order Subtotals] ON Orders.OrderID=[Order Subtotals].OrderID WHERE (((Orders.ShippedDate) Is Not Null And (Orders.ShippedDate) Between Forms![Sales by Year Dialog]![BeginningDate] And Forms![Sales by Year Dialog]![EndingDate] )); MS SQL Access
  30. 36. Do czego przenosić obiekty <ul><li>Kwerenda </li></ul><ul><li>Kilka kwerend uruchamianych makrem </li></ul><ul><li>Kwerenda Parametryczna </li></ul><ul><li>Dynamiczna kwerenda generowana z VBA (Dialekt JET) </li></ul><ul><li>Widok </li></ul><ul><li>Procedura </li></ul><ul><li>Procedura </li></ul><ul><li>Dynamiczna kwerenda przekazująca (Dialekt T-SQL) </li></ul>MS SQL Access
  31. 37. Migracja użytkowników <ul><li>Brak możliwości bezpośredniego importu użytkowników i grup z pliku System.mdw </li></ul><ul><li>W razie potrzeby można importować te informacje za pomocą odpowiednio spreparowanego SQL-a: </li></ul><ul><ul><li>SELECT DISTINCT Accounts.Name </li></ul></ul><ul><ul><li>FROM MSysAccounts AS Accounts IN ‘ D : System.mdw ' </li></ul></ul><ul><ul><li>WHERE (((Accounts.Name)<> 'Creator' And (Accounts.Name)<> 'Engine' ) AND ((Accounts.FGroup)=0)); </li></ul></ul><ul><li>Użytkownicy Creator i Engine to konta systemowe </li></ul><ul><li>Nie ma możliwości importu haseł </li></ul>
  32. 38. Migracja kodu VBA <ul><li>Usunięcie dynamicznie generowanych kwerend z kodu na rzecz parametryzowanych obiektów </li></ul><ul><li>Przejście z DAO do ADO – najlepiej przed migracją do SQL-a </li></ul>
  33. 39. Migracja obiektów korzystających z migrowanego pliku <ul><li>Arkusze Excel-owe i aplikacje zewnętrzne </li></ul><ul><ul><li>Podmiana ConnectionString-a </li></ul></ul><ul><ul><li>Migracja zapytania SQL-a lub wybranie nowego obiektu </li></ul></ul>
  34. 40. Wykorzystanie procedur z MSSQL-a <ul><li>ADO z poziomu kodu VBA </li></ul><ul><li>Kwerendy przekazujące </li></ul>
  35. 41. Integracja SQL z Access <ul><li>Linked Servers - Kreator </li></ul>
  36. 42. Linked Servers z T-SQL Wymagane są odpowiednie uprawnienia do dodania Korzystać może każdy użytkownik SELECT * FROM OPENQUERY(AccessSource,’SELECT * FROM Employees ’) AS T SELECT * FROM AccessSource... Employees EXEC sp_addlinkedserver @server = 'AccessSource', @provider = ' Microsoft.Jet.OLEDB.4.0 ', @srvproduct = 'OLE DB Provider for Jet', @datasrc = ' D:Downloads1017508.mdb '
  37. 43. OENROWSET OPENDATASOURCE Wymagane są odpowiednie uprawnienia do skorzystania Wymagają włączenia: sp_configure 'show advanced options', 1 reconfigure Nie wymaga dodawania Linked Servers SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:Program FilesMicrosoft OfficeOFFICE11SAMPLESNorthwind.mdb'; 'admin';'',Customers) SELECT * FROM OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=&quot;C:Program FilesMicrosoft OfficeOFFICE11SAMPLESNorthwind.mdb&quot;; User ID=Admin;Password=' ) ... Customers
  38. 44. UPDATE i DELETE DELETE FROM OPENQUERY(AccessSource, 'select * from Employees') WHERE (EmployeeID = 2) UPDATE OPENQUERY(AccessSource, 'select * from Employees') SET Title = 'test' WHERE (EmployeeID = 2)
  39. 45. Wykorzystanie funkcjonalności MS SQL w migrowanej aplikacji <ul><li>Wykorzystanie mechanizmów bezpieczeństwa i integracji ze środowiskiem domenowym </li></ul><ul><ul><li>SQL wie kto jest użytkownikiem bez podania loginu i hasła </li></ul></ul><ul><li>Triggery – uwaga na akcje w formularzach </li></ul><ul><li>Możliwość przeniesienia logiki na serwer (procedury, funkcje i inne) </li></ul><ul><li>Zaawansowany SQL np. CTE </li></ul><ul><li>Stworzenie punktu wyjściowego do dalszego rozwoju środowiska np.. Migracja do ASP.NET lub VB.NET / C# </li></ul><ul><li>Server Agent i Job-y (tylko w wersji pełnej) </li></ul><ul><ul><li>Import danych </li></ul></ul><ul><ul><li>Backupy </li></ul></ul><ul><ul><li>Inne funkcje </li></ul></ul>
  40. 46. Zagrożenia związane z migracją <ul><li>Niepełna migracja struktury bazy danych </li></ul><ul><li>Trudności z przetworzeniem zapytań do postaci natywnej MSSQL </li></ul><ul><li>Problemy z dostępem do danych z podlinkowanych tabelach </li></ul><ul><ul><li>Dodanie kolumny typu Timestamp </li></ul></ul><ul><ul><li>Konieczność ponownego linkowania tabeli po zmianie w SQL-u </li></ul></ul><ul><li>Specyficzna konstrukcja aplikacji – bezpośrednie manipulacje na obiektach bazy danych </li></ul><ul><li>Błędy merytoryczne w przenoszeniu funkcjonalności </li></ul>
  41. 47. Pytania i Dyskusja

×