用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(二. Tomcat 下的配置)

在前篇 用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(一. 引子) 大略介绍了 p6spy,并且在 http://www.p6spy.com/documentation/install.htm#install 也有 p6spy 在不同服务器下的安装方法。本文不打算依照官方的说明来做,我们让 Tomcat 的 Common 类加载器来加载 p6spy.jar 包,包含了 Tomcat 5/6 下的 p6spy 配置,数据库连接池实现用 C3P0,数据库为 Oracle,配置在一个与应用同名的单独的 xml 文件中,Tomcat 中是在应用的 META-INF/context.xml 文件中。步骤如下:

1. 软件准备

下载 Tomcat 5 或者 6 进行安装,不必多说。假设置 Tomcat 的目录为 $TOMCAT_HOME。
下载 p6spy-install.zip,解压缩 p6spy-install.zip,其中有 p6spy.jar 和 spy.properties
准备好数据库的驱动包,比如 Oracle 的 classes12.jar,和 C3P0 实现包,如 c3p0-0.9.0.2.jar。 阅读全文 >>

用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(一. 引子)

一个企业应用程序的性能瓶颈可能会在硬件配置、网络方面、程序代码、应用服务器配置、数据库配置、SQL 语句。这里我把本文的关注点 SQL 无意间放在了最后,其实它不并不意味着最后考虑的,而是过程中就要时刻留意的。

SQL 语句的优化总得把所执行语句抓出来瞧瞧,分析分析。如果直接用 JDBC 或者是类 iBatis 的东西来访问数据库,那所执行的 SQL 语句是明确的,而现在的项目大多会用 ORM 组件,例如 Hibernate、JPA、CMP、TopLink 都有自己特定的查询语法,最终当然要转换成 SQL 语句的,所以会生成什么样的 SQL 语句就不甚明了,若人为的看着专有查询语句来相象出 SQL 语句并非易事。虽然 Hibernate 设置 show_sql=true 时也能打印出生成的 SQL(带?号参数),配合详细的日志参数值也可以对上,不过挺麻烦的。 阅读全文 >>

挖Linux中的古老缩略语[转]

Unix已经有35年历史了。许多人认为它开始于中世纪,这个中世纪是相对于计算机技术的产生和发展来说的。在过去的时间里,Unix和它的子分支Linux收集有许多的历史和一些完全古老的语言。在这篇技巧文章中,我们将介绍一少部分古老的语言和它们的目的和作用,以及它们真正的来源。

  RC

  在Linux中,最为常用的缩略语也许是“rc”,它是“runcomm”的缩写――即名词“run command”(运行命令)的简写。今天,“rc”是任何脚本类文件的后缀,这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时。如/etc/rc是Linux启动的主脚本,而.bashrc是当Linux的bash shell启动后所运行的脚本。.bashrc的前缀“.”是一个命名标准,它被设计用来在用户文件中隐藏那些用户指定的特殊文件;“ls”命令默认情况下不会列出此类文件,“rm”默认情况下也不会删除它们。许多程序在启动时,都需要“rc”后缀的初始文件或配置文件,这对于Unix的文件系统视图来说,没有什么神秘的。 阅读全文 >>

Solaris 常用系统命令[转]

系统基本配置







如何查看日志信息

                dmesg | more /var/adm/messages*   

收集
exlpore
日志

  
              /opt/SUNWexplo/bin/explorer -k ->/opt/SUNWexplo/output

系统的基本状况

   
                       showrev 

系统运行时间,平均负载

                                 uptime                           

版本信息

                                               uname -a                                 

Update
版本

                                         more /etc/release                

系统补丁

 
     showrev -p 

已安装的补丁信息

  patchadd 123-12

打补丁

查看服务对应的端口

  more /etc/services

系统变量设置
env

sysdef

Shell
变量:
bash,csh,ksh

收集
explore
日志

先查看有没有装


# pkginfo |grep SUNWexplo

如果有安装的话:


# /opt/SUNWexplo/bin/explorer

收集到的文件在:


# /opt/SUNWexplo/output

清空日志:
cp /var/adm/messages /var/adm/messages.bkp  #cat /dev/null > /var/adm/messages

CPU
 

psrinfo -vp             
系统
cpu
数和速度

uptime                   cpu
平均负载

prstat -a               
实时进程的状态 (相当于 Linux 下的 top 命令)

ps -ef                  
显示所有进程的详细信息

kill pid
杀死进程

vmstat

mpstat

/usr/ucb/ps -aux

内存

prtdiag -v
系统硬件,电源接口等

查看内存大小
prtconf -vp | grep Mem

vmstat

swap -s

增加
swap
分区:
mkfile 200m /tmp ,swap -a,swap -l

C5292

磁盘管理

iostat 
监视系统输入/输出设备负载

format 
系统几块磁盘,大小
Ctrl+D
的组合键退出

metastat
显示硬盘
raid
状态

检查硬盘信息
prtvtoc /dev/dsk/c0t0d0s5

查看
NBU
硬盘
available_media

如何添加硬盘

1
mkdir /usr/ldap3

2

newfs /dev/rdsk/c1t3d0s1 


       3


mount /dev/dsk/c1t3d0s1 /usr/ldap3

4

vi /etc/vfstab
添加文件系统信息

/dev/dsk/c1t2d0s0  /dev/rdsk/c1t2d0s0   /usr/ldap3      ufs     1  yes     logging


 

文件系统

df -k  
磁盘使用情况

磁带机的读存数据
: tar cpio

磁带机状态

  mt -f /dev/rmt/0 status

虚拟文件系统表

  /etc/vfstab

Solaris
硬盘分区

网络

ping

netstat -arp

ifconfig –a

系统基本操作

文件操作

压缩解压
tar gzip gunzip

iso
文件

  lofiadm

查看文件信息

  ls -lrt

目录大小

  du -sk dir

mkdir ,cd,

查找文件:
Find 
文件类型
file

查看文件
more

head

tail

cat
例如:
tail -10 /var/adm/messages

文件的权限
chmod: chmod 644 a.txt 

解包
tar vcf filename.tar

打包
tar cvf filename.tar dirname

.gz
文件
解压
gunzip filename.gz ; gzip -d filename.gz          
压缩
gzip filenam

.tar.gz 
解压:
tar zxcf file.tar.gz                                    
压缩;
tar zcvf file.tar.gz dirname

创建和编辑文件:

生成新文件或改变文件日期:
Touch  
文件拷贝
cp
移动文件
mv

修改文件: vi的用法

组合命令
:

输出重定向
>  
组合命令
|

常用管理命令
man

用户管理

groupadd

useradd

passwd

查看用户
/

more /etc/passwd

/etc/shadow

/etc/group

(who

finger

rusers

1

whodo

id


如何做系统硬件健康状况检查




# more /var/adm/messages*
(没有重大异常报错)



# df –k (“/”
使用率小于
85%)

# format
ctrl+d退出)(所有硬盘正常)

# prtdiag –v (
没有
failed
的部件、内存和
cpu
数量正确
)

# psrinfo –v (
系统中所有的
cpu
都处在
online
状态
)


运行级别

查看系统的运行级、日期及时间

  who   –r

系统运行级别
1

掉电(运行级
0

2

单用户(运行级
1

s

S

3

多用户(运行级
2

3

4

重引导(运行级
5

6

重新启动

  reboot, init 6

关闭系统:
shutdown

init 0

halt


 

其它管理

定时任务


crontab 
推到一个自定义的文件上


crontab -l>tmp

编辑这个文件,做需要的修改


vi tmp

推回
crontab
crontab tmp

NBU
备份

#bpdbjobs –report  
检查作业备份情况,返回为
0
即为正常

#bpps –a  
备份进程启动情况


 

磁盘阵列管理


 

#sccli

sccli: selected device /dev/rdsk/c2t0d0s2 [SUN StorEdge yyyy SN#08472F]

#sccli> show disks

输出的
Status
列,所有值正常情况下是
” ONLINE”

” STAND-BY”
,其它的值都是不正常的;



#sccli> show logical-drives

输出的
Status
列,其值正常情况下是
” Good”
,其它的值都是不正常的;



#sccli>show enclosure-status

输出的
Status
列,所有值正常情况下是
” OK”
或者
” Absent”
,其它的值都是不正常的;



#sccli>show FRUs

输出的
FRU Status
行,所有值正常情况下是
”OK”



其它的值都是不正常的;



#sccli> show peripheral-device-status

输出的
status
列,所有值正常情况下是
”within safety range”

” N/A”

” Hardware:N/A”

” Hardware:OK”



其它的值都是不正常的;



#sccli>exit

oracle

lsnrctl status
查看
listener
进程的状态

tnsping SID   
查看连通请款

sun cluster

scinstall -pv 
版本信息

luxadm -e port
光纤链路状态

Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容

在 Oracle 的存储过程执行中,我们可能希望它本身能完成邮件发送执行的结果,特别是在捕获到了异常时。不能总是依赖于调用存储过程的外部程序--调用后,根据出口参数,发送执行结果。这一需求更迫切的表现在非人工参与的 Oracle Job 调用存储过程的情况下。

所幸,Oracle 为我们提供了发送邮件的工具包 UTL_SMTP,它最早出现在 Oracle 8.1.7 版本中。下面是我从网络上搜索相关资料后、综合整理、多处修正、数次调试、排除万难而写出的一个发送邮件的存储过程。可支持需用户验证的邮件服务器,中文标题和中文内容无乱码,只还未支持附件的发送,相信这方面应用较少,需要的话再 Google 一下,且文后参考中有相应的链接。 阅读全文 >>

Oracle 过程中执行动态 SQL 或 DDL 语句

如果你用的是 Oracle 8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句,但这个动态语句中带参数,或 Select 的结果要 into 到变量中时就要稍加留心一下了。而在 8i 以前的版本(谁还用这么古老的玩艺,总有些不得已的地方,老系统考虑升级成本遗留下来的,应用软件所伴随着的等),都没法用 execute immediate,就得使用 DBMS_SQL 包来实现了

何谓动态 SQL 和 DDL 语句呢?通常在过程中要操作的表名、字段名都必须是明确的,否则编译过程时就要报错,但如果这两者也用变量名来表示就是动态的。DDL 就是数据库对象定义的操作,如 CREATE TABLE/VIEW/INDEX/SYN/CLUSTER....,及这些对象的删除、修改操作等等。 阅读全文 >>

Quartz Job Scheduling Framework[翻译]附录 A. Quartz 配置参考 (第六部分)

十. 配置 Quartz 数据源

如果你在使用 JDBC JobStore,就需定义要用到的数据源。而如果使用的是 JobStoreCMT,你实际上需要定义两个数据源。数据源可由三种方式来配置:

·在 quartz.properties 文件中指定连接池属性,这样 Quartz 能亲自创建数据源。

·指定应用服务器管理的数据源所在 JNDI 的位置,Quartz 直接使用它。

·还可使用自定义的 org.quartz.utils.ConnectionProvider 实现类。 阅读全文 >>

Oracle 中重新编译无效的存储过程, 或函数、触发器等对象

Oracle 中的存储过程在有些情况下会变成失效状态,在 PL/SQL Developer 中该存储过程的图标左上角显示一把小红叉叉。比如储过程所引用的对象失效,dblink 出问题啦都可能引起用到它的存储过程失效。再就我的存储过程经常会变成无效,至今原因都未查明。

查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 created 和 last_ddl_time 时间。

上面的那种无效的存储程,只要不是语法上有问题,重新编译一下又是可用的了。总不能每次发现时人工去编译的,所以要实现自动化,有以下两种方法(网上找到的所有的 在Oracle中重新编译所有无效的存储过程 代码排版都很混乱,所以主要是重新整理了): 阅读全文 >>