Laboratorium Baz Danych SQL*Loader Export/Import Opracowała: Mgr inż. Aleksandra Werner
Laboratorium baz danych - SQL*Loader, Export, Import 3 1. SQL*Loader Przy pomocy narzędzia SQL*Loader możliwe jest przenoszenie danych z plików zewnętrznych do tabel bazy danych Oracle a. Uruchomienie następuje po podaniu w linii komend polecenia: sqlload control= <nazwa_pliku_sterującego> [<opcje>] Podczas pracy, SQL*Loader produkuje trzy rodzaje plików: śladowy (ang. log file), w którym zapisywane są informacje o przebiegu ładowania, ze złymi wierszami (ang. bad file), w którym są umieszczane wiersze nie załadowane ze względu na niepoprawność danych, z wierszami pominiętymi (ang. discard file), które nie mogły być wstawione do bazy, ponieważ nie zostały spełnione żadne kryteria wstawienia. 1.1.Tryby pracy SQL*Loader a Ścieżka bezpośrednia jest wykonywana tylko wtedy, gdy w linii komend parametr DIRECT jest ustawiony na TRUE. Praca z wykorzystaniem ścieżki bezpośredniej jest szybsza niż w przypadku zastosowania ścieżki konwencjonalnej ponieważ nie są używane żadne odwołania SQL Gdy jeden blok zostaje wypełniony, inne -puste- bloki są wypełniane, co również poprawia wydajność ładowania. W czasie pracy nie są wykonywane zapisy w plikach dziennikach. Ścieżka konwencjonalna jest ścieżką domyślną. Do załadowania danych do tabeli używana jest SQL -owa komenda INSERT oraz bufor budowanej w trakcie ładowania tablicy wiązania (ang. bind array). Używając ścieżki konwencjonalnej, SQL*Loader współzawodniczy z innymi procesami Oracle a o zasoby bazy co powoduje spowolnienie pracy. 1.2. Plik sterujący - polecenia Żeby rozpocząć pracę, SQL*Loader wymaga dwóch typów plików wejściowych: pliku z danymi do załadowania i pliku sterującego, opisującego dane. W skład pliku sterującego wchodzą: komentarze (poprzedzone znakami --), opcje oraz polecenia: USERID - wyspecyfikowanie nazwy użytkownika/hasło (w przypadku pominięcia parametru w linii komend) INFILE - wskazanie, w jakim pliku są dane do ładowania (jeżeli są w pliku sterującym po frazie BEGIN DATA, wówczas po słowie INFILE umieszczany jest znak *) INTO TABLE - wskazanie, które tabele zostaną załadowane danymi REPLACE - usuwa istniejące wiersze tabeli i ładuje na ich miejsce nowe
4 Laboratorium baz danych - SQL*Loader, Export, Import LOAD DATA - APPEND - rozbudowuje tabelę, dodając do niej nowe wiersze INSERT - ładuje dane tylko do pustej tabeli (jeżeli tabela nie będzie pusta, to wystąpi błąd) informacja o niezależności między danymi a kolumnami w tabeli (tabelach) CONCATENATE - ilość fizycznych rekordów składanych w jeden rekord logiczny, który zostanie wstawiony do bazy ROWS - określenie momentu wystąpienia punktu zachowania CONTINUE LOAD - liczba rekordów do przeskoczenia FIELDS TERMINATED BY - znak oddzielający dane mające wejść w skład poszczególnych kolumn ENCLOSED BY - znak (-i), będący ogranicznikiem pól tekstowych BAD FILE - wyspecyfikowanie nazwy zbioru, w którym znajdą się złe dane TRAILING NULLCOLS - ciąg spacji nie jest ładowany do tabeli jako odrębne kolumny z wartościami NULL BEGIN DATA - do sterującym 1.3. Opcje linii komend słowo kluczowe, będące nagłówkiem dla danych przeznaczonych ładowania, umieszczonych bezpośrednio w pliku W linii komend mogą się pojawić następujące opcje: USERID 1 - wyspecyfikowanie nazwy użytkownika/hasło CONTROL - wyspecyfikowanie nazwy pliku sterującego LOG - wyspecyfikowanie nazwy pliku śladowego BAD - wyspecyfikowanie nazwy pliku ze złymi wierszami DISCARD - wyspecyfikowanie nazwy pliku z wierszami pominiętymi DATA - wyspecyfikowanie nazwy pliku z danymi do załadowania DISCARDMAX - maksymalna ilość odrzuconych wierszy, nie powodująca przerwania ładowania danych SKIP 1 - ilość wierszy do pominięcia LOAD - ilość rekordów (logicznych), które zostaną załadowane zewnętrznymi danymi ERRORSr - dopuszczalna ilość błędów nie przerywających procesu ładowania ROWS 1 - określenie momentu wystąpienia punktu zachowania BINDSIZE - rozmiar tablicy wiązania SILENT - zablokowanie kierowania komunikatów na ekran podczas ładowania DIRECT - bezpośrednia ścieżka ładowania PARFILE - wyspecyfikowanie nazwy pliku z parametrami 1 polecenie może pojawić się albo w linii komend albo w pliku sterującym 4
Laboratorium baz danych - SQL*Loader, Export, Import 5 1.4. Skrót informacji o Loaderze Loader: ładuje dane: 1. do wielu tabel w tym samym przebiegu 2. z wielu plików źródłowych różnych typów Fizyczne rekordy mogą być: składane w 1 logiczny rekord, który jest wstawiany do bazy (CONTINUEIF, CONCATENATE) np. jeżeli mam 2 wiersze, a na końcu ostatniego, to piszę: CONTINUEIF LAST=, z dwóch fizycznych robi 1 logiczny lub: CONCATENATE 2 rozbijane na wiele rekordów fizycznych np. 1 fizyczny rekord podzielić na 2 logiczne (pierwsze 4 wart. do tabeli prac): INTO TABLE prac WHEN nr_proj!= (nrp POSITION(1:4),...) INTO TABLE proj WHEN nr_proj!= (nrp POSITION(1:4),...) filtrowane ładowane selektywnie (WHEN) Loader może generować w kolumnach: unikalne sekwencje liczbowe (klauzula SEQUENCE funkcja SEQUENCE(MAX,.. ) generuje unikalne wartości, znajdując bieżącą wartość maksymalną w kolumnie i inkrementując ją dla każdego wstawionego wiersza) aktualną datę (SYSDATE) wartości stałe (CONSTANT) numery rekordów (RECNUM) Pliki SQL*Loadera: wymagane 1. sterujący (control file) opisuje, jak interpretować plik WE z danymi 2. z danymi (data file) domyślne rozszerzenie.dat 3. śladowy (log file) musi być dostępny, aby ładowanie mogło się odbyć; są tu informacje o przebiegu ładowania 4. wierszy odrzuconych (bad file) tu wiersze są zapisane w formacie łądowania; mogą zostać poprawione i użyte jako plik WE Tu trafiają dane z: niewłaściwym formatem wejściowym (np. ALA - brak ) nieunikalną wartością klucza pola wymagające wartości pustej powodujące błąd Oracle a 5. wierszy pominiętych (discard file) gdy dane nie spełniają kryteriów określonych klauzulą WHEN; tu są szczegóły o wszystkich pominiętych wierszach 5. Generowane na żądanie
6 Laboratorium baz danych - SQL*Loader, Export, Import Ścieżka konwencjonalna Ścieżka bezpośrednia Domyślna tworzy bloki danych, które już są w formacie Oracle owych bloków danych używa SQL-owej komendy INSERT i bufora budowanej tablicy wiązania (bind array) do załadowania danych W macierzy wiązania są umieszczane wiersze (np. 100) czytane za jednym razem nie używa SQL-owej komendy INSERT do wstawiania bloków do bazy może spowalniać ładowanie jest szybsza od konwencjonalnej konkuruje z innymi zasobami Oracle a o zasoby bazy Generowane bloki są bezpośrednio zapisywane do bazy danych generowane są dodatkowe nagłówki jako komendy SQL-owe, następnie wysyłane do Oracle a i przetwarzane czeka na wypełnienie bufora danymi lub na koniec danych używa procedur zarządzania przestrzenią do uzyskania następnego obszaru * wymusza zastosowanie niektórych więzów integralności na wierszach tabeli (UNIQUE< PRIMARY, NULL) klauzula REENABLE w INTO TABLE używane są tylko puste bloki nie są wykonywane zapisy w plikach dziennika Kiedy używać? Kiedy ładuje się indeksowaną tabelę, która musi pozostać dostępna * Wskaźnik HIGH_WATER_MARK jest maksymalną ilością przestrzeni, jaką baza użyła dla tabeli Kiedy ładuje się nieindeksowaną tabelę, która musi pozostać dostępna dla wstawień/uaktualnień Kiedy ładowanie przez SQL*Net stosunkowo małych ilości wierszy do dużych indeksowanych tabel Typy danych: INTEGER EXTERNAL DECIMAL EXTERNAL 6
Laboratorium baz danych - SQL*Loader, Export, Import 7 DECIMAL(5,2) CHAR Identyfikują typ danych poszczególnych pól w zbiorze, a nie odpowiadających im kolumn w tabeli wyspecyfikowanej po INTO TABLE Komenda: SQLLDR USERID=... CONTROL=...CTL SKIP=135 ROWS=1000 (ilość wierszy wstawianych) 2. Export/ Import Narzędzia: Export i Import są wykorzystywane do wykonywania operacji eksportu/importu danych np. podczas tworzenia kopii zapasowych. Zbiory eksportowane są zapamiętywane (zachowywane) w formacie binarnym Oracle a (tylko!) i mogą zostać przeczytane jedynie przy pomocy narzędzia Import. Do dyspozycji administartora są trzy tryby eksportu: TABLE - dane są eksportowane do niesklastrowanej tabeli USER - eksportowane są wszystkie obiekty schematu użytkownika FULL DATABASE - eksportowana jest cała baza danych (trzeba mieć przywilej EXP_FULL_DATABASE) typ przyrostowy typ kumulacyjny typ pełny Sposób wywołania programu eksportującego tabele może przyjąć jedną z podanych niżej form: exp help=y pojawia się ekran pomocy z opisanymi komendami exp userid/passwd praca w trybie interakcyjnym exp userid/passwd parfile= <zb_z_parametrami> W pliku z parametrami mogą się m.i. znaleźć następujące polecenia: USERID - wyspecyfikowanie nazwy użytkownika inicjującego eksport FULL - czy praca w trybie FULL DATABASE FILE - wyspecyfikowanie nazwy pliku, do którego są eksportowane dane GRANTS - eksport przywilejów INDEXES - eksport indeksów CONSTRAINTS - eksport więzów integralności TABLES - lista tabel do wyeksportowania
8 Laboratorium baz danych - SQL*Loader, Export, Import BUFFER - maksymalna liczba rzędów w tablicy ROWS - eksport rzędów tabeli LOG - wyspecyfikowanie nazwy zbioru, do którego odsyłane są komunikaty FEEDBACK - po wyeksportowaniu ilu rzędów ma pojawić się na ekranie znak. Program importujący wyeksportowane wcześniej dane, jest wywoływany w sposób analogiczny do opisanych powyżej: imp help=y pojawia się ekran pomocy z opisanymi komendami imp userid/passwd praca w trybie interakcyjnym imp userid/passwd parfile= <zb_z_parametrami> 2.1. Przyrostowy typ eksportu Przy wykorzystaniu eksportu kumulacyjnego, wyeksportowane zostaną tylko te tabele (i związane z nimi indeksy), które uległy modyfikacji. Sposób wywołania: exp userid/passwd inctype incremental Baza danych Zbiór eksportowy Tablica 5 Tablica 4 Indeks 5 Tablica 2 Indeks 4 obiekty zmodyfikowane 8
Laboratorium baz danych - SQL*Loader, Export, Import 9 2.2. Kumulacyjny typ eksportu Kumulacyjny typ eksportu jest kombinacją eksportów przyrostowych z kolejnych chwil czasu (t 1 t 2 t 3.. t n ). Sposób wywołania: exp userid/passwd inctype cumulative Baza danych Zbiór eksportowy Tablica 5 Tablica 4 Indeks 5 Tablica 2 Indeks 4 obiekty zmodyfikowane w chwili t 1 Baza danych Zbiór eksportowy Tablica 5 Tablica 4 Indeks 5 Tablica 2 Indeks 4 Tablica 4 obiekty zmodyfikowane w chwili t 2 Indeks 4
10 Laboratorium baz danych - SQL*Loader, Export, Import 2.3. Pełny typ eksportu W pełnym trybie eksportu eksportowane są wszystkie obiekty bez względu na to czy uległy modyfikacji czy też nie. Sposób wywołania: exp userid/passwd inctype complete 10