ďťż
 
db2 -klucze obce optymalizacja zapytan i inne ďťż
 
db2 -klucze obce optymalizacja zapytan i inne
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

db2 -klucze obce optymalizacja zapytan i inne



Janusz M - 04-07-2007 00:01
db2 -klucze obce optymalizacja zapytan i inne
  Witam,

Jestem w trakcie przenoszenia aplikacji z bazy Firebird do DB2 express -C
(9.1.2)
i w związku z tym wyszlo pare zapytan.

1. jak zauważyłem DB2 nie trakuje kluczy obcych w tabelach jako indeksow
i do wiekszosci zapytan ich nie uzywa. Musialem podefiniowac dodatkowe
indeksy w tabelach
takie same jak klucze obce. W dokumentacji jest ze jak dam w definicji
klucza obcego
ENABLE QUERY OPIMIZATION to bedzie on uzywany do optymalizacji zapytan, ale
to nie dziala (odswierzone wszystkie statystyki w tabeli) . Moze potrzebne
jest ustawienie jakiegos parametru w bazie danych ?.

2. Zrobilem sobie backup online bazy danych z opcja INCLUDE LOGS, potem
odtworzylem ja a potem zawarte w niej logi do innego katalogu. Niestety
przy probie odtworzenia logow
prosi o dalsze logi, nie wystarczaja te ktore byly dolaczone do backupu. Czy
ta opcja
wogole działa ?.
Backup online bez logow i odtwarzenie pozniej z zarchiwizowanych logow
dziala ok.

3. Po poprawie kilku finkcji zdefiniowanych przeze mnie w bazie, przestaly
dzialac procedury ktore je uzywaja.
Po grzebaniu w necie i bazie zobaczylem ze pakiety wygenerowane z tych
procedur przeszly w stan
inoperate, trzeba bylo zrobic rebind tych pakietow. Czy jest jakas opcja w
ustawieniach albo jakas wbudowana procedura
zeby to robic automatycznie. ( swoja droga dziwne ze tego nie robi od razu
db2, po zmianach w procedurach).

4. Czy wersja 9.1 DB2 jest na tyle stabilna ze mozna ja uzywac w serwerach
produkcyjnych.
U mnie czasem sa jakies dziwne rzeczy. Np po dodaniu indeksow , zrobienia
statystyk i rekompilacji procedur
dalej nie uzywaja one nowych indeksow, pomaga na przyklad, usuniecie
indeksu, zrobienie go od nowa,
uzycie w programie (C# ) nazwy procedury bez poprzedzenia jej nazwa
schematu powoduje zamkniecie instancji db2,
dwa razy zdarzylo mi sie przy zmianie definicji view ( drop i pozniej
create) , ze instancja sie zawiesila, trzeba bylo resetowac.
Dodam ze pracuje na windows xp profesionnal i windows 2003 serwer.

5. Czy jest jakies narzedzie ( moze byc komercyjne) do administracji i
programowania DB2. Centrum sterowania IBM i Developer Workbench
są delikatnie mowiac takie sobie, a Toad for DB2 to juz porazka.

pozdrawiam,

Janusz





Artur - 04-07-2007 00:01

  > 3. Po poprawie kilku finkcji zdefiniowanych przeze mnie w bazie, przestaly
> dzialac procedury ktore je uzywaja.
> Po grzebaniu w necie i bazie zobaczylem ze pakiety wygenerowane z tych
> procedur przeszly w stan
> inoperate, trzeba bylo zrobic rebind tych pakietow. Czy jest jakas opcja w
> ustawieniach albo jakas wbudowana procedura
> zeby to robic automatycznie. ( swoja droga dziwne ze tego nie robi od razu
> db2, po zmianach w procedurach).

Po usunięciu funkcji pakiety procedur trzeba przekompilować świadomie.
Można przygotować skrypt, który to zautomatyzuje, ale na razie nie ma
możliwości domyślnej rekompilacji pakietów. Wyjaśnienie na temat
pakietów w DB2 poniżej.

-- Artur Wroński

Skompilowany kod oraz opcjonalnie kod źródłowy procedury przechowywany
jest w systemowym słowniku bazy danych. W bazie także tworzony jest
pakiet, w którym osobno przechowywane są statyczne polecenia SQL oraz
plany wykonania tych instrukcji (skompilowane instrukcje SQL).
Statyczny SQL, to taki, którego postać jest znana w trakcie tworzenia
aplikacji. Pakiet zawiera także wiele innych ustawień, np. domyślny
poziom optymalizacji, poziom izolacji, domyślny format daty, czy
ustawienie pozwalające na generowanie planów wykonania zapytań.

W momencie wykonywania procedury, która korzysta z pakietu zamiast
kompilować instrukcje SQL w locie, baza danych sięga po gotowy plan
dostępu z pakietu, który jest skojarzony z programem procedurą.
Pakiety tworzone są dla procedur składowanych w SQL, ale także
programów napisanych w ESQL/C (zagnieżdżony SQL w języku C) oraz dla
programów Java napisanych w SQLJ.

Jeśli zostanie zmieniona struktura bazy, z których korzystają
procedury, wtedy instrukcje SQL zawarte w pakiecie procedury wymagają
powtórnego przekompilowania, czyli odpowiedni pakiet powinien zostać
poddany operacji powtórnego wiązania (REBIND).

Jeśli pakiet wymaga powtórnej kompilacji oznaczany jest jako INVALID
albo INOPERATIVE. Odpowiednie zapytanie na widoku słownika systemowego
pozwoli wyświetlić pakiety, które nie są ważne:

SELECT PKGSCHEMA,PKGNAME,VALID
FROM SYSCAT.PACKAGES WHERE VALID <> 'Y'

Pakiet procedury może przyjąć stan INVALID na przykład w sytuacji, gdy
w ciele procedury jest wywołanie innej procedury, która została
usunięta. Powtórne utworzenie zagnieżdżonej procedury spowoduje
automatyczną rekompilację pakietu procedury nadrzędnej (w momencie
uruchomienia procedury nadrzędnej).

Wprowadzenie pakietu w stan INOPERATIVE oznacza, że zmiany zewnętrzne
były na tyle gruntowne, że powtórna rekompilacja może wpłynąćna
zmianę działania danej procedury. Rekompilacja pakietu procedury może
być przeprowadzona w dwóch odmianach: RESOLVE ANY oraz RESOLVE
CONSEVATIVE. RESOLVE CONSEVATIVE dokonuje powtórnego wiązania pakietu
z uwzględnieniem zachowanego wcześniej kontekstu pakietu. Przykładowo,
jeśli w ciele procedury jest zapytanie SELECT * FROM tabela, a tabela
zostanie rozszerzona o dodatkową kolumnę, wtedy tryb CONSEVATIVE
zachowa poprzednią listę kolumn, a tryb ANY uwzględni nową definicję
tabeli.

Usunięcie funkcji zdefiniowanej przez użytkownika powoduje, że pakiety
procedur są automatycznie wprowadzane w tryb INOPERATIVE i wymagają
jawnego powtórnego wiązania pakietu w trybie ANY. Wynika to ze
specyfiki funkcji (np. możliwość przeciążeń danej funkcji, ścieżka
PATH określająca kolejność wyszukiwania funkcji w różnych schematach),
które stają się częścią instrukcji SQL.

Pakiet danej procedury można powtórnie przekompilować poleceniem
REBIND podając nazwę pakietu, np:

db2 rebind DB2ADMIN.P1095817 resolve any

Pakiety procedury można także przekompilować następującym wywołaniem
podając nazwę procedury:

db2 call REBIND_ROUTINE_PACKAGE('P', 'DB2ADMIN.PR2', 'ANY')




Artur - 04-07-2007 00:01

 
> 2. Zrobilem sobie backup online bazy danych z opcja INCLUDE LOGS, potem
> odtworzylem ja a potem zawarte w niej logi do innego katalogu. Niestety
> przy probie odtworzenia logow
> prosi o dalsze logi, nie wystarczaja te ktore byly dolaczone do backupu. Czy
> ta opcja
> wogole działa ?.
> Backup online bez logow i odtwarzenie pozniej z zarchiwizowanych logow
> dziala ok.

> 2. Zrobilem sobie backup online bazy danych z opcja INCLUDE LOGS, potem
> odtworzylem ja a potem zawarte w niej logi do innego katalogu. Niestety
> przy probie odtworzenia logow
> prosi o dalsze logi, nie wystarczaja te ktore byly dolaczone do backupu. Czy
> ta opcja
> wogole działa ?.
> Backup online bez logow i odtwarzenie pozniej z zarchiwizowanych logow
> dziala ok.
>

Ta opcja działa.

Do odtworzenia backupu online potrzebujesz 1. obraz archiwum i 2.
pliki dziennika tranksakcji (logi).

Opcja Include Logs dołącza aktywne logi do archiwum (redundancja), tak
by można było odtworzyć bazę bez konieczności sięgania do oryginalnego
archiwum logów.

Pliki dziennika są potrzebne ponieważ obraz archiwum zawiera niespójny
stan bazy danych -- migawkę systemu, w którym część transakcji nie
było jeszcze zatwierdzonych. Logi będą potrzebne do odwinięcia
transakcji, aktywnych w momencie wykonywania archiwum. Ale, logi mogą
posłużyć także do powtórzenia transakcji, tak by odtworzyć system na
późniejszy punkt w czasie.

Jeśli chcesz zaprzestać dogrywania kolejnych logów a więc udostępnić
bazę do pracy musisz podać opcję COMPLETE polecenia ROLLFORWARD.

db2 ROLLFORWARD DB BAZA1 COMPLETE

ewentualnie możesz podać także ścieżkę do logów, jeśli znajdują się w
miejscu innym niż oryginalne archiwum logów (w pliku historii bazy
jest informacja, gdzie logi były archiwowane):

db2 ROLLFORWARD DB BAZA1 COMPLETE OVERFLOW LOG PATH ('ścieżka')

Jeśli zrobisz coś takiego:
db2 ROLLFORWARD DB BAZA1 OVERFLOW LOG PATH ('ścieżka')

czyli bez klauzuli COMPLETE, wtedy baza powtórzy transakcje, ale dalej
będzie w stanie oczekiwania na dogranie kolejnych logów (taką operację
można powtarzać w nieskończoność).

Jeśli to nie pomogło, podaj jakie instrukcje wywołujesz.

-- Artur Wroński




Janusz M - 04-07-2007 00:01

 
> 2. Zrobilem sobie backup online bazy danych z opcja INCLUDE LOGS, potem
> odtworzylem ja a potem zawarte w niej logi do innego katalogu. Niestety
> przy probie odtworzenia logow
> prosi o dalsze logi, nie wystarczaja te ktore byly dolaczone do backupu.
> Czy
> ta opcja
> wogole działa ?.
> Backup online bez logow i odtwarzenie pozniej z zarchiwizowanych logow
> dziala ok.
>

Ta opcja działa.

Do odtworzenia backupu online potrzebujesz 1. obraz archiwum i 2.
pliki dziennika tranksakcji (logi).

.......

Wielkie dzieki za wyczerpujace wyjasnienia,
Mozliwe ze pogubilem sie w tych komendach,.
Mam prośbe czy mogłbyś mi napisac przykladowe komendy
do robienia backupu bazy online z logami i potem jej odtworzenia.

pozdrawiam, Janusz





Artur - 04-07-2007 00:01

  On 3 Lip, 14:52, "Janusz M" <januszms.remove...@interia.pl> wrote:
> > 2. Zrobilem sobie backup online bazy danych z opcja INCLUDE LOGS, potem
> > odtworzylem ja a potem zawarte w niej logi do innego katalogu. Niestety
> > przy probie odtworzenia logow
> > prosi o dalsze logi, nie wystarczaja te ktore byly dolaczone do backupu.
> > Czy
> > ta opcja
> > wogole działa ?.
> > Backup online bez logow i odtwarzenie pozniej z zarchiwizowanych logow
> > dziala ok.
>
> Ta opcja działa.
>
> Do odtworzenia backupu online potrzebujesz 1. obraz archiwum i 2.
> pliki dziennika tranksakcji (logi).
>
> ......
>
> Wielkie dzieki za wyczerpujace wyjasnienia,
> Mozliwe ze pogubilem sie w tych komendach,.
> Mam prośbe czy mogłbyś mi napisac przykladowe komendy
> do robienia backupu bazy online z logami i potem jej odtworzenia.
>
> pozdrawiam, Janusz

[backup online]
db2 backup db baza1 online include logs

[odtworzenie]
db2 restore db baza1 LOGTARGET c:\DB2LOGS\roboczy

db2 rollforward db baza1 to end of logs overflow log path ('c:\DB2LOGS
\roboczy')
db2 rollforward db baza1 complete overflow log path ('c:\DB2LOGS
\roboczy')

Dwa ostatnie polecenia można zrobić w jednym kroku, wystarczy dodać
"and complete" po klauzuli "to end of logs". Zwykle daję "complete" w
następnym kroku, bo mam jeszcze szansę na uzupełnienie katalogu
dodatkowymi logami (np. które zostały zarchiwizowane ręcznie) i
powtórzenie dogrania.

Jeśli poda się klauzulę "to end of logs" DB2 automatycznie także sięga
do podstawowego miejsca gdzie były archiwizowane pliki i stamtąd
próbuje także dograć transakcje.

-- Artur Wroński




Artur - 04-07-2007 00:01

  > 1. jak zauważyłem DB2 nie trakuje kluczy obcych w tabelach jako indeksow
> i do wiekszosci zapytan ich nie uzywa. Musialem podefiniowac dodatkowe
> indeksy w tabelach
> takie same jak klucze obce. W dokumentacji jest ze jak dam w definicji
> klucza obcego
> ENABLE QUERY OPIMIZATION to bedzie on uzywany do optymalizacji zapytan, ale
> to nie dziala (odswierzone wszystkie statystyki w tabeli) . Moze potrzebne
> jest ustawienie jakiegos parametru w bazie danych ?.
>

chyba wcięło mój poprzedni post.

Dla klucza obcego nie są automatycznie tworzone indeksy -- nie ma
takiej potrzeby.

Najlepiej utworzyć najpierw gołe tabele, potem te indeksy, które się
chce, a następnie warunki integralnościowe (constraints), np:

create table drzewo(
rodzic int,
wezel int not null,
nazwa char(25))
;

create index rodzic_idx on drzewo (rodzic);
create unique index wezel_idx on drzewo (wezel);

alter table drzewo
add constraint drzewo_pk
primary key (wezel);

alter table drzewo
add constraint drzewo_fk
foreign key (rodzic)
references drzewo
on delete cascade;

W takim układzie klucze podstawowe skorzystają z utworzonego indeksu i
zachowają jego nazwę.
Jeśli chodzi o optymalizację, to chodzi o wykorzystanie technik, które
pozwolą przyspieszyć zapytani. Np. można pominąć którąś z tabel, jeśli
ktoś będzie robił np. select count(*) from tab1, tab2 where tan1.pk =
tab2.fk, w przypadku warunków ograniczających można sprawdzić czy
predykaty zapytania pasują o definicji CHECK CONSTRAINT.

-- Artur Wroński
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= mecze sie i mecze i nic - zapytanie czesciowe
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com