楼主: 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
131#
 楼主| 发表于 2009-12-1 15:53 | 只看该作者
打算做了Shared_Pool的对比功能,

基本构思这样:
  不如昨天记录一下v$sql 的SQL_TEXT 放到工具内部的access数据库里;
  今天再记录一下v$sql的SQL_TEXT,
然后就可以比较昨天和今天共享池的差异,便于我们找出哪些是常常执行的SQL,哪些是不常用的SQL等;
不知道有什么更好的构思。

使用道具 举报

回复
论坛徽章:
281
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-01-04 11:51:22蛋疼蛋
日期:2011-12-29 07:37:22迷宫蛋
日期:2011-12-26 14:19:41茶鸡蛋
日期:2011-11-17 09:20:52茶鸡蛋
日期:2011-11-10 22:42:38ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15茶鸡蛋
日期:2011-10-24 09:48:48ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47
132#
发表于 2009-12-1 16:35 | 只看该作者
原帖由 qingyun 于 2009-12-1 15:53 发表
打算做了Shared_Pool的对比功能,

基本构思这样:
  不如昨天记录一下v$sql 的SQL_TEXT 放到工具内部的access数据库里;
  今天再记录一下v$sql的SQL_TEXT,
然后就可以比较昨天和今天共享池的差异,便于我们找出哪些是常常执行的SQL,哪些是不常用的SQL等;
不知道有什么更好的构思。

那还不如启动了statpack信息收集,然后分析statpack相关的表~~~

起码人家记录的信息不仅仅只是v$sql.sql_text

使用道具 举报

回复
论坛徽章:
0
133#
发表于 2009-12-1 22:05 | 只看该作者
支持下  好东西 ····

使用道具 举报

回复
论坛徽章:
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
134#
 楼主| 发表于 2009-12-8 18:14 | 只看该作者
在SQL模块做了些功能增强,还没达到预期目标,明天做好后再升级;

功能图片说明:
原帖由 heart_smile 于 2007-7-30 13:18 发表
使用sql server习惯了的人都知道,在sql server 分析器中可以写多个查询语句来显示多个记录集。而ORACLE却不行。楼主,是否可以实现这个功能呢?
在SQL SERVER中,比如写:
select * from tabl1
select * from table2
select * from table3
这样可以显示三个记录集,希望你的工具能实现这个功能。

该功能基本实现,而且分解功能强于pl/sql developer;



直接在SQL结果里修改数据,非常方便:


查看统计信息,强于pl/sql developer:


在SQL里支持绑定变量功能,但是pl/sql developer好像不能:


有很方便的SQL向导功能:


[ 本帖最后由 qingyun 于 2010-1-14 17:03 编辑 ]

使用道具 举报

回复
论坛徽章:
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
135#
 楼主| 发表于 2009-12-9 18:10 | 只看该作者
升级了,有兴趣的再下载一下:
下载地址不变,仍是:
http://www.daizhicun.com/myworks/OracleDbTools.rar

主要是对执行SQL这个模块做了增强,参考pl/sql dev ,Toad,OB 这三个工具的功能,把它们各自具有的特点都包容了进来;

(pl/sql不能永久记住SQL历史,只能在本窗体记住一些历史sQL,关闭就没了;Toad不能一次执行多条SQL)


[ 本帖最后由 qingyun 于 2009-12-9 18:21 编辑 ]

使用道具 举报

回复
论坛徽章:
0
136#
发表于 2009-12-11 12:25 | 只看该作者

回复 #135 qingyun 的帖子

老师,你好,本人其实主要是使用你这个工具做“数据字典"用,查看“表结构”等情况时使用,,,但是再使用中有些不是很方便,希望老师能够继续完善作为”数据字典“查看表等的功能,,,,我单位的表大概有2000多张,,,

所以查看表结构很关键:


第一个问题:完善“数据字典”功能:
   能够把"sql表”和“视图”整合到一个窗口里面显示全部的表和视图(因为视图是以表为基础的,基本上紧随表,如果排在一个窗口中查看很方便),,,如果有要查看表或视图的,可以在右侧选择下拉框选择表或视图进行筛选查看。

第二问题: 以首字母快速检索表或试图:
    希望继续能可以“按照字母顺序”检索表(如同windows目录中快速查找某一个文件,只要在键盘上敲下某个字母,就会很快检索到以这个字母开头的文件)。。。


望老师继续完善……………………



等候完美的佳作&……

使用道具 举报

回复
论坛徽章:
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
137#
 楼主| 发表于 2009-12-11 18:00 | 只看该作者
原帖由 qdjnlmk 于 2009-12-11 12:25 发表
老师,你好,本人其实主要是使用你这个工具做“数据字典"用,查看“表结构”等情况时使用,,,但是再使用中有些不是很方便,希望老师能够继续完善作为”数据字典“查看表等的功能,,,,我单位的表大概有2000多张,,,

所以查看表结构很关键:


第一个问题:完善“数据字典”功能:
   能够把"sql表”和“视图”整合到一个窗口里面显示全部的表和视图(因为视图是以表为基础的,基本上紧随表,如果排在一个窗口中查看很方便),,,如果有要查看表或视图的,可以在右侧选择下拉框选择表或视图进行筛选查看。

第二问题: 以首字母快速检索表或试图:
    希望继续能可以“按照字母顺序”检索表(如同windows目录中快速查找某一个文件,只要在键盘上敲下某个字母,就会很快检索到以这个字母开头的文件)。。。


望老师继续完善……………………



等候完美的佳作&……



非常感谢您的宝贵意见:

  你的第一个问题,早期版本我也是把表和视图合在一起的,后来因为考虑这块功能将要扩展,特别细化的话,表和视图有很多不同的东西,比如表里可以显示分析记录条数,blocks等;视图里没有这些属性; 这块我即将做很多完善;如果合在一起,我没法方便做更细化的功能;当初为什么分开,也是参考toad的做法
而且,特别是你的公司有2000张表,很大了,加上视图,记录会很多,两个放在一起打开担心变慢;

当初设计“SQL”的时候,倒是把表和视图放一起的,还是考虑效率问题,我把视图和表还是分开了;下个版本我考虑再多个选项,全部显示,这样,可能更能满足用户的需要。


对于你说的第二个问题,首字母检索,这个功能以前版本也是有的,我更新的时候,有时不消息丢掉了;下一个版本我留意加上。
对于我个人而言,我更多的是喜欢用“查询”或“过滤”实现;


什么是查询?就是重新访问一次服务器,得到满足要求的结果
“查询”就是通过表名,模糊或精确从数据字典里在查询一次,查询条件默认是“全模糊”,如果前面放个等于号,就是精确查找

比如:
查询条件          相当于
BILL             WHERE TABLE_NAME LIKE '%BILL%'
=BILL          WHERE TABLE_NAME ='BILL'
BILL%        WHERE TABLE_NAME LIKE 'BILL%'
%BILL        WHERE TABLE_NAME LIKE '%BILL'

什么是过滤?过滤就是当前GRid的数据数据里过滤出满足条件的记录

过滤的使用方法,和查询用法也类似,只不过它不需要在访问服务器,或者这么比喻,就是假如这是网络断了,过滤功能还是照样使用,而查询则不行;
不过,如果服务器的表结构有更新,用过滤就发现不了;


过滤的条件更灵活,
比如我想查一个表,只知道它的名字好像是BILL_OUT_CHECK_DT ;但是不能确认,确认的是我知道它包含"BILL",包含"DT";
那么可以用“ BILL AND DT" 这个条件过滤;
或者我只想看两个表,比如 BILL1,BILL2;那么过滤条件可以是:"BILL1,BILL2"或者是"IN (BILL1,BILL2)"

其实,过滤是“无处不在的”,任意GRID上,只要点鼠标右键的第一个菜单,就可以进行过滤处理,来从大量的记录里过滤出寥寥数条自己关注的记录;
另外,点击Grid的标题,也会按标题的字段进行正排序或反排序。





最后,建议您常常在GRID上点右键看看,它会弹出一个菜单,功能很多:过滤,查找(类似于在txt文本里查找),导出各种格式(excel等),打印,网格设置(设置字段的可见性,颜色,统计等);以前还有分组(类似于group by),生成图表等功能,这个也在下一个版本加上;


  非常感谢你的反馈,这些问题,我会尽量通过各种手段满足;下一个版本估计在周日或下周一出来;

版本号为:2.755;

以后版本升级说明我也放在软件关于里:
http://www.daizhicun.com/dmx/dai/qingyunOracleUpdate.txt

[ 本帖最后由 qingyun 于 2009-12-11 18:12 编辑 ]

使用道具 举报

回复
论坛徽章:
0
138#
发表于 2009-12-12 10:22 | 只看该作者
赞一个:

      不亏是一位资深的DBA,很认真、很细致、很人性化的DBA_tools,,,,,,,我会一直关注;因为不断的创新和改进,;;

期待v2.755版本的完美、完善,


谢谢老师,呵呵,,,

使用道具 举报

回复
论坛徽章:
0
139#
发表于 2009-12-15 12:54 | 只看该作者

使用青云Oracle 2.755版本的一点拙见

v2.755版本,终于悄悄地出来了,*^_^*

俺谈几个看法,望老师给看看:

第一,功能越来越完善了,THKs,辛苦了,老师;


第二问题:     

       在菜单SQL中把“表和视图”整合到了一起,然后又在右侧加入了一个选项:表,试图,全部。很好,,,分类选择,很做得很棒,,,如下图:



第三个问题:
       能否把菜单中的“对象”也做成如上SQL的样式,加入选项,可以选择“表、视图、全部”,,,,这样的分类,应该比较科学,更符合操作,操作起来也更便捷,,,,

未加选项的“对象”菜单,如下图所示:




第四问题:
       还有个细节就是:  首字母快速检索表,,,我第一个试了试,,,感觉检索方法应该有点问题吧,怎么检索某一个表的速度比v2.75版本慢很多,本次的v2.755版本的检索好像边检索表的同时zai浏览表“数据”,以致拖慢了对某一个表的快速检索。。。不知道是不是这么个道理???




     本人拙见(意见不算宝贵,只是热爱生活,热爱DB而已,呵呵),,,恳请老师指点,,,给看看………………


期待zhong^_^

[ 本帖最后由 qdjnlmk 于 2009-12-15 13:13 编辑 ]

使用道具 举报

回复
论坛徽章:
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
140#
 楼主| 发表于 2009-12-15 13:52 | 只看该作者
非常感谢楼上朋友的建议;

其实,这个只能算新版本的bata版,这两天正在加紧完善,如今,SQL这块功能,我基本暂时满意,其他的模块基本都要扩展;



用于判断版本升级的文件:
http://www.daizhicun.com/dmx/dai/qingyunOracle.txt
仍是2.754,所以旧版本不会自动提示升级;

因为2.755要加不少功能。所以还没有完成预期的;昨天下班前,我把半拉子版本传上去了,没想到你居然下载用了。


你说的:
“第三个问题:  能否把菜单中的“对象”也做成如上SQL的样式,加入选项,可以选择“表、视图、全部”,,,,这样的分类,应该比较科学,更符合操作,操作起来也更便捷,,,,
未加选项的“对象”菜单:”
--这个我再考虑考虑,毕竟大部分3方工具都是把表,视图,过程,触发器等等放在一个菜单的,通过树形结构检索;
但是如果用树把所有的对象放在一起,那么就没法把备注等各个对象不同的东西一起显示,只能显示对象名;
当初分开,我是考虑各个对象都有其不同的特征,分开方便对其功能做细化工作;这个我再考虑一下,怎么让他们很好的权衡一下;

而且,当时我做的时候,也同时做一款类似的sqlserver工具,sqlserver的表有备注,视图居然没有备注,这也是我当时考虑把表和视图分开考虑,便于个性化实施各种功能的一个原因;

“第四问题:  还有个细节就是:  首字母快速检索表,,,我第一个试了试,,,感觉检索方法应该有点问题吧,怎么检索某一个表的速度比v2.75版本慢很多,本次的v2.755版本的检索好像边检索表的同时再浏览表“数据”,拖慢了表的检索。。。”

--这个是因为每次检索表,对应的字段列表查询跟着动;以前的版本我是通过修改控件避免了这个;这次控件升级后,对这个修改漏掉了,这个我尽快补上;




看了您的截图,感觉系统挺大的,好像是政府机关的某个系统;

不过表名都很怪怪的,不能看出其意思,而且有的有备注,有的没有;
而且字段几乎就没有备注;感觉您这个系统好像是一个通用的产品,一般产品开发的表名都是没有意义的;

   我其实大部分精力也在做前端开发,对字段的备注非常看重;对Oracle也只是对PL/sql比较了解,在oracle上管理系统结构上不是很专业;
所以现在也是边完善oralce管理知识,边把它们在我的工具里体现出来;

我常对开发组的成员说,无论表还是视图,字段必须有备注;而且,我的前端程序显示的字段中文,就是直接取的字段备注;

为了方便的给字段设置备注,我还写了一个过程:


  /**********************************/
  -- 作者  : daizhicun
  -- 创建日期 : 2006-6-11 15:58:58
  -- 目的 : 系统参数设置
  /**********************************/

  --功能点:   对表或视图中的字段的备注为空的情况,用已有的同字段名赋值
CREATE OR REPLACE PROCEDURE SET_COMMENTS IS
  
    tmp_val VARCHAR2(2000);
  
  BEGIN
  
    --先是表与表之间备注互相设置
    FOR rec IN (SELECT a.table_name, a.column_name, b.comments
                  FROM (SELECT a.table_name, a.column_name, a.comments
                          FROM user_col_comments a
                          JOIN USER_TABLES b ON a.table_name = b.table_name) a
                  JOIN (SELECT *
                         FROM (SELECT column_name,
                                      comments,
                                      ROW_NUMBER() OVER(PARTITION BY column_name ORDER BY comments DESC) rn
                                 FROM (SELECT a.table_name,
                                              a.column_name,
                                              a.comments
                                         FROM user_col_comments a
                                         JOIN USER_TABLES b ON a.table_name =
                                                               b.table_name) b
                              
                                WHERE comments IS NOT NULL)
                        WHERE rn = 1) b ON a.column_name = b.column_name
                 WHERE a.comments IS NULL)
   
    LOOP
   
      --执行 赋备注 的脚本;
      tmp_val := 'COMMENT ON COLUMN  ' || rec.table_name || '.' ||
                 rec.column_name || ' IS ''' || rec.comments || '''';
   
      BEGIN
        EXECUTE IMMEDIATE tmp_val;
        DBMS_OUTPUT.put_line(tmp_val);
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('Error: ' || tmp_val || '!');
      END;
    END LOOP;
  
    --再是视图与视图之间备注互相设置
    FOR rec IN (SELECT a.table_name, a.column_name, b.comments
                  FROM (SELECT a.table_name, a.column_name, a.comments
                          FROM user_col_comments a
                          JOIN USER_VIEWS b ON a.table_name = b.View_Name) a
                  JOIN (SELECT *
                         FROM (SELECT column_name,
                                      comments,
                                      ROW_NUMBER() OVER(PARTITION BY column_name ORDER BY comments DESC) rn
                                 FROM (SELECT a.table_name,
                                              a.column_name,
                                              a.comments
                                         FROM user_col_comments a
                                         JOIN USER_VIEWS b ON a.table_name =
                                                              b.View_Name) b
                              
                                WHERE comments IS NOT NULL)
                        WHERE rn = 1) b ON a.column_name = b.column_name
                 WHERE a.comments IS NULL)
   
    LOOP
   
      --执行 赋备注 的脚本;
      tmp_val := 'COMMENT ON COLUMN  ' || rec.table_name || '.' ||
                 rec.column_name || ' IS ''' || rec.comments || '''';
   
      BEGIN
        EXECUTE IMMEDIATE tmp_val;
        DBMS_OUTPUT.put_line(tmp_val);
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('Error: ' || tmp_val || '!');
      END;
    END LOOP;
  
    --最后是表和视图之间备注互相设置
    FOR rec IN (SELECT a.table_name, a.column_name, b.comments
                  FROM user_col_comments a
                  JOIN (SELECT *
                         FROM (SELECT column_name,
                                      comments,
                                      ROW_NUMBER() OVER(PARTITION BY column_name ORDER BY comments DESC) rn
                                 FROM user_col_comments b
                              
                                WHERE comments IS NOT NULL)
                        WHERE rn = 1) b ON a.column_name = b.column_name
                 WHERE a.comments IS NULL)
   
    LOOP
   
      --执行 赋备注 的脚本;
      tmp_val := 'COMMENT ON COLUMN  ' || rec.table_name || '.' ||
                 rec.column_name || ' IS ''' || rec.comments || '''';
   
      BEGIN
        EXECUTE IMMEDIATE tmp_val;
        DBMS_OUTPUT.put_line(tmp_val);
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('Error: ' || tmp_val || '!');
      END;
    END LOOP;
  
  END SET_COMMENTS;

当然,未必相同的字段名,中文意义就一样,但大部分时候是一样的,个别不一样的再手工调整;
还有,我们在建立表的时候,同样的字段名意义最好唯一,这样方便开发人员;

当然,有的人喜欢通过文档来表达字段的意义;不过我觉得还是最好能在数据库里直接体现;因为文档检索不够方便,而且有时候不能及时同步;不能保证任何时候,都人手一份;

因为考虑到SQL是大家使用频率最高的,所以这块是我重点完善的;

有一个功能,我也是想和大家探讨的;

比如:
   select * from table1

执行结果的字段名全是一般都是英文的,我打算把该执行结果的字段名用中文备注代替;

可以通过SQL:比如 select no as 编号,name as 姓名 .... from table1;
不过我觉得这个方法不好,这样查询的结果,是不能修改的,因为修改时,系统产生的SQL是 update table set 编号=... 这样可能报错;


我是这样构思的,如果想显示的结果用中文备注代替;就用:

selec * from table1
--[table1]

我在解析的时候,自动把table1的数据字典的字段备注取出来,在GRid上替换掉;



[ 本帖最后由 qingyun 于 2009-12-15 14:03 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

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