You are on page 1of 47

Migracja i integracja

bazy danych
napisanej w
MS Access do MS SQL
2005 
Wstęp
► Omówienie środowiska MS Access
► Przygotowanie do migracji
► Migracja danych z bazy Access do Bazy MS
SQL
► Migracja zapytań SQL-a z Access-a do MS
SQL-a
► Integracja MS SQL-a z zewnętrznymi
źródłami danych
► Wykorzystanie funkcjonalności MS SQL w
codziennej pracy po migracji
► Zagrożenia związane z migracją
Środowisko MS Access
► Relacyjna baza danych zintegrowana z
środowiskiem programistycznym
► Ścisła integracja z VBA i DAO
► Wszechobecne kreatory
► Baza i aplikacja w postaci pojedynczego
pliku
► W wersji podstawowej baza wymaga
aplikacji Access z możliwością jej
skompilowania do samodzielnego pliku
► Wbudowane mechanizmy importu i eksportu
danych
► Możliwość protezowania SQL-a za pomocą
funkcji VBA
Dostępne elementy
► Zróżnicowany dostęp do danych
 Silnik JET i linki ODBC do zewnętrznych źródeł
danych - MDB
 „projekt programu Microsoft Access” - ADP
► Formularze
► Raporty
► Strony dostępu HTML
► Makra
► Moduły VBA
Silnik JET
► Brak Triggerów
► Baza danych jest tylko w postaci pliku
► Blokady
► Transakcje
► Model relacyjny z możliwością
kaskadowego poprawiania i kasowania
► Podstawowe bezpieczeństwo oparte o
zewnętrzny plik lub hasło w bazie
Ograniczenia JET-a
► Maksymalny rozmiar bazy danych to 2 GB
(w tej przestrzeni muszą się również
zmieścić obiekty systemowe, np. indeksy),
► Maksymalna liczba obiektów w bazie: 32
768,
► Maksymalna liczba jednoczesnych
użytkowników: 255 (w praktyce dużo
mniej),
► Maksymalna liczba pól w tabeli: 255,
► Maksymalny rozmiar tabeli: 2 GB (wraz z
obiektami systemowymi)
JET bez Access-a
► Możliwość tworzenia plików oraz
dostęp do danych za pomocą
ADOX/ADO z poziomu np. skryptu VBS
► Pliki MDB są obsługiwane przez inne
aplikacje bez konieczności
instalowania Access-a
Częste praktyki występujące w
środowisku Access
► ArchitekturaFrontend – Backend
► Kaskadowanie kwerend
► Tworzenie baz pośredniczących
► Dynamiczne tworzenie kwerend za pomocą
DAO
► Wykorzystanie dynamicznych kwerend
krzyżowych – PIVOT-y
► Odwołania do formularzy wprost z SQL-a
► Umieszczanie funkcji z VBA w kodzie SQL
► Wykonywanie kodu SQL z poziomu VBA
Środowisko docelowe
► SQL Server 2005/2008 Express
SQL Server 2005/2008 Express Edition
with Advanced Services
 Pojedyncza baza do 4 GB
 1 GB RAM
 1 CPU
► SQL Server 2005/2008
 Brak ograniczeń
Przygotowanie do migracji
► Zapoznanie z migrowaną aplikacją i jej
specyfiką
► Określenie celu migracji
 Ominięcie ograniczeń
 Przyspieszenie działania
 Całkowita migracja do nowego środowiska
► Określenie elementów które chcemy
migrować
► Oszacowanie czasu potrzebnego na
wykonanie zadania
► Zminimalizowanie ewentualnych szkód w
przypadku niepowodzenia
Warunki niezbędne do
powodzenia
► Kopia bezpieczeństwa migrowanych
danych
► Dostęp do bazy SQL Serwer oraz
Odpowiedni poziom uprawnień w
ramach SQL Serwer-a
► W przypadku gdy dane są
współdzielone dostęp do serwera dla
innych użytkowników
► Odpowiednią ilość miejsca na dysku
(plik danych i pliku log)
Włączenie obsługi TCP\IP dla
instancji SQL

► Konieczny restart instancji


► Dodanie wyjątku w zaporze
– port 1434 TCP i UDP
http://support.microsoft.com/kb/841251/pl
Połączenie z Instancją
► Jeżeli
docelowa baz danych jest bez
specyficznej nazwy łączymy się z nią
wpisując:
 NAZWA-KOMPUTERA // nazwę w sieci lokalnej
 192.168.11.12 // IP w sieci lokalnej
 (local) // jeżeli łączymy się lokalnie

► Jeżeli
docelowa instancja bazy posiada
nazwę SQLEXPRESS to:
 NAZWA-KOMPUTERA\SQLEXPRESS
 192.168.11.12\SQLEXPRESS
 (local)\SQLEXPRESS
Migracja
Kreator rozszerzenia
Wynik Migracji
Podsumowanie
► Migruje tylko Tabele wraz z
ograniczeniami
► Całkiem nieźle sobie radzi z relacjami
► Tworzy linki po zakończeniu procesu
► Baza jest gotowa do użycia tuż po
migracji
Microsoft SQL Server Migration
Assistant for Access
Prezentacja procesu
migracji
Wynik Migracji
Podsumowanie
► Migracja Tabel i Kwerend
► Część relacji się nie migruje
► Nie linkują się widoki
► Dziwny sposób migrowania obiektów
► Konieczne poprawki ręczne,
niewygodne przy większych projektach
► Tworzone są linki do bazy docelowej
► Baza po migracji jest gotowa do pracy
Migracja Ręczna
Podsumowanie
► Migracja dowolnego obiektu
zwracającego dane (Tabela, kwerenda,
tabela połączona)
► Konieczność wykonania poprawek po
przeniesieniu danych, np. Włączenie
autonumerowania, relacje,
ograniczenia itp.
► Konieczność stworzenia linku po
przeniesieniu danych
Kreator DTS
Podsumowanie
► Jako jedyny pozwala wybrać schemat
do którego migrujemy dane
► Nie migruje informacji o relacjach
► Kwerendy są migrowane jako tabele
► Konieczność odbudowania struktury
bazy danych
Ręczne podlinkowanie
obiektu
Migracja zapytań
► Prostsze zapytania można migrować kreatorem lub
przenieść bezpośrednio do tworzonego obiektu
Kwerenda: Add or Delete Reports

SELECT Reports.ReportName
FROM Reports
ORDER BY Reports.ReportName;

CREATE VIEW dbo.[Add or Delete Reports]


AS /* migrowane kreatorem */
SELECT TOP 9223372036854775807 WITH TIES
Reports.ReportName
FROM Reports
ORDER BY Reports.ReportName
Migracja SQL-a
Access MS SQL
► NZ(Value, ValueToReturnIfNull) ► ISNULL(Value, ValueToReturn)
► WHERE Column LIKE "*string*" ► WHERE Column LIKE '%string%'
► IIF(Condition, ReturnIfTrue, ► CASE WHEN Condition THEN
ReturnIfValue) ReturnIfTrue ELSE ReturnIfFalse
► WHERE SomeDate = END
#1/1/2005# WHERE SomeDate =
'1/1/2005‘
► date(), Time(), Format()
► Za pomocą funkcji
► TRUE, FALSE
użytkownika
► 1, 0

http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/
Quick-Access-JET-SQL-to-T-SQL-Cheatsheet.aspx
Zapytania zawierające
Access parametry MS SQL
PARAMETERS [Forms]![Sales by Year DECLARE @D_START datetime
Dialog]![BeginningDate] DateTime, DECLARE @D_STOP datetime
[Forms]![Sales by Year
Dialog]![EndingDate] DateTime; SET @D_START = '1/1/1994'
SELECT Orders.ShippedDate, SET @D_STOP = '1/1/2999'
Orders.OrderID, [Order
Subtotals].Subtotal, Format SELECT Orders.ShippedDate,
([ShippedDate],’yyyy’) AS [Rok] Orders.OrderID, [Order Subtotals].Subtotal,
cast(year(Orders.ShippedDate)as
FROM Orders INNER JOIN [Order
nvarchar(4)) as Rok
Subtotals] ON Orders.OrderID=[Order
FROM Orders INNER JOIN
Subtotals].OrderID
[Order Subtotals] ON
WHERE (((Orders.ShippedDate) Is Not Orders.OrderID = [Order Subtotals].OrderID
Null And (Orders.ShippedDate) WHERE (Orders.ShippedDate IS NOT NULL)
Between Forms![Sales by Year AND (Orders.ShippedDate BETWEEN
Dialog]![BeginningDate] And @D_START AND @D_STOP)
Forms![Sales by Year
Dialog]![EndingDate]));
Do czego przenosić obiekty
Access MS SQL
► Kwerenda ► Widok
► Kilka kwerend ► Procedura
uruchamianych
makrem
► Kwerenda ► Procedura
Parametryczna
► Dynamiczna ► Dynamiczna
kwerenda kwerenda
generowana z VBA przekazująca
(Dialekt JET) (Dialekt T-SQL)
Migracja użytkowników
► Brak możliwości bezpośredniego importu
użytkowników i grup z pliku System.mdw
► W razie potrzeby można importować te
informacje za pomocą odpowiednio
spreparowanego SQL-a:
SELECT DISTINCT Accounts.Name
FROM MSysAccounts AS Accounts IN ‘D:\System.mdw'
WHERE (((Accounts.Name)<>'Creator' And (Accounts.Name)<>'Engine')
AND ((Accounts.FGroup)=0));

► Użytkownicy Creator i Engine to konta


systemowe
► Nie ma możliwości importu haseł
Migracja kodu VBA
► Usunięcie dynamicznie generowanych
kwerend z kodu na rzecz
parametryzowanych obiektów
► Przejście z DAO do ADO – najlepiej
przed migracją do SQL-a
Migracja obiektów
korzystających z migrowanego
pliku
► ArkuszeExcel-owe i aplikacje
zewnętrzne
 Podmiana ConnectionString-a
 Migracja zapytania SQL-a lub wybranie
nowego obiektu
Wykorzystanie procedur z
MSSQL-a
► ADO z poziomu kodu VBA
► Kwerendy przekazujące
Integracja SQL z Access
► Linked Servers - Kreator
Linked Servers z T-SQL
EXEC sp_addlinkedserver
@server = 'AccessSource',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',
@datasrc = 'D:\Downloads\01017508.mdb'

SELECT * FROM AccessSource... Employees

SELECT * FROM OPENQUERY(AccessSource,’SELECT * FROM


Employees’) AS T

Wymagane są odpowiednie uprawnienia do dodania


Korzystać może każdy użytkownik
OPENDATASOUR
CE
OENROWSET
SELECT * SELECT *
FROM OPENDATASOURCE( FROM
OPENROWSET('Microsoft.Jet.OL
'Microsoft.Jet.OLEDB.4.0',
EDB.4.0', 'C:\Program
'Data Source="C:\Program Files\Microsoft
Files\Microsoft Office\OFFICE11\SAMPLES\Nort
Office\OFFICE11\SAMPLES\Nort hwind.mdb';
hwind.mdb";
'admin';'',Customers)
User ID=Admin;Password='
)... Customers
Wymagane są odpowiednie uprawnienia do skorzystania
Wymagają włączenia:
sp_configure 'show advanced options', 1
reconfigure
Nie wymaga dodawania Linked Servers
UPDATE i DELETE

UPDATE OPENQUERY(AccessSource,
'select * from Employees')
SET Title = 'test'
WHERE (EmployeeID = 2)

DELETE FROM OPENQUERY(AccessSource,


'select * from Employees')
WHERE (EmployeeID = 2)
Wykorzystanie funkcjonalności
MS SQL w migrowanej aplikacji
► Wykorzystanie mechanizmów bezpieczeństwa i
integracji ze środowiskiem domenowym
 SQL wie kto jest użytkownikiem bez podania loginu i hasła
► Triggery – uwaga na akcje w formularzach
► Możliwość przeniesienia logiki na serwer
(procedury, funkcje i inne)
► Zaawansowany SQL np. CTE
► Stworzenie punktu wyjściowego do dalszego
rozwoju środowiska np.. Migracja do ASP.NET lub
VB.NET / C#
► Server Agent i Job-y (tylko w wersji pełnej)
 Import danych
 Backupy
 Inne funkcje
Zagrożenia związane z
migracją
► Niepełna migracja struktury bazy danych
► Trudności z przetworzeniem zapytań do
postaci natywnej MSSQL
► Problemy z dostępem do danych z
podlinkowanych tabelach
 Dodanie kolumny typu Timestamp
 Konieczność ponownego linkowania tabeli po
zmianie w SQL-u
► Specyficznakonstrukcja aplikacji –
bezpośrednie manipulacje na obiektach
bazy danych
► Błędy merytoryczne w przenoszeniu
Pytania i Dyskusja

You might also like