個人檔案狂人密室™相片部落格清單更多 工具 說明

部落格


30/11/2008

最好的时光

周末没回家,计划去把丢失的银行卡挂失了,晚上去看看张信哲演唱会。

工行果然是“爱存不存”(icbc),周末居然歇班,没办成。

路过工体想去演唱会凑个热闹,结果连黄牛票都没买着,无功而返。

26/11/2008

事情不加以阻止,总是要全速往坏的一面发展

 

工作一旦松懈就出娄子

身体一不注意就上火生病

玩游戏一不小心就game over

爱情稍不呵护就吵架冷战

手一刻不捂着钱包就被小偷得逞

23/10/2008

心头草

海南还是wii,唉,太烦了

4/10/2008

七 夜

第一夜 如释重负,心情放松,享受着假期,舍不得闭眼睡觉。

第二夜 早出晚归,身心疲惫,临睡前惦记起工作上的事情,可是力不从心。

第三夜 我自远方来不亦悦乎,宴请宾客,浑浑噩噩,乐不思蜀,举国大庆正日子,睡罢。

第四夜 家族大聚会,搬粮食扛米抬花,大吃,睡前打开电脑隐隐想起工作的事情,无奈而眠。

第五夜 有朋自远方来,又去小朋友家拜访,大醉而归,无心工作。

第六夜 想起上班在即,仿佛鸵鸟把脑袋从坑里拿出来,愁上心头,干了会活找下心里安慰。

第七夜 最后一夜,要么一切ok,要么撒手睡觉,回到第一夜那是不可能了。

26/9/2008

必然

人字拖,能否成为你形影不离的伙伴,必然要和你经过一番血肉模糊的考验。

任何火山口地形的形成,其母体必然要经历苦痛挣扎的过程,哪怕是口腔溃疡。

16/9/2008

无奈李白

我突然觉得我很有李白的潜质,很像。有人说是性格决定他的命运,希望我不会那样,因为我比他性格稍好。

by the way,努力会有回报吗,哪怕是简单的回报,just to be accepted!

还有这个中秋来的真不是时候,十一也别来。

还有。。。士气低迷。

还有还有。。。。。。stop here!start new!

25/8/2008

自助

游完泳,拖着疲惫的身体骑车回家,发现筐也活了挡泥板也散了,决定找个修车的整一整,结果修车的生意巨火,不乐意搭理我这小买卖,哥们我一看自己来吧,足足鼓捣了半小时,满手油泥,不过总算搞定,修车的也没找我收钱。

看来以后老了编不动程序还可以戳个摊儿修车。为我勤劳勇敢,不是,勤劳节俭而干一杯吧。

17/8/2008

080817

1.命运、人生、生活,充满了巧合,有些巧合可以锦上添花,但我要说的是,有些巧合可以雪上加霜,让你郁闷之极,挠破墙皮!怎么会这么巧呢,唉,盖碗茶啊,真是对不住了。

2.电脑挂了,为了探索那深远的域名奥秘。听说中的是一个非常高级的病毒,心里还平衡些,用最后的气息留下这篇blog,明天重生!

080817,记住这个日子,这个日子让我抓狂!

6/8/2008

疲惫不堪

原来上班这么累,上班两年才知道。

终于连狂人也挺不住了。

4/8/2008

oracle 解锁

--查看锁
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;

--alter system kill session 'sid,serial#';
--把锁给KILL掉
alter system kill session '146,21177';
根据你用第1条代码查得到的结果,来kill 锁,注意看第2条注释部分的内容。

24/7/2008

使用xfire+spring编写webservice例子

今天研究了半天webservice,在绝望之际又见希望,现在可以说是大彻大悟了,再转一篇易懂的例子吧。

关键字: xfire, spring, webservice

利用xfire编写webservice的例子,内容如下
1. xfire + spring 发布webservice
2. 利用 javascript  调用发布的webservice
使用xfire+spring发布webservice其实很简单,遵循一下几个步骤即可
1. 想要发布成文webservice的类,必须实现接口
2. 3个配置文件(后面详细说)
下面针对以上步骤详细说明
关于1中的要求,给个例子就明白了

Itest.java 代码

  1. package test;  
  2. public interface IHello  
  3. {  
  4. public String hello();  
  5. public String helloTo(String name);  
  6. public String getJsonData(String pageIndex,String pageSize);  

HelloImpl.java 代码

  1. package test;  
  2. import java.util.*;  
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpSession;  
  5. import org.codehaus.xfire.transport.http.XFireServletController;  
  6. public class HelloImpl implements IHello  
  7. {  
  8. public String hello()  
  9.     {  
  10. return "hello";  
  11.     }  
  12. public String helloTo(String name)  
  13.     {  
  14. return " hello " + name + "!";  
  15.     }  
  16. private void example()  
  17.     {  
  18. //使用session
  19.      HttpServletRequest request = XFireServletController.getRequest();  
  20.      HttpSession session = request.getSession();  
  21.     }  
  22. public String getJsonData(String pageIndex,String pageSize)   
  23.     {  
  24.     String rtnValue = "";  
  25.     rtnValue = "";  
  26. for(int i=0;i<Integer.parseInt(pageSize);i++)  
  27.     {  
  28.         rtnValue = rtnValue + "{'lastname': 'last" + pageIndex + "-" + i + "', 'firstname': 'first" + pageIndex + "-" + i + "' },";  
  29.     }  
  30.     rtnValue = rtnValue + "{'lastname': 'last', 'firstname': 'last' }";  
  31.     rtnValue = "{'context':["  + rtnValue + "],'pager':[{'totalRecord':'100','totalpage':'10','pageIndex':'" + pageIndex + "','pageSize':'10'}]}";  
  32. return rtnValue;  
  33.     }  

就这样写就可以了
关于三个配置文件
web.xml修改如下

xml 代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  3. <!-- 配置文件路径 开始 -->
  4. <context-param>
  5. <param-name>log4jConfigLocation</param-name>
  6. <param-value>/WEB-INF/classes/log4j.properties</param-value>
  7. </context-param>
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <param-value>
  11.             /WEB-INF/classes/applicationContext*.xml
  12.             classpath:org/codehaus/xfire/spring/xfire.xml
  13. </param-value>
  14. </context-param>
  15. <!-- 启动时加载SpringContextServlet -->
  16. <listener>
  17. <listener-class>
  18.             org.springframework.web.context.ContextLoaderListener  
  19. </listener-class>
  20. </listener>
  21. <listener>
  22. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  23. </listener>
  24. <listener>
  25. <listener-class>
  26.             org.springframework.web.util.IntrospectorCleanupListener  
  27. </listener-class>
  28. </listener>
  29. <!-- XFire 配置 -->
  30. <servlet>
  31. <servlet-name>xfire</servlet-name>
  32. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  33. </servlet>
  34. <servlet-mapping>
  35. <servlet-name>xfire</servlet-name>
  36. <url-pattern>*.ws</url-pattern>
  37. </servlet-mapping>
  38. <welcome-file-list>
  39. <welcome-file>index.html</welcome-file>
  40. </welcome-file-list>
  41. </web-app>

这里注意   classpath:org/codehaus/xfire/spring/xfire.xml  必须要写进去
xfire-servlet.xml 新建这个文件,并且和web.xml放在同一个文件夹
注意: 名称和位置都不能变(也许可以改,我不知道)

xml 代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  5. <property name="urlMap">
  6. <map>
  7. <entry key="/testService.ws">
  8. <ref bean="test"/>
  9. </entry>
  10. </map>
  11. </property>
  12. </bean>
  13. <bean id="test" parent="webService" class="org.codehaus.xfire.spring.remoting.XFireExporter">
  14. <property name="serviceBean">
  15. <ref bean="testBean"/>
  16. </property>
  17. <property name="serviceClass">
  18. <value>test.IHello</value>
  19. </property>
  20. </bean>
  21. <!-- webService base -->
  22. <bean id="webService" class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true">
  23. <property name="serviceFactory">
  24. <ref bean="xfire.serviceFactory" />
  25. </property>
  26. <property name="xfire">
  27. <ref bean="xfire" />
  28. </property>
  29. </bean>
  30. </beans>

spring 的配置文件 applicationContext-webService.xml

xml 代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4. <bean id="testBean" class="test.HelloImpl"></bean>
  5. </beans>

查看wsdl    http://localhost:8080/mootools/testService.ws?wsdl

soap中的bingding style

以前一直没留意这个问题,今天再次复习了下,摘录了BLOGJAVA上一位兄弟的文章,总结的不错,现收藏之。

就是所谓RPC与Document或者Wrapped,Literal与Encoding

先说Literal与Encoding

  • Literal就是不在SOAP消息中表明数据类型,而通过其它方式获知数据类型,这种方式是开发包相关的,没有什么标准;如<x>50</x>,单从SOAP消息,你无法判断50是数字还是字符串,而具体的类型可以在开发包将SOAP请求映射到具体的Service类时来确定并完成转换,对于返回值也一样,客户端可已通过SetReturnValueType(...)之类的方法告知开发包自己期待什么类型

  • Encoding就是在SOAP消息中携带类型信息,并且依据某种规则将数据编码传递,接收端可以根据类型信息和编码规则完成解码,获得原始数据;如<x xsi:type="xsd:string">50</x>

再看看RPC与Document

  • RPC就是按照类似函数调用时所需的信息来组装SOAP消息:操作名作为根元素,参数组成子元素,如:

<envelope><body><myMethod><x>5</x><y>8</y></myMethod></body></envelope> (RPC/Literal)

<envelope><body><myMethod><x type=string>5</x><y type=int>8</y></myMethod></body></envelope>  (RPC/Encoded)

  • Document就是将SOAP请求和响应,或者说输入输出定义为XML元素,有严格的Schema("document" style means the messages in and out of the service are exactly as they are describe by the XML Schema in the WSDL).如某个Web Service的WSDL片断:

<types>
    <schema>
        <element name="xElement" type="xsd:int"/>
    </schema>
</types>
<message name="myMethodRequest">
    <part name="x"    element="xElement"/>
</message>
<message name="empty"/>
<portType name="PT">
    <operation name="myMethod">
        <input message="myMethodRequest"/>
        <output message="empty"/>
    </operation>
</portType>


则对应的SOAP消息如下:

<soap:envelope>
    <soap:body>
        <xElement>5</xElement>
    </soap:body>
</soap:envelope>

然而这种方式没有在SOAP消息中包含操作名,所以如果两个不同的操作具有相同的输入,开发包有可能无法决定把请求转发到哪个函数,为避免这种情况,开发包一般为每个操作的输入输出都产生具有唯一名称的Element,不管它们是否内容相同;或者作为开发者,你可以选择 Wrapped 风格

  • Wrapped 风格就是定义与操作同名的Element,将参数作为 Child Element;这样操作名又重新回到了SOAP消息中,如WSDL片断:

<types>
    <schema>       
<element name="myMethod"/>
            <complexType>
                <sequence>
                    <element name="x" type="xsd:int"/>
                </sequence>
            </complexType>
        </element>
    </schema>
</types>
<message name="myMethodRequest">
    <part name="parameters" element="myMethod"/>
</message>
<message name="empty"/>
<portType name="PT">
    <operation name="myMethod">
        <input message="myMethodRequest"/>
        <output message="empty"/>
    </operation>
</portType>


对应的SOAP消息:

<soap:envelope>
    <soap:body>
        <myMethod>  <x>5</x>   </myMethod>
    </soap:body>
</soap:envelope>

这种方式也具有明显的弱点:无法方便的处理重载,因为XML Schema不允许定义相同名称的元素;这样,即使你的后台编程语言支持函数重载,你也应该尽量避免使用

23/7/2008

我也来嘻哈,又又又!

 

又要加一把劲度过繁忙的工作,我喜欢。

又一次游泳游到胳膊抬不起来,洗澡的时候拿不动沾了水的毛巾,很爽,要坚持。

又在极度饥饿的时候牙疼,克服,用舌头压一压食物直接吞。

21/7/2008

重拾电影

最近又找回(大学毕业即失业)时候看电影的疯狂劲儿
有空把最近看的电影海报补上,先睡了
14/7/2008

无题吧

平时总爱买个龟苓膏,今天发现不加蜂蜜的龟苓膏太难吃了,有种似曾相识的味道
不论nike还是baleno都是M,抽抽了-_-|||

useful sql

查看表空间的名称及大小:

SQL> 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;
查看表空间物理文件的名称及大小:

SQL> SELECT TABLESPACE_NAME,FILE_ID,FILE_NAME,ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACE
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME;
查看回滚段名称及大小:
SQL> 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;
如何查看某个回滚段里面,跑的什么事物或者正在执行什么sql语句:
SQL> SELECT D.SQL_TEXT, A.NAME
FROM V$ROLLNAME A, V$TRANSACTION B, V$SESSION C, V$SQLTEXT D
WHERE A.USN = B.XIDUSN
AND B.ADDR = C.TADDR
AND C.SQL_ADDRESS = D.ADDRESS
AND C.SQL_HASH_VALUE = D.HASH_VALUE
AND A.USN = 1;(备注:你要看哪个,就把usn=?写成几就行了)

查看控制文件:
SQL> SELECT * FROM V$CONTROLFILE;
查看日志文件:
SQL> COL MEMBER FORMAT A50
SQL>SELECT * FROM V$LOGFILE;
如何查看当前SQL*PLUS用户的sidserial#:
SQL>SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE AUDSID=USERENV('SESSIONID');
如何查看当前数据库的字符集:
SQL>SELECT USERENV('LANGUAGE') FROM DUAL;
SQL>SELECT USERENV('LANG') FROM DUAL;
怎么判断当前正在使用何种SQL优化方式:用EXPLAIN PLAN產生EXPLAIN PLAN¡檢查PLAN_TABLE中ID=0的POSITION列的值
SQL>SELECT DECODE(NVL(POSITION,-1),-1,'RBO',1,'CBO') FROM PLAN_TABLE WHERE ID=0;
如何查看系统当前最新的SCN号:
SQL>SELECT MAX(KTUXESCNW * POWER(2,32) + KTUXESCNB) FROM X$KTUXE;
ORACLE中查找TRACE文件的脚本:

SQL>SELECT U_DUMP.VALUE || '/' || INSTANCE.VALUE || '_ORA_' ||
V$PROCESS.SPID || NVL2(V$PROCESS.TRACEID, '_' || V$PROCESS.TRACEID, NULL ) || '.TRC'"TRACE FILE" FROM V$PARAMETER U_DUMP CROSS JOIN V$PARAMETER INSTANCE CROSS JOIN V$PROCESS JOIN V$SESSION ON V$PROCESS.ADDR = V$SESSION.PADDR WHERE U_DUMP.NAME = 'USER_DUMP_DEST' AND
INSTANCE.NAME = 'INSTANCE_NAME' AND V$SESSION.AUDSID=SYS_CONTEXT('USERENV','SESSIONID');
SQL>SELECT D.VALUE || '/ORA_' || P.SPID || '.TRC' TRACE_FILE_NAME
FROM (SELECT P.SPID FROM SYS.V_$MYSTAT M,SYS.V_$SESSION S,
SYS.V_$PROCESS P WHERE M.STATISTIC# = 1 AND
S.SID = M.SID AND P.ADDR = S.PADDR) P,(SELECT VALUE FROM SYS.V_$PARAMETER WHERE NAME ='USER_DUMP_DEST') D;
如何查看客户端登陆的IP地址:
SQL>SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM DUAL;
如何在生产数据库中创建一个追踪客户端IP地址的触发器:
SQL>CREATE OR REPLACE TRIGGER ON_LOGON_TRIGGER AFTER LOGON ON DATABASE
BEGIN
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV', 'IP_ADDRESS'));
END;
REM 记录登陆信息的触发器
CREATE OR REPLACE TRIGGER LOGON_HISTORY
AFTER LOGON ON DATABASE --WHEN (USER='WACOS') --ONLY FOR USER 'WACOS'
BEGIN
INSERT INTO SESSION_HISTORY SELECT USERNAME,SID,SERIAL#,AUDSID,OSUSER,ACTION,SYSDATE,NULL,SYS_CONTEXT('USERENV','IP_ADDRESS'),TERMINAL,MACHINE,PROGRAM FROM V$SESSION WHERE AUDSID = USERENV('SESSIONID');
END;
查询当前日期:
SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD,HH24:MI:SS') FROM DUAL;
查看所有表空间对应的数据文件名:

SQL>SELECT DISTINCT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM DBA_DATA_FILES;
查看表空间的使用情况:
SQL>SELECT SUM(BYTES)/(1024*1024) AS FREE_SPACE,TABLESPACE_NAME
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
SQL>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;
COLUMN TABLESPACE_NAME FORMAT A18;
COLUMN SUM_M FORMAT A12;
COLUMN USED_M FORMAT A12;
COLUMN FREE_M FORMAT A12;
COLUMN PTO_M FORMAT 9.99;
SELECT S.TABLESPACE_NAME,CEIL(SUM(S.BYTES/1024/1024))||'M' SUM_M,CEIL(SUM(S.USEDSPACE/1024/1024))||'M' USED_M,CEIL(SUM(S.FREESPACE/1024/1024))||'M' FREE_M, SUM(S.USEDSPACE)/SUM(S.BYTES) PTUSED FROM (SELECT B.FILE_ID,B.TABLESPACE_NAME,B.BYTES, (B.BYTES-SUM(NVL(A.BYTES,0))) USEDSPACE, SUM(NVL(A.BYTES,0)) FREESPACE,(SUM(NVL(A.BYTES,0))/(B.BYTES)) * 100 FREEPERCENTRATIO FROM SYS.DBA_FREE_SPACE A,SYS.DBA_DATA_FILES B WHERE A.FILE_ID(+)=B.FILE_ID GROUP BY B.FILE_ID,B.TABLESPACE_NAME,B.BYTES ORDER BY B.TABLESPACE_NAME) S GROUP BY S.TABLESPACE_NAME ORDER BY SUM(S.FREESPACE)/SUM(S.BYTES) DESC;
查看数据文件的hwm(可以resize的最小空间)和文件头大小:
SELECT V1.FILE_NAME,V1.FILE_ID,NUM1 TOTLE_SPACE,NUM3 FREE_SPACE,
NUM1-NUM3 "USED_SPACE(HWM)",NVL(NUM2,0) DATA_SPACE,NUM1-NUM3-NVL(NUM2,0) FILE_HEAD
FROM
(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,
(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,
(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3
WHERE V1.FILE_ID=V2.FILE_ID(+) AND V1.FILE_ID=V3.FILE_ID(+);数据文件大小及头大小:
SELECT V1.FILE_NAME,V1.FILE_ID,
NUM1 TOTLE_SPACE,
NUM3 FREE_SPACE,
NUM1-NUM3 USED_SPACE,
NVL(NUM2,0) DATA_SPACE,
NUM1-NUM3-NVL(NUM2,0) FILE_HEAD
FROM
(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,
(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,
(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3
WHERE V1.FILE_ID=V2.FILE_ID(+)
AND V1.FILE_ID=V3.FILE_ID(+);
(运行以上查询,我们可以如下信息:
Totle_pace:该数据文件的总大小,字节为单位
Free_space:该数据文件的剩于大小,字节为单位
Used_space:该数据文件的已用空间,字节为单位
Data_space:该数据文件中段数据占用空间,也就是数据空间,字节为单位
File_Head:该数据文件头部占用空间,字节为单位)

数据库各个表空间增长情况的检查:
SQL>SELECT A.TABLESPACE_NAME,(1-(A.TOTAL)/B.TOTAL)*100 USED_PERCENT
FROM (SELECT TABLESPACE_NAME,SUM(BYTES) TOTAL FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) A,(SELECT TABLESPACE_NAME,SUM(BYTES) TOTAL FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) B WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME;
SQL>SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比",F.TOTAL_BYTES"空闲空间(M)",
F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;
查看各个表空间占用磁盘情况:
SQL>COL TABLESPACE_NAME FORMAT A20;
SQL>SELECT B.FILE_ID FILE_ID,
B.TABLESPACE_NAME TABLESPACE_NAME,
B.BYTES BYTES,
(B.BYTES-SUM(NVL(A.BYTES,0))) USED,
SUM(NVL(A.BYTES,0)) FREE,
SUM(NVL(A.BYTES,0))/(B.BYTES)*100 PERCENT
FROM DBA_FREE_SPACE A,DBA_DATA_FILES B
WHERE A.FILE_ID=B.FILE_ID
GROUP BY B.TABLESPACE_NAME,B.FILE_ID,B.BYTES
ORDER BY B.FILE_ID;
数据库对象下一扩展与表空间的free扩展值的检查:
SQL>SELECT A.TABLE_NAME, A.NEXT_EXTENT, A.TABLESPACE_NAME
FROM ALL_TABLES A,(SELECT TABLESPACE_NAME, MAX(BYTES) AS BIG_CHUNK
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME AND A.NEXT_EXTENT > F.BIG_CHUNK
UNION SELECT A.INDEX_NAME, A.NEXT_EXTENT, A.TABLESPACE_NAME
FROM ALL_INDEXES A,(SELECT TABLESPACE_NAME, MAX(BYTES) AS BIG_CHUNK
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME AND A.NEXT_EXTENT > F.BIG_CHUNK;
Disk Read最高的SQL语句的获取:
SQL>SELECT SQL_TEXT FROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS)
WHERE ROWNUM<=5;
查找前十条性能差的sql
SELECT * FROM (SELECT PARSING_USER_ID
EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,
SQL_TEXT FROM V$SQLAREA ORDER BY DISK_READS DESC)
WHERE ROWNUM<10 ;
等待时间最多的5个系统等待事件的获取:
SQL>SELECT * FROM (SELECT * FROM V$SYSTEM_EVENT WHERE EVENT NOT LIKE 'SQL%' ORDER BY TOTAL_WAITS DESC) WHERE ROWNUM<=5;
查看当前等待事件的会话:
COL USERNAME FORMAT A10
SET LINE 120
COL EVENT FORMAT A30
SELECT SE.SID,S.USERNAME,SE.EVENT,SE.TOTAL_WAITS,SE.TIME_WAITED,SE.AVERAGE_WAIT
FROM V$SESSION S,V$SESSION_EVENT SE WHERE S.USERNAME IS NOT NULL AND SE.SID=S.SID
AND S.STATUS='ACTIVE' AND SE.EVENT NOT LIKE '%SQL*NET%';
SELECT SID, EVENT, P1, P2, P3, WAIT_TIME, SECONDS_IN_WAIT, STATE FROM V$SESSION_WAIT WHERE EVENT NOT LIKE '%MESSAGE%' AND EVENT NOT LIKE 'SQL*NET%' AND EVENT NOT LIKE '%TIMER%' AND EVENT != 'WAKEUP TIME MANAGER';
找到与所连接的会话有关的当前等待事件:

SELECT SW.SID,S.USERNAME,SW.EVENT,SW.WAIT_TIME,SW.STATE,SW.SECONDS_IN_WAIT SEC_IN_WAIT
FROM V$SESSION S,V$SESSION_WAIT SW WHERE S.USERNAME IS NOT NULL AND SW.SID=S.SID
AND SW.EVENT NOT LIKE '%SQL*NET%' ORDER BY SW.WAIT_TIME DESC;
Oracle所有回滚段状态的检查:

SQL>SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,DBA_ROLLBACK_SEGS.STATUS FROM DBA_ROLLBACK_SEGS,V$DATAFILE WHERE FILE_ID=FILE#;
Oracle回滚段扩展信息的检查:
COL NAME FORMAT A10
SET LINESIZE 140
SELECT SUBSTR(NAME,1,40) NAME,EXTENTS,RSSIZE,OPTSIZE,AVEACTIVE,EXTENDS,WRAPS,SHRINKS,HWMSIZE
FROM V$ROLLNAME RN,V$ROLLSTAT RS WHERE (RN.USN=RS.USN);
EXTENTS:回滚段中的盘区数量。Rssize:以字节为单位的回滚段的尺寸。optsize:为optimal参数设定的值。Aveactive:从回滚段中删除盘区时释放的以字节为单位的平均空间的大小。Extends:系统为回滚段增加的盘区的次数。Shrinks:系统从回滚段中清除盘区(即回滚段收缩)的次数。回滚段每次清除盘区时,系统可能会从这个回滚段中消除一个或多个盘区。Hwmsize:回滚段尺寸的上限,即回滚段曾经达到的最大尺寸。(如果回滚段平均尺寸接近OPTIMAL的值,那么说明OPTIMAL的值设置正确,如果回滚段动态增长次数或收缩次数很高,那么需要提高OPTIMAL的值)

查看回滚段的使用情况,哪个用户正在使用回滚段的资源:
SELECT S.USERNAME, U.NAME FROM V$TRANSACTION T,V$ROLLSTAT R,
V$ROLLNAME U,V$SESSION S WHERE S.TADDR=T.ADDR AND
T.XIDUSN=R.USN AND R.USN=U.USN ORDER BY S.USERNAME;
如何查看一下某个shared_server正在忙什么:
SELECT A.USERNAME,A.MACHINE,A.PROGRAM,A.SID,
A.SERIAL#,A.STATUS,C.PIECE,C.SQL_TEXT
FROM V$SESSION A,V$PROCESS B,V$SQLTEXT C
WHERE B.SPID=13161 AND B.ADDR=A.PADDR
AND A.SQL_ADDRESS=C.ADDRESS(+) ORDER BY C.PIECE;
数据库共享池性能检查:
SELECT NAMESPACE,GETS,GETHITRATIO,PINS,PINHITRATIO,RELOADS,INVALIDATIONS FROM V$LIBRARYCACHE WHERE NAMESPACE IN('SQLAREA','TABLE/PROCEDURE','BODY','TRIGGER');
检查数据重载比率:
SELECT SUM(RELOADS)/SUM(PINS)*100 "RELOAD RATIO" FROM
V$LIBRARYCACHE;
检查数据字典的命中率:
SELECT 1-SUM(GETMISSES)/SUM(GETS) "DATA DICTIONARY HIT
RATIO" FROM V$ROWCACHE;(对于library cache, gethitratio和pinhitratio应该大于90%,对于数据重载比率,reload ratio应该小于1%,对于数据字典的命中率,data dictionary hit ratio应该大于85%)

检查共享内存的剩余情况:
SELECT REQUEST_MISSES, REQUEST_FAILURES FROM V$SHARED_POOL_RESERVED; (对于共享内存的剩余情况, request_misses 和request_failures应该接近0)

数据高速缓冲区性能检查:
SELECT 1-P.VALUE/(B.VALUE+C.VALUE) "DB BUFFER CACHE HIT RATIO" FROM V$SYSSTAT P,V$SYSSTAT B,V$SYSSTAT C WHERE P.NAME='PHYSICAL READS' AND B.NAME='DB BLOCK GETS' AND C.NAME='CONSISTENT GETS';
检查buffer pool HIT_RATIO执行
SELECT NAME, (PHYSICAL_READS/(DB_BLOCK_GETS+CONSISTENT_GETS)) "MISS_HIT_RATIO" FROM V$BUFFER_POOL_STATISTICS WHERE (DB_BLOCK_GETS+ CONSISTENT_GETS)> 0;(正常时db buffer cache hit ratio 应该大于90%,正常时buffer pool MISS_HIT_RATIO 应该小于10%)

数据库回滚段性能检查:检查Ratio执行
SELECT SUM(WAITS)* 100 /SUM(GETS) "RATIO", SUM(WAITS) "WAITS", SUM(GETS) "GETS" FROM V$ROLLSTAT;
检查count/value执行:
SELECT CLASS,COUNT FROM V$WAITSTAT WHERE CLASS LIKE '%UNDO%';
SELECT VALUE FROM V$SYSSTAT WHERE NAME='CONSISTENT GETS';(两者的value值相除)
检查average_wait执行:
SELECT EVENT,TOTAL_WAITS,TIME_WAITED,AVERAGE_WAIT FROM V$SYSTEM_EVENT WHERE EVENT LIKE '%UNDO%';
检查RBS header get ratio执行:
SELECT N.NAME,S.USN,S.WRAPS, DECODE(S.WAITS,0,1,1- S.WAITS/S.GETS)"RBS HEADER GET RATIO" FROM V$ROLLSTAT S,V$ROLLNAME N WHERE S.USN=N.USN;(正常时Ratio应该小于1%, count/value应该小于0.01%,average_wait最好为0,该值越小越好,RBS header get ratio应该大于95%)

杀会话的脚本:
SELECT A.SID,B.SPID,A.SERIAL#,A.LOCKWAIT,A.USERNAME,A.OSUSER,A.LOGON_TIME,A.LAST_CALL_ET/3600 LAST_HOUR,A.STATUS, 'ORAKILL '||SID||' '||SPID HOST_COMMAND,'ALTER SYSTEM KILL SESSION '''||A.SID||','||A.SERIAL#||'''' SQL_COMMAND FROM V$SESSION A,V$PROCESS B WHERE A.PADDR=B.ADDR AND SID>6;
查看排序段的性能:
SQL>SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME IN ('SORTS (MEMORY)', 'SORTS (DISK)');
7、查看数据库库对象:
SELECT OWNER, OBJECT_TYPE, STATUS, COUNT(*) COUNT# FROM ALL_OBJECTS GROUP BY OWNER, OBJECT_TYPE, STATUS;
8、查看数据库的版本:
SELECT * FROM V$VERSION;
9、查看数据库的创建日期和归档方式:
SELECT CREATED, LOG_MODE, LOG_MODE FROM V$DATABASE;

10、捕捉运行很久的SQL:
COLUMN USERNAME FORMAT A12
COLUMN OPNAME FORMAT A16
COLUMN PROGRESS FORMAT A8
SELECT USERNAME,SID,OPNAME,ROUND(SOFAR*100 / TOTALWORK,0) || '%' AS PROGRESS,TIME_REMAINING,SQL_TEXT FROM V$SESSION_LONGOPS , V$SQL WHERE TIME_REMAINING <> 0 AND SQL_ADDRESS=ADDRESS AND SQL_HASH_VALUE = HASH_VALUE;
11、查看数据表的参数信息:
SELECT PARTITION_NAME, HIGH_VALUE, HIGH_VALUE_LENGTH, TABLESPACE_NAME,PCT_FREE, PCT_USED, INI_TRANS, MAX_TRANS, INITIAL_EXTENT,NEXT_EXTENT, MIN_EXTENT, MAX_EXTENT, PCT_INCREASE, FREELISTS,FREELIST_GROUPS, LOGGING, BUFFER_POOL, NUM_ROWS, BLOCKS,EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN, SAMPLE_SIZE,LAST_ANALYZED FROM DBA_TAB_PARTITIONS--WHERE TABLE_NAME = :TNAME AND TABLE_OWNER = :TOWNER
ORDER BY PARTITION_POSITION;
12、查看还没提交的事务:
SELECT * FROM V$LOCKED_OBJECT;
SELECT * FROM V$TRANSACTION;
13、查找object为哪些进程所用:
SELECT P.SPID,S.SID,S.SERIAL# SERIAL_NUM,S.USERNAME USER_NAME,
A.TYPE OBJECT_TYPE,S.OSUSER OS_USER_NAME,A.OWNER,A.OBJECT OBJECT_NAME,DECODE(SIGN(48 - COMMAND),1,
TO_CHAR(COMMAND), 'ACTION CODE #' || TO_CHAR(COMMAND) ) ACTION,
P.PROGRAM ORACLE_PROCESS,S.TERMINAL TERMINAL,S.PROGRAM PROGRAM,S.STATUS SESSION_STATUS FROM V$SESSION S, V$ACCESS A, V$PROCESS P WHERE S.PADDR = P.ADDR AND S.TYPE = 'USER' AND A.SID = S.SID AND A.OBJECT='SUBSCRIBER_ATTR'ORDER BY S.USERNAME, S.OSUSER;
14、查看回滚段:
SQL>COL NAME FORMAT A10
SQL>SET LINESIZE 100
SQL>SELECT ROWNUM, SYS.DBA_ROLLBACK_SEGS.SEGMENT_NAME NAME, V$ROLLSTAT.EXTENTS EXTENTS, V$ROLLSTAT.RSSIZE SIZE_IN_BYTES, V$ROLLSTAT.XACTS XACTS, V$ROLLSTAT.GETS GETS, V$ROLLSTAT.WAITS WAITS, V$ROLLSTAT.WRITES WRITES, SYS.DBA_ROLLBACK_SEGS.STATUS STATUS FROM V$ROLLSTAT, SYS.DBA_ROLLBACK_SEGS, V$ROLLNAME WHERE V$ROLLNAME.NAME(+) = SYS.DBA_ROLLBACK_SEGS.SEGMENT_NAME AND V$ROLLSTAT.USN (+) = V$ROLLNAME.USN ORDER BY ROWNUM;
15、耗资源的进程(top session):
SELECT S.SCHEMANAME SCHEMA_NAME,DECODE(SIGN(48 - COMMAND), 1, TO_CHAR(COMMAND), 'ACTION CODE #' || TO_CHAR(COMMAND) ) ACTION,STATUS SESSION_STATUS,S.OSUSER OS_USER_NAME,S.SID,P.SPID,S.SERIAL# SERIAL_NUM,NVL(S.USERNAME,'[ORACLE PROCESS]') USER_NAME,S.TERMINAL TERMINAL,S.PROGRAM PROGRAM,ST.VALUE CRITERIA_VALUE FROM V$SESSTAT ST,V$SESSION S,V$PROCESS P WHERE ST.SID = S.SID AND ST.STATISTIC# = TO_NUMBER('38') AND ('ALL'='ALL' OR S.STATUS ='ALL') AND P.ADDR=S.PADDR ORDER BY ST.VALUE DESC,P.SPID ASC,S.USERNAME ASC,S.OSUSER ASC;
根据PID查找相应的语句:

SELECT A.USERNAME, A.MACHINE,A.PROGRAM,A.SID,A.SERIAL#,A.STATUS,C.PIECE,C.SQL_TEXT FROM V$SESSION A,V$PROCESS B,V$SQLTEXT C WHERE B.SPID=SPID AND B.ADDR=A.PADDR AND A.SQL_ADDRESS=C.ADDRESS(+) ORDER BY C.PIECE;

30/6/2008

又度周末

这周回家真是艰辛,再次闯关,失败告终,也是难为检票工作者了,换了一个大检票口挨着盘的查票,我只好赶下一班火车——要将近两小时以后,两个小时啊,真是漫长,从来没觉得小黑这么沉,时间这么慢。在莲花餐厅吃完饭死皮赖脸的坐了半个小时才想起前不久庆生的蛋糕券还没有兑换,可以换些点心打发时间(这决定可以说是一巨失败之举)。

两个小时结束,终于可以上车了,像往常一样,选择一个过道处就此站定,开始一个小时的旅途,谁知这才是噩梦的开始。由于下雨,我们的和谐号也不再和谐,开的那叫一个慢,窗外一片漆黑,一个小时的样子,列车进站,大伙收拾行李准备下车,往窗外一看,什么,廊坊站?才到“津京走廊”?当时想死的心都有!列车继续前行,我不断收到天津暴雨的短信(我没有带伞),当时那个心情啊……

历经2个小时的漫长等待,忍受着旁边一个结巴法国人和一个初级英语爱好者的不停聊天(俩人英语口语都不怎么样,并且还不认识),终于到站了,时值当天23点,晚了1个小时,冒着大雨,拎着小黑和一百块的面包,走进候车大厅避雨,困也没办法,看雨小点出去找出租车吧,又在外面一个破棚子里拎着小黑和一百块的面包等了1个多小时,最后出着大价钱,和其他人拼车,才回到家。

好在第二天去唱歌还算爽快,唱歌的本领到了极致,舞台感觉也是没话说,唉,挡不住啊。

 

这周末有两个词一直在脑海里浮现:“钱将不钱”、“fuck”

23/6/2008

ATI商标即将脱落

近日ati显卡的标已经歪了,证明了我工作是付出汗水的,预计明天脱落。

22/6/2008

发生于周末

周五回家闯了火车站检票口,有点小爽,当然是为了上车补票。
偶看《空战英豪》,很喜欢。
见到了美国医学博士和天津溜冰第一(据说),博士很儒雅,第一很疯狂,溜冰去吃黄金皮萨。
周末在金逸看了《纳尼亚2》,还不错,不过放弃《熊猫》有点可惜。
开辟了rolins三明治,味道还不错,可以和subway的金枪鱼比拼,但是价格远远取胜。
办了kfc下半年学生卡,都涨价了,但是喜欢早餐的变更,继续配合清华饭卡使用。