恩,个人空间,以后就开这个了

发布新日志

  • 自我反省

    2011-06-14 11:10:29

    看着上一篇日志,已经是08年的事了,2年时间过去了,自己好像一点长进也没有。

    来ALU有10个月,感觉自己还是个新人。工作总是无法集中注意力,每天上网闲逛,浑浑噩噩。高中同学,大学同学,研究生同学,工作事业有小成的,也有大成的。只有自己还是那么迷茫,不知道自己未来的方向, 越是迷茫越是逃避。有时候想想,真的是一步错,步步错,满盘皆输。想要翻盘真的没想象中那么容易。

    现在连完成分内的工作都成问题,好好反省一下这10个月的工作,为什么会造成这样的。

    1,WOW,从去年10月开始玩游戏,到现在已经快7个月,不知不觉。
    2,买房,装修,结婚,也是从去年开始,这些事情确实占了一部分经历。
    3,公司的管理方式,说实话,我真的不太适合这样的管理方式,我也发现这种没有压力,靠自觉的工作方式真的很欠缺。这也是我前半生一直缺少的自律精神。很容易改变吗?
    4,沟通和自尊心,这是一种恶性循环,没有压力,工作不上进,沟通出现问题,工作继续不上进,沟通继续出现问题。
    5,工作状态和英语,也许是10多年的学习时光,让我对英语产生非常严重的抵触情绪,无法对着满篇的英文邮件和英文文档长时间的全神贯注。

    从今天起,必须解决这些问题

    1,放弃WOW,再不放弃,也许这一生真的就毁了。
    2,装修,结婚的事马上也要告一段落了,必须减少精力和时间上投入。
    3,从现在开始学习管理与执行,管理自己,自己执行。
    4,放弃那可怜的自尊心吧。
    5,在2011年底前突破英语的瓶颈。给自己设定短期目标。

    2011年的短期目标:

    1,突破英语,读写英语,连续工作可超过4小时。读写英语无障碍。
    2,胜任DM工作。
    3,自动化测试工作,自己单独承担一个项目,并完成它,不能再半途而废。
    4,完成,买房,装修,结婚,蜜月,这一系列人生大事。为自己的人生翻开新的篇章。
    5,考北邮的MBA。

    forget anything。。。
  • Tomcat中文目录

    2008-10-16 16:46:33

    Tomcat是Java开发者使用得较多的一个Web服务器,因为它占用资源小,运行速度快等特点,深受Java Web程序员的喜爱。不过,在使用中,由于Java中的中文问题的存在,如果不经过配置,在WEB程序中,不能直接支持具有中文文件名的文件的下载,这为Java Web程序的开发带来一定的不便。本文拟介绍一种手段,解决这个问题。

       解决问题的核心在于修改Tomcat的配置,在Server.xml文件中添加一个名为URIEncoding的属性,它用于对HTTP请求中的get方法传过来的URL进行编码。如果直接从Apache站点中下载Tomcat,无论是安装版的exe文件,还是解压缩的ZIP文件,内置的对于get协议中的URL编码都是ISO-8859-1,这个字符集不能直接支持中文等双字节的信息,而中文文件的下载链接恰恰是通过get协议进行的。以下说明修改Tomcat安装目录中的config文件夹中的server.xml文件的方法。

       打开config/server.xml文件,如果没有修改过这个文件,应该可以在其中找到如下代码:
      
       <Connector port="8080"  protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
      
       这段代码规定了Tomcat监听HTTP请求的端口号等信息,可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat不再以ISO-8859-1的编码处理get请求。更改后的代码如下所示(红色部分为新添加的代码):
     
      <Connector port="8080"
                 URIEncoding="utf-8"
                 protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
     
      下面,我们准备测试一下更改后的效果。

       最为简单的测试方法就是让Tomcat自己列出WEB程序中的目录和文件,默认情况下,Tomcat不会直接列出WEB程序目录中的文件和文件夹,但是,我们可以修改位于安装目录中的config文件夹中的web.xml,使其能够支持自动列出WEB程序中的目录和文件。
       在config/web.xml文件中找到如下代码:
      
        <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>listings</param-name>
          <param-value>false</param-value>

        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
       将上面的代码中标为红色的部分改为如下内容:
     
       <init-param>
          <param-name>listings</param-name>
          <param-value>true</param-value>
       </init-param>
      

       即将参数listings的属性改为true,就可让Tomcat自动列出某个WEB程序目录中的文件和文件夹。

       现在,我们的设置已经完成,将修改的文件保存后,就可以启动Tomcat进行测验了,当然,如果Tomcat正在运行,则需要重新启动,以便配置生效。

       现在,可以在Tomcat安装目录中的webapps目录中建立一个名为cntest的文件夹,作为测试的web程序的上下文路径(注意:对于WEB程序的上下文路径,请不要使用中文)。请在cntest中添加一些中文目录和文件,然后在浏览器中打开该WEB程序,如,http://localhost:8080/cntest,测验一下效果吧。当然,也可以在JSP或HTML文件中使用那些包含中文的文件夹或文件名的超级链接。

       说明:以上修改均使用Tomcat5.5做的测试,在5.5以上都应该可以,至于5.0和4.x,我没有实验过,不过对于5.0应该也是可以的,但4.x不能保证(4.x在处理HTTP的get和post方法和5.x不大一样)。
  • ANT

    2008-10-15 19:48:43

    使用 ANT 开发 Java 程序

    常听大家讨论哪个 Java 开发工具比较好,JBuilder,Virtual Cafe ?

    今天介绍一个简单易用的 Java 开发,编译,集成,测试工具:Jakarta Ant
    他被称为 java 环境里的 make (make 在 C 程序开发里人人皆知)
    Java 程序编辑器爱用啥用啥,我喜欢用 UltraEdit。
    以 HelloWorld 为例介绍他的使用。
    此示例可在此下载:
    ftp://210.52.88.133/pub/doc/code/ant/HelloWorld.zip

    .下载 ant :(最新版 1.5)
     http://jakarta.apache.org/builds/jakarta-ant/release/v1.5/bin/
     windows 下请下载 zip 文件
     unix 下请下载 tar.gz 文件

    .安装 JDK:
    安装到 c:\jdk,并确认能找到 c:\jdk\bin\java

    .安装 ant:
    把 ant 解压到本地硬盘 c:\ant,并确认能找到 c:\ant\bin\ant.bat

    .设置环境变量:
    JDK_HOME:c:\jdk
    ANT_HOME:c:\ant
    PATH:在原来的 PATH 开头加上 c:\ant\bin;c:\jdk\bin
    注:
      windows 下做操作:我的电脑 ->; 属性 ->; 高级 ->; 环境变量 ->; 用户变量
      每次修改完环境变量,要重新打开 MS-DOS 窗口才能生效


    .开始开发:

    一个 ant 项目目录结构:
     c:\HelloWorld :项目主目录
           \src :源程序目录
           \classes :编译后的 class 文件目录
           \lib :开发项目所需要的类库目录,比如开发数据库时所需要的 jdbc lib(这次没用到)
           \jar :打包好的 jar 程序目录(这次没用到)
           \build.xml :项目配置文件
             
    1.建立一个项目的主目录
     mkdir c:\Helloworld

    2.创建项目配置文件:

    c:\HelloWorld\builder.xml
    -----------------------------------------------------------------------------
    <?xml version="1.0"?>;

    <project default="build" basedir=".">;

       <property name="appname" value="HelloWorld" />;
       <property name="base" value="." />;
       <property name="src" value="src" />;
       <property name="build" value="classes" />;
       <property name="myclasspath" value="${build}" />;

       <target name="build">;
           <mkdir dir="${build}" />;
           <javac classpath="${myclasspath}" srcdir="${src}" destdir="${build}">;
               <include name="**/*.java" />;
           </javac>;
       </target>;

       <target name="run" depends="build">;
           <exec executable="java">;
               <arg line=" -classpath ${myclasspath} HelloWorld" />;
           </exec>;
       </target>;

       <target name="clean">;
           <delete includeEmptyDirs="true">;
               <fileset dir="${build}" />;
           </delete>;
       </target>;

    </project>;
    -----------------------------------------------------------------------------

    3.建立源代码目录,所有的 Java 程序放在里面
     mkdir c:\HelloWorld\src

    4.创建 HelloWorld.java

    c:\HelloWorld\src\HelloWorld.java
    -----------------------------------------------------------------------------
    /**
    * Demo class for run HelloWorld by ANT
    */

    public class HelloWorld {
       public static void main(String args[]){
           System.out.println ("Hello World!");
       }
    } //EOC
    -----------------------------------------------------------------------------

    5.编译 HelloWorld
    C:\HelloWorld>;ant build
    Buildfile: build.xml

    build:

    BUILD SUCCESSFUL
    Total time: 2 seconds
    说明:
    调用 builder.xml 中的 target build
    在 c:\HelloWorld\classes 里会出现 HelloWorld.class
    此命令会把 src 目录下所有的 java 文件(包括子目录下的)都编译


    6.运行 HelloWorld
    C:\HelloWorld>;ant run
    Buildfile: build.xml

    build:

    run:
        [exec] Hello World!

    BUILD SUCCESSFUL
    Total time: 2 seconds
    调用 builder.xml 中的 target run
    注意 target run 后的 depends="build",只有 build 成功后 run 才可以被调用


    7.清除 class 文件:
    C:\HelloWorld>;ant clean
    Buildfile: build.xml

    clean:
      [delete] Deleting 1 files from C:\Helloworld\classes
      [delete] Deleted 1 directory from C:\Helloworld\classes

    BUILD SUCCESSFUL
    Total time: 2 seconds

    使用 ANT 的好处:
     1.相对于其他项目管理工具,只有一个文本配置文件 build.xml,配置简单
     2.命令简单,一学就会,ant run, ant clean ...
     3.安装简单,占用资源少,只要安装 Jdk, ANT 就可以运行

    用 ANT 进行 Java 程序开发,已经成了 Java 界的一个共识。
    在此基础上,可以建立更复杂的项目
     
    推荐阅读:
     Apache Ant 1.5 Manual
     http://jakarta.apache.org/ant/manual/index.html
     如果有时间,应该仔细阅读,能发现许多 ant 的强大功能
  • 如何实现关系表的级联删除(ON DELETE CASCADE的用法)

    2008-10-15 16:09:25

    以下面两张表为例:

    SQL> desc person
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ------------------------

     PERSONID                                  NOT NULL NUMBER(9)
     PROFESSION                                         NUMBER(2)
     IDORPASSPORTNO                                     VARCHAR2(18)
     INSURANCE                                          VARCHAR2(32)
     FIRSTNAME                                          VARCHAR2(32)
     LASTNAME                                           VARCHAR2(32)
     CHINESENAME                                        VARCHAR2(64)
     SEX                                                CHAR(1)
     BIRTHDAY                                           DATE
     USERTYPE                                           VARCHAR2(2)
     SEARCHCODE                                         CHAR(10)
     ORGID                                              NUMBER(9)
     ADDRESSID                                          NUMBER(9)

    SQL> desc PERSONPROFESSION
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ------------------------

     PROFESSIONID                              NOT NULL NUMBER(2)
     NAME                                               VARCHAR2(32)
     ALIAS                                              VARCHAR2(32)
     INITCREDIT                                         NUMBER(3)
     MEMO                                               VARCHAR2(200)

    假定PERSONPROFESSION为父表,PERSON为子表,建立如下约束条件:

    SQL>ALTER TABLE PERSONPROFESSION ADD (CONSTRAINT PK_PERSONPROFESSION PRIMARY KEY (PROFESSIONID) USING INDEX  TABLESPACE WACOS;

    表已更改。

    SQL>ALTER TABLE PERSON ADD (CONSTRAINT PK_PERSON PRIMARY KEY (PERSONID) USING INDEX  TABLESPACE WACOS;

    表已更改。

    增加PERSON表的外键约束:

    SQL>ALTER TABLE PERSON ADD (CONSTRAINT FK_PERSON1 FOREIGN KEY (PROFESSION)
    REFERENCES PERSONPROFESSION (PROFESSIONID) );

    表已更改。

    分别向两张表里插入一行数据:

    SQL>insert into PERSONPROFESSION values('1','sdfd','df','342','dfs');

    已创建 1 行。

    SQL> commit;

    提交完成。

    SQL>insert into person values('10','1','dsf','d','d','df','df','0','','sd','s','11','11');

    已创建 1 行。

    SQL> commit;

    SQL> select  PERSONID,PROFESSION from person;

      PERSONID PROFESSION
    ---------- ----------
            10          1

    SQL> select PROFESSIONID,name from  PERSONPROFESSION;

    PROFESSIONID NAME
    ------------ --------------------------------
               1 sdfd

    SQL> delete from PERSONPROFESSION;
    delete from PERSONPROFESSION
    *
    ERROR 位于第 1 行:
    ORA-02292: 违反完整约束条件 (WACOS.FK_PERSON1) - 已找到子记录日志.

    报错是因为父表里存在子表的记录,应先删除子表记录,再删除父表记录:

    SQL> delete from PERSON;

    已删除 1 行。

    SQL> delete from  PERSONPROFESSION;

    已删除 1 行。

    SQL> commit;

    提交完成。

    那么,如何实现两张表的级连删除呢?

    重新建立PERSON的外键,加上ON DELETE CASCADE选项试一下:

    SQL> alter table person drop CONSTRAINT FK_PERSON1;

    表已更改。

    SQL>ALTER TABLE PERSON ADD (CONSTRAINT FK_PERSON1 FOREIGN KEY (PROFESSION)
    REFERENCES PERSONPROFESSION (PROFESSIONID) ON DELETE CASCADE);


    表已更改。


    增加外键约束的时候加ON DELETE CASCADE选项目的是可以在子表记录存在的情况下直接删除父表记录,而不用受约束的限制:
    SQL>  delete from PERSONPROFESSION;

    已删除 1 行。

    SQL> select  PERSONID,PROFESSION from person;

      PERSONID PROFESSION
    ---------- ----------
            10          1

    SQL> select * from PERSONPROFESSION;

    未选定行

    以上可以看出父表记录删除了,子表记录还存在。

    那么在delete语句的末尾加上CASCADE,就可以实现两张表的级删除:

    SQL> delete from PERSONPROFESSION cascade;

    已删除 1 行。

    SQL> select * from person;

    未选定行

    SQL> select * from PERSONPROFESSION;

    未选定行


    以下是ON DELETE的官方解释:

    ON DELETE
    The ON DELETE clause indicates that when a DELETE is executed on a referenced row in the referenced table, one of the following actions will be executed upon the constrained column, as specified by action:

    NO ACTION(default)
    The NO ACTION clause produces an error if the reference is violated. This is the default if action is not specified.

    CASCADE
    The CASCADE keyword removes all rows which reference the deleted row. Exercise caution with this action.

    SET NULL
    The SET NULL clause assigns a NULL value to all referenced column values.

  • Oracle下建立同义词(Synonym)

    2008-10-14 20:55:59

    问题描述:
    有两个oralce数据库用户:lyweb@martdb1和lylocal@martdb1

    lylocal@martdb1下的表ft_mid_user_daily
    在lyweb@martdb1下要用该表
    想在lyweb@martdb1下进行如下操作:
    select * from ft_mid_user_daily

    问题解答:

    1.在lylocal@martdb1下进行赋权限:
    grant  select on ft_mid_user_daily to lyweb;
    2.在lyweb@martdb1下进行如下操作:

    create or replace synonym ft_mid_user_daily  for lylocal.ft_mid_user_daily;
     
    需要注意的一点:
    在lyweb@martdb1中不能包含有表ft_mid_user_daily,虽然create or replace synonym 语句可以执行,但是执行select * from ft_mid_user_daily(本意为想读lylocal@martdb1下的ft_mid_user_daily中的内容),但显示的还是lyweb@martdb1下的表ft_mid_user_daily内容,需要先把lyweb@martdb1下的表ft_mid_user_daily删除掉,重新建立synonym即可。

  • Oracle的同义词(synonyms)总结

    2008-10-14 20:52:18

    Oracle的同义词(synonyms)总结 [收藏] [打印] [推荐]
    作者:中国IT实验室  2008-09-06 07:11:44
    oracle的同义词总结:

    从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。

    1.创建同义词语句:

    create public synonym table_name for user.table_name;

    其中第一个user_table和第二个user_table可以不一样。

    此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;

    当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

    2.删除同义词:

    drop public synonym table_name;

    3.查看所有同义词:

    select * from dba_synonyms

    同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。

  • Oracle的NLS设置

    2008-10-10 14:21:25

    一:介绍一个概念:
      NLS  ‘National Language Support (NLS)’ 从概念我们看出这个参数实际上定义了数据库的存放数据的语言环境,当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特 有的一些表达形式,比如我们选择chinese,那么它的中文字符如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了。
      
      二:如何查询我们的数据库中到底使用的是什么字符集
      SQL> select * from V$NLS_PARAMETERS;
      NLS_LANGUAGE                     SIMPLIFIED CHINESE
      NLS_TERRITORY                          CHINA
      NLS_CURRENCY                           RMB
      NLS_ISO_CURRENCY                         CHINA
      NLS_NUMERIC_CHARACTERS                      .,
      NLS_CALENDAR                         GREGORIAN
      NLS_DATE_FORMAT                       DD-MON-RR
      NLS_DATE_LANGUAGE                  SIMPLIFIED CHINESE
      NLS_CHARACTERSET                       ZHS16GBK
      NLS_SORT                             BINARY
      NLS_TIME_FORMAT                      HH.MI.SSXFF AM
      NLS_TIMESTAMP_FORMAT             DD-MON-RR HH.MI.SSXFF AM
      NLS_TIME_TZ_FORMAT                  HH.MI.SSXFF AMTZR
      NLS_TIMESTAMP_TZ_FORMAT         DD-MON-RR HH.MI.SSXFF AM TZR
      NLS_DUAL_CURRENCY                        RMB
      NLS_NCHAR_CHARACTERSET                  AL16UTF16
      NLS_COMP                             BINARY
      NLS_LENGTH_SEMANTICS                       BYTE
      NLS_NCHAR_CONV_EXCP                       FALSE
      其中nls_language表示了中文显示方式,nls_characterset是字符集设定,另外date,time等为日期时间的格式,currency是货币格式。
      
      三:存在问题及解决方法
      我们在使用字符集过程中主要存在两种问题。
      
      一是我们在查询时显示中文部分显示乱字符。
      这一般是由于服务器端的字符集设定与客户端的字符集设定不同造成的。只要将两者修改一致就可以解决问题。
      在windows里需要到注册表里local machine-software-oracle-home0里更改nls_lang,unix下需要在.profile或这.bash_profile(根据你用的shell)里更改nls_lang.
      二是我们在导入数据时提示字符集不匹配问题。(有些可以兼容的不用管)
      解决方法目前我看到3种
       1:)exp/imp与sql*plus一样是客户端产品,因此他的字符集是由服务端的nls_lang所设定的。用exp导出备份的export file时,字符集的设定也被存放在export file里。这就是有些人在imp发生字符无法转换时更改export file文件头的原理。(相关内容可以看看http://chinaunix.net/forum/viewtopic.php?t=22352& amp;highlight=字符)
      2:) <=8.1
      在imp之前执行SQL > create database character set US7ASCII 
      * create database character set US7ASCII 
      ERROR at line 1: 
      ORA-01031: insufficient privileges 
       ---- 你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上ORACLE数据库的字符集已被强行修改为US7ASCII,接着用imp命令装载 数据。等数据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录ORACLE数据库,在sql>命令提示符下,运行select * from V$NLS_PARAMETERS,可以看到ORACLE数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正确显示。 
      3:)用数据管道导入数据
      这种方法我早期用过pb6的数据管道,将数据管道连接至需要导入导出的两个数据库进行数据传输,传输后中文显示没有问题。
      4:)更该数据字典props$  >8.1
      1. )Use SQL*Plus connect to database as user SYS 
      2. )Issue this below command 
      SQL> UPDATE PROPS$ SET VALUE$='xxx' WHERE NAME='NLS_CHARACTERSET'; 
      3.) Shutdown database and restart it 
      最后添加一个关于字符集可以自动转换方面的(在imp时):
      Warning You can't change character set of current database that have number of bits greater than the new one. For example, 
      我理解就是7-8 can,8-8ican,8-8cannot,8-7cannot
      US7ASCII -> WE8ISO8859P1 => Can 
      TH8TISASCII -> US7ASCII => Cannot 
      WE8ISO8859P1 -> TH8TISASCII => Cannot 
      TH8TISASCII -> WE8ISO8859P1 => Can 
      US7ASCII -> TH8TISASCII => Can
  • Tomcat基本配置(原创)

    2008-10-10 10:22:49

    当我们输入http://localhost:8080/somthing时,其中somthing的文件夹或者文件是这样配置的


    在conf/Catalina/localhost/somthing.xml文件中配置。

    文件内容如下

    <?xml version='1.0' encoding='utf-8'?>
    <Context

    docBase="/export/home/test_data3/upload/attachment" //文件在tomcat部署机器上的绝对路径

    path="/somthing" //文件在URL:http://localhost:8080/somthing的上下文

    >


    </Context>
  • Oracle的系统服务

    2008-10-09 09:50:40

    Oracle的系统服务。在完全安装的情况下,Oracle的系统服务共有11项:
        1.Oracle OLAP 9.0.1.0.1
        2.Oracle OLAP Agent
        3.OracleOraHome90Agent
        4.OracleOraHome90ClientCache
        5.OracleOraHome90HTTPServer
        6.OracleOraHome90ManagementServer(0.5M)
        7.OracleOraHome90PagingServer
        8.OracleOraHome90SNMPPeerEncapsulator
        9.OracleOraHome90SNMPPeerMasterAgent
        10.OracleOraHome90TNSListener(5.2M)
        11.OracleServiceORACLE(70M)
    (注:OraHome90是可以在安装时改变的Oracle的主目录名称,是安装时的默认值)

    其中最重要的服务有3个,分别是OracleOraHome90ManagementServer、oracleOraHome90TNSListener与OracleServiceORACLE。下面就来看一下有哪些启动错误与它们有关。

        1.Oracle系统提示:Ora-12541:TNS:没有监听器;
        2.操作系统提示:在本地计算机无法启动OMS服务 错误:1053:服务并未及时响应来控制请求附带;
        以上两种错误提示大都是由OracleOraHome90TNSListener监听服务引起的。
        解决方法:控制面版->管理工具->服务->右键单击“OracleOraHome90TNSListener”,再单击“启动”。

        3.Oracle系统提示:Ora-12500:TNS:监听程序无法启动专用服务器进程;
        该错误是由OracleServiceORACLE专用服务器进程引起的。
        解决方法:控制面版->管理工具->服务->右键单击“OracleServiceORACLE”,再单击“启动”。

        4.Oracle系统提示:VTK-1000:无法连接到Management Server。请验证您已输入Oracle Management Server的正确主机名和状态。
        该错误引起的原因有两种,一是OracleOraHome90ManagementServer还没启动;二是没有输入主机名。
        解决方法:控制面版->管理工具->服务->右键单击“OracleOraHome90ManagementServer”,再单击“启动”,或是输入您这台计算机的完整名称。

      
        接着针对第二点谈谈登录时用的用户名和口令。在安装结束后,系统提供了两个默认的数据库系统管理员,其用户名和口令分别是 SYS/change_on_install和SYSTEM/manager,同时系统还提供了登录OMS的用户名和口令:sysman /oem_temp。这里容易出现错误的是在登录OMS是用SYS或SYSTEM作为用户名进行登录,那么Oracle系统就回有“登录身份证明不正确” 的提示。

       小结:这三个服务的启动或关闭还有先后的顺序。一般来讲,启动时必须先启动OracleOraHome90TNSListener再启动 OracleOraHome90ManagementServer或OracleServiceORACLE,在启动 OracleOraHome90ManagementServer时,同时也启动了OracleServiceORACLE。而关闭时必须先关闭 OracleOraHome90ManagementServer再关闭OracleOraHome90TNSListener或 OracleServiceORACLE,关闭OracleOraHome90ManagementServer时,若有提示输入用户名和口令,请输入 sysman的用户名和口令,以确保成功的执行。有些其他提示如:资源已被占用,I/O重复,端口已被使用等等之类的话,那最好与系统管理员联系,再寻求 解决办法。

  • sequence

    2008-09-25 18:47:07

    在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 
    1、Create Sequence 
    你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, 
    CREATE SEQUENCE emp_sequence 
        INCREMENT BY 1  -- 每次加几个 
        START WITH 1    -- 从1开始计数 
        NOMAXVALUE      -- 不设置最大值 
        NOCYCLE         -- 一直累加,不循环 
        CACHE 10; 

    一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL 
     CURRVAL=返回 sequence的当前值 
     NEXTVAL=增加sequence的值,然后返回 sequence 值 
    比如: 
      emp_sequence.CURRVAL 
      emp_sequence.NEXTVAL 

    可以使用sequence的地方: 
    - 不包含子查询、snapshot、VIEW的 SELECT 语句 
    - INSERT语句的子查询中 
    - NSERT语句的VALUES中 
    - UPDATE 的 SET中   

    可以看如下例子: 
    INSERT INTO emp VALUES  
    (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); 

    SELECT empseq.currval     FROM DUAL; 

    但是要注意的是: 
    - 第 一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回 当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的 值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白? 

    - 如果指定CACHE值,ORACLE就可以 预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳 号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在 create sequence的时候用nocache防止这种情况。 

    2、Alter Sequence 
    你或者是该 sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有 sequence参数.如果想要改变start值,必须 drop  sequence 再 re-create . 
    Alter sequence 的例子 
    ALTER SEQUENCE emp_sequence 
        INCREMENT BY 10 
        MAXVALUE 10000 
        CYCLE    -- 到10000后从头开始 
        NOCACHE ; 


    影响Sequence的初始化参数: 
    SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。  

    可以很简单的Drop Sequence 
    DROP SEQUENCE order_seq; 
  • weblogic的错误解决but clustering not enabled

    2008-09-17 17:24:43

    出现了这样的错误提示: weblogic.management.DeploymentException: [HTTP Session:100039]Replicated HTTP sessions specified for webapp: /admin, but clustering not enabled    

     

    后面终于发现了错误的原因, 这个错误的原因在于weblogic.xml身上,
    weblogic.xm里面的
    <session-descrīptor>
    <session-param>
    <param-name>PersistentStoreType</param-name>
    <param-value>replicated</param-value>
    </session-param>
    </session-descrīptor>


    replicated 改为 memory 就解决了。或者把这个字段去掉

  • 区分Tomcat与Web服务器、应用服务器的关系

    2008-09-11 16:06:49

    Tomcat服务器是一个免费的开放源代码的Web应用服务器。因为Tomcat技术先进、性能稳定且免费,所以深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

    一、Tomcat与应用服务器

    到目前为止,Tomcat一直被认为是Servlet/JSP API的执行器,也就所谓的Servlet容器。然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX API的实现机制。尽管如此,Tomcat仍然还不能算是应用服务器,因为它不提供大多数J2EE API的支持。

    很有意思的是,目前许多的应用服务器通常把Tomcat作为它们Servlet和JSP API的容器。由于Tomcat允许开发者只需通过加入一行致谢,就可以把Tomcat嵌入到它们的应用中。遗憾的是,许多商业应用服务器并没有遵守此规则。

    对于开发者来说,如果是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成 Java Web应用的话,选择Tomcat是一个优秀的解决方案;但是为了寻找支持其他的J2EE API,那么寻找一个应用服务器或者把Tomcat作为应用服务器的辅助,将是一个不错的解决方案;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用。虽然整合会带来相关的问题,但是这种方式是最为有效的。。

    二、Tomcat与Web服务器

    Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能根 据实时需要,产生动态网页内容。而对于Web服务器来说, Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务,同时也能为静态网页提供支持。尽管它没有通常的 Web服务器快、功能也不如Web服务器丰富,但是Tomcat逐渐为支持静态内容不断扩充。大多数的Web服务器都是用底层语言编写如C,利用了相应平 台的特征,因此用纯Java编写的Tomcat执行速度不可能与它们相提并论。

    一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受所有来自客户端的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完成处理后,将响应传回给Apache,最后Apache将响应返回给客户端。

  • WEB服务器和应用服务器有什么区别

    2008-09-11 15:58:24

    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供 (serves)商业逻辑(business logic)。

    下面让我们来细细道来:

    Web服务器(Web Server)
    Web 服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应 (response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片, 进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)Javascrīpt,或者一些其它的服务器端(server-side)技术。无论它们(译者 注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

    要 知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求 (request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响 应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

    虽然Web服 务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。

    应用程序服务器(The Application Server)
    根 据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览 器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程语言 中的一个函数)一样。

    应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它 的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑 (program logic)。正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露 的商业逻辑。

    在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose) (给客户端应用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling),和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

    一个例子
    例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询 (query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序 服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。

    情景1:不带应用程序服务器的Web服务器

    在 此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以 处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序 把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器。

    简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

    情景2:带应用程序服务器的Web服务器

    情 景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server- side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应 (response)时就可以使用该服务的返回结果了。

    在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业 逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数 据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。

    通过从响应 产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款 机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在HTML 页中了。

    总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

    警告(Caveats)
    现在,XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。

    另 外,现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器 包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务 器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单 的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选 取留有余地。
  • 嵌套查询

    2008-09-11 13:45:48

    嵌套查询
    定义:
    1 .指在一个外层查询中包含有另一个内层查询。其中外层查询称为主查询,内层查询称为子查询。
    2 .SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为主查询的查询条件
    3 .子查询中一般不使用order by子句,只能对最终查询结果进行排序
    子查询(sub query)
    where  表达式  [ not ]   in  (子查询)
    where  表达式 比较运算符 [ any|all ]  子查询
    where   [ not ]   exists  (子查询)

    1 .子查询-单值比较
    返回单值子查询,只返回一行一列
    主查询与单值子查询之间用比较运算符进行连接:
    运算符:
    > , >= , < , <= , = , <>
    例:找出与太行同龄的同事
    select   *   from  company
    where  age  =  ( select  age  from  company
                 
    where  name = taihang)

    2 .子查询- in
    例:查询选修了‘
    001 ’课程的学生学号,姓名。
    select  id,name
    from  student
    where  id  in  ( select  id 
                 
    from  taihang
                 
    where  id = ' 001 ' )

    3 .子查询-多值比较all
    多行一列
    1 .父查询与多值子查询之间的比较需用all来连接
    2 .标量值S比子查询返回集R中的每个都大时,s >all ,r为true
    3 .all表示所有
    4 . >all , <all , >=all , <=all , <>all ,注:all等价于not  in
    例:找出年龄最小的学生
    select   *   from  student
    where  age <all ( select  age  from  student)

    4 .子查询-多值比较some /any
    1 .父查询与多值子查询之间的比较需用some / any来连接
    2 .标量值S比子查询返回集r中的某一个都大时,s > some时r为true 或s > any时r为true
    3 .some表示部分
    4 . >some , >=some , =some , <some , <=some , <>some ,注: = some等价于in, <> some不等价于not  in .
    例:找出不是最小年龄的学生
    select   *   from  student
    where  age  >   some ( select  age  from  student)

    5 .子查询-存在判断exists
    1 . exists+ 子查询用来判断该子查询是否返回元组
    2 .当子查询的结果集非空时,exists为true
    3 .当子查询的结果集为空时,exists为false
    4 .不关心子查询的具体内容,因此用select  *
    例:列出先修了C01课程的学习的学号,姓名
    select  son,sname
    from  strdent
    where   exists ( select   *   from  sc
                 
    where  sc.sno = stusent.sno  and
                 cno
    = ' C01 ' )
    最后这一个不是很好理解呀!等用多了就好了。
  • Oracle索引概述

    2008-08-29 16:58:24

    概述

      索引在各种关系型数据库系统中都是举足轻重的组成部分,其对于提高检索数据的速度起至关重要的作用。在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等。本文主要就前6种索引进行分析。

      首先给出各种索引的简要解释:

      b*tree index:几乎所有的关系型数据库中都有b*tree类型索引,也是被最多使用的。其树结构与二叉树比较类似,根据rid快速定位所访问的行。

      反向索引:反转了b*tree索引码中的字节,是索引条目分配更均匀,多用于并行服务器环境下,用于减少索引叶的竞争。

      降序索引:8i中新出现的索引类型,针对逆向排序的查询。

      位图索引:使用位图来管理与数据行的对应关系,多用于OLAP系统。

      函数索引:这种索引中保存了数据列基于function返回的值,在select * from table where function(column)=value这种类型的语句中起作用。

  • Oracle初学者入门指南-索引是干什么用的?

    2008-08-29 16:55:39

    关于索引是什么的最简单的比喻是,索引之于表数据如同目录之于一本书。

     

    通过目录的页码我们可以快速的定位一个内容,同样通过索引记录的rowid我们可以快速的定位一条数据。

     

    如同目录很难针对书中每个字词一样,索引也很难针对所有字段。

     

    我们通常索引最能代表章节,记录属性的内容。

     

    索引并非总能带来性能提升,但是通常情况下,索引能加快访问,所以建表的时候,你一定要知道还有索引这样一类对象。

     

    下面这个案例是我们绝对不应该和不想看到的。

     

    今天一个部门报数据库巨慢无比,上去看了一下,抓到如下的SQL:

    SQL> select sql_text

      2  from v$sqltext a

      3  where a.hash_value = (

      4  select sql_hash_value from v$session b

      5  where b.sid='&sid'

      6  )

      7  order by piece asc

      8  /

     

    SQL_TEXT

    ----------------------------------------------------------------

    select * from i_cm_power t WHERE T.SJH='13911xxxxx6'

     

    检查了一下该查询访问的数据表,居然一个索引都没有:

    SQL> select index_name from dba_indexes where table_name=upper('i_cm_power');

     

    INDEX_NAME

    ------------------------------

     

    没有索引意味着,即使为了获取这一条记录,Oracle也必须对5.28G的一个表进行全表扫描,如果不慢那就怪了:

    SQL> col segment_name for a20

    SQL> select segment_name,bytes/1024/1024/1024

         from dba_segments where segment_name=upper('i_cm_power');

     

    SEGMENT_NAME         BYTES/1024/1024/1024

    -------------------- --------------------

    I_CM_POWER                  5.28173828125

     

    创建一个索引再说:

    SQL> create index idx_i_cm_power_sjh on i_cm_power(sjh);

     

    Index created.

     

    Elapsed: 00:20:50.73

     

    SQL> col segment_name for a20

    SQL> select segment_name,bytes/1024/1024 MB

      2  from dba_segments where segment_name=upper('idx_i_cm_power_sjh');

     

    SEGMENT_NAME                 MB

    -------------------- ----------

    IDX_I_CM_POWER_SJH         1360

     

    SQL>

     

    无疑这个索引对于这样的简单查询是大有益处的:

     

    SQL> select * from i_cm_power t WHERE T.SJH='13911xxxxx6';

     

    Elapsed: 00:00:00.07

     

    Execution Plan

    ----------------------------------------------------------

       0      SELECT STATEMENT ōptimizer=CHOOSE

       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'I_CM_POWER'

       2    1     INDEX (RANGE SCAN) OF 'IDX_I_CM_POWER_SJH' (NON-UNIQUE)

     

     

    Statistics

    ----------------------------------------------------------

              0  recursive calls

              0  db block gets

              6  consistent gets

              0  physical reads

              0  redo size

           1022  bytes sent via SQL*Net to client

            503  bytes received via SQL*Net from client

              2  SQL*Net roundtrips to/from client

              0  sorts (memory)

              0  sorts (disk)

              2  rows processed

     

    然而在实际中,你需要考虑更多的因素。

     

    增加索引会占用更多的存储空间;索引的维护会增加数据库的负担,如果有海量的数据加载,可能会极大影响性能...

     

    所以事实可能总是比你想象的更复杂,你只有知道的更多...

  • 数据库的索引

    2008-08-29 16:54:26

    阅读提示:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

    索引

    使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列多列的值进行排序的一种结构,例如 employee 表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

    索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。

    在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。有关详细信息,请参见创建索引。

    注意;并非所有的数据库都以相同的方式使用索引。有关更多信息,请参见数据库服务器注意事项,或者查阅数据库文档。

    作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的。

    索引列

    可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。

    如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。

    确定索引的有效性:

    • 检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。
    • 对新索引进行试验以检查它对运行查询性能的影响。
    • 考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。
    • 检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。
    • 检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。
    索引类型

    根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引主键索引聚集索引。有关数据库所支持的索引功能的详细信息,请参见数据库文档。

    提示:尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。

    唯一索引

    唯一索引是不允许其中任何两行具有相同索引值的索引。

    当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。

    主键索引

    数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。

    在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

    聚集索引

    在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

    如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

  • find命令详解

    2008-08-26 15:20:21

    find命令详解

    功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
      语法:find 起始目录 寻找条件 操作
      说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
      该命令提供的寻找条件可以是一个用逻辑运算符notandor组成的复合条件。逻辑运算符andornot的含义为:

    例子:在当前目录查找所有的 sql文件 #find ./ -name '*.sql'

        (1and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:
      $ find name tmp xtype c -user inin
      该命令寻找三个给定条件都满足的所有文件。
      (2or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:
      $ find –name ’tmp’ –o –name ’mina*’     该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。
      (3not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:
      $ find ! name ’tmp’
      该命令查询文件名不是’tmp’的所有文件。
      需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。
      例:$ find (–name tmp xtype c -user inin
      寻找条件有以下选项:
      首先,下列各个选项中的n值可以有三种输入方式,假设n20,则:
      +20 表示20以后(212223等)
      -20 表示20以前(191817等)
      20 表示正好是20
      1. 以名称和文件属性查找。
      - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*?、[ ]。
      - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*?、[ ]。
      -gid n 查找属于ID号为n的用户组的所有文件。
      -uid n 查找属于ID号为n的用户的所有文件。
      -group ’字串’ 查找属于用户组名为所给字串的所有的文件。
      -user ’字串’ 查找属于用户名为所给字串的所有的文件。
      -empty 查找大小为0的目录或文件。
      -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*?、[ ]。
      -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711644
      -size nbckw 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
      -type x 查找类型为x的文件,x为下列字符之一:
      b 块设备文件
      c 字符设备文件
      d 目录文件
      p 命名管道(FIFO
      f 普通文件
      l 符号链接文件(symbolic links
      s socket文件
      -xtype x -type基本相同,但只查找符号链接文件。
      2. 以时间为条件查找
      - amin n 查找n分钟以前被访问过的所有文件。
      - atime n 查找n天以前被访问过的所有文件。
      - cmin n 查找n分钟以前文件状态被修改过的所有文件。
      - ctime n 查找n天以前文件状态被修改过的所有文件。
      - mmin n 查找n分钟以前文件内容被修改过的所有文件。
      - mtime n 查找n天以前文件内容被修改过的所有文件。
      3. 可执行的操作
      - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。
      - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。
      - ls 详细列出所找到的所有文件。
      - fprintf 文件名 将找到的文件名写入指定文件。
      - print 在标准输出设备上显示查找出的文件名。
      - printf 格式 格式的写法请参考有关C语言的书。
      例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。
      $ find . - name main* - exec more {} ;
      例2:删除当前目录下所有一周之内没有被访问过的a .out*.o文件。
      $ find . - name a.out - o - name *.o’)
      > - atime +7 - exec rm {} ;
      说明如下:
      命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。(和)表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name *.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm- exec rm{ };)。其中{ }代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,之后系统将显示一个>,指示用户继续输入命令。
      locate命令
      locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。
      该命令的一般形式为:
      locate 相关字
      例如:查找相关字issue
      $ locate issue
      /etc/issue
      /etc/issue.net
      /usr/man/man5/issue.5
      /usr/man/man5/issue.net.5

  • SQL语句 SELECT LIKE like用法详解

    2008-08-22 11:33:30

    LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。

      假设有一个数据库中有个表table1,在table1中有两个字段,分别是namesex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:

       select * from table1 where name like "*"

       如果要查询以“张”结尾的记录,则语句如下:

      select * from table1 where name like "*"

       这里用到了通配符“*”,可以说,like语句是和通配符分不开的。下面我们就详细介绍一下通配符。

      
    匹配类型  
      
    模式
      举例 及 代表值
      
    说明
      

     

    *

    多个字符

    c*c

    cc,cBc,cbc,cabdfec

    它同于DOS命令中的通配符,代表多个字符

    %

    多个字符

    %c%

    agdcagd

    这种方法在很多程序中要用到,主要是查询包含子串的。

    a

    特殊字符

    a

    a*a

    代替*

    #

    单数字

    k#k

    k1k,k8k,k0k

    大致同上,不同的是代只能代表单个数字。

    -

    字符范围

    [a-z]

    代表az26个字母中任意一个

    指定一个范围中任意一个

    !

    排除

    [!a-z]

    代表9,0,%,*

     

     

    组合类型

    cc[!a-d]#

    代表ccF#

     

      

    可以和其它几种方式组合使用
      假设表table1中有以下记录:
      name sex
      张小明    男
      李明天    男
      李a天    女
      王5五    男
      王清五    男
      下面我们来举例说明一下:
       例1,查询name字段中包含有“明”字的。
      select * from table1 where name like '%%'
       例2,查询name字段中以“李”字开头。
      select * from table1 where name like '*'
       例3,查询name字段中含有数字的。
      select * from table1 where name like '%[0-9]%'
       例4,查询name字段中含有小写字母的。
      select * from table1 where name like '%[a-z]%'
      例5,查询name字段中不含有数字的。
      select * from table1 where name like '%[!0-9]%'
      以上例子能列出什么值来显而易见。但在这里,我们着重要说明的是通配符“*”与“%”的区别。
      很多朋友会问,为什么我在以上查询时有个别的表示所有字符的时候用"%"而不用“*”?先看看下面的例子能分别出现什么结果:
      select * from table1 where name like '**'
       select * from table1 where name like '%%'
      大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
  • 套表建立

    2008-08-22 11:24:44

    1、执行如下语句找出需要建立的月表及其owner

    select owner,table_name from dba_tables where owner in('KF','XG') and table_name like '%200607%'

    2、手工取这些表的建表脚本来建立下个月的套表

    3、注意:由于新需求的增加或者其他原因导致套表的数据库表结构修改时,需要对已经提前建好的套表进行修改。
351/212>
Open Toolbar