精华内容
下载资源
问答
  • 昨天有用户反馈使用业务用户查询表中数据时,显示为0条,事实上表中是有数据。...对于SQL执行情况,使用10046及dbms_xplan.display_cursor分析,可以清楚发现使用业务用户执行查询语句时,被自动加了FILTER...

    昨天有用户反馈使用业务用户查询表中数据时,显示为0条,事实上表中是有数据的。 

    登陆上数据库使用SYS用户去查询可以查出数据,使用业务用户查询,显示0行数据。 

    一开始在想是否是同义词视图之类等同名对象的影响,经排查也排除了这些可能。 对于SQL的执行情况,使用10046及dbms_xplan.display_cursor分析后,可以清楚的发现使用业务用户执行查询语句时,被自动加了FILTER过滤动作filter("TASSETACL"."RESPONSEAPPUSER"()=1 AND "TASSETACL"."RESPONSE"()=1); 看起来像是使用了数据防护类产品,让用户去了解是否近期新上了类似产品; 后面了解到是用户新上线了防统方系统(医院HIS系统),关闭后验证即可正常查询此表数据。后续重新设置此系统的规则,问题解决。 

    整个问题排查思路的主要过程:

    SYS用户查询:
    SQL> conn / as sysdba
    Connected.
    SQL> select count(*) from AAHIS.AA_ABCD;
    
      COUNT(*)
    ----------
          2365
    
    SQL> set pagesize 100 linesize 150
    col plan_table_output for a120
    set long 9000
    select * from table(dbms_xplan.display_cursor(null,null,'advanced'));SQL> SQL> SQL> 
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------
    SQL_ID  ft2a43ra3rp2g, child number 0
    -------------------------------------
    select count(*) from AAHIS.AA_ABCD
    
    Plan hash value: 474665402
    
    ------------------------------------------------------------
    | Id  | Operation             | Name       | Rows  | Cost  |
    ------------------------------------------------------------
    |   0 | SELECT STATEMENT      |            |       |     2 |
    |   1 |  SORT AGGREGATE       |            |     1 |       |
    |   2 |   INDEX FAST FULL SCAN| PK_AA_ABCD |  2327 |     2 |
    ------------------------------------------------------------
    
    
    业务用户查询:
    SQL> conn AAHIS/AAHIS
    Connected.
    SQL> 
    SQL>  select count(*) from AAHIS.AA_ABCD;
    
      COUNT(*)
    ----------
             0
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 3465689780
    
    -------------------------------------------------------------
    | Id  | Operation              | Name       | Rows  | Cost  |
    -------------------------------------------------------------
    |   0 | SELECT STATEMENT       |            |     1 |     2 |
    |   1 |  SORT AGGREGATE        |            |     1 |       |
    |*  2 |   FILTER               |            |       |       |
    |   3 |    INDEX FAST FULL SCAN| PK_AA_ABCD |  2327 |     2 |
    -------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - filter("TASSETACL"."RESPONSEAPPUSER"()=1 AND
                  "TASSETACL"."RESPONSE"()=1)
    
    10046TRACE的跟踪:
    SQL ID: ft2a43ra3rp2g Plan Hash: 474665402
    select count(*) 
    from
     AAHIS.AA_ABCD
    call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.01          0          0          0           0
    Execute      1      0.00       0.00          0          0          0           0
    Fetch        2      0.00       0.00          0         17          0           1
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total        4      0.00       0.01          0         17          0           1
    
    Misses in library cache during parse: 1
    Optimizer mode: CHOOSE
    Parsing user id: SYS
    Number of plan statistics captured: 1
    
    Rows (1st) Rows (avg) Rows (max)  Row Source Operation
    ---------- ---------- ----------  ---------------------------------------------------
             1          1          1  SORT AGGREGATE (cr=17 pr=0 pw=0 time=365 us)
          2365       2365       2365   INDEX FAST FULL SCAN PK_AA_ABCD (cr=17 pr=0 pw=0 time=193 us cost=2 size=0 card=2327)(object id 23207)
    
    
    ====
    SQL ID: ft2a43ra3rp2g Plan Hash: 3465689780
    select count(*) 
    from
     AAHIS.AA_ABCD
    call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.00          0          0          0           0
    Execute      1      0.02       0.08          0          0          0           0
    Fetch        2      0.00       0.00          0          0          0           1
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total        4      0.02       0.09          0          0          0           1
    Misses in library cache during parse: 1
    Optimizer mode: CHOOSE
    Parsing user id: 41  
    Number of plan statistics captured: 1
    
    Rows (1st) Rows (avg) Rows (max)  Row Source Operation
    ---------- ---------- ----------  ---------------------------------------------------
             1          1          1  SORT AGGREGATE (cr=45 pr=2 pw=0 time=87006 us)
             0          0          0   FILTER  (cr=45 pr=2 pw=0 time=87000 us)
             0          0          0    INDEX FAST FULL SCAN PK_AA_ABCD (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=2327)(object id 23207)
    展开全文
  • Error = 0 程序是不存在,怎样收集和处理程序中错误?怎样更好地利用错误信息收集...目前,按照我个人理解,软件中错误收集和反馈方式主要有如下几种:第一种方式:使用常用信息输出语句。 对于控制...

    Error = 0 的程序是不存在的,怎样收集和处理程序中的错误?怎样更好地利用错误信息的收集和反馈来协助程序的调试?怎样让产品发布后,用户能够反馈出更有价值的问题信息?这些问题是本文将要涉及的,最近对自己所做项目中的错误处理机制做了一些总结与思考,故在此讨论,希望对大家有所帮助。


    目前,按照我个人的理解,软件中的错误收集和反馈方式主要有如下几种:


    第一种方式:使用常用的信息输出语句。

        

    对于控制台程序,可以使用 printf 语句或者 std::cout 将错误信息打印出来;对于MFC程序,可以使用 TRACE 宏,将错误信息输出到 output 窗口,或者使用 MessageBox直接弹出对话框将错误信息告知用户 。

        

    这些处理策略往往针对于“交互性”的代码段,可以实现 实时反馈错误信息,以供用户实时地进行处理,以免后面产生更大的错误。


    第二种方式:使用错误日志方式

        

    思想:将程序中的所有错误信息输出到错误日志文件中,这样有以下这些好处:

        

    1. 当程序发布后,客户在使用中遇到问题后,可以直接将错误日志发送给程序员,将极大地方便了问题的定位及原因的分析。

        

    2. 便于调试多线程或者涉及网络通信等复杂的程序,因为在这样的程序中,设置断点的调试方式非常地不方便,一旦暂停在断点处,往往为引起线程异常或者 网络连接断开等问题,极大影响了调试的效率。如果将错误信息打印到文件中,错误描述详细丰富一些,可以极大地提高调试的效率。

        

    3. 便于程序进行大规模的性能测试。例如:C/S模式的系统,进行100个客户端对服务器的访问测试,使用这种错误收集策略可以方便地通过分析错误日志文件来推测系统的性能。

        

    下面思考这样一个问题:很多软件的设计上都有一个类似TCP/IP协议的应用层的模块,该模块一般是直接与客户端交互的一层,它隔离了核心代码模块与客户端的耦合,那么,对于这样一种层次结构比较深设计方案,最底层发生的错误信息怎样传递到最上层?每一层都提供获取错误信息的接口?这样开销太大,也往往不够理想,那该怎样处理呢?

        

    我想应该主要有以下两种处理策略,也就是我即将引出的错误收集和反馈的第三种和第四种策略:


    第三种方式:异常机制

        

    这里说说C++的异常处理机制,它是一个用来有效地处理运行错误的非常强大且灵活的工具,它提供了更多的弹性、安全性和稳固性,克服了传统方法所带来的问题.

        

    异常的抛出和处理主要使用了以下三个关键字: try、 throw 、 catch 。

        

    抛出异常、捕获异常 ,这些是C++提供的极其方便地处理异常策略,可以实现在最底层抛出异常,由最上层捕获,并且处理。

        

    说实话,C++异常机制的确是一种处理错误和异常的很好的策略,如果需要使用该机制,需要从软件架构和设计时就要开始考虑,一旦软件结构和代码写到一定程度后,再引入异常机制将很难达到很好的效果。其实,要想用好c++异常机制,不是一件很容易的事,特别是对于项目组里面有大量新人的时候,故使用成本还是挺高的。

        

    关于C++异常机制很多C++书籍都有介绍,我也不在此赘述,本博客也有一篇C++异常机制的入门示例代码,有兴趣可以看看: http://ticktick.blog.51cto.com/823160/191881


    第四种方式:GetLastError模式

        

    经常开发windows程序的人应该都了解,windows程序有一个API:GetLastError,它其实代表着一种错误收集处理机制。 

        

    当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-localstorage)的机制。当函数返回时,它的返回值为flase就能指明一个错误已经发生。若要确定这是个什么错误,可以调用GetLastError函数来获取:该函数只返回线程的32位错误代码。

        

    WinError.h头文件包含了Microsoft公司定义的错误代码的列表。

        

    当Windows函数运行失败时,应该立即调用GetLastError函数。如果调用另一个Windows函数,它的值很可能被改写。

        

    Visual studio还配有一个小的实用程序,称为Error Lookup.

        

    如果在编写的应用程序中发现一个错误,可能想要向用户显示该错误的文本描述。Windows提供了一个函数,可以将错误代码转换成它的文本描述。该函数称为FormatMessage。

        

    以上就是GetLastError模式的介绍,可以简单地把它想象成为这样一种模式:有一个全局的变量,可以用来存放32位错误代码,一旦Windows函数运行失败,就将错误代码赋值给这个全局的变量,每当调用GetLastError,则将该错误代码返回出来以供外部分析原因。

        

    其实,我们自己也可以实现这样一个GetLastError模式的错误收集机制,收集整个程序中最新的错误信息,供上层及时调用查询,定义自己的错误代码和错误描述信息串,那么,怎样才能更好地实现属于自己的类似的错误收集反馈机制呢?怎样使它具有更好地移植性、健壮性(支持多线程等)和易扩展性(加入新的错误代码和信息)呢?我将在后面的文章中介绍我的思考和设计。


    小结

        

    以上就是我对软件中的错误收集策略的思考和总结,希望对各位有所帮助,也欢迎大家提出意见和建议。欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。


    展开全文
  • 其开源项目负责人James Pearce介绍说,Facebook从写下自己第一行PHP代码开始,第一次使用MySQL INSERT语句开始,开源就已经融入到公司工程师文化里面了。 Facebook不仅取之开源,更是不断开源其内部项目,...

    Facebook是全球最大的社交网站,它的成长背后离不开开源力量。其开源项目负责人James Pearce介绍说,Facebook从写下自己的第一行PHP代码开始,第一次使用MySQL INSERT语句开始,开源就已经融入到公司的工程师文化里面了。

    Facebook不仅取之开源,更是不断开源其内部项目,将内部成果反馈给开源社区,可以说,这才是一个伟大公司应有的态度。通过不断开源自己的产品项目,Facebook吸引了大量优秀开发者为其工作。可以通过文章 《后起之秀Facebook凭什么挑战互联网霸主Google?》详细了解Facebook背后的开源力量。 

    当然,开源的项目不全是高大上,还有一些小型项目值得一看。下面我们一起了解下2013年Facebook的那些小型开源项目。 

    1. xctool 

    一款Apple xcodebuild的替代工具,可以让构建和测试iOS和Mac项目变得更加简单,尤其适合持续集成(Continuous integration)式的开发实践。 

    xctool并是简简单单地进行替代,它还增加了一些新功能,如: 

    • 支持将构建&测试结果结构化输出
    • 界面友好,支持ANSI彩色输出
    • 速度更快,支持进行并行测试,使得运行速度提升2~3倍

    开源协议:Apache License 2.0 


    2. Buck 

    一款Android、Java构建工具,该项目的一个主要点就是放在了“提速Android构建过程”上。主要通过利用多核并行运行,保持跟踪无变化模块以减少重新构建时间等方式来达到减少总体构建时间的目的,具体可了解《Buck: What Makes Buck so Fast》。 

    开源协议:Apache License 2.0 

    3. Rebound 

    一个Java动画库,Rebound的弹簧模型(spring model)在应用程序中引入了现实世界的物理,创建的动画让人感觉很自然,可以用在滚动条、切换开关等场景下,可在项目主页中的Demo里面观察效果。 

    开源协议:BSD License 


    4. React 

    用于构建用户界面的JavaScript库,非常灵活,可与目前流行的库和框架一起使用,目前已经在Instagram及Facebook等网站进行了应用。 

    开源协议:Apache License 2.0 


    5. Regenerator 

    在Node.js中使用 generator ,最终会产生一堆无法在客户端执行的代码。所以,Facebook团队开发出了Regenerator,以替代Node.js中的原生generator,让开发者写出更加干净、功能强大的代码。 

    开源协议:BSD License 


    6. Huxley 

    Web应用程序UI测试工具,开发语言为Python。Huxley可以监控内容变化、进行屏幕截图,之后反馈给我们哪些地方进行了改动,对响应式设计测试也是可以的。 

    开源协议:Apache License 2.0 

    7. Presto 

    Facebook的分布式SQL查询引擎,可用来进行高速、实时的交互式数据查询与分析。Presto在CPU的性能和主要的查询性能上比Hive/MapReduce要好7~10倍以上。每天,会有1000名Facebook员工使用Presto对PB级的数据进行扫描,运行查询30000次以上。除Facebook公司外,Airbnb和Dropbox也都已经采用了Presto。 

    更多内容,可以参考CSDN文章 《比Hive高效7倍,Facebook推新一代查询引擎Presto》。 

    开源协议:Apache License 2.0 


    8. RocksDB 

    RocksDB基于 LevelDB的嵌入式key-value存储类库,但提高了扩展性,可以运行在多核处理器上、有效使用快速存储,支持IO绑定、内存和一次写负荷。可查看 极客头条的部分介绍。 

    开源协议:BSD License 


    9. Origami 

    无需编程即可通过Origami轻松创建交互设计原型。提示:Quartz Composer是Mac下一款图形编程工具,专门用来生成各种动态视觉效果,包括可交互的界面原型。 

    该工具提供的查看器支持Retina、支持原生全屏,当拖动图片时也会自动添加一个图层。同时,官方也给出了很多 范例,帮助使用者学习该工具的使用。 

    开源协议 内容 


    原文: Venturebeat / 编译:王殿进

    展开全文
  • 2.安装mongodb(下载页面),可使用robomongo来作为mongodb客户端工具(下载页面),启动mongodb(如何启动),用robomongo来连接,新建一个database作为DOClever数据库(名称随意) 源码部署 将DOClever源码...
  • 图基础上FPGA 设计、设计前和设计后的信号线传输效应分析、规则驱动 板卡设计和编辑、自动布线和完整CAM 输出能力等。 在嵌入式设计部分,增强了JTAG 器件实时显示功能,增强型基于FPGA 逻辑分析仪,可以...
  • LECCO SQL Expert (智能自动SQL优化)

    热门讨论 2006-01-13 09:51:35
    图1 人工智能自动SQL优化示意图 其核心模块之一“SQL语法优化器”工作原理大致如下(如图1): 一条源SQL语句输入→“人工智能反馈式搜索引擎”对输入SQL语句结合检测到数据库结构和索引进行重写,产生N条等效...
  • 目前支持JSP应用服务器是较多,Tomcat是其中较为流行一个Web服务器,被JavaWorld杂志编辑选为2001年度最具创新Java产品,可见其在业界地位。 Tomcat是一个免费开源Serlvet容器,在Tomcat中,应用...
  • Oracle专家高级编程--详细书签版

    热门讨论 2012-08-21 11:57:09
    本书是多年来在无数不同情况下使用Oracle产品的经验结晶. Thomas Kyte是Oracle公司核心技术集团副总裁,从Oracle 7.0.9版本开始就一直任职于Oracle公司,不过,其实他从5.1.5c版本就开始使用Oracle了。 在...
  • 17.5 在Apache.htaccess文件中使用基本身份验证 17.6 使用mod_auth_mysql身份验证 17.6.1 安装mod_auth_mysql 17.6.2 使用mod_auth_mysql 17.7 创建自定义身份验证 17.8 进一步学习 17.9 下一章 第18章 ...
  • PHP和MySQL Web开发第4版

    热门讨论 2014-08-13 15:32:15
    17.5 在Apache.htaccess文件中使用基本身份验证 17.6 使用mod_auth_mysql身份验证 17.6.1 安装mod_auth_mysql 17.6.2 使用mod_auth_mysql 17.7 创建自定义身份验证 17.8 进一步学习 17.9 下一章 第18章 ...
  • PHP与MySQL.WEB开发

    2013-04-01 17:18:52
    9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.4 更新数据库记录 10.5 创建修改表 10.6 删除数据库中记录 10.7 表删除 10.8 删除...
  • 4.1 安装和初始化:给出程序存储形式、操作命令、反馈信息及其做含意、表明安装完成测试实例以及安装所需软件工具等。 4.2 输入:给出输入数据或参数要求。  ● 数据背景:说明数据来源、存储媒体、出现...
  • Thinking.In.Java

    2012-03-21 22:35:53
    从每一次研讨会收到的反馈都帮助我修改及重新制订学习材料重心,直到我最后认为它成为一个完善教学载体为止。但本书并非仅仅是一本教科书――我尝试在其中装入尽可能多信息,并按照主题进行了有序分类。无论...
  • 10.2.4 在子窗体中使用SQLUNION语句查询所有记录 266 10.2.5 在组合框控件外显示组合框列 268 10.2.6 根据用户输入添加新组合框选项 271 10.3 使用本机Access选项卡控件 273 10.3.1 本机选项卡...
  • 从每一次研讨会收到的反馈都帮助我修改及重新制订学习材料重心,直到我最后认为它成为一个完善教学载体为止。但本书并非仅仅是一本教科书——我尝试在其中装入尽可能多信息,并按照主题进行了有序分类。无论...
  • 10.2.4 在子窗体中使用SQLUNION语句查询所有记录 266 10.2.5 在组合框控件外显示组合框列 268 10.2.6 根据用户输入添加新组合框选项 271 10.3 使用本机Access选项卡控件 273 10.3.1 本机选项卡控件...
  • RCP法与RSP法主要区别是前者采用循环渐进开发方式,原型将成为最终的产品,而者将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性;  ● 软件产品的生产...
  • 2.1.3 使用SQL Server 2008多维数据库和数据挖掘 25 2.1.4 使用SQL Server 2008管理报表 26 2.2 规划SQL Server 2008部署 27 2.2.1 建立服务器性能系统 27 2.2.2 配置I/O子系统 28 2.2.3 确保可用性和可...
  • 说明:目前,数据分析是一个非常热门方向,因为不管是互联网行业还是传统行业都已经积累了大量数据,现在需要就是从这些数据中提取有价值信息,以便打造更好的产品或者为将来决策提供支持。 给初学者几...
  • 实例044 使用常量指定PI值计算圆面积 75 2.2 运算符 75 实例045 自定义数字加密/解密算法 76 实例046 比较两个时间戳大小 77 实例047 使用条件运算符判断数字奇偶性 78 实例048 判断用户是否具有后台管理...
  • 实例044 使用常量指定PI值计算圆面积 75 2.2 运算符 75 实例045 自定义数字加密/解密算法 76 实例046 比较两个时间戳大小 77 实例047 使用条件运算符判断数字奇偶性 78 实例048 判断用户是否具有后台管理...
  • 在接入网产品A测试中,在内存数据库正常情况下各种数据库方面操作都是正常。为了进行数据库异常测试,于是将数据库内容人为地破坏了。发现在对数据库进行比较操作时,出现程序跑死了现象。 经过跟踪调试...
  • asp.net知识库

    2015-06-18 08:45:45
    使用microsoft.web.ui.webcontrolsTabStrip与IFame组件,达到页切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体自动转换,不用修改原有任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web...
  • 软件工程知识点

    2012-12-02 21:34:25
    软件工程是一门关于软件开发与维护工程学科,它涉及软件生产各个方面,能够为经济、高效地开发高质量软件产品提供最有效支持。 (1)工程方法:结构化方法、JSD方法、面向对象方法。 (2)软件工具:具有...
  • 在本书第1版出版时隔4年,Thomas Kyte及时了解了大家这一迫切需求,根据他实战经验以及人们最关心问题对这本书做了全面补充和调整,以涵盖11g最受关注多项特性。例如11g引入dbms_parallel_execute包来帮助...
  • 经过不断试验和修订(或称“反复”,这是在Java程序设计中非常有用一项技术),最后成功地在一门课程中集成了从我教学经验中总结出来所有东西——我在很长一段时间里都在使用。其中由一系列离散、易于消化...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER TEST相同。PACKAGE TEST目的是在确定IC在封装过程中是否有任何损坏。 16. 能否利用单片来检测手机电池充放电时间及充...
  • 测试覆盖率

    2011-10-28 11:16:51
    代码覆盖可以建立在控制流(语句、分支或路径)或数据流基础上。控制流覆盖目的是测试代码行、分支条件、代码中路径或软件控制流其他元素。数据流覆盖目的是通过软件操作测试数据状态是否有效,例如,数据...
  • 测试培训教材

    2014-04-01 12:10:48
    项目管理员可以使用QCExcel插件工具来执行需求批量导入,进行导入之前请先确认已经访问过MQC主页,并安装了QCMSExcelAddin.exe插件。 插件下载地址: http://updates.merc-int.com/qual ... /msexcel/index.html...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

产品使用后反馈的语句