Oracle技术之串行隔离对延迟段和INTERVAL分区的支持
2013-07-09 10:09
477 查看
前两天看文档,提到了SERIALIZABLE隔离不支持延迟段创建和INTERVAL分区的功能,个人认为是由于这两种方式都是在DML中递归产生DDL的操作,因此在串行隔离时可能会导致问题。不过验证这个观点的时候,竟然发现现象与文档描述不符。
文档上的描述为:
Serializable transactions do not work with deferred segment creation or interval partitioning. Trying to insert data into an empty table with no segment created, or into a partition of an interval partitioned table that does not yet have a segment, causes an error.
而实际运行的结果:
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> CREATE TABLE T_DETER
2 (ID NUMBER)
3 SEGMENT CREATION DEFERRED;
表已创建。
SQL> CREATE TABLE T_INTERVAL
2 (ID NUMBER)
3 PARTITION BY RANGE (ID)
4 INTERVAL (1)
5 (PARTITION P1 VALUES LESS THAN (1));
表已创建。
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_DETER VALUES (1);
已创建1行。
SQL> COMMIT;
提交完成。
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_INTERVAL
2 SELECT ROWNUM
3 FROM TAB;
已创建12行。
SQL> COMMIT;
提交完成。
不知道这算是文档的描述有误,还是Oracle的实现存在问题,不过对于用户而言,当然是限制越少越好。
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:
引用 删除 yangtingkun / 2011-06-08 08:45:21
to redhouser:
既是你说的可以解释延迟段创建,也解释不了INTERVAL分区。
详细测试过程如下:
SQL> SHOW USER
USER 为 "TEST"
SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
USERS
SQL> CREATE TABLE T_DEFER (ID NUMBER)
2 SEGMENT CREATION DEFERRED;
表已创建。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
未选定行
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_DEFER
2 SELECT ROWNUM
3 FROM TAB;
已创建7行。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
未选定行
SQL> SELECT * FROM T_DEFER;
ID
----------
1
2
3
4
5
6
7
已选择7行。
SQL> COMMIT;
提交完成。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
SEGMENT_NAME
----------------------------------------------------------------
T_DEFER
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
文档上的描述为:
Serializable transactions do not work with deferred segment creation or interval partitioning. Trying to insert data into an empty table with no segment created, or into a partition of an interval partitioned table that does not yet have a segment, causes an error.
而实际运行的结果:
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> CREATE TABLE T_DETER
2 (ID NUMBER)
3 SEGMENT CREATION DEFERRED;
表已创建。
SQL> CREATE TABLE T_INTERVAL
2 (ID NUMBER)
3 PARTITION BY RANGE (ID)
4 INTERVAL (1)
5 (PARTITION P1 VALUES LESS THAN (1));
表已创建。
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_DETER VALUES (1);
已创建1行。
SQL> COMMIT;
提交完成。
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_INTERVAL
2 SELECT ROWNUM
3 FROM TAB;
已创建12行。
SQL> COMMIT;
提交完成。
不知道这算是文档的描述有误,还是Oracle的实现存在问题,不过对于用户而言,当然是限制越少越好。
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:
引用 删除 yangtingkun / 2011-06-08 08:45:21
to redhouser:
既是你说的可以解释延迟段创建,也解释不了INTERVAL分区。
详细测试过程如下:
SQL> SHOW USER
USER 为 "TEST"
SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
USERS
SQL> CREATE TABLE T_DEFER (ID NUMBER)
2 SEGMENT CREATION DEFERRED;
表已创建。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
未选定行
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
事务处理集。
SQL> INSERT INTO T_DEFER
2 SELECT ROWNUM
3 FROM TAB;
已创建7行。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
未选定行
SQL> SELECT * FROM T_DEFER;
ID
----------
1
2
3
4
5
6
7
已选择7行。
SQL> COMMIT;
提交完成。
SQL> SELECT SEGMENT_NAME
2 FROM USER_SEGMENTS
3 WHERE SEGMENT_NAME = 'T_DEFER';
SEGMENT_NAME
----------------------------------------------------------------
T_DEFER
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
相关文章推荐
- Oracle技术之串行隔离对延迟段和INTERVAL分区的支持
- Oracle技术之SYS用户对象不支持延迟段
- Oracle技术之SYS用户对象不支持延迟段
- Oracle 技术支持之现场优化的思维路径
- 任务问题Oracle 技术支持之现场优化的思维路径
- 受到Oracle database 和RAC database 支持的 虚拟化技术和分区技术(partitioning Technologies )
- Oracle分区技术
- 安装oracle10g“程序异常终止。发生内部错误。请将以下文件提供给oracle技术支持部门
- 技术解析系列 | PouchContainer 支持 LXCFS 实现高可靠容器隔离
- 柯南君 :Oracle 分区技术 之 如何支撑大数据操作?
- Oracle 11g 间隔分区(INTERVAL)批量规范命名
- Oracle:管理 date类型 interval 动态变化的分区:查询、删除
- windows2008 安装oracle10g“程序异常终止。发生内部错误。请将以下文件提供给oracle技术支持部门
- oracle Interval 分区维护与管理要点
- 【技术支持】Oracle imp/exp应用全解析
- oracle 技术支持
- 关于oracle分区技术--初了解
- windows2008 安装oracle10g“程序异常终止。发生内部错误。请将以下文件提供给oracle技术支持部门 .
- Oracle 自动拓展分区的实现(11g后使用interval分区)
- oracle分区交换技术