2012-10-02 5 views
2

Oracle에서의 데이터베이스 연결은 연결 수명 동안 지속되는 세션 상태, 즉 패키지 변수의 형태를 가질 수 있습니다.Oracle 세션 상태 지우기

연결을 종료하고 새 연결을 다시 설정하지 않고 연결 중 호출간에 해당 상태를 모두 플러시/삭제하는 방법이 있습니까?

e.e. 먼저 패키지 init에 설정된 패키지 변수를 고려하고 나중에이 패키지의 일부 프로 시저에서 수정합니다. 패키지를 "재설정"하여 1 연결에서 프로 시저로의 여러 호출이 패키지의 reinit으로 연결되도록하는 방법?

일반적으로 : 해당 연결에서 클라이언트의 명령문 실행간에 세션 상태를 "재설정"하는 방법은 무엇입니까?

답변

6

dbms_session.reset_package 내가 생각할 수있는 가장 가까운 것입니다. 이 부분은 tahiti link입니다.

+0

Thx! 그것은 패키지 상태를 위해 수행해야합니다 (캐시 된 커서를 지우는 것은 불행합니다). 패키지 바 이외에도 다른 전역 세션 상태가 있습니까? (따라서 reset_package 위에서 지워지지는 않습니다)? – oberstet

+2

아,'DBMS_SESSION.RESET_PACKAGE()'는 DBMS_SESSION.MODIFY_PACKAGE_STATE (DBMS_SESSION.FREE_ALL_RESOURCES)와 동일하지만 리소스를 비우지 않는 (성능 적중을 가져 오는) DBMS_SESSION.MODIFY_PACKAGE_STATE (DBMS_SESSION.REINITIALIZE)도 있습니다. 데이터를 다시 설정합니다. 큰. – oberstet

+0

@oberstet 설명해 주셔서 감사합니다. –

0

모든 패키지를 재설정하는 dbms_session.reset_package (René Nyffenegger의 답변에서 제외) 이외의 패키지를 다시 작성하려면 단일 패키지 상태 만 다시 설정해야합니다. 이 절차는 모든 패키지 변수를 NULL (또는 무엇이든간에)로 설정합니다.

+0

여보세요,하지만, 오류가 발생하기 쉽습니다. 개발자에게 의존/패키지 변경. 필자의 유스 케이스에서는 데이터베이스 연결 풀을 통해 영구 (오래 지속되는) 프론트 엔드 Websocket 연결에서 SP를 호출해야합니다. 따라서 Websocket 프론트 엔드와 데이터베이스 백엔드 연결 간에는 1 : 1 관계가 없습니다. 데이터베이스 풀 연결에서 전역 상태를 통해 다른 Websocket 연결을 통해 정보가 유출되지 않도록하고 싶습니다. – oberstet