暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 交换分区和数据丢失

askTom 2017-05-04
343

问题描述

假设:
1) 插入物连续应用在表A上

要求:
需要与另一个表交换分区,但不想失去任何数据 (我对 “ORA-00054: 资源繁忙和获取与NOWAIT指定或超时过期” 异常很好,因为不会有相同的数据丢失)

Test Run:

放下表a;

放下表b;

drop序列sq_tst1;

drop序列sq_tst2;

创建表a
(
身份证号码,
dt日期,
瓦尔·瓦尔查尔2(10))
按范围划分 (dt) (
分区e1值小于 (最大值)
);

将表b创建为select *,其中1 = 2;

下面的PL SQL块需要在并行和中间的地方执行,我们可以执行exchange分区 (作为ALTER TABLE a EXCHANGE分区e1与表b;)

P1:

开始
我在1 ..1000000
循环
插入到值 (sq_tst1.NEXTVAL,SYSDATE-(1000000 i)/3600,'Test');
提交;
-- DBMS_LOCK.SLEEP(1);

结束循环;
结束;
/

P2:

开始
我在1 ..1000000
循环
插入到值 (sq_tst2.NEXTVAL,SYSDATE-(1000000 i)/3600,'Test');
提交;
-- DBMS_LOCK.SLEEP(1);

结束循环;
结束;
/

是否存在可能丢失数据的情况?exchange分区应该花费多少时间 (在最坏的情况下)?



专家解答

您不会丢失数据,例如

--
-- session 1
--
SQL> create sequence sq_tst1 cache 1000;

Sequence created.

SQL>
SQL> CREATE TABLE a
  2  (
  3  id NUMBER,
  4  dt DATE,
  5  val VARCHAR2(10))
  6  PARTITION BY RANGE(dt) (
  7  partition e1 values less than (MAXVALUE)
  8  );

Table created.

SQL>
SQL> create table b as select * from a where 1=2;

Table created.

SQL>
SQL> BEGIN
  2  for i in 1 .. 100000
  3  loop
  4  INSERT INTO a VALUES (sq_tst1.NEXTVAL, SYSDATE - (1000000 + i)/3600, 'Test');
  5  COMMIT;
  6  end loop;
  7  end;
  8  /
--
-- whilst running, in session 2
--
SQL> alter session set ddl_lock_timeout = 5;

Session altered.

SQL> alter table a exchange partition e1 with table b;

Table altered.


--
-- Session 1
--
PL/SQL procedure successfully completed.

SQL> select count(*) from a;

  COUNT(*)
----------
     66462

1 row selected.

SQL> select count(*) from b;

  COUNT(*)
----------
     33538

1 row selected.

复制


所以我们仍然有100,000行。请注意,(一如既往) 我们从不保证您不会删除序列值

SQL> select min(id), max(id) from b;

   MIN(ID)    MAX(ID)
---------- ----------
         1      33538

SQL> select min(id), max(id) from a;

   MIN(ID)    MAX(ID)
---------- ----------
     33540     100001
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论