问题描述
你好,
我们遇到了以下问题,我们正在寻求您的建议。
1) 我们有一个非常大的表 (财务应用程序,即数百万行),因此我们决定使用分区来提高性能并存档旧数据
2) 我们将旧分区定义为只读,以避免更改-不应进行任何更改。
3) 我们正在通过具有当前日期的SQL视图 (应用程序逻辑) 将新数据插入到分区表中-因此应将其存储到读写分区中
4) 我们收到错误SQL错误: “ORA-14466: 无法修改只读分区或子分区中的数据”
如果我们将分区更改为R/W,则没有问题。一个R/O分区,问题就会出现。即使插入肯定在其他地方。
如果我们将SQL视图名称更改为insert语句中的表名 (这只是列的限制),则R/O分区没有问题。
是否有DB或分区表的任何设置允许我们使用R/O分区,尽管用于插入的SQL视图?
谢谢
我们遇到了以下问题,我们正在寻求您的建议。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




