实例讲解分区表的可用性及相关错误案例


分区表的可用性:

创建一个分区表:


 
CREATE TABLE employee

( empno int,

ename varchar2(20)

)

PARTITION BY HASH (empno)

( partition part_1 tablespace TBS_DAIMIN,

partition part_2 tablespace USERS

)

SQL> insert into employee select empno, ename from scott.emp

2 ;

14 rows created.

commit;

SQL> select * from employee partition(part_1);

EMPNO ENAME

---------- --------------------

7369 SMITH

7499 ALLEN

7654 MARTIN

7698 BLAKE

7782 CLARK

7839 KING

7876 ADAMS

7934 MILLER

8 rows selected.

SQL> select * from employee partition(part_2);

EMPNO ENAME

---------- --------------------

7521 WARD

7566 JONES

7788 SCOTT

7844 TURNER

7900 JAMES

7902 FORD

6 rows selected.
 
假如将该表的一个分区offline之后,出现下面的错误:

SQL> alter tablespace TBS_DAIMIN offline;

SQL> select * from employee;

select * from employee

*

ERROR at line 1:

ORA-00376: file 12 cannot be read at this time

ORA-01110: data file 12: '/opt/ora9/product/9.2/dbs/tbs_daimin02.dat'

原因:

主要是因为该表的一个分区已经offline,而 select * from employee是访问整个表的信息,这样必然需要访问表的所有分区,当访问到已经offline的时候,则会报错;

但是如果是试图访问联机的分区的数据,则可以成功;如下:

SQL> variable n number

exec :n :=SQL> 7521

PL/SQL procedure successfully completed.

SQL> select * from employee where empno = :n

2 ;

EMPNO ENAME

---------- --------------------

7521 WARD

但是这样分区有个好处就是放一张分区表出现故障时,可以通过分析确认是表的哪个分区出现故障,然后将出现故障的分区通过优化器从方案中排除对该分区的数据查询,可以减少故障时间。

比方说:

有一个100GB的表,并且这个表被分成50个2GB的分区,可以更快的从系统错误中恢复过来。如果有一个2GB的分区受损,则恢复时间则就恢复一个2GB分区所花费的时间,而不是恢复一个100GB的表所花费的时间

可用性得到了提高:

1、分区可以用优化器来排除,使得一个分区的破坏不会对用户产生很大的影响,最多就是查询不到受损分区的数据;

2、分区受损,只需要恢复该受损分区及可,这样减少了系统故障时间

本文作者:



相关阅读:
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
利用ASP实现在线生成电话图片效果脚本附演示
考察DataGrid控件: Part 4 (上
基于jQuery实现点击同时更改两个iframe的网址
JavaScript:判断iframe是否加载完成的完美方法
怎样在ASP.NET中使用三层架构
-moz-user-select与onselectstart 禁止选择文字的方法
Linux系统下设置开机启动文件的方法
JS中encodeURIComponent函数用php解码的代码
直接通过ADO操作Access数据库
BluePage通用分页类助开发者提高开发效率
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
JS获取IUSR_机器名和IWAM_机器名帐号的密码
css基础教程属性篇之四
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4