Java를 사용하여 파일을 삭제하는 Oracle 데이터베이스
-
07-07-2019 - |
문제
이번 주말에 우리 데이터베이스 중 하나 (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) 허가가 충분하지 않음
기본 파일 시스템은 무엇입니까?
전체 코드 청크를 게시하는 것은 어떻습니까? 다른 포럼에서는 동일한 파일 핸들을 사용할 수 없을 수도 있습니다. "하지만 파일의 '핸들'을 기반으로 파일을 삭제하려고 할 기꺼이 내기를 기꺼이 할 것입니다.이 경우 그렇다면 할 수 없습니다. 파일 파일을 만들 때 사용한 다음 파일을 만들었고 ()를 삭제합니다. "
어떤 경우에는 작동한다는 사실은 문서화 된 행동보다는 '운'일 수 있습니다.
추신. 삭제 방법을 사용합니다 길 파일보다는 실패가 더 유익한 것처럼 보일 것입니다.