2012-01-30 6 views
6

Czy istnieje sposób w Oracle do utworzenia tabeli, która istnieje tylko podczas działania bazy danych i jest przechowywana tylko w pamięci? Więc jeśli baza danych zostanie ponownie uruchomiona, będę musiał odtworzyć tabelę?W Oracle można utworzyć tabelę, która istnieje tylko podczas działania bazy danych?

Edit: Chcę dane utrzymują się między sesjami. Powodem jest to, że dane są kosztowne do odtworzenia, ale są również bardzo wrażliwe.

Korzystanie z tabeli tymczasowej prawdopodobnie poprawiłoby wydajność w porównaniu z tym, co dzieje się dzisiaj, ale nadal nie jest doskonałym rozwiązaniem.

+0

O ile mi wiadomo, tymczasowe tabele w Oracle są trwałe; tylko ich dane są niestabilne. Czy to byłby problem dla ciebie? –

+0

To jest mój problem, chcę dane trzymać podczas gdy baza danych jest w górze, ponieważ odtworzenie danych jest kosztowne. – chotchki

+0

Jaka jest Twoja intencja? co chcesz robić? –

Odpowiedz

3

Można użyć mechanizmu wyzwalającego Oracle do wywołania procedury składowanej, gdy baza danych uruchamia się lub zamyka.

W ten sposób można uruchomić wyzwalacz, aby utworzyć tabelę, a wyzwalacz zamknięcia go upuść.

Ty pewnie też chcą spust startowy obsługiwać przypadki, w których istnieje tabela i obciąć je tylko w przypadku, gdy serwer zatrzymał się nagle i spust zamykania nie został powołany.

Oracle trigger documentation

+0

Podoba mi się to podejście z tabelą bez tablic. Mogę również użyć powyższego zapisu buffer_pool. – chotchki

4

Można utworzyć 100% efemeryczny tabelę, która nadaje się do czasu trwania sesji (zwykle krótszy niż okres niż czas uruchomienia bazy danych) o nazwie tabeli tymczasowej. Celem pamięci w tabeli jest przyspieszenie czytania. Będziesz musiał ponownie wypełnić tabelę dla każdej sesji, ponieważ tabela zostanie zapomniana (zarówno struktura, jak i dane) po zakończeniu sesji.

2

Korzystając z Oracle Global Temporary Tables, możesz utworzyć tabelę w pamięci i usunąć ją po zakończeniu transakcji lub po zakończeniu sesji.

4

No dokładnie, nie. Oracle ma koncepcję "globalnego tymczasowego stołu". Za pomocą globalnej tabeli tymczasowej tworzysz tabelę raz, tak jak w przypadku każdej innej tabeli. Definicja tabeli będzie trwać stale, tak jak w przypadku każdej innej tabeli.

Zawartość tabeli nie będzie jednak stała. W zależności od tego, jak je zdefiniujesz, zawartość będzie trwać przez cały okres sesji (w wierszach zatwierdzenia zatwierdzenia) lub przez czas trwania transakcji (przy zatwierdzaniu usunięcia wierszy).

Zobacz dokumentację dla wszystkich szczegółów: http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables003.htm#ADMIN11633

nadzieję, że pomoże.

2

Jeśli dobrze rozumiem, masz jakieś dane, które muszą być przetwarzane, gdy baza danych jest doprowadzana online i lewy dostępny tylko tak długo, jak baza danych jest w trybie online. Jedyny przypadek, w którym mogę o tym myśleć, wymagałby tego, jeśli szyfrujesz niektóre dane i chcesz się upewnić, że niezaszyfrowane dane nigdy nie zostaną zapisane na dysku.

Jeśli jest to w rzeczywistości Twój przypadek użycia, zaleciłbym zapomnienie o próbie stworzenia własnego rozwiązania, a zamiast tego skorzystanie z Oracle encrypted tablespaces lub Transparent Data Encryption.

+0

Nie śmiej się, ponieważ zaszyfrowane przestrzenie tablic Oracle i TDE zostały uznane za zagrożenia bezpieczeństwa dla środowiska, w którym pracuję. To niestety jest poza kontrolą i już przegrałem walkę, aby z nich korzystać. – chotchki

Powiązane problemy