The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

字段 允许值 允许的特殊字符
  0-59   , - * /
  0-59   , - * /
小时   0-23   , - * /
日期   1-31   , - * ? / L W C
月份   1-12 或者 JAN-DEC   , - * /
星期   1-7 或者 SUN-SAT   , - * ? / L C #
年(可选)   留空, 1970-2099   , - * /


The '*' character is used to specify all values. For example, "*" in the minute field means "every minute". 
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。 
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification. 
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段

The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12". 
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。 

The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday". 
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”. 

The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*' before the '/' is equivalent to specifying 0 is the value to start with. Essentially, for each field in the expression, there is a set of numbers that can be turned on or off. For seconds and minutes, the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to 31, and for months 1 to 12. The "/" character simply helps you turn on every "nth" value in the given set. Thus "7/6" in the month field only turns on month "7", it does NOT mean every 6th month, please note that subtlety. 

The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results. 

L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天,
如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个
星期五,

The 'W' character is allowed for the day-of-month field. This character is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month". So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days

The 'L' and 'W' characters can also be combined for the day-of-month expression to yield 'LW', which translates to "last weekday of the month". 

The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month. 

The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday". 
关于cronExpression的介绍:
 
字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * / 
表达式意义 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 
每天早上6点 
0 6 * * * 
每两个小时 
0 */2 * * * 
晚上11点到早上8点之间每两个小时,早上八点 
0 23-7/2,8 * * * 
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4 * 1-3 
1月1日早上4点 
0 4 1 1 *

quartz的高级特性不仅如此 
1 数据库存储 
2 集群支持 
3 数据库持久化任务,trigger 
4 trigger 的停止,运行 
5 任务的任意添加 
6 比corntrigger 更详尽的任务安排 
7 线程的内部数据交换



一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为
1.秒(0~59)
2.分钟(0~59)
3.小时(0~23)
 
4.天(月)(0~31,但是你需要考虑你月的天数)
5.月(0~11)
6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
7.年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。
由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ??? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点

有些子表达式能包含一些范围或列表
例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值
因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天

“/”字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 ;
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

 

“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写

但是它在两个子表达式里的含义是不同的。

在天(月)子表达式中,“L”表示一个月的最后一天 ,
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT

如果在“L”前有具体的内容,它就具有其他的含义了

例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最后一个星期五

注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题

============================================

CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]

 

 序号说明 是否必填 允许填写的值允许的通配符
 1 秒 是 0-59   , - * /
 2 分 是 0-59   , - * /
 3小时 是 0-23  , - * /
 4 日 是 1-31  , - * ? / L W
 5 月 是 1-12 or JAN-DEC  , - * /
 6 周 是 1-7 or SUN-SAT  , - * ? / L #
 7 年 否 empty 或 1970-2099  , - * /

通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五" 
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").
# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;

小提示:
'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发;
周字段的设置,若使用英文字母是不区分大小写的,即MON 与mon相同;
        
常用示例:

 

0 0 12 * * ?每天12点触发
0 15 10 ? * *每天10点15分触发
0 15 10 * * ?每天10点15分触发
0 15 10 * * ? *每天10点15分触发
0 15 10 * * ? 20052005年每天10点15分触发
0 * 14 * * ?每天下午的 2点到2点59分每分触发
0 0/5 14 * * ?每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ?每天下午的 2点到2点59分、18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ?每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI从周一到周五每天上午的10点15分触发
0 15 10 15 * ?每月15号上午10点15分触发
0 15 10 L * ?每月最后一天的10点15分触发
0 15 10 ? * 6L每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3每月的第三周的星期五开始触发
0 0 12 1/5 * ?每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ?每年的11月11号 11点11分触发(光棍节)

posted @ 2014-07-31 15:32 Eric_jiang 阅读(394) | 评论 (0)编辑 收藏

一、ORACLE的启动和关闭
1、在单机环境下
要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下
su - oracle

a、启动ORACLE系统
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>quit

b、关闭ORACLE系统
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>shutdown
SVRMGR>quit

启动oracle9i数据库命令:
$ sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> connect / as sysdba  
Connected to an idle instance.
SQL> startup^C

SQL> startup
ORACLE instance started.



2、在双机环境下
要想启动或关闭ORACLE系统必须首先切换到root用户,如下
su - root

a、启动ORACLE系统
hareg -y oracle

b、关闭ORACLE系统
hareg -n oracle

Oracle数据库有哪几种启动方式



说明:

有以下几种启动方式:
1、startup nomount
非安装启动,这种方式启动下可执行:重建控制文件、重建数据库

读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。


2、startup mount dbname
安装启动,这种方式启动下可执行:
数据库日志归档、
数据库介质恢复、
使数据文件联机或脱机,
重新定位数据文件、重做日志文件。

执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
但此时不对数据文件和日志文件进行校验检查。


3、startup open dbname
先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,
这种方式下可访问数据库中的数据。


4、startup,等于以下三个命令
startup nomount
alter database mount
alter database open


5、startup restrict
约束方式启动
这种方式能够启动数据库,但只允许具有一定特权的用户访问
非特权用户访问时,会出现以下提示:
ERROR:
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用


6、startup force
强制启动方式
当不能关闭数据库时,可以用startup force来完成数据库的关闭
先关闭数据库,再执行正常启动数据库命令


7、startup pfile=参数文件名
带初始化参数文件的启动方式
先读取参数文件,再按参数文件中的设置启动数据库
例:startup pfile=E:Oracleadminoradbpfileinit.ora


8、startup EXCLUSIVE
二、用户如何有效地利用数据字典
   ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化,
体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。

    数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。
我们不能手工修改数据字典里的信息。

  很多时候,一般的ORACLE用户不知道如何有效地利用它。

  dictionary   全部数据字典表的名称和解释,它有一个同义词dict
    dict_column   全部数据字典表里字段名称和解释

    如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:

    SQL>select * from dictionary where instr(comments,'index')>0;

    如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:

    SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';

    依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。

    1、用户

            查看当前用户的缺省表空间
            SQL>select username,default_tablespace from user_users;

        查看当前用户的角色
        SQL>select * from user_role_privs;

        查看当前用户的系统权限和表级权限
        SQL>select * from user_sys_privs;
        SQL>select * from user_tab_privs;

    2、表

            查看用户下所有的表
            SQL>select * from user_tables;

            查看名称包含log字符的表
            SQL>select object_name,object_id from user_objects
                where instr(object_name,'LOG')>0;

            查看某表的创建时间
            SQL>select object_name,created from user_objects where object_name=upper('&table_name');

            查看某表的大小
            SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                where segment_name=upper('&table_name');

            查看放在ORACLE的内存区里的表
            SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

    3、索引

            查看索引个数和类别
            SQL>select index_name,index_type,table_name from user_indexes order by table_name;

            查看索引被索引的字段
            SQL>select * from user_ind_columns where index_name=upper('&index_name');

            查看索引的大小
            SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                where segment_name=upper('&index_name');

    4、序列号

            查看序列号,last_number是当前值
            SQL>select * from user_sequences;

    5、视图

            查看视图的名称
            SQL>select view_name from user_views;

            查看创建视图的select语句
            SQL>set view_name,text_length from user_views;
            SQL>set long 2000;                说明:可以根据视图的text_length值设定set long 的大小
            SQL>select text from user_views where view_name=upper('&view_name');

    6、同义词

            查看同义词的名称
            SQL>select * from user_synonyms;

    7、约束条件

            查看某表的约束条件
            SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
                from user_constraints where table_name = upper('&table_name');

        SQL>select c.constraint_name,c.constraint_type,cc.column_name
            from user_constraints c,user_cons_columns cc
            where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
            and c.owner = cc.owner and c.constraint_name = cc.constraint_name
            order by cc.position;

    8、存储函数和过程

            查看函数和过程的状态
            SQL>select object_name,status from user_objects where object_type='FUNCTION';
            SQL>select object_name,status from user_objects where object_type='PROCEDURE';

            查看函数和过程的源代码
            SQL>select text from all_source where owner=user and name=upper('&plsql_name');


三、查看数据库的SQL
1、查看表空间的名称及大小

    select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
    from dba_tablespaces t, dba_data_files d
    where t.tablespace_name = d.tablespace_name
    group by t.tablespace_name;

2、查看表空间物理文件的名称及大小

    select tablespace_name, file_id, file_name,
    round(bytes/(1024*1024),0) total_space
    from dba_data_files
    order by tablespace_name;

3、查看回滚段名称及大小

    select segment_name, tablespace_name, r.status,
    (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
    max_extents, v.curext CurExtent
    From dba_rollback_segs r, v$rollstat v
    Where r.segment_id = v.usn(+)
    order by segment_name ;

4、查看控制文件

    select name from v$controlfile;

5、查看日志文件

    select member from v$logfile;

6、查看表空间的使用情况

    select sum(bytes)/(1024*1024) as free_space,tablespace_name
    from dba_free_space
    group by tablespace_name;

    SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
    (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
    FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
    WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

7、查看数据库库对象

    select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;

8、查看数据库的版本

    Select version FROM Product_component_version
    Where SUBSTR(PRODUCT,1,6)='Oracle';

9、查看数据库的创建日期和归档方式

    Select Created, Log_Mode, Log_Mode From V$Database;
四、ORACLE用户连接的管理

用系统管理员,查看当前数据库有几个用户连接:

SQL> select username,sid,serial# from v$session;

如果要停某个连接用

SQL> alter system kill session 'sid,serial#';

如果这命令不行,找它UNIX的进程数

SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;

说明:21是某个连接的sid数

然后用 kill 命令杀此进程号。




五、SQL*PLUS使用
a、近入SQL*Plus
$sqlplus 用户名/密码

   退出SQL*Plus
SQL>exit

b、在sqlplus下得到帮助信息
列出全部SQL命令和SQL*Plus命令
SQL>help
列出某个特定的命令的信息
SQL>help 命令名

c、显示表结构命令DESCRIBE
SQL>DESC 表名

d、SQL*Plus中的编辑命令
显示SQL缓冲区命令
SQL>L

修改SQL命令
首先要将待改正行变为当前行
SQL>n
用CHANGE命令修改内容
SQL>c/旧/新
重新确认是否已正确
SQL>L

使用INPUT命令可以在SQL缓冲区中增加一行或多行
SQL>i
SQL>输入内容

e、调用外部系统编辑器
SQL>edit 文件名
可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行
DEFINE_EDITOR=vi

f、运行命令文件
SQL>START test
SQL>@test

常用SQL*Plus语句
a、表的创建、修改、删除
创建表的命令格式如下:
create table 表名 (列说明列表);

为基表增加新列命令如下:
ALTER TABLE 表名 ADD (列说明列表)
例:为test表增加一列Age,用来存放年龄
    sql>alter table test
        add (Age number(3));

修改基表列定义命令如下:
ALTER TABLE 表名
MODIFY (列名 数据类型)
例:将test表中的Count列宽度加长为10个字符
    sql>alter atble test
        modify (County char(10));

b、将一张表删除语句的格式如下:
DORP TABLE 表名;
例:表删除将同时删除表的数据和表的定义
sql>drop table test

c、表空间的创建、删除


六、ORACLE逻辑备份的SH文件

完全备份的SH文件:exp_comp.sh

rq=` date +"%m%d" `

su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp"

累计备份的SH文件:exp_cumu.sh

rq=` date +"%m%d" `

su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp"

增量备份的SH文件: exp_incr.sh

rq=` date +"%m%d" `

su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp"

root用户crontab文件
/var/spool/cron/crontabs/root增加以下内容

0 2 1 * * /oracle/exp_comp.sh

30 2 * * 0-5 /oracle/exp_incr.sh

45 2 * * 6 /oracle/exp_cumu.sh

当然这个时间表可以根据不同的需求来改变的,这只是一个例子。



七、ORACLE 常用的SQL语法和数据对象

一.数据控制语句 (DML) 部分

1.INSERT  (往数据表里插入记录的语句)

INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT (字段名1, 字段名2, ……) FROM 另外的表名;

字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号'.
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.

日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS

INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
方法借用ORACLE里自带的DBMS_LOB程序包.

INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1  START  WITH  1
MAXVALUE  99999  CYCLE  NOCACHE;
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL

2.DELETE  (删除数据表里记录的语句)

DELETE FROM表名 WHERE 条件;

注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.

如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
TRUNCATE TABLE 表名;
此操作不可回退.

3.UPDATE  (修改数据表里记录的语句)

UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;

如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
值N超过定义的长度会出错, 最好在插入前进行长度校验..

注意事项:
A.        以上SQL语句对表都加上了行级锁,
        确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
        否则改变不一定写入数据库里.
        如果想撤回这些操作, 可以用命令 ROLLBACK 复原.

B.        在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,
        应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段.
        程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成,
        其间加上COMMIT 确认事物处理.
二.数据定义 (DDL) 部分

1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)

ORACLE常用的字段类型有
CHAR                        固定长度的字符串
VARCHAR2                可变长度的字符串
NUMBER(M,N)                数字型M是位数总长度, N是小数的长度
DATE                        日期类型

创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面

创建表时可以用中文的字段名, 但最好还是用英文的字段名

创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间

创建表时可以给字段加上约束条件
例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY

2.ALTER        (改变表, 索引, 视图等)

改变表的名称
ALTER TABLE 表名1  TO 表名2;

在表的后面增加一个字段
ALTER TABLE表名 ADD 字段名 字段名描述;

修改表里字段的定义描述
ALTER TABLE表名 MODIFY字段名 字段名描述;

给表里的字段加上约束条件
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);

把表放在或取出数据库的内存区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;

3.DROP        (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)

删除表和它所有的约束条件
DROP TABLE 表名 CASCADE CONSTRAINTS;

4.TRUNCATE (清空表里的所有记录, 保留表的结构)

TRUNCATE 表名;

三.查询语句 (SELECT) 部分

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;

字段名可以带入函数
  例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名),
           TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)函数
解释:
IF EXPR1=NULL
                RETURN EXPR2
ELSE
                       RETURN EXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数
解释:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…

ELSE
RETURN NULL

LPAD(char1,n,char2)函数
解释:
字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位

字段名之间可以进行算术运算
例如:  (字段名1*字段名1)/3

查询语句可以嵌套
例如: SELECT …… FROM
(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;

两个查询语句的结果可以做集合操作
例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,  交集INTERSECT

分组查询
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1
[HAVING 条件] ;

两个以上表之间的连接查询

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
                表名1.字段名 = 表名2. 字段名 [ AND ……] ;

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
                表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;

有(+)号的字段位置自动补空值

查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]
ORDER BY字段名1, 字段名2 DESC;

字符串模糊比较的方法

INSTR(字段名, ‘字符串’)>0
字段名 LIKE  ‘字符串%’  [‘%字符串%’]

每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.

四.ORACLE里常用的数据对象 (SCHEMA)

1.索引 (INDEX)

CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] ;
ALTER INDEX 索引名 REBUILD;

一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况,
也可以建立多字段的组合索引和基于函数的索引

ORACLE8.1.7字符串可以索引的最大长度为1578 单字节
ORACLE8.0.6字符串可以索引的最大长度为758 单字节

2.视图 (VIEW)

CREATE VIEW 视图名AS SELECT …. FROM …..;
ALTER VIEW视图名 COMPILE;

视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.

3.同义词 (SYNONMY)
CREATE SYNONYM同义词名FOR 表名;
CREATE SYNONYM同义词名FOR 表名@数据库链接名;

4.数据库链接 (DATABASE LINK)
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;

数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样

数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;

查询远端数据库里的表
SELECT …… FROM 表名@数据库链接名;

五.权限管理 (DCL) 语句

1.GRANT        赋于权限
常用的系统权限集合有以下三个:
CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)
常用的数据对象权限有以下五个:
ALL         ON 数据对象名,         SELECT ON 数据对象名,         UPDATE ON 数据对象名,
DELETE         ON 数据对象名,  INSERT ON 数据对象名,   ALTER  ON 数据对象名

GRANT CONNECT, RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;

2.REVOKE 回收权限

REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;


查询数据库中第63号错误:
select orgaddr,destaddr from sm_histable0116 where error_code='63';

查询数据库中开户用户最大提交和最大下发数: select MSISDN,TCOS,OCOS from ms_usertable;


查询数据库中各种错误代码的总和:
select error_code,count(*) from sm_histable0513 group by error_code order
by error_code;

查询报表数据库中话单统计种类查询。
select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111
select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype
posted @ 2014-07-31 12:57 Eric_jiang 阅读(211) | 评论 (0)编辑 收藏

J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中的密钥。

最简单的命令是生成一个自签名的证书,并把它放到指定的keystore文件中:

keytool -genkey -alias tomcat -keyalg RSA -keystore c:/mykey

如果c:/mykey文件不存在,keytool会生成这个文件。按照命令的提示,回答一系列问题,就生成了数字证书。注意,公共名称(cn)应该是服务器的域名。这样keystore中就存在一个别名为tomcat的实体,它包括公钥、私钥和证书。这个证书是自签名的。 

Keytool工具可以从keystore中导出证书,但是不能导出私钥。对于配置apache这样的服务器,就不太方便。这种情况下就完全用OpenSSL吧,上一篇文章《SSL-用OpenSSL生成证书文件》中已经做了介绍。不过keytool对于J2EE AppServer是很有用的,它们就是用keystore存储证书链的。keystore的作用类似于windows存放证书的方式,不过跨平台了,^_^下面用Keytool生成CSR(Certificate Signing Request),并用OpenSSL生成CA签名的证书。

1.    准备
1)    在bin目录下新建目录 demoCA、demoCA/certs、demoCA/certs  、 demoCA/newcerts
2)    在demoCA建立一个空文件 index.txt
3)    在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000
4)    配置环境变量PATH,加入%JAVA_HOME%/bin,本文用的JavaSDK1.6

2.    生成CA的自签名证书
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

3.    生成server端证书
1)    生成KeyPair生成密钥对
 keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456  -storepass 123456 -keystore server_keystore
  输入common name时,要和服务器的域名保持一致。
2)    生成证书签名请求
keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file tomcat_server.csr -keypass 123456 -storepass 123456 -keystore server_keystore 
3)    用CA私钥进行签名,也可以到权威机构申请CA签名。
   openssl ca -in tomcat_server.csr -out tomcat_server.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf
  其中-notext表示不要把证书文件的明文内容输出到文件中去,否则在后面用keytool导入到keystore时会出错。
4)    导入信任的CA根证书到keystore
   keytool -import -v -trustcacerts  -alias my_ca_root -file ca.crt -storepass 123456 -keystore server_keystore
5)    把CA签名后的server端证书导入keystore
keytool -import -v -alias tomcat_server -file tomcat_server.crt -storepass 123456 -keystore server_keystore
6)    查看server端证书
   keytool -list -v -keystore server_keystore  
 可以看到tomcat_server的证书链长度是2
 
4.    生成client端证书
1)    生成客户端CSR
   openssl genrsa -des3 -out tomcat_client.key 1024
openssl req -new -key tomcat_client.key -out tomcat_client.csr -config openssl.cnf
2)    用CA私钥进行签名,也可以到权威机构申请CA签名
openssl ca -in tomcat_client.csr -out tomcat_client.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf
3)    生成PKCS12格式证书
openssl pkcs12 -export -inkey tomcat_client.key -in tomcat_client.crt -out  tomcat_client.p12
4)    使用Keytool列出pkcs12证书的内容:
   keytool -rfc -list -keystore tomcat_client.p12 -storetype pkcs12
posted @ 2014-07-22 14:42 Eric_jiang 阅读(318) | 评论 (0)编辑 收藏

1、启动虚拟机

2、我的android sdk在“E:\android\android开发环境\android SDK\platform-tools”把要安装的apk复制到这个根目录(和adb.exe同文件夹)。

2、点击电脑左下角的“开始”按钮,输入cmd然后点击回车打开cmd输入框。

3、 (由于我的Android SDK安装路径为e盘,所以需要定位模拟器platform-tools目录) 在cmd命令提示符中输入E: 回车,如图 第一行

4、apk名称为zq7.1.1.apk

这样就安装成功了

posted @ 2014-06-27 11:22 Eric_jiang 阅读(208) | 评论 (0)编辑 收藏

     摘要: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http:...  阅读全文
posted @ 2014-06-19 18:39 Eric_jiang 阅读(408) | 评论 (0)编辑 收藏

     摘要: 这篇文章是假设你曾经使用过JavaScript的,所以如果你从没有接触过它,也许你需要先了解下更基础的知识。现在我们开始吧! 模块有多少人在一个文件中写的JS像下面的代码块一样?(注意:我可没有说内嵌在HTML文件中哦):123var someSharedValue = 10;var myFunction = function(){ //do something }var another...  阅读全文
posted @ 2014-05-16 13:30 Eric_jiang 阅读(221) | 评论 (0)编辑 收藏

     摘要: 引言Java 开发者一般不需要考虑内存释放问题,全交由 GC 去处理。但是在一些生产环境中,JVM 经过长时间运行后,即使是一些很小的未释放的 Java 对象,日积月累也会导致内存资源枯竭,最终使 Java 应用崩溃的问题。本文将就一个 AIX 平台上基于 IBM JDK 开发的 Java 应用内存枯竭的实际案例分析过程,来引领读者理解基于 IBM JDK 的 Java 应用内存泄漏调查方法,以及...  阅读全文
posted @ 2014-05-13 19:08 Eric_jiang 阅读(269) | 评论 (0)编辑 收藏

4.到myfaces项目网站http://myfaces.apache.org/,下载与客户应用同一版本的最简单的sample应用myfaces-example-simple-1.1.9.war,在WAS上安装进行测试,页面无法显示,进行第1步更改类加载路径也无法显示。检查myfaces-example-simple-1.1.9.war的lib目录,删除掉xml-apis-1.0.b2.jar和xmlParserAPIs-2.0.2.jar包,运行成功。

    5.回到客户应用,删除掉xml-apis-1.0.b2.jar和xmlParserAPIs-2.0.2.jar,更改类加载路径,页面正常显示。

    6.如果实际诊断中,能够明确断定是某个类的加载出了问题,可以打开“详细类装入”:选择“应用程序服务器/server1/进程定义/Java虚拟机”,选择“详细类装入”如下图:

    重启WAS之后,在native_stderr.log中,可以看到类的加载信息,例如:

class load: org.apache.taglibs.standard.tlv.JstlBaseTLV from: file:/D:/Program/was61/AppServer/profiles/TestProfile/installedApps/wdanNode02Cell/myfaces-example-simple-1_1_9_war.ear/myfaces-example-simple-1.1.9.war/WEB-INF/lib/jstl-1.2.jar

    如果还需要类加载的更详细信息,可以在诊断跟踪中设置 *=info: com.ibm.ws.classloader.*=all,具体做法为:登陆管理控制台,左边导航树选择“故障诊断/日志和跟踪”,然后在右面区域选择进程名(单机环境通常为server1)/诊断跟踪,然后选择“更改日志详细信息级别”,设置“*=info: com.ibm.ws.classloader.*=all”,保存。

    重启WAS。在profile_root/logs/server1/trace.log中,就可以看到类加载的详细信息。例如:

> loadClass name=com.ibm.isclite.container.collaborator.PortletServletCollaborator
com.ibm.ws.classloader.CompoundClassLoader@3f603f6
   Local ClassPath: D:\Program\was61\AppServer\systemApps\isclite.ear\struts.jar;
   …
   Delegation Mode: PARENT_FIRST
[09-12-31 11:39:18:671 CST] 0000000a CompoundClass < loadClass Exit

    需要注意的是,开源项目为应用开发节省了很多工作量,但开发人员使用开源项目时,最好对该开源项目的运行机制、代码,以及要使用的应用服务器类加载机制有较好的理解,以便于错误诊断。

posted @ 2014-05-13 19:06 Eric_jiang 阅读(2204) | 评论 (0)编辑 收藏

进入
[install directory]/profiles/wp_profile/config/cells/[cell name]/nodes/[node name]/servers/server1/目录;
编辑server.xml,寻找startupTrace  Specification元素,将其值改为:*=info:com.ibm.ws.webcontainer.*=all:com.ibm.wsspi.webcontainer.*=all:HTTPChannel=all:GenericBNF=all
重启Websphere,通过浏览器访问一下websphere,然后到websphere的日志目录[install directory]/profiles/wp_profile/logs/server1下,就可以看到跟踪日志文件trace.log
posted @ 2014-05-13 19:03 Eric_jiang 阅读(359) | 评论 (0)编辑 收藏

在每个专栏中,支持权威将讨论 IBM Technical Support 的可用于 WebSphere 产品的资源、工具和其他元素,以及一些可以进一步增强您的 IBM 支持体验的技术和新思想。

最新快报

按照惯例,我们将首先提供关于整个 WebSphere® 社区的一些重要新闻:

继续关注与支持相关的各个网站以及本专栏,以获得有关我们所碰到的其他工具的新闻。

接下来让我们继续今天的主题……


回页首

“再多一个工具我就要尖叫了”

我们在与 WebSphere 产品用户进行有关问题确定的交谈时,遇到的一个常见问题是“我现在应该使用哪个工具?”本专栏自从开始以来,已描述了如何以及何时使用许多问题确定工具,但是如果像这样一次一个地介绍工具,跟踪每个可用的工具将会充满了挑战,要确定哪个工具最适合于任何给定的情形就更不用说了。由于更广大的 IBM WebSphere Support 社区是相当动态的工具开发人员社区这一事实,问题变得进一步复杂化,这意味着可用的工具集始终变化不定,针对相似的问题,某一天使用的最佳工具可能在几个月后已经不一样了。

我们的希望在于,本文将为您阐明某些目前可用的主要问题确定工具。您将在下面找到简单的参考表格,其中在单个地方显示了您在与 WebSphere Support 合作时可能遇到的最常见问题确定工具,特别是有关 IBM WebSphere Application Server 和 Java 虚拟机(Java Virtual Machine,JVM)的工具。这些表格并不详尽,所提供的信息在性质上是不完美的——因为在本文发表之后,工具将继续发展改进,并且不同的人将以不同的方式评价各个工具。然而,不管您最终使用的工具是什么,此信息都可作为有价值的初始参考点。如果您碰巧发现这种方法很成功,请告诉我们,以便我们能够为今后的专栏计划定期的更新。


回页首

我们选择的工具

在接触到具体的表格之前,检查一下我们在组合这些信息时使用的指导原则是有帮助的:

  • 可用性

    与 IBM Support 组织直接或间接提供的大多数问题确定资源一样,本文专门集中于可从 IBM 免费获得的工具。这并不是说不存在其他工具;IBM(特别是 Tivoli®)和其他软件供应商提供了各种收费的问题确定工具,您可以使用它们来调查 WebSphere 问题。其中有些工具提供的功能远远超出了这里提到的免费工具的范围。然而,就本文的目的而言,以及为了确保每个人都有访问这些资源的同等能力,这些表格省略了商业化的工具。

  • 可访问性

    在评估问题确定工具时,IBM 将考虑所有的相关候选工具,而不管这些工具驻留在何处。不过在一般情况下,IBM Support 仅收集 IBM Support Assistant 提供的公共平台中的独立工具(除非存在收集其他工具的技术原因)。IBM Support Assistant 是中央存储库,目前用于查找所有的工具、用于安装和接收现有工具的定期更新,以及用于利用多个工具和其他问题确定功能之间的集成潜力(例如,将工具与诊断收集和 PMR 报告功能联系起来,或者将一个工具的输出作为输入提供给另一个工具,等等)。

  • 范围

    这里列出的工具仅限于客户和 IBM Support 团队经常用于在活动中帮助分析问题确定构件的工具,而不包括收集问题确定构件或者指导或全面帮助问题确定过程的工具。

  • 用于相同用途的多个工具

    随着工具的发展和新工具的出现,在最大限度地促进创新的名义下,以及为了鼓励许多感兴趣的工具编写人员做出贡献,必定存在功能上的重叠。因此,您将发现这些表格中有些地方列出了用于同一个目的的多个工具。在这些情况下,将提供有关这些工具之间的重要区别的信息,以帮助您挑选最适合需要的工具。一般情况下,将会有一个工具被标识为主要工具(用粗体字型表示),我们估计它是您在尝试执行特定问题确定任务时最适合首先尝试的工具。然而,如果您具有对另一个工具的特定特征的特殊需要,您也可以使用替代工具。一般来讲,IBM Support 主要致力于对每个领域中指定的主要工具进行增强和支持,并且随着时间的推移,将会尽量把替代工具中有价值的新功能合并到主要工具中。

  • 支持

    虽然我们希望使新的工具和新的工具功能尽快可用,但这有时意味着在编写它们之后随即“按原样”使它们可用。另一方面,我们认识到许多用户想要并且需要可靠和可信赖的工具IBM WebSphere Support 提供的每个工具与许可协议相关联,许可协议定义了该工具是否受支持的条件。(不得将本文中的任何信息理解为覆盖或取代任何许可协议中提供的信息。)不过在一般情况下:

    • 通过 IBM Support Assistant 交付但指定为技术预览版的工具以及通过 alphaWorks 交付的工具被认为是“按原样”提供的。如果取得了成功并得到广泛使用,许多起初以这种方式发布的工具(虽然不一定是全部)最终将成为受支持的标准工具。这些工具一般是非常优异的,如果没有更好的替代工具可用,您可以非常舒适地使用它们。
    • 通过 IBM Support Assistant 交付并且未指定为技术预览版的工具在其许可协议规定的条款下受到正式支持(由它们的创作者或 IBM WebSphere Support 提供支持)。IBM 一般为受支持的工具提供了帮助和缺陷报告。
  • 问题与功能

    下面的表格主要按照它们读取的构件类型进行组织。其中也列出了可以使用每种构建分析来确定的问题类型。在调查某个问题时决定如何进行的时候,务必记住这一点。当您需要快速参考的时候,这种以构件为中心的视图通常非常有用;例如,您面对某种特定类型的日志或转储文件,并且您需要快速查找某个可用于分析该文件的工具。然而,以前的“权威支持”专栏用事实证明,要提高效率,问题确定过程应该遵循定义良好的计划,该计划基于问题症状及其可能的根源,并且不执行随机操作或者“只是因为那些构件存在”而分析各个构件。无论是哪种方式,这些表格都应该能够帮助您。

    或者,您可能希望利用 IBM Guided Activity Assistant 或以前的专栏中提到的其他某个问题确定指导资源,以帮助您决定何时检查每个构件和使用每个工具可能是最高效的。

下面几个部分中的工具表格将按照它们所用于的构件进行组织:

每个表格后面是每个工具自己的文档中对每个工具的描述,以及每个工具的一般特征的大致细分。


回页首

用于 JVM 生成的信息的工具

此类构件包括:

  • Verbose Garbage Collection (verboseGC) 日志也许是最常见的 JVM 诊断类型。它显示了整个 JVM 生存期间,各个垃圾回收周期的顺序。它作为确定问题时的一项初始的辅助工具,常常具有不可估量的价值,用于检测和诊断反常的内存分配问题,例如内存泄漏、碎片,以及与 GC 有关的性能问题等等。

  • 线程转储也是一种极为常见的 JVM 诊断类型。线程转储(也称为 javacore)可以根据管理员的请求触发,或者在 JVM 中遇到某种特殊情况时自动触发。线程转储是一个文本文件,其中包含 JVM 状态的关键方面的一个相对较短的快照。该快照最常用的部分是 JVM 中当前活动线程的列表,线程转储也因此而得名。线程转储最常见的用途是诊断 JVM 中出现挂起、变慢、崩溃或 CPU 占用率过高的原因。

  • 堆转储是也可由 JVM 生成的另一种形式的转储,可以按需生成,也可以在满足特殊条件时自动生成。通常,堆转储通常是一个非常大的文件,其中包含当前 JVM 堆中所有对象的一个列表。它用于在出现内存不足的情况下执行深入分析。

  • 系统堆或核心堆是开销最大的堆,但也是最完整的堆。它是一个巨大的二进制文件,反映了 JVM 进程的全部内容:每一个 Java 对象及其字段、每一个线程、每个内存区域,等等。系统转储的最初用途是在其他类型的转储不足或无法生成时,帮助诊断崩溃、挂起或复杂的内存分配问题。不过,由于系统转储非常完整,它也能用来获取有关 WebSphere Application Server 运行时当前状态的多方面信息,甚至有关在该运行时中执行的应用程序的信息。

这里的有些构件的名称和类型特定于 IBM JDK;其他供应商的 JDK 可能产生相似的文件。有关这些类型的构件的进一步详细信息,请参阅“权威支持”专栏用于实际故障诊断的功能和工具

表 1. 用于 JVM 生成的信息的工具
构件类型 问题类型 典型输入 可用的工具
Verbose Garbage Collection 日志 (verbosegGC)
  • 内存泄漏
  • 内存不足情况
  • 诸如 native_stdout.log 等 JVM 日志文件中的 verbosegc 语句
  1. IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer (GCMV)
  2. IBM Pattern Modeling and Analysis Tool for Java Garbage Collector (PMAT)
  3. Diagnostic Tool for Java Garbage Collector
Java 转储/javacore
  • 崩溃、挂起、性能瓶颈、JVM 意外终止
  • javacore.*.txt
  • javacorePID.*.txt
  1. IBM Thread and Monitor Dump Analyzer (TMDA)
  2. Thread Analyzer
线程
  • 锁分析
  • 到运行的 JVM 的连接
  1. IBM Lock Analyzer for Java
堆转储
  • 内存泄漏
  • 内存不足情况
  • IBM 可移植堆转储 (heapdump.phd)
  • IBM 文本堆转储 (heapdump.txt)
  • HPROF 堆转储格式 (hprof.txt)
  1. Memory Dump Diagnostic For Java (MDD4J)
  2. HeapAnalyzer
  3. Heaproots
系统或核心转储
  • 系统状况的一般分析;检测异常;系统状态的深入分析。
  • 特殊情况:意外崩溃。
  • 文件名:与操作系统相关(示例包括 core.dmp、user.dmp 或者只是“core”)。
  • 在将该文件用作分析的输入之前,必须使用 jextract 工具处理该文件,从而产生 core.dmp.zip 文件(IBM JVM 5.0 及更高版本)或 core.sdff 文件 (IBM JVM 1.4.2)。
  • 注意:仅适用于 IBM JVM。
  1. IBM Monitoring and Diagnostic Tools for Java - Dump Analyzer 及其在 WebSphere Application Server modules for Dump Analyzer 中的扩展

工具描述

用于 VerboseGC 分析:

  1. IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer (GCMV)
    一个详细的 GC 数据可视化器,用于分析并绘制所有 IBM 详细 GC 日志——Xtgc 输出(并且可扩展到分析和绘制其他形式的输入)。它提供了广泛的详细 GC 数据值的图形显示,并处理 optthruput、optavgpause 和 gencon GC 模式。它具有原始日志、表格式数据和图表视图,并且可以将数据保存到 jpeg 或 .csv 文件(用于导出到电子表格)。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:verbosegc 日志
    输出:图形表示形式、html、jpeg 或 csv 文件
    支持:此工具由 IBM 提供支持,目前是用于其所在领域的主要工具。

  2. IBM Pattern Modeling and Analysis Tool (PMAT) for Java Garbage Collector
    分析 IBM 详细 GC 跟踪,分析 Java 堆使用情况,并基于 Java 堆使用情况的模式建模提供重要配置建议。此工具先于上面的 IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer (1),并提供了一个可能相当有用的不同透视图。

    请参阅 IBM Support AssistantalphaWorks 中的完整描述。
    输入:verbosegc 日志
    输出:verbosegc 日志的图形或表格表示形式
    其他功能:关于 JVM 参数的一般建议
    支持:技术预览版,按原样提供。

  3. Diagnostic Tool for Java Garbage Collector
    通过读取详细垃圾回收的输出,并产生文本和图形可视化表示形式及相关统计信息,从而帮助检查运行在 JVM 下的应用程序的垃圾回收特征。

    请参阅 alphaWorks 中的完整描述。
    输入:verbosegc
    输出:文本和图形可视化表示形式
    支持:按原样提供的工具。

用于 Java 转储/javacore:

  1. IBM Thread and Monitor Dump Analyzer (TMDA)
    分析一个或多个 Java 线程转储或 javacore,并诊断监视器锁和线程活动,以便确定挂起、死锁和资源争用或监视器瓶颈的根源。

    请参阅 IBM Support AssistantalphaWorks 中的完整描述。
    输入:用于显示相关线程历史记录的单个或多个 javacore
    输出:基于 GUI 的视图
    其他信息:关于 Analysis of hangs, deadlocks, and resource contention or monitor bottlenecks using IBM Thread and Monitor Dump Analyzer for Java Technology 的网络广播
    支持:技术预览版,按原样提供,但是是该领域的主要工具。

  2. ThreadAnalyzer
    提供 Java 线程转储或 javacore 的分析,例如来自 WebSphere Application Server 的转储或 javacore。可以在不同的级别分析线程使用情况,从高级图形视图开始,然后深入到各个线程的详细记录。如果线程转储中存在任何死锁,ThreadAnalyzer 将检测并报告它们。此工具先于上面的 IBM Thread and Monitor Dump Analyzer 工具 (4),但是其功能已集成到后者之中,后者正在成为该领域的主要工具。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:Java 线程转储/javacore
    输出:线程的图形视图、加载多个线程转储以显示线程历史记录的能力
    支持:技术预览版,按原样提供,但是是该领域的主要工具。此工具可能会逐步淘汰;请尽可能使用 IBM Thread and Monitor Dump Analyzer

用于线程:

  1. IBM Lock Analyzer for Java
    旨在对动态应用程序执行锁分析,以便突出具有可能影响性能的锁争用的线程。此工具由两个包组成:

    • 第一个包与平台相关,并提供到 JVM 的连接,以便收集有关正在运行的应用程序的锁统计信息。这个包在运行时随同要监视的应用程序一起进行加载。
    • 第二个包与平台无关,并提供了图形用户界面。

    该图形用户界面连接到平台包,并提供所需的控制和分析以确定性能糟糕的锁。

    请参阅 alphaWorks 中的完整描述。
    输入:从 JVM 收集的统计信息
    输出:锁的图形视图
    支持:按原样提供的工具。

用于堆转储:

  1. Memory Dump Diagnostic for Java (MDD4J)
    分析正在运行 WebSphere Application Server 或任何其他独立 Java 应用程序的 JVM 中常见格式的内存转储(堆转储)。内存转储分析旨在确定 Java 堆中可能是内存泄露根源的数据结构。该分析还确定应用程序的 Java 堆占用空间的主要肇事者和它们的所属关系。此工具能够分析从遇到 OutOfMemoryError 问题的生产环境应用程序服务器中获得的非常大的内存转储(将需要 2 GB 或更多的 RAM)。MDD4J 扩展了下面较旧的 IBM HeapAnalyzer (8) 的功能,尽管两个工具的用户界面完全不同。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:来自虚拟机 (JVM) 的内存转储(堆转储)
    输出:交互式报告,其中显示主要的内存泄露可疑之处,以及有关这些泄露的详细信息。
    其他功能:操作单个转储。有些版本提供了多个转储的比较分析。
    支持:此工具由 IBM 提供支持,目前是用于其所在领域的主要工具。在本文编写之际,IBM Support Assistant 中的最新版本为 Beta 版。

  2. HeapAnalyzer
    HeapAnalyzer 读取单个 Java 内存转储(堆转储),并使您能够浏览转储以查看其内容。此工具是上面的 Memory Dump Diagnostic for Java (MDD4J) 工具(7) 的前身,后者现在包含前者的大多数功能。当时,HeapAnalyzer 中的原始树浏览功能比在 MDD4J 中更加灵活。另一方面,HeapAnalyzer 缺乏 MDD4J 中的某些更完善的泄露嫌疑检测算法,并且不支持多个转储的比较分析。

    请参阅 alphaWorks 中的完整描述。
    输入:单个 java 堆转储
    输出:可疑对象的图形视图和堆浏览器
    支持:按原样提供的工具。

  3. HeapRoots
    HeapRoots 读取 Java 堆转储文件并提供用于分析数据的命令。这些命令对数据运行算法,或查询有关该数据的信息。HeapRoots 提供了命令行交互式界面,您可以在其中输入命令并获取结果。

    请参阅 alphaWorks 中的完整描述。
    输入:堆转储文件
    输出:可疑对象的图形视图和堆浏览器
    支持:按原样提供的工具。

用于系统/核心转储:

  1. IBM Monitoring and Diagnostic Tools for Java - Dump Analyzer
    一个可扩展的工具框架,它读取 IBM JVM 产生的系统转储或核心文件,并针对该转储运行各种各样的分析模块以诊断常见问题,或提供有关该 JVM 和当前运行在该 JVM 中的任何中间件或应用程序的内部状态的深入信息。目前,提供了用于对诸如死锁、挂起、崩溃、内存情况等常见 JVM 问题执行基本分析功能的模块。作为对该基本工具的补充,WebSphere Applicationi Server Modules for Dump Analyzer 提供了附加的模块,可显示 JVM 中的 WebSphere Application Server 运行时的一般状态,以及有关多个 WebSphere Application Server 子系统的详细信息。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:由 JVM 附带的 jextract 工具进行预处理的格式化系统转储
    输出:显示一个报告,其中包含由指定的分析模块提取的信息,还包含有关潜在问题的观察结果的简短摘要,以及一个提供深入信息的详细信息部分。
    其他功能:提供交互式模式以手动检查转储的内容。使得用户能够编写自己的新的专门分析模块并将模块添加到该工具。
    支持:此工具由 IBM 提供支持,目前是用于其所在领域的主要工具。


回页首

用于日志和跟踪文件的工具

用于这些类型的构件的活动包括:

  • 日志记录通常用于在日志文件中记录您希望跟踪的重要事件。日志记录用于指示:

    • 重要的状态更改;例如,当某个服务启动或停止的时候。
    • 警告;例如,当您正在写入的磁盘空间不足的时候。
    • 错误;例如,当您的代码由于预期的服务不可用而不再能够继续执行的时候。

    日志记录通常是始终启用的,因此日志记录代码必须体积相当小,这通常是您应该注意的重要事项。

  • 跟踪通常用于记录在调试代码问题时可能有用的任何信息。跟踪通常用于指示调用了哪些方法、向方法传入了哪些数据(或从方法返回了什么值)以及对代码边界之外的其他方法的调用返回了什么数据。跟踪事件体积可能比较大,因此只有在诊断问题时启用。由于跟踪事件的内容极为详细,而且是技术信息,因此经常只对编写应用程序的人有价值。打开跟踪的情况下,应该能够了解在代码中可能出现的任何问题。

表 2. 用于日志和跟踪文件的工具
构件类型 问题类型 典型输入 可用的工具
来自多个产品的日志文件
  • 一般日志分析:扫描一个或多个日志文件,以查找初始症状和常见问题;参照症状目录进行一般分析。
  • 需要在多个日志文件之间关联信息的复杂问题。
  • 来自 IBM(包括 WebSphere、Information Management、Rational® 和 Tivoli)和其他软件供应商的广泛日志文件。
  • 对特定于操作系统的日志文件的支持(AIX®、z/OS®、RedHat、Sun™)。对第三方日志的支持,包括 Oracle、Apache、Microsoft® SQL Server、SAP、Siebel 等等)。
  • 示例包括(来自 WebSphere):Activity.log、SystemOut.log、SystemErr.log、http_plugin.log。
  1. Log Analyzer
WebSphere 跟踪(一般)
  • WebSphere 跟踪的一般分析,用于广泛的深层问题。
  • trace.log
  1. Trace Analyzer for WebSphere Application Server
WebSphere Application Server 跟踪和 HTTP 插件跟踪
  • 确定系统响应方面的延迟
  • http_plugin.log、trace.log
  1. IBM Trace and Request Analyzer for WebSphere Application Server
WebSphere Application Server 跟踪(连接工具)
  • 确定连接池管理中的问题(泄露)。
  • trace.log
  1. Database Connection Pool Analyzer for IBM WebSphere Application Server
JVM verboseGC 跟踪
  • 内存泄漏
  • 内存不足情况
  • native_stdout.log
  1. IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer (GCMV)
  2. IBM Pattern Modeling and Analysis Tool for Java Garbage Collector (PMAT)
  3. Diagnostic Tool for Java Garbage Collector

工具描述

  1. Log Analyzer(以及相关的 Symptom Editor)
    一个图形用户界面,提供用于浏览、分析和关联多个产品产生的日志的单个联络点。此工具是更广泛的 IBM 自主计算活动的一部分。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:来自 IBM 和其他供应商推出的许多软件产品的多个日志文件
    输出:基于 GUI 的视图和日志文件关联
    其他功能:能够保存配置以帮助其他支持工程师进行进一步的分析。提供了配套的 Symptom Editor 工具来创建您自己的症状数据库。
    支持:目前是其所在领域的主要工具。

  2. Trace Analyzer for WebSphere Application Server
    一个高度交互式的实用工具,使您能够详细浏览、检查和搜索 WebSphere Application Server 中的复杂跟踪文件。

    请参阅 alphaWorks 中的完整描述。
    输入:WebSphere Application Server trace.log;如果启用了高级日志记录,则还支持更多的输入
    输出:功能强大的图形视图,带筛选器和搜索视图
    其他功能:能够保存配置以帮助其他支持工程师进行进一步的分析
    支持:按原样提供,但目前是其所在领域的主要工具。

  3. IBM Trace and Request Analyzer for WebSphere Application Server
    帮助查找非正常延迟、系统运行缓慢或系统表现为挂起然后又恢复的情况的根源。此工具检查 WebSphere Application Server 和 HTTP 插件中的跟踪文件,通过这些文件确定各个请求,并找出特定操作需要花长时间完成的区域,从而帮助您检查跟踪中的可疑区域,以确定是否存在问题。用户有时将此工具与上面的 Trace Analyzer for WebSphere Application Server (12) 搞混淆,但事实上它们是完全不同的。此工具严格地集中于尽可能自动地找出性能问题和延迟,而 Trace Analyzer 是通用工具,主要用于手动检查跟踪。

    请参阅 alphaWorks 中的完整描述。
    输入:HTTP 服务器日志 (http_plugin.log) 和 WebSphere Application Server 跟踪日志 (trace.log)
    输出:表格分析视图
    支持:按原样提供,但目前是其所在领域的主要工具。

  4. Database Connection Pool Analyzer for IBM WebSphere Application Server
    采用启发式分析引擎来帮助您解决与 Java Database Connectivity (JDBC) 连接池相关的问题,并诊断 JDBC 连接泄露。此工具分析 JDBC 连接池管理器跟踪,并提供以下功能:

    • JDBC 数据源分析。
    • JDBC 连接池配置分析。
    • JDBC 连接图表视图。
    • getConnection 方法的 Java 堆栈跟踪视图。

    有关使用此工具分析连接池问题所需要的 WebSphere Application Server 跟踪设置,请参阅 MustGather 信息。

    请参阅 alphaWorks 中的完整描述。
    输入:JDBC 跟踪日志
    输出:日志的表格和图形分析
    支持:按原样提供,但目前是该领域的主要工具。


回页首

用于静态配置文件和相关信息的工具

表 3. 与静态配置相关的文件
构件类型 问题类型 典型输入 可用的工具
来自多个产品的配置文件
  • 一般配置问题
  • 许多 IBM 产品中的各种配置文件(通常为 *.xml),包括 WebSphere Application Server、WebSphere MQ, DB2® UDB、Tivoli Directory Server 等等。
  • 有时将这些文件收集到一个称为 VCE 可移植收集器 JAR 的文件中。
  1. Visual Configuration Explorer
WebSphere Application Server http 插件配置文件
  • http 插件问题(请求无响应、负载平衡不正确等等)。
  • Plugin-cfg.xml、http_plugin.log
  1. IBM Web Server Plug-in Analyzer for WebSphere Application Server
WebSphere Application Server 配置(从运行时中读取,无直接可见的文件)
  • WebSphere Application Server 中的配置错误。
  • 在管理控制台中,选择 Troubleshooting => Configuration Validation
  1. WebSphere Application Server 管理控制台中的 Configuration Validator
WebSphere Application Server 类加载器配置(从运行时中读取,无直接可见的文件)
  • 类加载问题:类未找到、加载的类不正确,等等。
  • 在管理控制台中,选择 Troubleshooting => Class loader viewer
  1. WebSphere Application Server 管理控制台中的 Classloader Viewer
WebSphere 产品安装
  • 被破坏的安装
  • 直接从软件安装中读取输入。还使用“sys.inv”文件,其中包含该安装的以前快照。
  1. WebSphere Install Verification Utility (IVU / (installver)
多个产品配置和运行时网络状态
  • 端口冲突
  • 读取产品配置文件和运行时网络状态。
  1. IBM Port Scanning Tool

工具描述

  1. Visual Configuration Explorer (VCE)
    提供一种可视化、探索和分析不同来源的配置信息的方法,例如 WebSphere Application Server、WebSphere MQ 和 DB2。此工具允许您:

    • 比较相同运行时环境的不同快照。
    • 创建图表,采用图形格式显示配置信息,包括配置元素之间的主要关系。
    • 访问详细的配置属性。
    • 在配置内和跨配置搜索属性。
    • 比较配置。
    • 在不同的产品的配置信息之间建立联系。
    • 保存和恢复工作。
    • 在问题确定工作中与其他人进行协作。
    • 在独立环境或客户机/服务器环境中工作。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:从 VCE 附带的 VCE 远程收集器工具中产生的 JAR 文件
    输出:配置的图形描述。配置的差异报告(保存为 XML 格式)
    其他功能:能够保存配置,以帮助其他支持工程师进行进一步的分析。提供了配套的 Symptom Editor 工具来创建您自己的症状数据库。
    支持:技术预览版,但它是其所在领域的主要工具。

  2. IBM Web Server Plug-in Analyzer for WebSphere Application Server
    帮助发现与 WebSphere Application Server 的 HTTP 插件组件相关的潜在问题。此工具同时分析插件配置和对应的跟踪文件,然后应用模式识别算法,以便向用户发出有关可能的不一致性的警报。此工具提供配置和跟踪文件中的 HTTP 返回代码列表、URI 和可用集群的图形表示形式,以及服务器拓扑。

    请参阅 alphaWorks 中的完整描述。
    输入:WebSphere 插件日志文件 (http_plugin.log) 和 WebSphere Application Server 跟踪文件 (trace.log)。
    输出:显示 plugin-cfg.xml 文件和 trace.log 分析中的集群和成员拓扑的可视映射。
    支持:按原样提供,但目前是其所在领域中的主要工具。

  3. Configuration Validator
    此工具是 WebSphere 管理控制台的一部分,它帮助确定和查看 WebSphere Application Server 中的当前配置中存在的问题。

    请参阅 WebSphere Application Server 信息中心的完整描述。
    输入:操作 WebSphere Application Server 的某个运行实例,可通过管理控制台进行访问。
    输出:配置问题的表格视图(单独的错误、警告选项;管理控制台中可用的信息)。
    支持:包括为 WebSphere Application Server 的一部分,服从与主产品相同的支持流程。

  4. Classloader Viewer
    提供 WebSphere Application Server 的某个实例中当前活动的所有类加载器和它们已加载的所有类的详细清单。这可以帮助诊断一系列与类加载相关的问题,例如未能加载所需的类、加载了某个类的意外版本、多个类之间的可见性问题,等等。

    请参阅 WebSphere Application Server 信息中心的完整描述。
    输入:操作 WebSphere Application Server 的某个运行实例,可通过管理控制台进行访问。
    输出:WebSphere Application Server 管理控制台中的树形细分视图;可保存到文件以便以后分析。
    支持:包括为 WebSphere Application Server 的一部分,服从与主产品相同的支持流程。

  5. Install Verification Utility (IVU)
    作为一个在 WebSphere Application Server 中可用的名为“installver”的程序来交付,此程序对构成当前 WebSphere Application Server 安装的文件执行校验和,并将校验和与 WebSphere Application Server 附带或在该工具以前的执行过程中生成的参考文件做比较。此工具帮助检测被破坏的安装,例如,可能安装了修改或修补程序然后却遗忘了。

    请参阅 WebSphere Application Server 信息中心的完整描述。
    输入:WebSphere Application Server 文件,使用 verifyinstallver.bat 或 .sh 运行该工具。
    输出:指示成功的文件检查的消息。
    支持:包括为 WebSphere Application Server 的一部分,服从与主产品相同的支持流程。

  6. IBM Port Scanning Tool
    在产品的安装、配置或激活过程中扫描可用的端口,以帮助防止端口冲突。

    请参阅 IBM Support Assistant 中的完整描述。
    输入:要检查的端口号范围
    输出:列出任何正在使用的端口和任何可能的冲突的报告
    支持:技术预览版,但目前是其所在领域的主要工具。


回页首

总结

我们对用于 WebSphere 产品的一些最常遇到的问题确定工具的概述到此就结束了,并提供了一些帮助您确定何时最适合使用每个工具的信息。但愿此信息将帮助您迅速和尽可能高效地启动问题解决任务。请记住,IBM 提供的工具集在不断地发展和增加,因此务必定期检查有关每个工具的最新信息,并从问题确定工作的前沿返回到本专栏以了解更多新闻。

posted @ 2014-05-13 18:48 Eric_jiang 阅读(434) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 8 9 10 11 12 13 14 15 16 下一页 Last