查看: 11655|回复: 6

[每日一题] PL/SQL Challenge 每日一题:2014-2-28 DBMS_ERRLOG.create_error_log

[复制链接]
论坛徽章:
526
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-3-4 03:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

我执行了这个语句:

CREATE TABLE plch_hitting_some_oracle_limit
(
   n   NUMBER (3),
   c   CLOB
)
/

哪些选项会使得下面的查询返回1? (查询在选项执行之后被执行)

SELECT COUNT (*)
  FROM user_tables
WHERE table_name = 'ERR$_PLCH_HITTING_SOME_ORACLE_'
/



(A)
BEGIN
   DBMS_ERRLOG.create_error_log (
      dml_table_name   => 'plch_hitting_some_oracle_limit');
END;
/

(B)
BEGIN
   DBMS_ERRLOG.create_error_log (
      dml_table_name     => 'plch_hitting_some_oracle_limit',
      skip_unsupported   => TRUE);
END;
/

(C)
BEGIN
   DBMS_ERRLOG.create_error_log (
      dml_table_name       => 'plch_hitting_some_oracle_limit',
      err_log_table_name   => 'err$_plch_hitting_some_oracle_',
      skip_unsupported     => TRUE);
END;
/


(D)
BEGIN
   DBMS_ERRLOG.create_error_log (
      dml_table_name       => 'plch_hitting_some_oracle_limit',
      err_log_table_name   => 'plch_hitting_errors',
      skip_unsupported     => TRUE);
END;
/


论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
发表于 2014-3-4 08:56 | 显示全部楼层
答案:B、C

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
517
日产
日期:2014-03-13 11:19:58生肖徽章2007版:虎
日期:2014-03-03 15:05:362009新春纪念徽章
日期:2014-03-06 16:42:45ITPUB8周年纪念徽章
日期:2014-03-07 10:17:312010新春纪念徽章
日期:2014-03-06 16:41:27ITPUB9周年纪念徽章
日期:2014-03-05 22:08:282011新春纪念徽章
日期:2014-03-06 16:42:37ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2014-03-06 16:50:25红宝石
日期:2014-03-22 09:47:24
发表于 2014-3-4 09:04 | 显示全部楼层
记得这是解决批量加载出错的时候用的东西。
正确答案B、C
A 错误,errlog 不支持LONG, CLOB, BLOB, BFILE, and ADT ,所以需要skip_unsupported     => TRUE这个参数,默认参数值为false。
B 正确,默认的errlog表为ERR$_+表名这种格式,大于30位,则会截取,截取后log表名称为:ERR$_PLCH_HITTING_SOME_ORACLE_。
C 正确,指定了errlog表名为ERR$_PLCH_HITTING_SOME_ORACLE_。
D 错误,因为它指定了errlog表名为plch_hitting_errors。

使用道具 举报

回复
论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
发表于 2014-3-4 09:09 | 显示全部楼层
DBMS_ERRLOG.CREATE_ERROR_LOG(dml_table_name          IN VARCHAR2,
                                                err_log_table_name      IN VARCHAR2 := NULL,   
                                                err_log_table_owner     IN VARCHAR2 := NULL,   
                                                err_log_table_space     IN VARCHAR2 := NULL,   
                                                skip_unsupported         IN BOOLEAN := FALSE)
为指定的表(DML_TABLE_NAME)创建错误记录表,记录DML操作的错误记录。
DML_TABLE_NAME 指定DML操作的基表/视图名称
ERR_LOG_TABLE_NAME 缺省用ERR$_DML_TABLE_NAME前25个字符
ERR_LOG_TABLE_OWNER 指定错误记录表宿主,缺省是当前用户
ERR_LOG_TABLE_SPACE 指定存储表空间
SKIP_UNSUPPORTED 缺省是FALSE,当基表里有大数据类型(BLOB,CLOB...)时过程会终止。

综上所述,B、C成功创建名称为ERR$_PLCH_HITTING_SOME_ORACLE_的错误记录表,A、D不能创建。

使用道具 举报

回复
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-3-4 11:50 来自手机 | 显示全部楼层
默认截取要是前面大多数重复就可能重名

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
517
日产
日期:2014-03-13 11:19:58生肖徽章2007版:虎
日期:2014-03-03 15:05:362009新春纪念徽章
日期:2014-03-06 16:42:45ITPUB8周年纪念徽章
日期:2014-03-07 10:17:312010新春纪念徽章
日期:2014-03-06 16:41:27ITPUB9周年纪念徽章
日期:2014-03-05 22:08:282011新春纪念徽章
日期:2014-03-06 16:42:37ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2014-03-06 16:50:25红宝石
日期:2014-03-22 09:47:24
发表于 2014-3-4 15:15 | 显示全部楼层
我的答案不太严谨,如果在执行存储过程前,就已经有了名为ERR$_PLCH_HITTING_SOME_ORACLE_的表,那么ABCD都是正确的。

使用道具 举报

回复
论坛徽章:
526
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
 楼主| 发表于 2014-3-5 03:47 | 显示全部楼层
答案BC, 3楼得奖。

A: 这个选项会报错: "ORA-20069: Unsupported column type(s) found: C"
如果你的表中有CLOB类型或者其他不支持的类型的列,你必须将skip_unsupported参数指定为TRUE
B: 通过将skip_unsupported参数指定为TRUE,不支持的类型的列将被跳过,并且不会加入到错误日志表。
C: (不推荐)
我告诉ORACLE创建一张错误日志表,同时指定了我自己为日志表起的名字。我们不推荐这个选项,因为我指定的名字和ORACLE自己生成的缺省表名一模一样。所以,有什么理由重新“再现”那个表名截断算法?要么选一个不同的(更好的!)名字,或者让ORACLE自己完成这件事。
D: 现在我提供了自己的表名PLCH_HITTING_ERRORS,因此查询返回0行。

使用道具 举报

回复

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

本版积分规则 发表回复

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