`
- 浏览:
444050 次
- 性别:
- 来自:
上海
-
空间RESUMABLE操作 (ora-01536、ora-06512)
摘自:
http://daizj.iteye.com/blog/1748258Oracle从9i开始引入这个功能,当出现空间不足等相关的错误时,Oracle可以不是马上返回错误信息,并回滚当前的操作,而是将操作挂起,直到挂起时间超过RESUMABLE TIMEOUT,或者空间不足的错误被解决。这一篇简单介绍空间RESUMABLE的例子。第一次碰到这个特性是在一次安装9i数据库的过程中,在利用DBCA工具建立数据库的时候,由于一个辅助表空间设置的数据文件比较小,导致表空间不足的问题产生,由于DBCA启用了这个特性,使得DBCA的建库进程在一个地方停留了很久(大概半个小时以上),这时才意识到安装过程碰到了以前没有遇到的问题。由于此时数据库的数据字典已经完全生成,因此通过sqlplus登陆到数据库,进行系统状态,以及安装进程的等待信息,才发现数据库建库操作进入SUSPEND状态,找到问题后,将目标表空间的数据文件加大,于是DBCA得以进行运行,并最终完成了建库操作。由于9i启用了这个特性,使得当时的建库操作没有因为空间不足而中途中止,因此当时对这个特性印象比较深。使用这个特性,可以使得一个长时间运行的数据库操作,不至于因为空间相关的错误而回滚,给了用户解决问题,并继续处理的能力。在9i中,RESUMABLE只能在会话级设置,而在10g中,Oracle新增了RESUMABLE_TIMEOUT初始化参数,使得RESUMABLE特性可以在数据库的实例级上进行设置。SQL> SELECT * FROM V$VERSION;BANNER------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production PL/SQL Release 9.2.0.4.0 - ProductionCORE 9.2.0.3.0 ProductionTNS for 32-bit Windows: Version 9.2.0.4.0 - ProductionNLSRTL Version 9.2.0.4.0 - ProductionSQL> CREATE USER U_RESUMABLE IDENTIFIED BY U_RESUMABLE;用户已创建。SQL> GRANT CONNECT TO U_RESUMABLE;授权成功。SQL> ALTER USER U_RESUMABLE QUOTA 1M ON USERS;用户已更改。SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92已连接。SQL> SET TIMING ONSQL> CREATE TABLE T (ID NUMBER)2 STORAGE (INITIAL 1M)3 TABLESPACE USERS;表已创建。已用时间: 00: 00: 00.12SQL> DROP TABLE T;表已删除。已用时间: 00: 00: 01.12SQL> CREATE TABLE T (ID NUMBER)2 STORAGE (INITIAL 2M)3 TABLESPACE USERS;CREATE TABLE T (ID NUMBER)*第 1 行出现错误:ORA-01536: 超出表空间'USERS'的空间限量已用时间: 00: 00: 00.10正常情况下,如果用户创建对象超过用户的QUOTA,则马上会返回错误信息,如果使用了RESUMABLE:SQL> CONN YANGTK/YANGTK@YTK92已连接。SQL> GRANT ALTER SESSION TO U_RESUMABLE;授权成功。已用时间: 00: 00: 00.01SQL> GRANT RESUMABLE TO U_RESUMABLE;授权成功。已用时间: 00: 00: 00.03SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92已连接。SQL> ALTER SESSION ENABLE RESUMABLE TIMEOUT 60;会话已更改。已用时间: 00: 00: 00.01SQL> CREATE TABLE T (ID NUMBER)2 STORAGE (INITIAL 2M)3 TABLESPACE USERS;CREATE TABLE T (ID NUMBER)*第 1 行出现错误:ORA-30032: 挂起的 (可恢复) 语句已超时ORA-01536: 超出表空间'USERS'的空间限量已用时间: 00: 01: 01.81可以看到,由于设置了会话的挂起超时为60秒,刚才运行0.1秒就会报错的建表语句,这次挂起了1分钟后在报错。再次执行这个操作:SQL> CREATE TABLE T (ID NUMBER)2 STORAGE (INITIAL 2M)3 TABLESPACE USERS;会话被挂起,并在1分钟内在另外的会话中,加大当前用户的QUOTA:SQL> CONN YANGTK/YANGTK@YTK92已连接。SQL> ALTER USER U_RESUMABLE QUOTA 5M ON USERS;用户已更改。这时挂起的会话会自动继续运行:表已创建。已用时间: 00: 00: 26.81SQL>合理的利用这个特性,可以避免很多由于空间不足引发的重复性工作。这一篇简单介绍空间RESUMABLE的相关视图和包。空间RESUMABLE操作(一):http://yangtingkun.itpub.net/post/468/485892前面简单介绍了空间RESUMABLE操作的使用,说明了一个会话如何才能ENABLE RESUMABLE语句,并设置TIMEOUT时间。那么随后问题就是,当数据库中发生了空间RESUMABLE操作,一些语句处于SUSPEND状态,由于没有错误信息的返回,如何判断这些语句是由于空间不足被挂起,还是处于其他的原因而处于等待状态。Oracle提供了USER_RESUMABLE和DBA_RESUMABLE视图,通过常用的V$SESSION_WAIT视图同样可以查询到SUSPEND状态。SQL> SELECT SUM(BYTES)/1024/10242 FROM DBA_FREE_SPACE3 WHERE TABLESPACE_NAME = 'TEST';SUM(BYTES)/1024/1024--------------------199.9375SQL> CREATE TABLE T (ID NUMBER)2 TABLESPACE TEST3 STORAGE (INITIAL 300M);CREATE TABLE T (ID NUMBER)*ERROR at line 1:ORA-01659: unable to allocate MINEXTENTS beyond 24 in tablespace TEST下面设置会话的RESUMABLE并设置TIMEOUT为300秒:SQL> ALTER SESSION ENABLE RESUMABLE TIMEOUT 300;Session altered.在另外的会话中查询:SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';Session altered.SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER2 FROM DBA_RESUMABLE;SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER---------- --------- ---------- -------------------- -------------------- ------------120 NORMAL 300 0由于会话设置了ENABLE RESUMABLE,因此在DBA_RESUMABLE视图中,已经可以看到这个会话信息了,不过目前会话处于正常状态。下面执行刚才报错的SQL语句:SQL> CREATE TABLE T (ID NUMBER)2 TABLESPACE TEST3 STORAGE (INITIAL 300M);会话进入到挂起状态,在另外的会话检查DBA_RESUMABLE视图:SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER2 FROM DBA_RESUMABLE;SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER---------- --------- ---------- -------------------- -------------------- ------------120 SUSPENDED 300 06/16/09 17:12:53 1659SQL> SELECT SID, EVENT2 FROM V$SESSION_WAIT3 WHERE SID = 120;SID EVENT---------- --------------------------------------------------120 statement suspended, wait error to be cleared当语句由于空间问题被挂起后,从DBA_RESUMABLE视图中可以看到会话的状态变为RESUPENDED,而且还有会话发生挂起的时间。从V$SESSION_WAIT视图或者10g以后的V$SESSION视图的EVENT列,也可以看到会话处于SUSPEND状态。除了解决空间问题使得这个会话恢复正常外,还可以通过DBMS_RESUMABLE包对这个会话进行维护操作,比如使用ABORT中止会话的挂起:SQL> EXEC DBMS_RESUMABLE.ABORT(120)PL/SQL procedure successfully completed.SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER2 FROM DBA_RESUMABLE;SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER---------- --------- ---------- -------------------- -------------------- ------------120 ABORTED 300 1659中止会话挂起后,可以从DBA_RESUMABLE看到会话处于ABORTED状态,导致会话发生挂起的错误信息仍然保留。而刚才被挂起的会话并不是报错ORA-1659错误,而是操作被中止的错误:CREATE TABLE T (ID NUMBER)*ERROR at line 1:ORA-01013: user requested cancel of current operationSQL>DBMS_RESUMABLE包除了ABORT过程外,还包括SET_TIMEOUT和GET_TIMEOUT等过程:SQL> SELECT DBMS_RESUMABLE.GET_TIMEOUT FROM DUAL;GET_TIMEOUT------------1SQL> SELECT DBMS_RESUMABLE.GET_SESSION_TIMEOUT(120) FROM DUAL;DBMS_RESUMABLE.GET_SESSION_TIMEOUT(120)---------------------------------------300当前会话没有设置ENABLE RESUMABLE,因此得到的结果是-1,如果要查询非当前会话的TIMEOUT值,使用GET_SESSION_TIMEOUT函数。SQL> EXEC DBMS_RESUMABLE.SET_SESSION_TIMEOUT(120, 3600)PL/SQL procedure successfully completed.SQL> SELECT DBMS_RESUMABLE.GET_SESSION_TIMEOUT(120) FROM DUAL;DBMS_RESUMABLE.GET_SESSION_TIMEOUT(120)---------------------------------------3600SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER2 FROM DBA_RESUMABLE;SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER---------- --------- ---------- -------------------- -------------------- ------------120 NORMAL 3600 0可以看到,设置会话120的TIMEOUT为3600之后,同时会清除会话的状态信息,以及ERROR_NUMBER等信息。除了在数据库中的视图中可以查询到错误信息,DBMS_RESUMABLE包的SPACE_ERROR_INFO函数,也可以看到错误信息,这个函数会在下一篇文章,配合AFTER SUSPEND触发器一起介绍。最后,在数据库外的alert文件中,一样可以看到错误信息:Tue Jun 16 17:01:48 2009ORA-1652: unable to extend temp segment by 512 in tablespace TESTTue Jun 16 17:12:53 2009statement in resumable session 'User TEST(74), Session 120, Instance 1' was suspended due toORA-01659: unable to allocate MINEXTENTS beyond 24 in tablespace TESTTue Jun 16 17:14:34 2009statement in resumable session 'User TEST(74), Session 120, Instance 1' was aborted
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
python库。 资源全名:resumable-urlretrieve-0.1.6.tar.gz
资源来自pypi官网。 资源全名:google-resumable-media-0.2.3.tar.gz
tus-resumable-upload-protocol:用于可恢复文件上传的开放协议
可恢复的http下载(WIP) 可恢复的http下载(er) api 安装 使用可以: npm install @ironsource/rhd 执照 :copyright:ironSource ltd
1Document No: N4286Supersedes: N4134Date: 2014-11-18Reply to: Gor Nishanov (gorn@microsoft.com), Jim Radigan (jradigan@microsoft.com)Resumable Functions (revision 3) Contents Revisions and History ....
FileCopyPlus是一个小的实用程序,可以复制文件并保持当前状态。 如果复制由于任何原因被中断,只需重复执行该命令即可轻松恢复。 未来的改进可能包括多文件复制等。
资源来自pypi官网。 资源全名:django-resumable-0.1.1.tar.gz
资源来自pypi官网。 资源全名:s3resumable-0.0.3.tar.gz
前端项目-resumable.js,通过HTML5文件API提供多个同时、稳定、容错和可恢复/可重启上传的javascript库。
谷歌师兄的leetcode刷题笔记gcs-resumable-upload 使用内置的可恢复行为将文件上传到 Google Cloud Storage $ npm install gcs-resumable-upload const { upload } = require ( 'gcs-resumable-upload' ) ; const fs...
使用 resumable.js 上传文件的 Flask 应用程序。 这是一个例子。 它可能不应该按原样使用。 贡献 分叉吧 创建您的功能分支( git checkout -b my-new-feature ) 提交您的更改( git commit -am 'Added some ...
如果您想从一个域加载 resumable.js 库并将您的 Node.js 驻留在另一个域上,您必须允许来自 '*' 的 'Access-Control-Allow-Origin'。 请记住,启用此功能存在一些潜在的安全风险。 如果你还想实现跨域上传,打开 app...
例如: var resumable = require('resumable-eval')var session;(function() { var x = 1 session = eval(resumable) // Save the function scope})()// Interact with the saved scopesession .eval('...
PHP+Resumable.js分片上传,不限制上传文件类型
断言断言 断言替换以继续在调试器中执行 在任何大型应用程序中,有时会发生某些断言导致您当前不在意的代码失败,并且阻止整个团队运行该应用程序直到问题解决为止并不是最佳的工作流程。 因此,我们通常最终将执行...
什么是Resumable.js Resumable.js是一个JavaScript库,可通过提供多个同时,稳定和可恢复的上载。 该库旨在将容错功能引入通过HTTP上传大文件的过程。 这是通过将每个文件分成小块来完成的。 然后,每当块的上载...
该存储库不再维护。该代码已合并到。 该代码仓库不再提供维护。代码已经被合并到项目。 Amazon S3多线程简历迁移解决方案(Amazon S3多线程断点续传迁移) 支持断点恢复,适用于将大量文件传输到Amazon S3多线程...
可恢复pp 在C ++中实现可恢复Lambda的预处理器
Laravel Chunk上传介绍支持从5.2到7的Laravel(所有版本的集成测试均已涵盖)。 易于使用的服务/库可用于分块上传,在Laravel的文件上传之上还支持多个JS库,并且内存占用率低。 支持,自动清理计划和易于使用的功能...
使用Google Apps脚本的Web Apps断点续传消息 使用此功能时,可以上传大文件。 您也可以使用此js库。概述这是一个示例脚本,用于使用Google Apps脚本(GAS)在Web Apps上上传大文件(> 50 MB)。...