konto usunięte

Temat: Oracle dynamiczny widok

Witam,

mam pewien problem i nie wiem czy da się go rozwiązać.

Mam kilka tabel o identycznej strukturze oraz taki sam wzorzec nazwy.
Potrzebuje napisać widok który łączy wszystkie tabele przez UNION ALL. Tylko, że ten widok musi automatycznie połączyć tabelę, które zostaną stworzone później bez przebudowywania się. Taka sama struktura i wzorzec nazwy.

Czy da się coś takiego stworzyć?

Z góry dziękuje za odpowiedzi.

Pozdrawiam,
Marcin
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle dynamiczny widok

Jaki problem chcesz w ten sposób rozwiązać, że wymusza pojawienie się tabel T1, T2, ..., Tn i późniejsze ich złączenie via UNION ?

Co do widoku, to można kombinować funkcją pipelinową.

np. masz tu case
http://ruepprich.wordpress.com/2010/08/11/using-a-pipe...

Problem jaki się może pojawić to obsługa klauzuli WHERE na widoku. Chyba, że będziesz przekazywał parametry WHERE do funkcji i budował zapytania na tabelach T_i dynamicznie...
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: Oracle dynamiczny widok

Marcin Kaleta:

Czy to musi być widok?

Może lepiej zamiast kilku tabel, utworzyć jedną partycjonowaną?

konto usunięte

Temat: Oracle dynamiczny widok

Właśnie chce stworzyć niejako partycjonowanie interwałowe na bazie Oracle w wersji standard. Funkcję pipelinowe mają zbyt małą wydajność.

Czyli faktycznie nie ma rozwiązania?
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: Oracle dynamiczny widok

Jedyne co przychodzi mi do głowy to trigger + procedura która przebuduje widok..

konto usunięte

Temat: Oracle dynamiczny widok

Niestety podczas insertu to widoku, jest on blokowany i nie można go przebudować w tym samym czasie.

No nic, dzięki wielkie za odzew.

Pozdrawiam,
Marcin

konto usunięte

Temat: Oracle dynamiczny widok

Marcin Kaleta:
Właśnie chce stworzyć niejako partycjonowanie interwałowe na bazie Oracle w wersji standard. Funkcję pipelinowe mają zbyt małą wydajność.

Czyli faktycznie nie ma rozwiązania?

No raczej bez przebudowania widoku to nie da rady. W ogóle to średni pomysł żeby próbować robić partycjonowanie ręcznie - jest to ciężkie w utrzymaniu. A ile jest tych danych, żę takie fikołki rozważacie?

konto usunięte

Temat: Oracle dynamiczny widok

To jest mój prywaty projekt. W przypadku normalnego zakresowego partycjonowania, sposób jest OK. Operację SELECT, UPDATE i DELETE mają czas wykonania taki sam jak partycjonowanie ORACLE. Jedynie INSERT jest wolniejszy.
Niestety wiąże się to z tworzeniem nowych "partycji" itd. Przez co administrator bazy się nie wyrabia. Dlatego postanowiłem stworzyć partycjonowanie interwałowe, w tym przypadku administrator nie miał by nic do roboty.

Ogólnie znalazłem rozwiązanie ze stworzeniem partycji dodatkowej, która jest wypełniana w przypadku gdy reszta jest już pełna. Następnie JOB działający w godzinach nocnych przebudowuje widoki i wyzwalacze.
Tylko, że to rozwiązanie mimo że jest szybkie, to mi się nie podoba.

Pozdrawiam,
Marcin
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Oracle dynamiczny widok

Marcin Kaleta:
Niestety podczas insertu to widoku, jest on blokowany i nie można go przebudować w tym samym czasie.

Hej,
To uruchom procedurę przebudowy jako joba z DBMS_SCHEDULER'a - uruchomi się nowa sesja, którą możesz skoordynować przez statusy np. w globalnym kontekście, dbms_pipe lub dbms_lock...

Pozdrawiam,
Kamil.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle dynamiczny widok

Marcin Kaleta:
Niestety wiąże się to z tworzeniem nowych "partycji" itd. Przez co administrator bazy się nie wyrabia. Dlatego postanowiłem stworzyć partycjonowanie interwałowe, w tym przypadku administrator nie miał by nic do roboty.

Zawsze może utworzyć partycje "na zapas". Dlaczego insert jest wolniejszy? Wstawiasz do tabeli bezpośrednio czy do widoku o oracle sam rozrzuca po tabelach? A może masz jakiś trigger instead of na widoku ?

--edited
Trochę się pogubiłem:
a) piszesz, o wersji standard -- tam nie ma partycjonowania AFAIK i tworzysz rozwiązanie zastępcze

b) piszesz, że masz partycjonowanie zakresowe i działa ok, ale chcesz interwałowe, albo coś co pozwoli na automatyzację zarządzania partycjami --- tu może być job via dbms_scheduler + splitowanie partycji

Ogólnie, to po co Ci partycje? :-) Jedyne sensowne wytłumaczenie jaki mi się nasuwa, to że chcesz zapewnić retencję danych i tyle, ale może to rozwiązanie z "własnymi partycjami" ma na celu rozwiązanie jakiegoś innego problemu?Paweł Grzegorz Kwiatkowski edytował(a) ten post dnia 08.09.12 o godzinie 10:33
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: Oracle dynamiczny widok

Marcin Kaleta:Jedynie INSERT jest wolniejszy.

Indeksy na tabeli są partycjonowane czy globalne?

Przy dużych ilościach danych możesz użyć EXCHANGE PARTITION. Operacja jest nieporównywalnie szybsza od zwykłego INSERTa.
Maciej W.

Maciej W. Oracle developer

Temat: Oracle dynamiczny widok

Jeśli to ma być "darmowy odpowiednik płatnej funkcjonalności Oracle" to tak kiepsko troszkę... Oracle wewnętrznie sobie z tym radzi. Można dynamicznie generować zapytania (execute immediate, dbms_sql, java@oracle, zewnętrzne procesy) albo zrobić funkcję w pl/sql, która zwraca typ tabelowy a w środku ma właśnie takie dynamiczne zapytania (nie jestem pewien czy w wersji okrojonej masz możliwość zwracania takich typów).
W najprostszym podejściu użyłbym "klucza partycjonowania" jako pierwszej(?) kolumny indexu i pogodziłbym pewnie się z tym, że delete jest boleśnie wolniejszy niż "drop partition"... albo bym wyniósł logikę poza Oracle. A stąd tylko krok do używania plików .csv :D
Albo... użyłbym innej bazy :) IBM DB2, MySQL, PostgreSQL... dużo tego... I chyba MySQL rokuje najlepiej na przyszłość... skoro od Oracje to jest to powinni w przyszłości pomóc jakoś pewnie w migracji na Oracle enterprise :D (pewnie za kasę bo za darmo to tylko w mordę można dostać).
Powodzenia

Następna dyskusja:

Materialny widok - query re...




Wyślij zaproszenie do