在演示事务的read only mode 的时候,因为一个错误有了这个意外的收获。场景是这样的:
在session 1 中执行了如下的语句。
SQL> set transaction read only;
Transaction set.
SQL> select count(*) from employees;
  COUNT(*)
----------
       107
在session 2 中执行如下的语句。
SQL>  insert into employees
  2  (employee_id, last_name, email,
  3  hire_date, job_id) values (210,
  4  'Hintz', 'JHINTZ', SYSDATE,
  5  'SH_CLERK');
 insert into employees
*
ERROR at line 1:
ORA-01502: 索引 'HR.EMP_EMAIL_UK' 或这类索引的分区处于不可用状态
嗯,这是因为以前我把这个索引的状态alter 成unusable了,好吧,我们rebulid。
SQL> alter index emp_email_uk rebuild;
Index altered.
SQL>  insert into employees
  2  (employee_id, last_name, email,
  3  hire_date, job_id) values (210,
  4  'Hintz', 'JHINTZ', SYSDATE,
  5  'SH_CLERK');
1 row created.
SQL> commit;
Commit complete.
现在貌似一切很正常,返回到session 1 中执行如下的语句。
SQL> select count(*) from employees;
select count(*) from employees
                     *
ERROR at line 1:
ORA-08176: 一致读取失败; 回退数据不可用
正常情况下,不应该啊,查看下undo 的保留时间,900s 足够了。也不可能
是undo tablespace 的空间不够,因为我的实验系统中每秒的事务量几乎为零。
就算空间不够也应该报“snapshot too old”的错。
SQL> show parameter undo
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ---------
undo_management                      string                 AUTO
undo_retention                       integer                900
undo_tablespace                      string                 UNDOTBS1
不由的让人想到上面的alter index 的语句。我们试着重现错误。
在session 1 中执行如下的语句.
SQL> set transaction read only;
Transaction set.
SQL> select count(*) from employees;
  COUNT(*)
----------
       107
在session 2 中执行如下的语句。
SQL> alter index emp_email_uk unusable;
Index altered.
SQL>  INSERT INTO employees
  2  (employee_id, last_name, email,
  3  hire_date, job_id) VALUES (210,
  4  'Hintz', 'JHINTZ', SYSDATE,
  5  'SH_CLERK');
 INSERT INTO employees
*
ERROR at line 1:
ORA-01502: 索引 'HR.EMP_EMAIL_UK' 或这类索引的分区处于不可用状态
SQL> alter index emp_email_uk rebuild;
Index altered.
返回到session 1 中执行如下的语句。
SQL> select count(*) from employees;
select count(*) from employees
                     *
ERROR at line 1:
ORA-08176: 一致读取失败; 回退数据不可用
--至此错误重现了。
通过重现错误,我们已经知道症结所在的,所以以后我们需要避免这种情况的发生。对这个ORA-08176 错误也有了更多的认识。最后我们来看看这个错误代码的信息:
ORA-08176: cannot continue consistent read for the table/index - no undo
records
Cause: Oracle encountered an operation that does not generate undo records.
For example, the operation might have been an attempt to create an index by
performing a direct load or executing a discrete mode transaction.
导致这个问题的根本原因是上面加黑的那句话。

ORA-08176 错误的一个案例的更多相关文章

  1. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  2. 批处理命令篇--配置免安装mysql 5.6.22, 以及1067错误的一个解决方法

    mysql 服务启动出现1067错误的一个解决方法: 当服务启动出现1067错误时,可查看“windows 事件查看器”,发现类似错误提示 Can't find messagefile 'F:\    ...

  3. office 2013幻灯片中插入SmartArt图形时出现错误下列一个或多个文件由于包含错误而无法运行

    office 2013幻灯片中插入SmartArt图形时出现错误下列一个或多个文件由于包含错误而无法运行 系统:win8 64位 PowerPoint2013 64位 在幻灯片中插入SmartArt图 ...

  4. Vue一个案例引发「内容分发slot」的最全总结

    今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做 ...

  5. Vue一个案例引发的递归组件的使用

    今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的<Vue一个案例引发的动态组件与全局事件绑定总结> 之后,今天来聊一聊我们如何在项 ...

  6. 【权限设计】一个案例,三个角色,简单说下B端产品的权限设计

    入行以来也接触过一些B端产品,这些产品之中权限管理是重中之重,权限管理不仅仅是整个系统的一个小小的模块,它一直贯穿整个系统,从登陆到操作到最后的登出.说它相当的复杂真不为过. 对于权限,如果从控制力来 ...

  7. urlretrieve关于循环下载的一个案例

    # -*- coding: cp936 -*- #python 27 #xiaodeng #urlretrieve关于循环下载的一个案例 import urllib def down_list(sto ...

  8. 通过一个案例彻底读懂10046 trace--字节级深入破解

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/37840583 2014.7.23晚20:30 Oracle support组猫大师分享&l ...

  9. 从一个案例窥探ORACLE的PASSWORD_VERSIONS

    1.环境说明 ORACLE 客户端版本 11.2.0.1 ORACLE 服务端版本 12.2.0.1 2.异常现象 客户端(下文也称为Cp)访问服务端(Sp),报了一个错误: Figure 1 以错误 ...

随机推荐

  1. Java中“==”和“equals()”的区别

    “==”比较的是变量所指向的对象,当S1在内存中定义以后,再定义s2的时候s2所指向的值是定义s1时候所创建的,而不是又在内存创建了一个“Monday”. “equals”比较的是对象所指向的值,所以 ...

  2. django的闪现和增、删、改、查

    使用 messages 闪现在views.py中导入 from django.contrib import messages 在html中 {% if messages %} {% for mess ...

  3. 图片上传组件webuploader

    前端组件webuploader 当时也是搞了很久参考这种demo,但是没记.现在事后大致总结下.直接上大概代码(我使用asp.net  MVC来做的): 执行顺序:(get)Record/Add——A ...

  4. LeetCode 653 Two Sum IV - Input is a BST 解题报告

    题目要求 Given a Binary Search Tree and a target number, return true if there exist two elements in the ...

  5. WSL(Windows Subsystem for Linux)笔记一安装与使用

    1.安装linux子系统 很简单直接在启动或关闭windows功能 中选择“适用于linux的windows子系统”,确定安装后重启即可,安装还是比较快的只用了几分钟. 也可以直接使用shell命令行 ...

  6. python摸爬滚打之day29----socketserver实现服务端和多个客户端通信

    什么是socketserver? TCP协议下的socket实现了服务端一次只能和一个客户端进行通信, 而socketserver实现了服务端一次能和多个客户端进行通信, 底层调用的还是socket. ...

  7. mybatis模糊查询

    今天遇到一个模糊查询的问题,需求是:根据传入的时间查询当天的所有数据,解决办法是使用$或者contact,具体sql模拟如下: select * from table_name where creat ...

  8. 基于Spark自动扩展scikit-learn (spark-sklearn)(转载)

    转载自:https://blog.csdn.net/sunbow0/article/details/50848719 1.基于Spark自动扩展scikit-learn(spark-sklearn)1 ...

  9. 拼多多(7pdd)微信跳转h5页面打开app跳转任意url关注技术weixin://dl/business/?ticket

    拼多多微信跳转接口利用了微信官方的weixin://dl/business/?ticket技术,此类接口可以在官方接口中找到,分析代码如下: <title>拼多多</title> ...

  10. TerminateProcess实现关闭任意程序

    #include <Windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTA ...