programing

Oracle 데이터베이스에서 Java 저장 프로시저를 사용해야 하는 경우... 단점은 무엇입니까?

padding 2023. 8. 31. 23:41
반응형

Oracle 데이터베이스에서 Java 저장 프로시저를 사용해야 하는 경우... 단점은 무엇입니까?

PL/SQL은 제 모국어가 아닙니다.Oracle은 Java에서 저장 프로시저 쓰기를 지원합니다.PL/SQL에 저장 프로시저를 쓰는 것보다 이렇게 하면 어떤 이점이 있습니까?

Oracle 환경에서 일반적인 개발 순서는 다음과 같습니다.

가능한 경우 SQL로만 가능합니다.SQL 이상이 필요한 경우 PL/SQL로 수행합니다.PL/SQL에서 수행할 수 없는 작업이 필요한 경우 Java를 사용합니다.그렇지 않으면 C를 사용합니다.C로 할 수 없다면, 문제에서 천천히 뒤로 물러나세요.

PL/SQL 저장 프로시저는 모든 통합 기술이 액세스할 수 있는 계층으로 비즈니스 로직을 이동하는 훌륭한 방법입니다.패키지의 비즈니스 로직(독립 실행형 기능 및 프로시저를 작성하지 마십시오. 관리할 수 없는 방식으로 시간이 지남에 따라 증가합니다.)은 Java, C#, PL/SQL, ODBC 등에서 실행할 수 있습니다.

PL/SQL은 순수한 SQL 외부의 거대한 데이터 청크를 가장 빠르게 처리할 수 있는 방법입니다."대량 바인딩" 기능은 SQL 엔진과 매우 잘 작동한다는 것을 의미합니다.

Java 저장 프로시저는 네트워크 또는 운영 체제와 상호 작용하는 기능을 만드는 데 가장 적합합니다.예를 들어, 이메일 보내기, FTP'ing 데이터, 텍스트 파일로 출력 및 압축하기, 일반적으로 호스트 명령줄 실행 등이 있습니다.

Oracle과 함께 작업할 때 C를 코딩할 필요가 없었지만, 아마도 레거시 앱과의 통합에 사용될 수 있을 것입니다.

PL/SQL(또는 PL/SQL이 너무 느리다는 것이 증명될 때만 가능합니다.)

사례 연구로서...운영 환경에서 실행 중인 단일 Java 저장 프로시저(Oracle 9i)가 있었는데, 원래 Java로 작성된 것은 Java가 멋지다고 생각했던 당시에 제가 오래전부터 생각했던 것이 바뀌었기 때문입니다.어쨌든.어느 날, DB가 다운되고 Java SP가 재부팅되면 작동하지 않습니다.Oracle 지원을 통해 많은 시간을 주고받았지만 문제가 무엇인지 제대로 파악하지 못했고, 많은 다운타임이 수반되는 유일한 제안이 있었습니다.선택사항이 아닌 무언가.30분 후에 저는 자바 SP를 PL/SQL로 다시 작성했습니다.

이제 더 빠르게 실행되고, 오라클 "네이티브"이며, 다른 개체와 동일한 배포 프로세스를 공유하고, 디버깅하기가 더 쉽습니다.

PL/SQL은 매우 유용한 언어입니다.저장 프로시저를 작성하는 경우에는 단순히 Java로 작업하는 것보다 시간을 들여 학습하십시오. 왜냐하면 그것은 당신이 알고 있기 때문입니다.

주요 장점은 PL/SQL에 없는 API 및 언어 기능에 액세스하는 것입니다.예를 들어 정규 표현식 처리, 파일/디렉토리 조작 및 XML 구문 분석에 사용했습니다.

여러 가지 단점이 있습니다.

  • 공구 지지대 불량
  • JVM에 대한 제어 부족
  • DBA는 Java 교육을 받지 않은 경우가 많습니다.프로덕션 코드를 지원하려면 DBA에게 더 많은 교육을 제공하거나 Java 교육을 받은 지원 인력을 고용해야 합니다.

Java를 응용프로그램 서버로 이동하는 것이 종종 더 나은 방법입니다. 이 방법은 단점을 보완하기 때문입니다.탁월한 툴 지원과 JVM에 대한 뛰어난 제어 기능이 있으며, 인기 있는 애플리케이션 서버에서 교육을 받은 많은 인력이 있으므로 지원 인력을 쉽게 찾을 수 있습니다.데이터베이스에서 벗어나 성능 저하로 인한 기회 비용이 발생하지만 Java를 데이터베이스에 가깝게 유지한다고 해서 성능이 크게 향상되는 것은 아닙니다.

a) PL/SQL 저장 프로시저 또는 b) 데이터베이스 외부의 Java를 통해 데이터베이스에서 Java를 사용해야 하는 이유가 반드시 필요합니다.

Java를 사용하면 데이터베이스 중립 코드를 작성할 수 있습니다.기존 코드를 재사용하고 생산성을 크게 높일 수 있습니다.

Java 스토어드 프로시저가 유용하다고 생각하는 한 가지는 파일 IO입니다.Java는 Oracle의 UTL_FILE 패키지에 비해 훨씬 풍부한 File IO 기능을 제공하므로 개발자가 파일을 제거하고 디렉토리를 추가하는 등의 작업을 수행할 수 있습니다.

장점:

  • 클라이언트와 데이터베이스에서 동일한 애플리케이션 로직을 공유할 수 있습니다.
  • Java API에 액세스합니다.각 데이터베이스가 지원하는 Java 버전을 확인하십시오. 10g은 1.4만 지원합니다. (즉, 제 작업에서는 메인 코드베이스가 최근 1.5로 이동했기 때문에 매우 조심해야 합니다.)

단점:

  • 많은 데이터베이스 액세스를 수행하는 Java 저장 프로시저는 매우 느릴 수 있습니다.
  • 코드 배포가 더 어려워짐

Oracle 임베디드 Java를 사용하여 두 가지 문제를 해결했습니다.

텍스트 파일의 쿼리 결과를 대량으로 생성하여 FTP를 통해 전송하는 PLSQL 프로시저를 수행합니다.이 파일은 매우 커서 저는 자바를 사용하여 압축합니다.

DB와 직접 연결된 클라이언트-서버 응용프로그램에서 사용자가 보낸 암호를 MD5로 해시된 응용프로그램(DB 사용자 암호가 아님)과 비교하여 암호가 일반 텍스트로 넷으로 이동하지 않도록 합니다.이것이 이 문제에 대한 더 나은 해결책이었는지 잘 모르겠습니다. 지금 물어보겠습니다.:)

PL/SQL에서 Java를 사용할 수 없거나 Java에서 성능을 향상시킬 수 있는 경우 Java를 사용합니다.

예를 들어 PL/SQL 프로그램(로깅, 외부 호출 등) 내에서 소켓을 사용하려는 경우 다음을 수행할 수 있습니다.

  1. UTL_TCP를 사용하는 PL/SQL 클라이언트를 작성합니다.하지만 네이티브 PL/SQL만 사용하여 UDP를 수행할 수 있는 방법은 없습니다.
  2. TCP 또는 UDP 소켓을 사용하는 Java 클라이언트를 작성합니다.

첫 번째 경우 원격 서비스에 문제가 있을 경우 PL/SQL 호출을 백업할 수 있는 동기식 소켓이 있습니다.또한 (OWA에서처럼) dbms_session.reset_package를 사용하는 경우 모든 요청에 대해 소켓을 다시 연결해야 하므로 비용이 매우 많이 듭니다.

두 번째 경우 TCP는 여전히 동기식이지만 비동기식 비차단 동작이 필요한 경우 UDP를 사용할 수 있습니다. 또한 reset_package는 Java TCP 또는 UDP 소켓을 재설정하지 않으므로 해체/재연결 문제를 처리할 필요가 없습니다.

정답은 NEVER입니다.데이터를 로드하거나 처리하기 위해 프로그램을 작성해야 하는 경우 네트워크의 다른 컴퓨터에서 데이터 계층 외부로 작성해야 합니다.

외부 애플리케이션을 데이터 계층에서 직접 실행하거나 데이터 계층과 함께 진행 중이거나 네이티브 쿼리 언어가 당면한 작업에 더 적합할 때 외부 언어를 잘못 적용하는 것은 소규모 맞춤형 사내 애플리케이션에 완벽하게 수용할 수 있습니다.그 경기장 밖에는 그들이 있을 곳이 없습니다.

언급URL : https://stackoverflow.com/questions/70072/when-should-you-use-java-stored-procedures-with-an-oracle-database-what-are

반응형