Szybkie przeglądanie danych w bazie

0

Witam, jak szybko bez zaglądania do każdej tabeli mogę przeglądać dane ze wszystkich tabel w całej bazie? Chciałbym znaleźć wszystkie pola i tabele, które zawierają dowolne wyrażenie regularne.

3

Na początek możesz wypisać wszystkie kolumny:

SELECT  table_name, column_name, data_type, data_length FROM all_tab_columns

Pytanie jak chcesz wykryć że dany string (varchar2, varchar, char) zawiera wyrażenie regularne. Wyrażenia regularnego nie rozpoznasz nawet innym wyrażeniem regularnym bo są zbyt skomplikowane. Tu trzeba by napisać prawdziwy parser ze stosem

1

Mozesz zrobic export bazy do pliku sql i np. pythonem obrobic matchujac insert ... values (...). Pytanie tylko jak ty wykryjesz te regexy, taki [email protected] to email czy moze regex bo ma .? To czy pole varchar jest string'iem czy regexem czesto zalezy od aplikacji, moze powinienes szukac po drugiej stronie?

0

@sigmaalgebra:

Witam, jak szybko bez zaglądania do każdej tabeli mogę przeglądać dane ze wszystkich tabel w całej bazie?

Bez zaglądania to się nie da w bazie.

Chciałbym znaleźć wszystkie pola i tabele, które zawierają dowolne wyrażenie regularne.

Jak wyżej.

To co możesz zrobić to napisanie procedury, która:

  1. na podstawie schemy informacyjnej ( bazy posiadają takie struktury, w których jest informacja o tabelach, atrybutach, typach danych itd.) będzie iterować po tabelach, polach
  2. budować dynamiczne zapytanie, która zwróci Ci informację, typu select count(0) from tabela whera regexp_like(atrybut , twoj_regexp)
  3. Uruchomić procedurę i poczekać na rezultat.

Ewentualnie przetwarzać poza bazą -> wspomniany wcześniej db dump + awk/grep.

1

@sigmaalgebra: Listę kolumn każdej tabeli możesz dostać z view all_tab_columns. Ewentualnie user_tab_columns jeśli nie masz uprawnień do all%. Co do wyszukania konkretnych wartości w kolumnach to bez ich odczytania - tak rozumiem Twoje 'zaglądanie' - nie widzę możliwości. Niemniej można by sie pokusić - nie testowane - o policzenie statystyk z histogramami dla całego schematu i wtedy przeszukiwać tylko widoki ze statystykami. Zwróci to dane przybliżone, ale może Ci wystarczy ?

Jakiej metody by nie zastosować - eksport danych do plików tekstowych czy statystyki - to i tak trzeba przeczytać wszystkie dane. Skoro, więc szukasz konkretnych to wg mnie (i biorąc pod uwagę Twój lakoniczny opis) zastosowałbym pętlę w pl/sql przelatującą wszystkie kolumny, którymi się interesujesz. Jeśli sa poindeksowane to będzie szybciutko, a jeśli nie są, a masz wiele korów, to użyłbym paralelizmu. Kwiatkiem do tego kożucha może być ustawienie w sesji DB_FILE_MULTIBLOCK_READ_COUNT=999 - Oracle i tak dobierze sobie maksymalnie sensowną wartość. Jeśli baza jest sama na hoście to paralelizm ustawiłbym na ilość korów x2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1