ORA-01119: error in creating database file ***

case1.今天在运行amx-bpm deploy-bpm的脚本时遇到了这个错误

setup-target-instance:
      [sql] Executing resource: /home/michael/amx-bpm20-conf/tibco/data/bpm/database/admin/setup-admin.sql
      [sql] Failed to execute:  CREATE TEMPORARY TABLESPACE bpm_tablespace_temp TEMPFILE 'bpm_tablespace_temp.dbf' size 100M AUTOEXTEND ON

BUILD FAILED
/home/michael/amx-bpm20-conf/tibco/data/tct/bpm/2013-02-20-11-04-18/scripts/build.xml:47: The following error occurred while executing this line:
/home/michael/amx-bpm20/bpm/2.0/scripts/instance-mgmt.xml:685: The following error occurred while executing this line:
/home/michael/amx-bpm20/bpm/2.0/scripts/instance-mgmt.xml:679: The following error occurred while executing this line:
/home/michael/amx-bpm20/bpm/2.0/scripts/database/build.xml:400: The following error occurred while executing this line:
/home/michael/amx-bpm20/bpm/2.0/scripts/database/build.xml:65: java.sql.SQLException: ORA-01119: error in creating database file 'bpm_tablespace_temp.dbf'
ORA-27038: created file already exists
OSD-04010: <create> option specified, file already exists



Total time: 7 seconds


看样子是oracle bpm_tablespace_temp.dbf已经创建过, 可我是第一次运行啊, 于是去运行脚本的客户端的各个文件夹下都没找到这个文件, 于是觉得这个应该是在oracle server的目录下, 让DBA帮我一搜, 果然在oracle的目录下有这个文件,C:\app\Administrator\product\11.2.0\dbhome_1\database\, 说明以前还是有人创建过, 所以命名冲突了. 于是把服务器端的文件重新命名(这样做是不正确的, 具体原因见case2), 或把客户端/home/michael/amx-bpm20-conf/tibco/data/bpm/database/admin/setup-admin.sql这个文件里SQL的文件命名改一下,


CREATE TEMPORARY TABLESPACE bpm_tablespace_temp TEMPFILE 'bpm_tablespace_temp.dbf' size 100M AUTOEXTEND ON;
CREATE TABLESPACE bpm_tablespace DATAFILE 'bpm_tablespace.dbf' size 512M AUTOEXTEND ON;



就pass了. 关于oracle表空间的介绍这里就不赘述了.


case2. 今天bpm客户端运行sql时遇到了下面的错误:
home/michael/amx-bpm2.2_home/bpm/2.2/scripts/database/build.xml:65: java.sql.SQLException: ORA-01119: error in creating database file 'bpm_tablespace04.dbf'
ORA-27044: unable to write the header block of file
OSD-04008: WriteFile() failure, unable to write to file
O/S-Error: (OS 112) There is not enough space on the disk.


看意思是数据库的磁盘空间不够了, 于是我想要去手动删DBF, 刚要删时忽然想到这东西直接删除会不会有影响, 只把dbf删了就算删干净了么, 于是在网上一搜, 建议用一下命令在客户端执行

drop tablespace [DBF_NAME] INCLUDING CONTENTS AND DATAFILES


正常情况这个命令可以执行成功, 并且能自动删除v$tablespace表里的tablespace的名字和服务器端的dbf, 但是如果这个命令执行失败了, 比如:
21:27:51  [DROP - 0 row(s), 0.000 secs]  [Error Code: 959, SQL State: 42000]  ORA-00959: tablespace 'BPM3_TABLESPACE_2' does not exist
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]

我猜想可能是和这个dbf文件相关的database或系统表v$tablespace里的信息已经没有了, 还有可能是有人遇到case1的情况, 手动去server端把dbf文件重命名了(这样做不正确, 表空间重命名也有相应的命令, 见PS), 导致命令找不到原有的文件, 这样只能手动来删除了. 所以建议日常情况下不要随意手动删除数据库server下的dbf文件, 甚至其他文件. Oracle这么强大的数据一定会有相应的命令来正常管理所有server端的东西.


PS:

表空间重命名
SQL> alter tablespace [DBF_NAME1] rename to [DBF_NAME2];

Tablespace altered.


查看所有的表空间
select * from v$tablespace


如何查看某个表空间中的表
select * from  all_tables where tablespace_name='bpm_tablespace'



表空间的详细介绍, 请参考这位大侠的博客:
http://blog.csdn.net/robinson_0612/article/details/5611738

猜你喜欢

转载自mxy0521.iteye.com/blog/1810223