2016-08-05 1 views
4

유지 관리 기간이있는 경우 응용 프로그램 사용자의 권한을 읽기 전용으로 변경합니다. 유지 보수 후 플랫폼을 다시 시작한 후에는 보조금을 되돌려 놓았지만 기존의 모든 연결은 여전히 ​​읽기 전용 모드로 유지됩니다. 내 플랫폼을 다시 시작하거나 활성 세션을 잃지 않고 연결을 재설정 할 수있는 방법이 있습니까?Oracle DB, 사용자 보조금 변경 후 라이브 연결 다시 설정

+0

역할을 통해 또는 직접 응용 프로그램 사용자에게 주어진 응용 프로그램 사용자의 권한은 있습니까? – ivanzg

+0

기본적으로 역할은 쓰기/업데이트 역할을 제거하고 유지 관리 후에는 전체 역할 집합으로 롤백합니다. – elopez

+0

역할이 부여 된 후이를 확인할 수 있는지 확인하려면 데이터 사전보기를 쿼리하여 수행 할 수 있습니다 응용 프로그램 사용자의 경우 "DBA_ROLE_PRIVS"열 "DEFAULT_ROLE" – ivanzg

답변

0

응용 프로그램이 연결 풀을 사용하고 끊어진 연결을 감지 할 수있는 경우 권한 변경 후 모든 풀 세션을 Oracle 측에서 종료하십시오. 이 연결 풀에서 할당되지 않은 별도의 연결에서 "ALTER SYSTEM KILL SESSION"를 실행할 수 있어야합니다이를 위해

. 또한 응용 프로그램의 정확한 세션에 대해 SID, SERIAL # 쌍을 찾으려면 SQL 쿼리를 만들어야합니다.

앱에서 연결 풀링 층 충분히 좋은 기록 된 경우, 새로운 권리와 지금, 각 부서 연결을 감지하고 새로운 하나를 엽니 다. IMMEDIATE 매개 변수를 사용하여 응용 프로그램의 데이터 일관성을 유지하고 오류를보고하지 않는 것이 가장 좋습니다. 활성 트랜잭션이 완료 될 때까지 시간이 필요합니다. 응용 프로그램이 긴 트랜잭션을 작성 중이고 너무 오래 기다릴 수없는 경우 매개 변수 IMMEDIATE를 사용할 수 있습니다.

ALTER SYSTEM KILL SESSION 'sid,serial#' [IMMEDIATE]; 

오라클 온라인 설명서에서 응용 프로그램에 속한 세션을 찾는 방법을 찾을 수 있습니다.

+0

하루의 끝에서 나는 문제는 측면과 함께 히카리를 사용하여, 슬프게도, 우리가 DB의 구성을 만질 수있는 방법은 없습니다, 솔루션은 응용 프로그램 사이트에 있어야합니다, 덕분에 – elopez

+0

당신이 그것을 듣고 반갑습니다. 또 다른 옵션이 있습니다. 어떻게 든 응용 프로그램이나 풀을 다시 시작할 때 모든 풀 연결을 끊을 수는 있지만 해결 방법은 뭔가 있다고 생각합니다. – BJovke

+0

Reflection 사용 Hikari의 모든 연결을 평가하여 어느 것이 살아 있는지, 어떤 것이 죽는지 ... 그리고 Aspects를 통해 DAO에 대한 모든 호출을 가로 채고 있습니다. 여전히 부하 테스트를 기다리고 있습니다 ... – elopez

0

리플렉션과 함께 JdbcTemplate에서 Java 프록시를 사용하면 연결 스택을 추출하기 위해 Hikari Components가 손상됩니다.

각 연결은 이전의 5 분 죽을 후보 기본적으로 모든 연결, 내가 연결을 죽이거나하지하려면 나를 결정하는 데 도움이 creationTime과 필드를 가지고있다.

자바 프록시, 그냥 especic 예외 "ORA-01031"을 잡을 것입니다 내가 퇴거 구성 요소를 호출 할 캔트 때 유일한 경우입니다.