2011-04-20 3 views
1

두 개의 독립된 WebLogic 9.2.1 서버 (자체 관리 서버가있는 관리 서버)가 있습니다. 따라서 클러스터링이 설정되지 않았습니다. JDBC 세션 지속성으로 구성됩니다. 또한 각 WebLogic 서버에는 자체 WebLogic 서버로만 트래픽을 전달하는 WebLogic 플러그인이있는 자체 Apache 2 프론트 엔드가 있습니다. Apache 2 서버 앞에 하드웨어 Load Balancer가 있습니다. 현재 세션 지속성에 사용되는 테이블을 호스팅하는 Oracle 데이터베이스에서 제약 조건 위반이 발생하고 있습니다.WebLogic 9.2로드 균형 문제

하드웨어 부하 분산 장치가 고정 IP를 사용하고 있다는 것을 알았습니다. 따라서 세션도 결과적으로 고정적이어야합니다. 하지만 설치 과정에서 잘못된 점이 무엇일까?

웹 로직 로그 :

 
####<Apr 26, 2011 13:00:08.0428 CEST> <Error> <HTTP Session> <sktpens01por02> <SktEnsPorServer1> <[ACTIVE] ExecuteThread: '230' for queue: 'weblogic.kernel.Default (self-tuning)'> <skatGuid=6fa90948-b285-45a5-954b-45e22bfc26c2,ou=company,ou=external,ou=entities,dc=skat,dc=dk> <> <> <1303815608428> <BEA-100087> <The jdbc session data for session id: lZbJN2jTbPZjTf81vSrKytxDdYCpwTgblJhnck3RhTcPf3FQr1Pw ctx:front dblat:1303815595796 triggerLAT:0 has been modified by another server in the cluster. 
java.sql.SQLException: ORA-00001: unique constraint (FRONTSESSIONS.SYS_C0056504) violated 

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3454) 
    at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:128) 
    at weblogic.servlet.internal.session.JDBCSessionData.dbCreate(JDBCSessionData.java:181) 
    at weblogic.servlet.internal.session.JDBCSessionData.dbUpdate(JDBCSessionData.java:242) 
    at weblogic.servlet.internal.session.JDBCSessionData.syncSession(JDBCSessionData.java:583) 
    at weblogic.servlet.internal.session.JDBCSessionContext.sync(JDBCSessionContext.java:232) 
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:2507) 
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:2482) 
    at weblogic.servlet.internal.ServletResponseImpl$1.run(ServletResponseImpl.java:1308) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) 
    at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1302) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1368) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) 
> 
####<Apr 26, 2011 13:00:08.0436 CEST> <Error> <HTTP Session> <sktpens01por02> <SktEnsPorServer1> <[ACTIVE] ExecuteThread: '230' for queue: 'weblogic.kernel.Default (self-tuning)'> <skatGuid=6fa90948-b285-45a5-954b-45e22bfc26c2,ou=company,ou=external,ou=entities,dc=skat,dc=dk> <> <> <1303815608436> <BEA-100060> <An unexpected error occurred while retrieving the session for Web application: [email protected] - appName: 'Portal-Front', name: 'front', context-path: '/front'. 
java.sql.SQLException: ORA-00001: unique constraint (FRONTSESSIONS.SYS_C0056504) violated 

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3454) 
    at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:128) 
    at weblogic.servlet.internal.session.JDBCSessionData.dbCreate(JDBCSessionData.java:181) 
    at weblogic.servlet.internal.session.JDBCSessionData.dbUpdate(JDBCSessionData.java:242) 
    at weblogic.servlet.internal.session.JDBCSessionData.syncSession(JDBCSessionData.java:583) 
    at weblogic.servlet.internal.session.JDBCSessionContext.sync(JDBCSessionContext.java:232) 
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:2507) 
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:2482) 
    at weblogic.servlet.internal.ServletResponseImpl$1.run(ServletResponseImpl.java:1308) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) 
    at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1302) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1368) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) 
> 

오라클 테이블 정의 :

CREATE TABLE "FRONTSESSIONS"."WL_SERVLET_SESSIONS" 
    (
    "WL_ID"   VARCHAR2(100 BYTE) NOT NULL ENABLE, 
    "WL_CONTEXT_PATH" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
    "WL_IS_NEW"  CHAR(1 BYTE), 
    "WL_CREATE_TIME" NUMBER(20,0), 
    "WL_IS_VALID"  CHAR(1 BYTE), 
    "WL_SESSION_VALUES" LONG RAW, 
    "WL_ACCESS_TIME"   NUMBER(20,0), 
    "WL_MAX_INACTIVE_INTERVAL" NUMBER(*,0), 
    PRIMARY KEY ("WL_ID", "WL_CONTEXT_PATH") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "FRONTSESSIONS" ENABLE 
) 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE 
    (
    INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT 
) 
    TABLESPACE "FRONTSESSIONS" ; 

감사합니다!

+0

실제 Oracle 오류 메시지와 테이블 정의를 게시 할 수 있습니까? – JoseK

+0

붙여 넣은 WebLogic 로그 및 테이블 정의. – neko

+0

정확히 같은 예외가 발생했습니다. 누군가 도와 드릴 수 있습니까? – ipolevoy

답변

0

두 개의 독립적 인 서버 (WebLogic에서 클러스터링하지 않음)는 WebLogic에서 세션에 대해 동일한 ID를 생성하는 것을 중지하지 않습니다. 클러스터에있는 두 서버가 있으면 WebLogic은 노드 ID를 세션 ID의 일부로 추가합니다. 그러나 서버가 클러스터에 없기 때문에 물론 어떤 시점에서 동일한 세션 ID를 생성 할 수 있습니다.

예외를 피할 수있는 유일한 방법은 두 서버가 세션 저장을 위해 다른 테이블이나 데이터베이스를 사용하도록 구성하는 것입니다.