System Zarządzania Bazami Danych Oracle Import, eksport, ładowanie danych
System Zarządzania Bazami Danych Oracle Loader możliwe jest przenoszenie danych z plików zewnętrznych do tabel bazy danych Oracle a sqlldr control = <nazwa_pliku_sterującego> [<opcje>] Export, Import są wykorzystywane do wykonywania operacji eksportu/importu danych np. podczas tworzenia kopii zapasowych. Zbiory eksportowane są zapamiętywane (zachowywane) w formacie binarnym Oracle (tylko!) i mogą zostać przeczytane jedynie przy pomocy narzędzia Import exp [userid/passwd] [parfile= <zb_z_parametrami>]
Loader ładuje dane do wielu tabel w tym samym przebiegu 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 rozbijane na wiele rekordów fizycznych filtrowane CONTINUEIF, CONCATENATE INTO TABLE ładowane selektywnie WHEN
Loader może generować w kolumnach: unikalne sekwencje liczbowe (klauzula SEQUENCE 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 Loader a wymagane sterujący (control file) z danymi (data file) opisuje, jak interpretować plik WE z danymi, domyślne rozszerzenie.dat, śladowy (log file) generowane na żądanie musi być dostępny, aby ładowanie mogło się odbyć; są tu informacje o przebiegu ładowania, wierszy odrzuconych (bad file) wiersze są tu zapisane w formacie ładowania, mogą zostać poprawione i użyte jako plik wejściowy, wierszy pominiętych (discard file) gdy dane nie spełniają kryteriów określonych klauzulą WHEN.
Pliki SQL Loader a sterujący (control file), z danymi (data file), śladowy (log file), wierszy odrzuconych (bad file), wierszy pominiętych (discard file.
Plik wierszy odrzuconych.bad Do tego pliku trafiają dane z: niewłaściwym formatem wejściowym (np. KOWALSKI ), nieunikalną wartością klucza, pola wymagające wartości pustej, powodujące błąd Oracle.
6. Statystyki podsumowujące. SQL*Loader Informacje zawarte w pliku.log 1. Nagłówek (data specyfikująca dzień, miesiąc, rok ładowania, nr wersji Loader a). 2. Informacje ogólne (nazwy zbiorów wejściowych oraz wyjściowych, wyszczególnienie argumentów, które wystąpiły w linii komend, specyfikacja symbolu kontynuacji). 3. Informacje o tabeli/tabelach (nazwa tabeli, warunki ładowania /klauzula WHEN/, opcja ładowania /INSERT APPEND REPLACE/, informacje o kolumnach /pozycja, długość, typ, ograniczniki kolumn,../) 4. Informacje o zbiorach danych (ta część występuje tylko dla zbioru/ów z błędnymi danymi - numer błędu (Loader a i Oracle a), rekordy odrzucone) 5. Informacje o przebiegu ładowania (dla każdej z tabel - liczba załadowanych wierszy, liczba wierszy odrzuconych z powodu błędów, liczba wierszy, których pola były NULL, )
Przebieg ładowania ścieżka konwencjonalna Kiedy ładuje się indeksowaną tabelę, która musi pozostać dostępna Kiedy ładuje się nieindeksowaną tabelę, która musi pozostać dostępna dla wstawień lub uaktualnień Kiedy ładuje się przez SQL*Net stosunkowo małe ilości wierszy do dużych indeksowanych tabel? ścieżka bezpośrednia
Ścieżka konwencjonalna domyślna 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 czytane za jednym razem może spowalniać ładowanie konkuruje z innymi zasobami Oracle a o zasoby bazy 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żywane są tylko puste bloki Ścieżka bezpośrednia tworzy bloki danych, które już są w formacie bloków danych Oracle nie używa SQL-owej komendy INSERT do wstawiania bloków do bazy jest szybsza od konwencjonalnej Generowane bloki są bezpośrednio zapisywane do bazy danych używa procedur zarządzania przestrzenią do uzyskania następnego obszaru (wskaźnik HWM) wymusza zastosowanie niektórych więzów integralności na wierszach tabeli (UNIQUE, PRIMARY, NULL) nie są wykonywane zapisy w plikach dziennika
HWM Wskaźnik HIGH_WATER_MARK jest maksymalną ilością przestrzeni, jaką baza użyła dla tabeli.
Zapis bloków do bazy Metoda konwencjonalna Procesy użytkowników Polecenia SQL Metoda bezpośrednia Server Oracle Przetwarzanie poleceń SQL Zarządzanie przestrzenią Zarządzanie buforami BUFORY (kolejkami, rozwiązywanie sporów) Czytanie bloków Zapis bloków
Budowa pliku sterującego LOAD DATA INFILE nazwa_zbioru_z_danymi * DISCARDFILE nazwa_zbioru_dsc APPEND REPLACE INSERT CONTINUEIF THIS warunek CONCATENATE n INTO TABLE nazwa_tabeli WHEN warunek_nałożony_na_pole (pozycja nazwa_kolumny) operator symbol FIELDS TERMINATED BY symbol_oddzielający_pola OPTIONALLY ENCLOSED BY symbol_ograniczający TRAILING NULLCOLS (nazwa_kolumny_której odpowiada_pierwsze_pole specyfikacja_kolumny, nazwa_kolumny_której odpowiada_drugie_pole specyfikacja_kolumny, )
Budowa pliku sterującego LOAD DATA INFILE nazwa_zbioru_z_danymi * DISCARDFILE nazwa_zbioru_dsc POSITION (numer : numer) specyfikacja typu pola APPEND REPLACE INSERT CONTINUEIF THIS warunek CONCATENATE NULLIFn warunek_nałożony_na_pole INTO TABLE nazwa_tabeli TERMINATED BY symbol_kończący_pole WHEN warunek_nałożony_na_pole DATE(20) format_daty FIELDS TERMINATED BY symbol_oddzielający_pola OPTIONALLY ENCLOSED BY symbol_ograniczający wartość_kolumny_automatycznie_generowana TRAILING NULLCOLS (nazwa_kolumny_której odpowiada_pierwsze_pole specyfikacja_kolumny, nazwa_kolumny_której odpowiada_drugie_pole specyfikacja_kolumny, )
Polecenia pliku sterującego 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 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) LOAD DATA - informacja o niezależności między danymi a kolumnami w tabeli(-ach) CONCATENATE - liczba 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 wart. NULL BEGIN DATA -słowo kluczowe, będące nagłówkiem dla danych przeznaczonych do ładowania, umieszczonych bezpośrednio w pliku sterującym
Opcje linii komend USERID CONTROL LOG BAD DISCARD DATA DISCARDMAX SKIP LOAD ERRORSr ROWS BINDSIZE SILENT DIRECT PARFILE -wyspecyfikowanie nazwy użytkownika/hasło - wyspecyfikowanie nazwy pliku sterującego - wyspecyfikowanie nazwy pliku śladowego - wyspecyfikowanie nazwy pliku ze złymi wierszami - wyspecyfikowanie nazwy pliku z wierszami pominiętymi - wyspecyfikowanie nazwy pliku z danymi do załadowania -maksymalna ilość odrzuconych wierszy, nie powodująca przerwania ładowania danych - ilość wierszy do pominięcia - ilość rekordów (logicznych), które zostaną zewnętrznymi danymi - dopuszczalna ilość błędów nie przerywających procesu ładowania - określenie momentu wystąpienia punktu zachowania - rozmiar tablicy wiązania - zablokowanie kierowania komunikatów na ekran podczas ładowania - bezpośrednia ścieżka ładowania - wyspecyfikowanie nazwy pliku z parametrami
Formaty danych wejściowch 1. fixed record format : każdy rekord ma tę samą długość w bajtach 2. variable record format : długość każdego rekordu jest zapisana w pierwszym polu rekordu 3. stream record format : długość każdego rekordu jest dowolna
Przykład wydzial nr kod miasto number(2) varchar2(5) varchar2(10) np01.txt 12,RAU2,"WARSZAWA" 10,"RMT1",KRAKOW 11,"SJO",GLIWICE 13,RME2,"POZNAN" 21,"RAU1",GLIWICE. 22,"RMCH1",RYBNIK 42,"TT",OPOLE 21,"RG1",GLIWICE 22,"RAU3",WROCLAW 30,"SJO",LODZ np01.ctl LOAD DATA INFILE np01.txt BADFILE np01.bad DISCARDFILE np01.dsc INSERT INTO TABLE wydzial FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' (nr, kod, miasto)
System Zarządzania Bazami Danych Oracle Export
Oracle - Export Po co eksport? do archiwizacji logicznej bazy danych, żeby precyzyjnie wybrać dane, które mają trafić do kopii archiwalnej, żeby odzyskać dane o różnym poziomie ziarnistości np. pojedyncze tabele wybranego użytkownika, wszystkie obiekty wybranego użytkownika,, plik eksportu może być wykorzystany do przenoszenia danych między różnymi bazami danych.
Oracle - Export 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
Oracle - Export Tryby eksportu Eksport przyrostowy umożliwia sporządzenie pełnych kopii tych tabel, których zawartość bądź definicja uległa zmianie od czasu wykonania ostatniego eksportu przyrostowego, kumulacyjnego lub pełnego. Zmiana definicji wyzwalacza związanego z daną relacją również powoduje wyeksportowanie danej relacji. Eksport kumulacyjny sporządza pełne kopie tych tabel, których zawartość bądź definicja uległa zmianie od czasu wykonania ostatniego eksportu kumulacyjnego lub pełnego. Oznacza to, że kopie danych sporządzone za pomocą wcześniejszych eksportów inkrementalnych są już niepotrzebne ponieważ znajdują się w pliku ostatniego eksportu kumulacyjnego. Eksport pełny jest równoważny eksportowi całej bazy danych. Dodatkowo, wykonanie tego eksportu powoduje usunięcie informacji systemowych związanych z każdą relacją bazy danych, a dotyczących kolejnych eksportów inkrementalnych i kumulacyjnych.
Oracle - Export Uwagi 1. W czasie eksportowania danych baza danych musi być otwarta (online), oznacza to, że użytkownicy mogą modyfikować jej zawartość. 2. Przed wyeksportowaniem każdej z tabel system sporządza jej kopię z danej chwili. Zmiany wprowadzane do tabeli w czasie jej eksportowania nie znajdą się więc w pliku eksportu. 3. Jeżeli jednak nie jest pożądane aby użytkownicy mieli dostęp do bazy danych w czasie jej eksportowania, to należy bazę otworzyć w trybie RESTRICT.
Oracle - Export Specyfikacja parametrów programu exp 1. W trybie interaktywnym, w którym system pyta o wartości parametrów. 2. W linii komend polecenia exp. 3. W pliku parametrów określonym słowem kluczowym PARFILE. exp FILE=d:\export\uzytk_u1u2.dat OWNER=(u1, u2) LOG=d:\export\exp.log exp FILE=d:\export\u1u2_1.dmp TABLES=(u1.pracownicy, u2.studenci) LOG=d:\export\log1
Oracle - Export Polecenia pliku z parametrami 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 BUFFER - maksymalna liczba wierszy w tabeli ROWS - eksport wierszy 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.
Export pełny tabela 1 Baza danych tabela 2 tabela 3 zbiór eksportowy tabela 3 tabela 4 tabela 2 tabela 4 Indeks 1 Indeks 2 tabela 1 Indeks 1 Indeks 2 exp sys/manager inctype complete
Export przyrostowy modyfikacja Baza danych zbiór eksportowy tabela 1 tabela 2 tabela 3 tabela 3 tabela 4 Indeks 1 Indeks 2 Indeks 2 tabela 1 exp sys/manager inctype incremental
Export kumulacyjny kombinacja eksportów przyrostowych z kolejnych chwil czasu (t 1 t 2 t 3.. t n ) modyfikacja w chwili t 1 Baza danych zbiór eksportowy tabela 1 tabela 2 tabela 3 tabela 3 tabela 1 tabela 4 Indeks 1 Indeks 2 Indeks 2 tabela 4 modyfikacja w chwili t 2 Indeks 1 exp sys/manager inctype cumulative
Rys. 4. Zależności między eksportem inkrementalnym, kumulacyjnym i pełnym Export I eksport przyrostowy C eksport kumulacyjny eksport pełny d dni
to już koniec Wesołych Świąt!