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

Oracle 通过SQL视图插入时出现只读分区错误

ASKTOM 2020-06-10
424

问题描述

你好,
我们遇到了以下问题,我们正在寻求您的建议。
1) 我们有一个非常大的表 (财务应用程序,即数百万行),因此我们决定使用分区来提高性能并存档旧数据
2) 我们将旧分区定义为只读,以避免更改-不应进行任何更改。
3) 我们正在通过具有当前日期的SQL视图 (应用程序逻辑) 将新数据插入到分区表中-因此应将其存储到读写分区中
4) 我们收到错误SQL错误: “ORA-14466: 无法修改只读分区或子分区中的数据”
如果我们将分区更改为R/W,则没有问题。一个R/O分区,问题就会出现。即使插入肯定在其他地方。
如果我们将SQL视图名称更改为insert语句中的表名 (这只是列的限制),则R/O分区没有问题。

是否有DB或分区表的任何设置允许我们使用R/O分区,尽管用于插入的SQL视图?

谢谢


专家解答

抱歉-我们需要查看一个测试用例,因为我无法复制您的发现


SQL>
SQL> create table t
  2  ( d date,
  3    id int,
  4    data varchar2(20)
  5  )
  6  partition by range (d )
  7  (
  8    partition p1 values less than ( date '2018-01-01' ),
  9    partition p2 values less than ( date '2019-01-01' ),
 10    partition p3 values less than ( date '2020-01-01' ),
 11    partition p4 values less than ( date '2021-01-01' )
 12  );

Table created.

SQL>
SQL> insert into t
  2  select date '2017-01-01' + rownum, rownum, 'data'||rownum
  3  from dual connect by level <= date '2021-01-01' - date '2017-01-01' - 1;

1460 rows created.

SQL>
SQL> alter table t modify partition p1 read only;

Table altered.

SQL> alter table t modify partition p2 read only;

Table altered.

SQL>
SQL> create or replace
  2  view VW as
  3  select d,id from t
  4  where d > date '2020-01-01';

View created.

SQL>
SQL> delete from VW where id = 1100;

1 row deleted.

SQL> insert into VW values ( sysdate, 100);

1 row created.

SQL> insert into VW values ( date '2018-06-01', 100);
insert into VW values ( date '2018-06-01', 100)
            *
ERROR at line 1:
ORA-14466: Data in a read-only partition or subpartition cannot be modified.


SQL>
SQL>


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论