在演示事务的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. ul的margin撑不开想要的距离的办法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Mybatis获取传参

    取自  https://blog.csdn.net/weixin_38303684/article/details/78886375 mybatis中SQL接受的参数分为:(1)基本类型(2)对象(3 ...

  3. RMAN备份filesperset用法

    用filesperset控制备份集的尺寸 当指定filesperset参数时,rman比较filesperset与自动计算出来的值(对每个已分配通道的文件数目) 并取其中较小的那个值来保证所有的通道被 ...

  4. matlab中CRC的函数使用

    先学习一下matlab中CRC函数. 语法如下: h = crc.generator(‘Polynomial', polynomial, ‘param1', val1, etc.) 再看一个例子就比较 ...

  5. YII - 打印 SQL

    $query = Order::find()->select(['order_sys_id'])->where(['order_car_id'=>'AA','order_status ...

  6. 【window】mongodb安装和配置

    最近要独立开发vue+mongodb+node的小项目,项目不大,但之前没了解过mongodb还是蛮不容易的,因为以前用MySQL的时候都是用的集成化的工具,完全不用写命令去启动,用mogodb首先需 ...

  7. C#基础加强(9)之对象序列化(二进制)

    介绍 对象序列化是将对象转换为二进制数据(字节流),反序列化是将二进制数据还原成对象.对象的非持久态的,不仅在程序重启.操作系统重启会造成对象的丢失,就是退出函数范围等都可能造成对象的消失,而序列化与 ...

  8. dataTable使用方法

    using System; using System.Data; using System.Data.SqlClient; namespace App{ class MyClass{ public s ...

  9. xgboost 最优参数, df某一个字段进行字符串搜索

    0.909323  with:   {'max_depth': 6, 'min_child_weight': 0.8, 'n_estimators': 800} df_huoguo = df[df.c ...

  10. 运维面试题之linux编程

    吐槽: linux下的编程基本上都很简单包括shell 三剑客和vim的使用,也可能写ansible的playbook,有基础都是一两天可以学会的,正则表达式都是试出来的不知道有些面试官让我们在纸上写 ...