Когда-то в эти выходные одна из наших баз данных (11.1.0.7) начала испытывать проблемы с доступом к определенным папкам в части сети через Java. Я воспроизвел проблему, используя небольшую часть Java, которая ничего не делает, но создает объект файла и пытается удалить файл. От
база данных это работает для удаления локальных файлов и сетевых файлов на нашем \ zion \ dp \ share, но не на нашем \ zion \ it \ share.
У нас есть другая база данных, которая работает под той же учетной записью пользователя домена, у которой нет проблем с удалением файлов из этого расположения. Также вошел в систему как тот же пользователь домена на сервере, у которого есть проблемы, я могу запустить Java за пределами Oracle и без проблем удалить
файлы. Пользователь домена имеет полный контроль над папкой и вошел в систему как пользователь, которого я могу создавать, изменять и удалять файлы.
Если я не предоставил своему пользователю базы данных oracle соответствующие разрешения dbms_java, я получаю соответствующую ошибку java.security.AccessControlException. После того как я предоставил разрешение, java запускается до конца, команда delete возвращает false (ничего не удалено), и файл не удаляется.
Я открыл кейс с Oracle, но, похоже, они больше не помогут, потому что он включает в себя файловые команды, запускаемые из уровня Java, даже если он воспроизводится только из среды Oracle.
Тестовый код:
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) };
}
}
}