搜索|收藏|地图|订阅|图片|论坛|商城

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

来源:赛迪网 编辑:若水 时间:2008-05-12

  分区表的可用性:

  创建一个分区表:

  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、分区受损,只需要恢复该受损分区及可,这样减少了系统故障时间。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?