楼主: qingyun

[第三方工具] 〓〓青云超人性化oracle工具〓〓

[复制链接]
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
161#
 楼主| 发表于 2010-2-2 18:04 | 只看该作者
感谢“ qdjnlmk  风含情水含笑 ”辛苦的测试;
你的建议我会认真修改的:

1.你说的windows2003不能使用,可能不是操作系统的问题,估计你的oracle可能安装了两个客户端,比如有的安装了oracle9i,oracle10g的客户端,如果有多客户端,我那个下了的tnsnames.ora可能会选错;一般电脑只装一个客户端,基本问题不大;
你尝试手工写 serverName的那个框子(那个框的内容,可以下拉选择,也可以任意手写),这样如果写正确了,就照样进去;
对于多客户端配置的问题,toad做的比较好,它会提示你选择其中的某个客户端配置;

考虑到很少电脑安装两个oracle客户端,这块我暂时没有强化;


2.你说的那么多的宽度以及字段位置问题,其实大部分都很好解决。

  因为我所有的字段宽度,字段间的相互位置,都可以手工调整,调整后关闭当前界面,软件就会自动记忆到 GrdSet.ini 文件里,
下次打开后,系统会自动把这些记忆的字段宽度,字段间的相互位置提出来用于设置;

  不过有的地方时保存不了的,比如表结构可以保证,但是表的内容是动态的,保存不了;

还有SQL模块的查询结果也是动态的,没法保存GRID的信息,其它大部分都是自动记忆的。

注意:一定要关闭当前窗体,才能记忆,不要一下子关闭整个程序,如果一下子全部关闭,我是不记忆的。

所以设置好后,可以关闭一下,再打开一下,马上就能看到明显效果了

你这个建议确实非常好,下次我发布的时候,事先把自己把字段宽度位置调好,做一个默认的GrdSet.ini,这样第一次使用的时候感觉好些。

[ 本帖最后由 qingyun 于 2010-2-2 18:30 编辑 ]

使用道具 举报

回复
论坛徽章:
0
162#
发表于 2010-2-3 11:39 | 只看该作者
PL/SQL中,对SQL的结果集的长度,恰当地自动调整列宽度,“视觉效果”很high,很值得称赞;

[ 本帖最后由 qdjnlmk 于 2010-2-3 11:41 编辑 ]

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
163#
 楼主| 发表于 2010-2-3 22:21 | 只看该作者
自动调整分两种:

1.根据字段定义的长度设置,比如定义为varchar2(20),和varchar2(2000)的长度是不一样;
但是定义的未必恰当,因为有可能虽然定义额varchar2(2000),但实际数据都是很短的长度,如果按照
varchar2(2000)显然不太好;

2.根据查询的结果集,按照每个字段的最大长度来自动调整长度;
这个方法我也考虑过,只是我觉得有两个缺点:
    1.影响效率,如果记录只有几百条还好,运算量不大;如果有上千上万十万条,那么找出每个字段的最长的长度还是需要费很多时间的。
   折中的做法,是双击字段间的空隙,自动按照最长宽度调整,这个功能是有的。我在有些项目里是提供这个功能的。
    2.就算每个字段最长的值的宽度作为参考,其实也未必科学,假如一个结果集有1万条记录,其实9999条都在10个字符以内,唯独有一个是100个字符,那么这个字段的显示宽度就以这100个字符的宽度为标准; 如果每个字段都是以那个最长的字段值做宽度参考,那么显示的宽度就有很大的“浪费”;当然,也可以做些数学算法,比如按照平均宽度稍微放大一点作为基准,或者搞个宽度的分布,如果宽度接近正态分布的模式,我们可以设计一个合理的宽度等。但是最好的方式,还是让使用者自己去搞吧,他想是什么宽度就是什么宽度。


所以,我综合考虑后,就是“自动记忆”最好。 也就是用户对宽度,相对位置,每个字段显示的颜色(有的字段特别重要,可以设置其颜色)进行自己看的最习惯的样子调整,调整好后,关闭时,会自动将这些信息记录到当前目录下的GrdSet.ini里(早期的版本,我还记录Grid里的foot统计信息,比如对有些字段求和或求平均,新版本暂时没加),下次一打开,就会呈现上次关闭的样子。

[ 本帖最后由 qingyun 于 2010-2-3 22:27 编辑 ]

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
164#
 楼主| 发表于 2010-2-5 19:13 | 只看该作者
原帖由 qdjnlmk 于 2010-2-3 11:39 发表
PL/SQL中,对SQL的结果集的长度,恰当地自动调整列宽度,“视觉效果”很high,很值得称赞;


我仔细pl/sql develoer ,toad 确实都有这个功能;

为此,我想还是加上这个自动调整列宽度的功能,




我的原则是:
  1.对于能够记忆的地方,我就不自动调整了,以记上次关闭前的样子为准,不过可以点右键选择手工调整;
  2.对于不能记忆的地方,每次打开就自动调整宽度;
  3.如果数据太多,可能调整的时间太长,比如有20个字段,共一万条记录,那么就需要比较判断20万次,性价比不高。
    我做了个近似算法,也就是取前10条记录作为判断标准,取它们中每个字段的最长的那个作为基准;

已经上传到我的网站的老地方
http://www.daizhicun.com/myworks/OracleDbTools.rar
有兴趣朋友的下载继续使用(这次改动较小,暂时不作为新版本自动提醒升级)


这次换有个变动的地方:
  就是 Grid的隔行变色我做了处理, 以前是白色和淡黄色为格调;
  这次参考了access2007的Grid,设置成白色和淡灰色为格调;
其实,我还是习惯以前的淡黄色格调,但是很少软件是这种格调的,所以还是做了保守的处理,希望大家给我个建议,推荐一个好的颜色;

[ 本帖最后由 qingyun 于 2010-2-5 20:02 编辑 ]

使用道具 举报

回复
论坛徽章:
211
国际米兰
日期:2010-01-11 10:26:28ITPUB评论家
日期:2007-11-04 01:35:51季节之章:春
日期:2011-04-03 16:30:30热刺
日期:2009-09-21 10:54:48天枰座
日期:2015-11-05 16:32:03月度论坛发贴之星
日期:2010-05-01 02:15:42生肖徽章:狗
日期:2006-10-01 00:29:23BLOG每周发帖之星
日期:2009-08-30 01:35:31BLOG每日发帖之星
日期:2009-08-28 01:01:02妮可·罗宾
日期:2016-10-19 10:45:04
165#
发表于 2010-2-5 23:08 | 只看该作者
pretty cool

使用道具 举报

回复
论坛徽章:
0
166#
发表于 2010-2-6 11:48 | 只看该作者
您好,俺在执行SQL语句时,可以执行成功,可执行计划有错误,是什么原因呢?谢谢!
执行失败:ORA-00904: "PROJECTION": invalid identifier

SELECT
T.*,                        --1、所有字段
T.ROWID                     --2、ROWID
FROM
A T                        --
--[A]

未命名.JPG (160.28 KB, 下载次数: 25)

未命名.JPG

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
167#
 楼主| 发表于 2010-2-6 12:53 | 只看该作者
多谢楼上的测试:
  这个可能是因为你的程序,没有按照执行计划这个功能。

怎么才能知道自己的数据库是否有执行计划功能呢?
有个最简单的方法是:你尝试运行 select * from PLAN_TABLE,如果报错提示plan_table不存在,说明你没有安装该功能,
不过一般情况下,在安装数据库的时候会默认安装的。也许你用的是Linux,这个下面是否默认安装,我不清楚。

安装方法也很简单:
要使用EXPLAIN首先要执行相应的脚本,创建出Explain_plan表。

  具体脚本执行如下:

  $ORACLE_HOME/rdbms/admin/utlxplan.sql  该脚本后会生成一个表这个程序会创建一个名为plan_table的表。

实际上plan_table并不是一个表,它是一个同义词;
其代码为:
CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE$
/

目的是为了让每个用户都能共享使用,而且SYS.PLAN_TABLE$这个表还是个回话级的临时表;
其代码是:
CREATE GLOBAL TEMPORARY TABLE SYS.PLAN_TABLE$
(
    STATEMENT_ID                   VARCHAR2(30),
    PLAN_ID                        NUMBER,
    TIMESTAMP                      DATE,
    REMARKS                        VARCHAR2(4000),
    OPERATION                      VARCHAR2(30),
    OPTIONS                        VARCHAR2(255),
    OBJECT_NODE                    VARCHAR2(128),
    OBJECT_OWNER                   VARCHAR2(30),
    OBJECT_NAME                    VARCHAR2(30),
    OBJECT_ALIAS                   VARCHAR2(65),
    OBJECT_INSTANCE                NUMBER,
    OBJECT_TYPE                    VARCHAR2(30),
    OPTIMIZER                      VARCHAR2(255),
    SEARCH_COLUMNS                 NUMBER,
    ID                             NUMBER,
    PARENT_ID                      NUMBER,
    DEPTH                          NUMBER,
    POSITION                       NUMBER,
    COST                           NUMBER,
    CARDINALITY                    NUMBER,
    BYTES                          NUMBER,
    OTHER_TAG                      VARCHAR2(255),
    PARTITION_START                VARCHAR2(255),
    PARTITION_STOP                 VARCHAR2(255),
    PARTITION_ID                   NUMBER,
    OTHER                          LONG,
    OTHER_XML                      CLOB,
    DISTRIBUTION                   VARCHAR2(30),
    CPU_COST                       NUMBER,
    IO_COST                        NUMBER,
    TEMP_SPACE                     NUMBER,
    ACCESS_PREDICATES              VARCHAR2(4000),
    FILTER_PREDICATES              VARCHAR2(4000),
    PROJECTION                     VARCHAR2(4000),
    TIME                           NUMBER,
    QBLOCK_NAME                    VARCHAR2(30)
)
ON COMMIT PRESERVE ROWS
NOCACHE
/


如果你不想用  $ORACLE_HOME/rdbms/admin/utlxplan.sql  来安装该功能,用我上面提供的两个脚本代码,也许也能达到同样效果(具体我没有试过)

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
168#
 楼主| 发表于 2010-2-6 13:11 | 只看该作者
不好意思,刚才那个图片的异常代码没看清,错误提示是projection 这个字段没找到;
这个字段是投影,预测的意思,感觉还是挺重要的,显示执行计划里涉及的字段;

不知道你的SYS.PLAN_TABLE$表里为什么没有projection 这个字段,
查看执行计划功能,我在9i,10g,11g里都测试过,都有这个字段的。

如果您不怕麻烦的话,给你两个处理方法:
1. 用我上面的脚本修改SYS.PLAN_TABLE$的结构,增加projection 字段,不过这个表作为系统表,可能不让修改;
  也可以在当前用户下直接建立一个plan_table,那么系统就优先使用自己建立的Plan_table;

2.我这个功能,里面用到的重要的SQL语句,我都放在当前目录下的info.mdb这个access数据库里,
里面显示执行计划的语句是:
SELECT OPERATION,OBJECT_NAME,OPTIONS,OPTIMIZER,COST,CARDINALITY,BYTES,CPU_COST,IO_COST,FILTER_PREDICATES, POSITION,
PROJECTION,ID, PARENT_ID
FROM PLAN_TABLE

它的位置在这个access数据库的SQL表的代码为1001的地方,
你可以对这个SQL语句修改,去掉PROJECTION这个字段,或者干脆些 select * from plan_table

[ 本帖最后由 qingyun 于 2010-2-6 13:13 编辑 ]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期: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
169#
发表于 2010-2-6 16:43 | 只看该作者
跨版本兼容很难

使用道具 举报

回复
论坛徽章:
0
170#
发表于 2010-2-6 22:49 | 只看该作者
不错。谢谢楼主分享!!!

使用道具 举报

回复

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

本版积分规则 发表回复

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