prosource

Oracle 11g 세션 시간 초과 설정

probook 2023. 9. 25. 22:49
반응형

Oracle 11g 세션 시간 초과 설정

서버를 재부팅한 후 Tomcat 서버의 Oracle 연결 시간이 매일 밤 초과됩니다.재부팅 전에는 연결 시간이 초과되지 않았습니다.이제 아침에 애플리케이션이 DB에 액세스하는 동안 JDBC 연결 오류를 던집니다.Tomcat을 다시 시작하면 문제가 해결됩니다.그것은 연결이 재설정되었기 때문이라고 추측합니다.제 생각에는 오라클 DB가 세션을 타이밍하고 있기 때문인 것입니다.Oracle 11g에서 세션 시간 초과를 비활성화하려면 어떻게 해야 합니까?
감사합니다!
스티브

개발 및 테스트가 생략된 Config.groovy입니다.

dataSource {
  pooled = true
}

hibernate {
   cache.use_second_level_cache = true
   cache.use_query_cache = true
   cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}

// environment specific settings
environments {
production {
  dataSource {
    driverClassName = "oracle.jdbc.driver.OracleDriver"
    username = "XXXXX"
    password = "XXXXXX"
    dialect = "org.hibernate.dialect.Oracle10gDialect"
    dbCreate = "update" // one of 'create', 'create-drop','update'
    url = "jdbc:oracle:thin:@XXXXXX:1521:xxxx"
  }
}  }

일반적으로 Tomcat이 연결하고 있는 사용자와 관련된 프로필에 의해 제어됩니다.

SQL> SELECT PROFILE, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'IDLE_TIME';

PROFILE                        LIMIT
------------------------------ ----------------------------------------
DEFAULT                        UNLIMITED

SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME = USER;

PROFILE
------------------------------
DEFAULT

그래서 내가 연결된 사용자는 무제한 유휴 시간을 가질 수 있습니다. 시간 초과는 없습니다.

Adam이 이미 데이터베이스 프로파일을 제안했습니다.

SQLNET을 확인할 수 있습니다.ORA 파일.EXPERIE_가 있습니다.TIME 매개변수이지만 이는 기존 연결을 종료하는 것이 아니라 손실된 연결을 탐지하기 위한 것입니다.

하룻밤 사이에 발생한다는 점을 감안하면 유휴 시간 초과로 들릴 수 있으며, 이는 앱 서버와 데이터베이스 서버 사이의 방화벽에 해당될 수 있습니다.EXPERIET 설정_TIME은 이러한 현상을 중지할 도 있습니다(클라이언트가 활성 상태인지 확인하기 위해 10분마다 점검이 이루어지므로).

아니면 데이터베이스를 종료하고 다시 시작하는 것이 연결을 끊는 것일 수도 있습니다.

또는 tomcat을 유효성 검사를 통해 구성할 수 있습니다.Tomcat 재시작 없이 자동으로 연결을 재시작하도록 쿼리합니다.

이 문제는 Oracle DBMS 문제가 아닌 응용프로그램의 연결 풀에 의해 발생할 수 있습니다.대부분의 연결 풀에는 연결을 제공하기 전에 실행할 수 있는 유효성 검사 문이 있습니다.Oracle에서는 "Select 1 from dual"을 원합니다.

서버를 다시 시작한 후에 발생하기 시작한 이유는 아마도 다시 시작하지 않고 연결 풀을 추가했기 때문일 것이고 이제 처음으로 연결 풀을 사용하는 경험을 하고 있기 때문입니다.데이터베이스 연결을 처리하는 리소스 파일의 수정 날짜는 언제입니까?

쿼리 유효성 검사 예제:

 <Resource name="jdbc/EmployeeDB" auth="Container" 
            validationQuery="Select 1 from dual" type="javax.sql.DataSource" username="dbusername" password="dbpassword"
            driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database"
            maxActive="8" maxIdle="4"/>

편집: 성배 풀의 경우에도 성배 풀과 유사한 구성 옵션이 있습니다.성배 1.2의 예(성배 1.2의 릴리스 노트 참조)

dataSource {
    pooled = true
    dbCreate = "update"
    url = "jdbc:mysql://localhost/yourDB"
    driverClassName = "com.mysql.jdbc.Driver"
    username = "yourUser"
    password = "yourPassword"
    properties {
        maxActive = 50
        maxIdle = 25
        minIdle = 5
        initialSize = 5
        minEvictableIdleTimeMillis = 60000
        timeBetweenEvictionRunsMillis = 60000
        maxWait = 10000     
    }   
}

유휴 시간 대신 총 세션 수명을 기준으로 오라클 세션 풀 만료를 활성화할 수 있는 방법을 찾고자 이 질문을 하게 되었습니다.또 다른 목표는 응용 프로그램에 예기치 않게 강제로 닫히는 것을 방지하는 것입니다.

유효성 검사 쿼리를 다음으로 설정하면 가능할 것 같습니다.

select 1 from V$SESSION 
where AUDSID = userenv('SESSIONID') and sysdate-LOGON_TIME < 30/24/60

이렇게 하면 애플리케이션에 영향을 주지 않는 예측 가능한 방식으로 30분 이상 경과한 세션이 종료됩니다.

DB에서 연결이 끊긴 것을 알고 있습니까, 아니면 세션이 여전히 v$session에 나열되어 있습니까?제 생각에는 네트워크에 의해 삭제되고 있다는 것을 의미인 것 같습니다.문제가 발생하기 전까지 유휴 상태를 유지할 수 있는 기간과 TCP 유휴 값과 유사한 점이 있는지 알고 있습니까(정확하게 기억하는 경우 sysctl에서 net.ipv4.tcp_keepalive_time, tcp_keepalive_probe 및 tcp_keepalive_interval)?sysctl 변경이 기본적으로 유지되는지는 기억할 수 없지만, 이는 수정된 후 재부팅에 의해 재설정된 것일 수 있습니다.

또한 전체 서버를 튕기지 않고 JDBC 연결을 재설정할 수도 있습니다. WebLogic에서는 확실히 큰 도움이 되지 않지만 Tomcat과 동등한 기능에 익숙하지 않습니다.

Oracle db의 세션 제한 설정을 변경하지 않고 응용프로그램 연결 풀 설정을 확인합니다.그들이 시간을 초과하는 것은 정상입니다.

여기를 보세요: http://grails.org/doc/1.0.x/guide/3.%20Configuration.html#3.3%20The%20DataSource

"pooling" 매개변수를 올바르게 설정하셨습니까?

안녕, 라스


:
언뜻 보기에는 당신의 구성이 괜찮은 것 같아요.저는 오늘 이 문제를 발견했습니다.아마도 당신의 고통과 관련이 있을 것입니다.
때 ""

언급URL : https://stackoverflow.com/questions/3363907/setting-oracle-11g-session-timeout

반응형