楼主: wabjtam123

[精华] 倾情大奉献--ORACLE+UNIX易错问题集锦

[复制链接]
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
41#
发表于 2010-4-9 20:25 | 只看该作者
嗯,不错,这是本年度最有价值的分享。。。

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
42#
发表于 2010-4-9 23:05 | 只看该作者
确实用心写作的。刚刚看了几页。不错。总结的不错。

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
43#
发表于 2010-4-9 23:15 | 只看该作者
但是有个疑问刚刚看到
ORA-12841: 无法改变事务处理中的会话并行 DML 状态
好像没有解释清楚。哈哈

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
44#
发表于 2010-4-9 23:36 | 只看该作者
SQL> create table parallel_test as select * from dba_objects;

Table created

SQL> select table_name, degree from user_tables where table_name = upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           1

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL>

有点不明白为什么并行度为4的时候有问题呢?

我测试为1的时候咋没有问题呢?

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
45#
发表于 2010-4-9 23:42 | 只看该作者
索性来个更全面的测试,带着点疑问版主

SQL> create table parallel_test as select * from dba_objects;

Table created

SQL> select table_name, degree from user_tables where table_name = upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           1

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> drop table parallel_test;

Table dropped

SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;

Table created

SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           4

SQL> insert into paraller_test select * from dba_objects;

insert into paraller_test select * from dba_objects

ORA-00942: 表或视图不存在

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL>

我把并行度调整成了4还是没有问题,没有commit;

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
46#
发表于 2010-4-9 23:58 | 只看该作者
ORA-12838: cannot read/modify an object after modifying it in parallel
Cause: Within the same transaction, an attempt was made to add read or
modification statements on a table after it had been modified in parallel or with
direct load. This is not permitted.
ORA-12700 to ORA-19380 13-9
Action: Rewrite the transaction, or break it up into two transactions: one
containing the initial modification and the second containing the parallel
modification operation.

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
47#
发表于 2010-4-10 00:50 | 只看该作者
赶紧射精。。。。。啊

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2005-10-30 17:05:33奥运会纪念徽章:跆拳道
日期:2008-04-29 08:14:58祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:20:53ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54奥运会纪念徽章:跳水
日期:2012-06-17 09:51:23
48#
发表于 2010-4-10 09:05 | 只看该作者
楼主够强,无私奉献精神可嘉!!!

使用道具 举报

回复
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
49#
 楼主| 发表于 2010-4-10 09:10 | 只看该作者
原帖由 xsmdel 于 2010-4-9 23:42 发表
索性来个更全面的测试,带着点疑问版主

SQL> create table parallel_test as select * from dba_objects;

Table created

SQL> select table_name, degree from user_tables where table_name = upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           1

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test  select * from dba_objects;

49875 rows inserted

SQL> drop table parallel_test;

Table dropped

SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;

Table created

SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           4

SQL> insert into paraller_test select * from dba_objects;

insert into paraller_test select * from dba_objects

ORA-00942: 表或视图不存在

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL> insert into parallel_test select * from dba_objects;

49875 rows inserted

SQL>

我把并行度调整成了4还是没有问题,没有commit;



看来真是经典案例,你举的例子中的并行根本没有生效,所以当然不会有这个问题,你继续做实验,只不过在这个SESSION  设置alter session enable parallel dml;
你就明白了

SQL>
SQL> drop table  parallel_test;

Table dropped

SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;

Table created

SQL> alter session enable parallel dml;

Session altered

SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           4

SQL> insert into parallel_test select * from parallel_test;

59160 rows inserted

SQL> insert into parallel_test select * from parallel_test;

insert into parallel_test select * from parallel_test

ORA-12838: 无法在并行模式下修改之后读/修改对象

SQL>


如下是你的例子

SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;

Table created

SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           4

SQL> insert into parallel_test select * from parallel_test;

59161 rows inserted

SQL> insert into parallel_test select * from parallel_test;

118322 rows inserted

SQL>



差别知道了吧:)

其实完全可以通过执行计划和select * from v$px_session 等观察出来,你的例子并行度根本没生效,《ORACLE+UNIX易错集锦》前面就是描述这个为什么执行中看不到并行的例子,你可能没注意看:)

[ 本帖最后由 wabjtam123 于 2010-4-10 09:14 编辑 ]

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
50#
发表于 2010-4-10 09:43 | 只看该作者

回复 #49 wabjtam123 的帖子

确实是这个样。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表