Noworoczne życzenia -
Pomyślności w 2021 roku ! Coby optymalizator zawsze wybierał optymalny plan dla Waszych SQLi, bazy zawsze miały dość miejsca na dane, a log transakcyjny nigdy się nie zapychał :-)
#database #rdbms #oracle #mysql #postgresql #sqlserver #sql #plsql #backend #dba4dev #marcinbadtke
Czym różni się backup fizyczny od logicznego ?
Fizyczny backup polega na skopiowaniu fizycznej struktury bazy danych. Czyli plików. Narzędzia wykonujące backup fizyczny kopiują plik po pliku. Wyjątkiem jest Oracle RMAN - Recovery MANager - kopiujący pliki bazy danych blok po bloku. O czym mowa w: .
Logiczny backup, natomiast, polega na skopiowaniu logicznej struktury bazy danych. Czyli schematów, tabel, danych. Narzędzie wykonujące backup logiczny kopiuje obiekty bazy danych, jeden po drugim, często przetwarzając je na komendy języka SQL. Tak działa np. Oracle expdp
, narzędzie PostgreSQL - pg_dump
, MySQL mysqldump
czy SQL Server bcp
.
Każdy backup gorący wymaga uspójnienia - recovery. W przypadku fizycznego backup'u instancja bazy danych wykorzystuje do tego log transakcyjny. O czy mowa w: Jaka jest różnica pomiędzy r... . Jak uspójnić gorący backup logiczny ? Nie da się. Trzeba od razu wykonać backup spójny. Wykorzystywane są do tego mechanizmy transakcyjności i MVCC.
Aby Oracle expdp wykonał spójny backup należy użyć parameteru FLASHBACK_SCN lub FLASHBACK_TIME. Przy czym FLASHBACK_TIME jest konwertowany na najbliższy SCN. Wartości tych parametrów mogą wskazywać na wcześniejszy punkt w czasie niż moment rozpoczęcia backup'u logicznego. Aby backup zakończył się sukcesem należy zapewnić odpowiednią ilość przestrzeni UNDO. Bez użycia parameterów FLASHBACK_SCN lub FLASHBACK_TIME expdp
wykona backup spójny, ale tylko dla poszczególnych tabel. Dane w różnych tabelach nie będą spójne.
Dla odmiany PostgreSQL pg_dump
zawsze wykonuje backup spójny. Wykorzystuje do tego pojedynczą transakcję i mechanizm MVCC.
Aby zapewnić spójność backup'u logicznego w MySQL należy użyć przełącznika --single-transaction
. Zadziała dla InnoDB. Aby wykonać spójny backup danych nietransakcyjnych - np. MyISAM - należy zablokować całą bazę danych na czas backup'u.
Do czego przydają się backup'y logiczne ?
Są przenośne pomiędzy platformami i różnymi wersjami bazy danych. Dzięki nim możemy przenieść dane z AIX do Linux lub Windows. Lub z Oracle 12c do 10g. Lub do chmury.
Dodatkowym atutem jest weryfikacja spójności logicznej bazy danych. Posiadanie backup'u logicznego jest, również kolejnym zabezpieczeniem na wypadek utraty środowiska razem ze wszystkimi backup'ami.
#database #oracle #sql #plsql #backend #mysql #postgresql #sqlserver #dba4dev #marcinbadtke #expdp #backup #dba4dev #marcinbadtke
Jaka jest różnica pomiędzy restore, a recovery?
Każdy pewnie wie, że backup to zapisanie kopii plików bazy danych w innej lokalizacji. Ale gdybyś chciała/chciał pogłębić swoją wiedzę to zapraszam na wideo: o tym jak to robi Oracle.
Co to jest restore też pewnie jest jasne - odtworzenie plików bazy danych z kopii w innej lokalizacji.
Najwięcej niejasności budzi proces recovery. Tłumaczenie nazwy wprost na polski to 'powrót do zdrowia'. Wg mnie najtrafniej, w kontekście baz danych, sens oddaje słowo 'uspójnianie'.
Baza danych jest spójna wtedy gdy wszystkie pliki z których baza się składa mają ostatnią zmianę wykonaną w tym samym czasie. Spójny backup można wykonać jedynie wtedy kiedy baza danych jest wyłączona. Nazywa się to zimnym backup'em - cold backup.
Co to jest ta 'spójność' (consistency) bazy danych ? W przypadku bazy danych Oracle jest to zgodność SCN (System Change Number) zapisanego w pliku kontrolnym (control file) z SCN zapisanym w nagłówkach plików bazodanowych. Gdy wartości te są nieidentyczne instancja Oracle uznaje bazę danych za niespójną i nie otworzy jej do użytku.
Backup gorący - hot backup - z założenia jest niespójny. Wykonanie backup'u trwa. W tym czasie baza jest otwarta i wykonywane są w niej zmiany. W związku z tym każdy plik skopiowany do innej lokalizacji ma inny czas ostatniej zmiany. W efekcie, po odtworzeniu, nie daje to spójnego obrazu danych w bazie danych i baza nie nadaje się do użycia. Aby backup był użyteczny - bazę danych dało się otworzyć i korzystać z niej - trzeba ją uspójnić. Niezbędne do tego są pliki logu transakcyjnego - o którym mowa w: - powstałe w czasie wykonywania backup'u bazy danych. Informacje o zmianach zawarte w logu transakcyjnym pozwalają na naniesienie zatwierdzonych transakcji i wycofanie niezatwierdzonych dzięki czemu pliki bazy danych zostaną uspójnione na ten sam punkt w czasie. Wtedy nadają się do użycia i baza danych może zostać otwarta.
Podobnie sprawa wygląda w momencie padu bazy danych - pliki bazy danych mają różne stemple w związku z tym instancja uznaje dane w bazie za niespójne. Podczas startu instancji bazy danych po awarii, następuje uspójnienie plików przy wykorzystaniu informacji z plików logu transakcyjnego.
Wydanie, instancji bazy danych Oracle, komendy 'shutdown abort
', w konsekwencjach, przypomina pad bazy. Instancja zostaje zamknięta bez uspójniania plików bazy danych.
Również naprawa pojedynczego pliku czy bloku bazodanowego wymaga jego odtworzenia z kopii zapasowej (restore). Aby następnie nadawał się do użycia przez bazę danych niezbędne jest przeprowadzenia na nim procesu uspójnienia (recovery). Czyli naniesienia na niego wszystkich zmian, które miały miejsce, od czasu wykonania kopii pliku czy bloku aż do chwili obecnej. Lub punktu w czasie innych plików bazy danych.
#database #oracle #mysql #postgresql #sqlserver #backup #restore #recovery #rdbms #dba4dev #marcinbadtke
Czym różni się proces od wątku - zilustrowane w 10 minut: https://youtu.be/bxi3tDmFZdE
Najważniejsze różnice:
Przy okazji: dlaczego na Windows koszt powstania procesu jest wyższy.
Keywords: #database #oracle #programming #sql #plsql #backend #coding #development #mysql #postgresql #sqlserver #linux #unix #windows #process #thread #dba4dev #marcinbadtke
Mnie uczyli, że najważniejsza różnica to, że wątki współdzielą zasoby między sobą, a procesy mają niezależny przydział - coś się zmieniło w tym temacie?
@MuadibAtrides: Nic się nie zmieniło :-) Wg mnie najważniejszość zależy od perspektywy.
Funkcja #Oracle na dziś:
ADD_MONTHS(date, integer) - zwraca datę typu DATE o wartości date do której dodano integer miesięcy. Integer określający ilość miesięcy może być liczbą ujemną.
select ADD_MONTHS(sysdate,1), ADD_MONTHS(sysdate,-1) from dual;
Do czego jej używasz ?
#database #programming #sql #plsql #backend #coding #development #mysql #postgresql #sqlserver #dba4dev #marcinbadtke
Merytoryczny wpis mógłby dotyczyć konkretnego problemu i jego rozwiązania np. klauzula IN
dla kilku tysięcy wartości. Można tu omówić czemu Oracle ma takie ograniczenie (1000 wartości w klauzuli in), jak je obejść i jak na wydajność wpłynie porównywanie krotek i list. Tabelka z czasami wykonania też byłaby mile widziana.
Dzięki @PerlMonk i @superdurszlak :-) Bardzo wartościowe, dla mnie, wypowiedzi. W internetach jest dużo przepisów jak coś zrobić - zainstalować, naprawić, skonfigurować. Mało, natomiast materiałów omawiających, a najlepiej ilustrujących jak coś działa. Jaki mechanizm stoi na funkcją, którą używamy. Co sądzicie o zapotrzebowaniu na takie materiały ? W moim przypadku był to np.: . Jeśli wola to oczywiście gorąco powitam rozbudowaną wiadomość prywatną :-)
No i aby szef się nigdy nie czepiał.......... najlepszego Marcinie.