1 可恢复的空间分配的概览
Oracle数据库服务器提供了在空间分配失败时暂停并随后再执行恢复操作。这样能够采取纠正操作,而不是由Oracle数据库服务器向用户返回错误。纠正错误后,暂停的操作将自动恢复。这个特性称为“可恢复空间分配”。受影响的语句称为“可恢复语句”。只有当系统或会话启用了可恢复语句特性时,语句才会以可恢复模式执行。
挂起语句会自动导致挂起事务。因此,在SQL语句的挂起和恢复过程中,所有事务资源都被保留。当错误条件消失时(例如,由于用户干预或其他查询释放的排序空间),挂起的语句自动恢复执行。当发生下列情况之一时,恢复语句被挂起:
Out of space condition
Maximum extents reached condition
Space quota exceeded condition
挂起超时间隔与可恢复语句相关联。在超时时间间隔内(默认为2小时)挂起的可恢复语句将重新激活并将异常返回给用户。可恢复语句可以挂起并恢复多次。
2 启用和禁用可恢复的空间分配
只有在启用了恢复模式的会话中执行语句时,才能进行恢复空间分配。有两种方法来启用和禁用可恢复的空间分配:
发出ALTER SESSION ENABLE恢复命令。
使用ALTER SESSION或ALTER SYSTEM语句将RESUMABLE_TIMEOUT初始化参数设置为一个非零值。
当为会话或数据库启用恢复模式时,可以指定一个超时时间,如果没有发生任何干预,在此之后,挂起的语句将错误地输出。RESUMABLE_TIMEOUT初始化参数表示超时发生前的秒数。还可以使用以下命令指定超时时间:
ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600;
超时的值一直有效,直到被另一个ALTER SESSION ENABLE RESUMABLE语句更改,或者通过另一种方式更改,或者会话结束。使用ENABLE RESUMABLE TIMEOUT子句来启用恢复模式的默认超时时间间隔是7,200秒,也就是2小时。
exa:
ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600 NAME ‘multitab insert’;
查询涉及可回收空间的语句:
Example:
SELECT name, sql_text FROM user_resumable;
NAME SQL_TEXT
multitab insert INSERT INTO oldsales SELECT * FROM sh.sales;




