ORA-01688:unable to extend table name。name partition NAME by NUM in tablespace NAME

 

在导入数据的时候出现这个错误

产生原因:指定的tablespace空间已经被占用满,无法扩展。

解决方法:使用“ALTER TABLESPACE ADD DATAFILE”命令增加文件系统文件和原始分区,或者增加INITIAL的大小(如:alter tablespace CDRS101 default storage(next 500M pctincrease 1))应该能够解决,否则就是有人使用你的表空间上创建了一个比较大的数据文件导致你的表空间不够用。我没有使用这种方法解决

我为了保证数据的一致性,进行的操作是:先把该表空间删除,然后重新创建一个大点的表空间。然后再次导入数据。(目的:清空该表空间中的数据,保持表空间中的数据正确。)

删除表空间中出现了问题

SQL->drop tablespace XXX including CONTENTS and datafiles; 删除执行的表空间

执行该语句时 出现ora-00054:resource busy and acquire with nowait specified这样的错误

原因:有事务正在执行(或者事务已经被锁),所有导致执行不成功。

 

解决办法:

1、用dba权限的用户查看数据库都有哪些锁

SQL->select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where l.object_id = o.object_id

and l.session_id=s.sid;

如:testuser 24 111 2009-3-5 17:40:05
知道被锁的用户testuser,sid为24,serial#为111

2、kill该事务
SQL->alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
如果该语句没有执行成功,按照下面的操作进行处理

3、如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=24

4、在OS上杀死这个进程(线程):

在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)

在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345
(注:在windows下的这种操作我没有试过。我用的是Linux)

到此,完全解决。

相关文章
相关标签/搜索