Pokazywanie postów oznaczonych etykietą DB. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą DB. Pokaż wszystkie posty

czwartek, 5 lipca 2012

Join to a constant mistake

Oracle, outer joins, notacja "(+)".  Poniższe zapytanie jest przykładem typowego błędu, określanego jako "join to a constant mistake":

To nie jest left outer join. To jest inner join. "(+)" w tym przykładzie zupełnie nic nie oznacza. Prawidłowo zapisany left join wygląda następująco:

Polecam:
ORAFAQ - Common errors seen when using OUTER-JOIN

środa, 20 czerwca 2012

ORA-01000: maximum open cursors exceeded

ORA-01000 oznacza, że liczba otwartych kursorów w ramach sesji przekracza maksymalną dozwoloną wartość - określoną przez  parametr open_cursors.

Tak możemy sprawdzić liczbę otwartych kursorów dla poszczególnych sesji:

Natomiast tak sprawdzimy, czy zbliżamy się do wartości określonej parametrem:

Co zrobić? Sprawdzić, czy kursory są poprawnie zamykane. Możliwe, że są. Może po prostu potrzebujemy czasami takiej ilości otwartych kursorów. Wystarczy wówczas zwiększyć wartość parametru:



Cytując fragment dyskusji z Ask Tom:
- Czy wpłynie to na działanie aplikacji?
- Tak. Zacznie działać w miejscach, w których do tej pory mogła się sypać.
- Jakie są zalecane wartości?
- Ustawiamy na 500 - 1000 i zapominamy o problemie. Jeżeli kursory wyciekają, prędzej czy później i tak przekroczą wartość graniczną.

Scope przyjmuje następujące wartości:
- SPFILE (For both static and dynamic parameters, changes are recorded in the spfile, to be given effect in the next restart.)
- MEMORY (For dynamic parameters, changes are applied in memory only. No static parameter change is allowed.)
- BOTH (For dynamic parameters, the change is applied in both the server parameter file and memory. No static parameter change is allowed.)

Polecam:
Monitoring Open and Cached Cursors
Ask Tom - Open cursors exceeded
Setting the Server Parameter File Values