我使用ojdbc6.jar库编写Java应用程序,使用命令删除Oracle中的表空间:
drop tablespace test including contents and datafiles cascade constraints;
但是当命令完成(成功没有错误)时,数据文件仍存在于我的操作系统中 当我直接在sqlplus或SQL Developer上运行此命令时,数据文件将眨眼间消失。
这是我创建表空间的SQL脚本(我不认为这是原因)
CREATE TABLESPACE UC4_112_DATA
DATAFILE 'D:\app\oradata\testimport\tablespace_bond_75.dbf'
SIZE 128M
AUTOEXTEND ON NEXT 100M MAXSIZE 5000M
DEFAULT STORAGE (INITIAL 512K NEXT 2048K MAXEXTENTS UNLIMITED);
我在Windows 8上使用Oracle 11G2安装 你们之前是否遇到过这种症状以及如何解决这个问题? 代码java运行此命令(以两种方式运行脚本文件和运行命令)
SQLRunner sqlRunner = null;
try {
logger.info("Executing SQL query/script ...");
sqlRunner = new SQLRunner(connection);
sqlRunner.setStopOnError(true);
if (scriptFile != null) {
sqlRunner.setScriptDelimiter(scriptSeperator);
File tempFile;
URI uri = new URI(scriptFile);
if (uri.getScheme() == null){
tempFile = new File(scriptFile);
}else{
String fileInURI = URLEncoder.encode(uri.toURL().getFile(), "UTF-8");
String filename = URLDecoder.decode(fileInURI, "UTF8");
filename = normalizePath(filename, charMap, false, scriptFile.length() - filename.length());
filename = filename.replace("BACK_TICK", "`");
tempFile = new File(filename);
}
sqlRunner.executeScript(tempFile);
} else {
String query = parser.getOptionValue(queryArg);
query = decryptIfEncrypted(query);
String outputSeperator = parser.getOptionValue(outputSeperatorArg);
if (outputSeperator == null) {
outputSeperator = "#!#";
}
SQLResult result = sqlRunner.executeSQL(query);
printResult(result, outputSeperator);
}
sqlRunner.commit();
logger.info("Executed SQL query/script successfully.");
} catch (SQLException e) {
sqlRunner.rollback();
logger.error(e);
if (e.getMessage().contains(" exist"))
returnCode = ErrorCodes.SQL_EXISTS_ERROR;
else
returnCode = ErrorCodes.EXCEPTION;
} catch (URISyntaxException e) {
logger.error(String.format("Invalid URI file \"%s\" !!!", scriptFile), e);
returnCode = ErrorCodes.PARAMSMISMATCH;
} finally {
if (sqlRunner != null)
sqlRunner.close();
}
答案 0 :(得分:3)
在Windows平台(实际上是Windows平台的限制)中,此行为是预期的,在该平台上,只有打开文件的所有进程才能将其删除。
在删除表空间之前发出ALTER DATABASE DATAFILE '<file_name>' OFFLINE DROP;
。
错误2338968: DROP TABLESPACE并不总是自动删除数据文件。