本週末的某個時候,我們的一個數據庫(11.1.0.7)開始有問題通過Java訪問部分網絡上的某些文件夾。我使用java的一小部分來重現問題,它只做一個文件對象並嘗試刪除文件。從 數據庫中,這適用於刪除本地文件並刪除\ zion \ dp \ share中的網絡文件,但不能從\ zion \ it \ share中刪除。Oracle數據庫使用Java刪除文件
我們有另一個數據庫在相同的域用戶帳戶下運行,從這個位置刪除文件沒有問題。同時以服務器上的相同域用戶身份登錄,出現問題,我可以在Oracle之外運行Java,並且在刪除 文件時沒有問題。域用戶可以完全控制文件夾並登錄,因爲我可以創建,修改和刪除文件。
如果我沒有授予我的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) };
}
}
}
刪除只是一個測試。真正的處理將pdf與值和另一個pdf合併,以寫出新的pdf。 – 2009-09-16 16:14:16