sourcecode

ORA-00604 ORA-12705

copyscript 2023. 8. 7. 22:52
반응형

ORA-00604 ORA-12705

제 j2ee 웹 애플리케이션에 이 오류가 있습니다.

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
 oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
 oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:376)
 oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
 oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
 oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
 oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839)
 java.sql.DriverManager.getConnection(Unknown Source)
 java.sql.DriverManager.getConnection(Unknown Source)
 org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
 org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
 org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
 org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)


 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)

이 프로젝트는 제 동료들의 PC에서 작동합니다.제 말은 이 프로젝트가 그들에게 효과가 있다는 것입니다. 하지만 제가 그들의 프로젝트 폴더를 요청하고 이클립스에서 가져왔을 때, 제가 실행했을 때 이 오류가 발생합니다.jar 파일이 이미 프로젝트 폴더와 함께 패키지되어 있습니다.

저도 hibernate를 사용하여 간단한 j2ee 프로젝트를 만들었지만 같은 오류가 있었습니다.DB 서버를 ping하여 PL/SQL developer를 사용하여 검색해 보았는데 문제가 없습니다.

다음을 시도해 보십시오.

  1. NLS_LANG 설정이 올바른지 확인합니다.윈도우에서는 아래의 레지스트리에 있습니다.\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. Oracle 클라이언트 소프트웨어가 올바르게 설치되어 있는지 확인합니다.
  3. 해당 시스템에 여러 오라클 홈이 있는지 확인하십시오.그런 경우에는 활성화된 것을 찾아서 작동하는지 확인합니다.
  4. SQL*Plus가 설치되어 있는지 테스트합니다.SQL Developer는 자체 클라이언트 설치가 있기 때문에 작동합니다.


드라이버에 대해서는 다음 사이트를 확인하십시오.Oracle Instant Client.여기에서는 Oracle에 대한 JDBC 액세스에 필요한 최소 드라이버 설치에 대한 설명서를 확인할 수 있습니다.저는 사용하기 때문에 그것에 대해 잘 모릅니다.그물.

2편집 2:
다음 질문을 참조하십시오. JDBC드라이버에 대한 NLS_LANG 설정.사용자와 동일한 오류가 있으며 NLS LANG의 기본 로케일이 정의되지 않은 것이 문제입니다.인용문:

NLS_LANG 설정은 java.util에서 파생됩니다.로캘.따라서 연결하기 전에 이와 유사한 전화를 걸어야 합니다.

  Locale.setDefault(Locale.<your locale here>);

문제를 해결하기 위해 Java 앱에 두 가지 매개 변수를 전달할 수 있다는 것을 알게 되었습니다.

-Duser.country=en -Duser.language=en

OS에 따라 환경 변수 수준에서 값을 구성할 수도 있습니다.

저도 같은 문제가 있었습니다.해결책은 국가와 언어를 추가하는 것이었습니다.sqldeveloper.conf

파일을 여십시오.

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

그리고 다음을 추가합니다.

AddVMOption -Duser.language=en
AddVMOption -Duser.region=us

위의 것이 요령을 부립니다.

참조: http://forum.oradba.net/showthread.php?t=423&langid=1

의 경우 일 및 "환경"을 .System FormatEnglish/US.

시스템 로케일 변경 방법

솔루션을 찾았습니다. OS(윈도우 7)에서 지역 및 언어를 변경하고 오라클 지역 및 언어와 일치하는지 확인합니다.

Oracle JDBC 드라이버는 새 연결을 연 후 다음 문을 암시적으로 실행합니다.

ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory'

이 경우 Oracle XE 11g 및 JDBC 드라이버에 기본 언어/영역 매핑이 포함되어 문제가 발생했습니다. 'ru' 로케일은 Oracle EE에서만 지원되는 'CIS' 영역에 매핑되었지만 Oracle XE에는 'RUSA' 영역만 있었습니다.이 문제를 해결한 방법은 다음과 같습니다.

-Doracle.jdbc.territoryMap="ru=RUSSIA;RU=RUSSIA"

NLS_Language 옵션이 있습니다(기본값에는 문제가 없었습니다).

-Doracle.jdbc.languageMap="ru=RUSSIAN;RU=RUSSIAN"

고정: 클래스 oracle.sql.dll에서 가져온 상수 ru=RUSIC입니다.java jdbc 드라이버의 CharacterSetMetaData.

intellj로 컴파일하는 경우IDE 구성 모델에 있는 VM 옵션에 다음 옵션을 추가하는 것이 좋습니다.

AddVMOption -Duser.region=us. 

처음 쿼리 실행:

select userenv('LANGUAGE') from dual;`

이것은 오라클에게 지역 및 언어를 제공할 것입니다.OS에서 지역 및 언어를 변경합니다. 둘 다 일치해야 합니다.

JAVA를 확인합니다.HOME 시스템 변수 및 해당 변수가 프로젝트 및 프로그램에서 사용 중인 버전과 동일한지 확인합니다.

컴퓨터의 지역 설정과 언어를 변경하는 것이 이 문제를 해결하는 데 도움이 되었습니다.저는 지역을 미국으로 바꾸고 영어(미국)를 언어로 바꿨습니다.

스프링 응용 프로그램을 실행하는 경우 로케일을 추가하면 됩니다.setDefault(로컬).영어); 본 수업에서.

public static void main(String[] args) throws Exception
{
    Locale.setDefault(Locale.ENGLISH);
    SpringApplication.run(ApplicationName.class, args);



}

언급URL : https://stackoverflow.com/questions/1629327/ora-00604-ora-12705

반응형