문제

이번 주말에 우리 데이터베이스 중 하나 (11.1.0.7)는 Java를 통해 네트워크의 일부에서 특정 폴더에 액세스하는 데 문제가 발생했습니다. 파일 객체를 만들고 파일을 삭제하려고 시도하는 Java의 작은 부분을 사용하여 문제를 재현했습니다. 데이터베이스에서 이것은 로컬 파일을 삭제하고 zion dp share에서 네트워크 파일을 삭제하는 데 작동하지만 zion it share는 아닙니다.

이 위치에서 파일을 삭제하는 데 문제가없는 동일한 도메인 사용자 계정에서 실행되는 다른 데이터베이스가 있습니다. 또한 서버에서 동일한 도메인 사용자로 로그인하여 문제가있는 문제가있는 문제가 발생하여 Oracle 이외의 Java를 실행할 수 있으며 파일을 삭제하는 데 아무런 문제가 없습니다. 도메인 사용자는 폴더를 완전히 제어하고 파일을 작성, 수정 및 삭제할 수있는 사용자로 로그인했습니다.

Oracle 데이터베이스 사용자에게 적절한 DBMS_JAVA 권한을 부여하지 않은 경우 적절한 java.security.accesscontrolexception 오류를받습니다. 권한을 부여한 후 Java가 완료되도록 실행되면 Delete 명령은 False (삭제되지 않음)를 반환하고 파일이 삭제되지 않습니다.

나는 Oracle과 함께 사례를 열었지만 Oracle 환경에서만 재현 할 수 있지만 Java 계층에서 파일 명령이 실행되는 것이 포함되어 있기 때문에 더 이상 도움이되지 않을 것 같습니다.

테스트 코드 :

import java.io.*;               
import java.sql.*;                 
import java.util.*;             

public class Ajclass
{
   public static void ajprocedure(String pdfFileName) throws Exception
   {
      boolean result;
      try {
         System.out.println("Start!");

         File file = new File(pdfFileName);
         //result = file.delete();
         result = file.exists();
         if (result == true) 
           System.out.println("xxFile deleted.");
         else
           System.out.println("xxFile NOT deleted!");
         System.out.println("End!");
      } catch ( Exception e ) {
         throw(e);
      }         
   }
}

다른 코드는 최근 에이 공유에 대해서만 실패한 것으로 밝혀 졌으며이 데이터베이스 내부에서만 실행될 때만 다음과 같습니다.

import java.io.*;
import java.sql.*;

public class DirectoryListing
{
public static void getList(String directory) throws SQLException
   {
      File path = new File( directory );
      String[] list = path.list();
      String element;
      int CurrentFile;

      for(CurrentFile = 0; CurrentFile < list.length; CurrentFile++)
      {
        element = list[CurrentFile];
        #sql { INSERT INTO DIRECTORYLISTING (FILENAME) VALUES (:element) };
      }
   }
}
도움이 되었습니까?

해결책 5

Oracle Support는 삭제/존재 작업이 진행되는 동안 Oracle 실행 파일에서 실행되는 프로세스 모니터 결과를 살펴본 후 서버를 다시 시작할 것을 제안했습니다. 그들은 행동이 결과를 얻는다는 것을 알았습니다 STATUS_USER_SESSION_DELETED (0xC0000203) 원격 서버에서 로컬 서버와 원격 서버 간의 통신이 Windows 레벨에서 올바르게 작동하지 않음을 의미합니다. 이번 주말에 다시 시작하여 문제가 해결되는지 확인할 계획입니다.

다른 팁

데이터베이스 실행 내부에서 OS에 대한 명령은 oracle 계정. 그래서 당신은 zion it 에 읽고 쓸 수 있어야합니다. OS 레벨에서 에게 oracle 데이터베이스 내에서 Java 권한을 부여하는 것뿐만 아니라

파일을 삭제하는 것은 실제로 원하는 일입니까? 아니면 단지 테스트일까요? PL/SQL 프로 시저를 사용하여 파일을 삭제할 수 있으므로 utl_file.fremove ().

Oracle Admin 권한이있는 경우 원격 서버 (기타 도메인 서버) 호스트 이름을 확인하고 Oracle Listeners 목록에서 포트를 사용할 수 있습니까 ?? (Oracle NetManager 사용) 및 Listener.ora 파일도 확인합니다 ..

"그러나 파일 객체를 만들고 파일을 삭제하려고 시도"a) 파일 이름에서 홀수 파일을 찾을 수 없기 때문에 삭제가 실패했는지 판단 할 수 있습니까? 그 공유를보고있는 것 (복제, 백업, 바이러스 스캔) c) 허가가 충분하지 않음

기본 파일 시스템은 무엇입니까?

전체 코드 청크를 게시하는 것은 어떻습니까? 다른 포럼에서는 동일한 파일 핸들을 사용할 수 없을 수도 있습니다. "하지만 파일의 '핸들'을 기반으로 파일을 삭제하려고 할 기꺼이 내기를 기꺼이 할 것입니다.이 경우 그렇다면 할 수 없습니다. 파일 파일을 만들 때 사용한 다음 파일을 만들었고 ()를 삭제합니다. "

어떤 경우에는 작동한다는 사실은 문서화 된 행동보다는 '운'일 수 있습니다.

추신. 삭제 방법을 사용합니다 파일보다는 실패가 더 유익한 것처럼 보일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top