发布新日志

  • 【转】ORACLE初始化参数文件详细文档

    2010-01-11 10:24:06

    1.简介

    在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的。这两种参数文件都是用来存储参 数配置以供oracle读取的,但也有不同点,注意以下几点:
    1)pfile是文本文件,spfile是二进制文件;
    2)对于参数的配置,pfile可以直接以文本编辑器打开手工配置,而spfile不行,必须在数据库启动后,通过sql命令进行在线修改,当然spfile也可用文本编辑器打开,把里面文本的内容复制出来放在pfile中,但决对不可以直接修改,直接修改后会使文件无法读取。
    3)pfile配置改变后,要使用其生效,必须重新启动数据库,spfile的配置生效时限和作用域可以由修改参数的sql命令指定,可以立即生效,也可以不立即生效。当然有些参数的修改必须重启数据库才能生效;
    4)可以用sql命令由pfile创建spfile,也可以由spfile创建pfile;
    5)如果是手动创建数据库而不是通过DBCA,则开始创建数据库时,你只能定义pfile 。因为它是文本格式的;

    现在一般普通生产库都采用spfile启动数据库,pfile确实没有用的理由了,感觉只有以下情况才会使用pfile:
    1)入门学习时,为了理解初始化参数
    2)创建数据库时,因为这时还没spfile
    3)恢复数据库时
    4)采用RAC的生产库中如果要共用spfile,可以建一个初始的pfile,然后在pfile指定spfile为共享设备文件

    2.创建spfile和pfile语法
    创建SPFILE(只能建在数据库所在的机器上)
    CREATE SPFILE [= 'spfile_name'] FROM PFILE [= 'pfile_name'];
    如果命令中未指定spfile的路径则会在缺省路径创建spfile文件(%ORACLE_HOME%\database\spfile<SID>.ora)
    这个与spfile参数无关(rac中共享spfile时要注意)
    创建PFILE
    CREATE PFILE [= 'pfile_name'] FROM SPFILE [= 'spfile_name'];
    如果命令中未指定spfile的路径则会从缺省路径(%ORACLE_HOME%\database\spfile<SID>.ora)创建pfile文件

    注:语法中创建和指定的spfile和pfile都是服务器路径
    注:不能创建已经由数据库实例启动的spfile(在nomount状态下也不行)

    3.数据库启动时spfile和pfile的加载顺序
    初始化参数是在数据库实例启动时(startup nomount)加载。
    如果startup命令中未指定pfile参数,在windows系统中数据库启动时会按如下顺序查找启动参数文件:
    %ORACLE_HOME%\database\SPFILE<SID>.ora
    %ORACLE_HOME%\database\SPFILE.ora
    %ORACLE_HOME%\database\init<SID>.ora
    在unix或linux系统中数据库启动时会按如下顺序查找启动参数文件:
    %ORACLE_HOME%\dbs\SPFILE<SID>.ora
    %ORACLE_HOME%\dbs\SPFILE.ora
    %ORACLE_HOME%\dbs\init<SID>.ora

    也就是说先找spfile<sid>.ora文件,如果spfile<sid>.ora没有则找spfile.ora文件,最后才会去找init<sid>.ora的pfile文件.

    使用指定pfile启动数据库则数据库会使用指定的pfile来加载数据库参数:
    命令如下:
    startup pfile='<pfile>'

    注:以pfile启动的实例,修改初始化参数时不能使用scope=spfile的语法
    如果参数文件(不管是pfile还是spfile)中指定了spfile的参数,则还会从指定的spfile中再读取配置的参数,这样数据库的参数就包括了两个文件的内容.
    4.数据库启动参数的加载顺序
    加载顺序按文件中顺序读取
    如果文件中有两个相同的参数名则以最后出现的为准,以下例子说明了这个问题。
    如有一个spfile文件(myspfile.ora),包括两个参数:
    sessions=150
    processes=200
    另外有一个pfile文件(mypfile.ora),里面包括三个参数,其中指定了spfile为前面的spfile文件
    processes=100
    sessions=100
    spfile='myspfile.ora'
    processes=180
    当使用mypfile.ora启动数据库时,会按如下顺序读取参数
    1)processes=100
    2) sessions=100
    3) spfile='myspfile.ora'
     3.1) sessions=150(重新加载)
     3.2) processes=200(重新加载)
    4)processes=180(再次重新加载)

    最后加载的数据库参数为
    sessions=150
    spfile='myspfile.ora'
    processes=180
    5.关于show parameter spfile时显示的内容
    如果是采用pfile指定了spfile参数,则显示指定的spfile
    如果是采用缺省的spfile启动,则显示缺省的spfile文件名,不管spfile还有没有指定其它的spfile文件。
    6.关于spfile递归调用
    如果出现spfile递归调用,则ORACLE启动时会报错:
    SQL> startup nomount;
    ORA-03113: 通信通道的文件结束
    SQL>
    spfile递归调用就是指
    spfile1.spfile='spfile2'
    spfile2.spfile='spfile1'
    这样的参数配置

    7.初始化参数的修改方法
      分为手动修改和在线修改。
      手动修改用于修改pfile,直接用文本编辑打开pfile修改。要使用修改生效,须重启数据库。
      在线修改是在数据库运行时,用alter system命令进行修改,命令如下(详细的命令 语句请参考oracle官方参考文档):
    alter system set parameter_name = parameter_value [, parameter_value ]...
      [ COMMENT 'text' ]
      [ DEFERRED ]
      [ SCOPE = { MEMORY | SPFILE | BOTH } ]
      [ SID = { 'sid' | * } ]
    注:
    [ COMMENT 'text' ] :表示可以加注释,如 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT="  2008-05-19"
    [ DEFERRED ]:表示所作修改只适用于将来的会话,对当前已有的会话不影响,这个参数只对少数参数有用,具体可使用的参数可以查看v$parameter视图
    select * from v$parameter where issys_modifiable='DEFERRED'
    [ SCOPE = { MEMORY | SPFILE | BOTH } ]:
    SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;
    MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
    BOTH:顾名思义,包含以上两种,立即生效,且永久生效。
    所有的参数都可以使用spfile,部份参数可以使用memory,可以使用如下SQL查询不能使用memory方式修改的参数
    select * from v$parameter where issys_modifiable='FALSE'
      对于ALTER SYSTEM的参数修改命令,请注意以下几点:
    1)如果当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误;
    2)如果实例以pfile启动,则scope的默认值为MEMORY,若以spfile启动,则默认值为BOTH;
    [ SID = { 'sid' | * } ]
    指定修改参数的作用实例号,如果为*则表示所有实例,这个选项用于RAC数据库。
    8.删除初始化参数:
    alter system reset parameter_name
      [ SCOPE = { MEMORY | SPFILE | BOTH } ]
      [ SID = 'sid' ]
    对于有些参数也可以使用 ALTER SYSTEM SET PARAMETER=''达到相同的效果;
    9.初始化参数的相关系统视图
    9.1v$parameter
    9.2v$parameter2
    9.3v$system_parameter
    9.4v$system_parameter2
    9.5gv$parameter
    9.6gv$parameter2
    9.7gv$system_parameter
    9.8gv$system_parameter2

    SQL> desc v$parameter;
    Name             Type          Nullable Default Comments
    ---------------- ------------- -------- ------- --------
    NUM              NUMBER        Y        编号                
    NAME             VARCHAR2(64)  Y        参数名称                
    TYPE             NUMBER        Y        参数类型
         (
         1 - Boolean
         2 - String
         3 - Integer
         4 - Parameter file
         5 - Reserved
         6 - Big integer
         )
    VALUE            VARCHAR2(512) Y        参数值                
    ISDEFAULT        VARCHAR2(9)   Y        是否为缺省值                
    ISSES_MODIFIABLE VARCHAR2(5)   Y        是否允许会话级动态调整(alter session set...)              
    ISSYS_MODIFIABLE VARCHAR2(9)   Y        是否允许使用动态调整(alter system set...)
         (
         IMMEDIATE:可以调整且修改会立即生效;
         DEFERRED:可以调整,但是在新建的会话中才生效;
         FALSE:不可调整;
         )                  
    ISMODIFIED       VARCHAR2(10)  Y        参数在实例启动后是否被修改过              
    ISADJUSTED       VARCHAR2(5)   Y        参数是否被调整
         (对于有一些参数,如规范要求是素数,但是参数里设置了合数,则ORACLE会自动调整成下一个素数)      
    DESCRIPTION      VARCHAR2(64)  Y        参数功能描述                
    UPDATE_COMMENT   VARCHAR2(255) Y        最近的参数更新备注                
     
    以下是ORACLE官方文档关于V$PARAMETER的解释
    V$PARAMETER displays information about the initialization parameters that are currently in effect for the session. A new session inherits parameter values from the instance-wide values displayed by the V$SYSTEM_PARAMETER view.
    以下是字段说明:
    NUM
     NUMBER
     Parameter number
     
    NAME
     VARCHAR2(64)
     Name of the parameter
     
    TYPE
     NUMBER
     Parameter type:
    1 - Boolean
    2 - String
    3 - Integer
    4 - Parameter file
    5 - Reserved
    6 - Big integer
     
    VALUE
     VARCHAR2(512)
     Parameter value for the session (if modified within the session); otherwise, the instance-wide parameter value
     
    ISDEFAULT
     VARCHAR2(9)
     Indicates whether the parameter is set to the default value (TRUE) or the parameter value was specified in the parameter file (FALSE)
     
    ISSES_MODIFIABLE
     VARCHAR2(5)
     Indicates whether the parameter can be changed with ALTER SESSION (TRUE) or not (FALSE)
     
    ISSYS_MODIFIABLE
     VARCHAR2(9)
     Indicates whether the parameter can be changed with ALTER SYSTEM and when the change takes effect:
    IMMEDIATE - Parameter can be changed with ALTER SYSTEM regardless of the type of parameter file used to start the instance. The change takes effect immediately.
    DEFERRED - Parameter can be changed with ALTER SYSTEM regardless of the type of parameter file used to start the instance. The change takes effect in subsequent sessions.
    FALSE - Parameter cannot be changed with ALTER SYSTEM unless a server parameter file was used to start the instance. The change takes effect in subsequent instances.
     
    ISMODIFIED
     VARCHAR2(10)
     Indicates whether the parameter has been modified after instance startup:
    MODIFIED - Parameter has been modified with ALTER SESSION
    SYSTEM_MOD - Parameter has been modified with ALTER SYSTEM (which causes all the currently logged in sessions' values to be modified)
    FALSE - Parameter has not been modified after instance startup
     
    ISADJUSTED
     VARCHAR2(5)
     Indicates whether Oracle adjusted the input value to a more suitable value (for example, the parameter value should be prime, but the user input a non-prime number, so Oracle adjusted the value to the next prime number)
     
    DESCRIPTION
     VARCHAR2(64)
     Description of the parameter
     
    UPDATE_COMMENT
     VARCHAR2(255)
     Comments associated with the most recent update
     
    V$PARAMETER2与V$PARAMETER的区别是当某个参数有多个值时,会显示多行,最典型的就是参数control_files,一般的数据库都会指定多个控制文件,在V$PARAMETER中只显示一行,但在V$PARAMETER2会显示多行,如下所示:
    SQL> select name,value from V$PARAMETER where name='control_files';
     
    NAME                                                             VALUE
    ----------------- --------------------------------------------------------------------------------
    control_files     H:\oracle\oradata\ydgl\control01.ctl, H:\oracle\oradata\ydgl\control02.ctl, H:\oracle\oradata\ydgl\control03.ctl

    SQL> select name,value,ORDINAL from V$PARAMETER2 where name='control_files';
     
    NAME                      VALUE                                                 ORDINAL
    ------------------- ----------------------------------------------------------- ----------
    control_files    H:\oracle\oradata\ydgl\control01.ctl                              1
    control_files    H:\oracle\oradata\ydgl\control02.ctl                              2
    control_files    H:\oracle\oradata\ydgl\control03.ctl'                             3
     
    V$PARAMETER2多了一个ORDINAL字段,表示顺序。
    SQL> desc v$parameter2;
    Name             Type          Nullable Default Comments
    ---------------- ------------- -------- ------- --------
    NUM              NUMBER        Y                        
    NAME             VARCHAR2(64)  Y                        
    TYPE             NUMBER        Y                        
    VALUE            VARCHAR2(512) Y                        
    ISDEFAULT        VARCHAR2(6)   Y                        
    ISSES_MODIFIABLE VARCHAR2(5)   Y                        
    ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
    ISMODIFIED       VARCHAR2(10)  Y                        
    ISADJUSTED       VARCHAR2(5)   Y                        
    DESCRIPTION      VARCHAR2(64)  Y                        
    ORDINAL          NUMBER        Y                        
    UPDATE_COMMENT   VARCHAR2(255) Y                        

    V$SYSTEM_PARAMETER 和V$PARAMETER的区别是,V$PARAMETER显示的是当前系统的初始化参数,V$SYSTEM_PARAMETER显示的是新会话将使用的初始化参数。
    例如下例中,使用deferred参数修改了sore_area_size,在V$PARAMETER显示的老值,而V$SYSTEM_PARAMETER显示的是新值:
    SQL> show parameter sort_area_size;
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    sort_area_size                       integer     524288
     
    SQL> alter system set sort_area_size=603213 deferred;
     
    System altered
     
    SQL> select name,value from v$parameter where name='sort_area_size';
     
    NAME                                                             VALUE
    -------------------------------- --------------------------------------------------------------------------------
    sort_area_size                                                   524288
     
    SQL> select name,value from v$system_parameter where name='sort_area_size';
     
    NAME                                                             VALUE
    -------------------------------- --------------------------------------------------------------------------------
    sort_area_size                                                   603213
     
    SQL>
    SQL> desc v$system_parameter;
    Name             Type          Nullable Default Comments
    ---------------- ------------- -------- ------- --------
    NUM              NUMBER        Y                        
    NAME             VARCHAR2(64)  Y                        
    TYPE             NUMBER        Y                        
    VALUE            VARCHAR2(512) Y                        
    ISDEFAULT        VARCHAR2(9)   Y                        
    ISSES_MODIFIABLE VARCHAR2(5)   Y                        
    ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
    ISMODIFIED       VARCHAR2(8)   Y                        
    ISADJUSTED       VARCHAR2(5)   Y                        
    DESCRIPTION      VARCHAR2(64)  Y                        
    UPDATE_COMMENT   VARCHAR2(255) Y 

    gv$parameter和v$parameter的区别的是gv$parameter多一个INST_ID字段(实例号),这个用于RAC数据库系统中,INST_ID用于标识是哪个实例的信息,其实所有以gv$和以v$开始的系统视图的区别都是这样的。
    SQL> desc gv$parameter;
    Name             Type          Nullable Default Comments
    ---------------- ------------- -------- ------- --------
    INST_ID          NUMBER        Y                        
    NUM              NUMBER        Y                        
    NAME             VARCHAR2(64)  Y                        
    TYPE             NUMBER        Y                        
    VALUE            VARCHAR2(512) Y                        
    ISDEFAULT        VARCHAR2(9)   Y                        
    ISSES_MODIFIABLE VARCHAR2(5)   Y                        
    ISSYS_MODIFIABLE VARCHAR2(9)   Y                        
    ISMODIFIED       VARCHAR2(10)  Y                        
    ISADJUSTED       VARCHAR2(5)   Y                        
    DESCRIPTION      VARCHAR2(64)  Y                        
    UPDATE_COMMENT   VARCHAR2(255) Y           
    10.废弃参数
    Oracle数据库中,系统提供了几个视图可以查看系统参数的情况。视图V$OBSOLETE_PARAMETER中含有所有的过时(obsolete)和强调(underscored)参数。这里首先说明一下什么是Oracle的过时(obsolote)和强调(underscored)参数,过时参数,顾名思义就是在Oracle以前的版本中存在,但在新版本中已经淘汰了的参数,已经不再使用;而强调参数,是指那些在新版本中保留了下来,但是除非特殊需要不希望用户使用的那些参数。在视图V$OBSOLETE_PARAMETER中,包含这些参数的名称和一个标志字ISSPECIFIED,该标志字用来指出这个参数是否在init.ora文件中已实际设置。
    下面的SQL脚本列出了当前系统中所有的过时参数名称以及它们是否在当前系统中设定。

    SQL> SELECT name, isspecified FROM v$obsolete_parameter;
    上面谈到,Oracle系统并没有将V$OBSOLETE_PARAMETER视图中的所有参数均丢弃,而是将其中的一部分转换为强调参数,下面就来讨论如何查看这些参数是已被丢弃还是被转换。这可以通过系统视图X$KSPPO来查看,该视图中包含一个名为KSPPOFLAG的字段,用来指明该参数在当前版本中是被丢弃还是被强调,如果该值为1,则表示该参数已被丢弃,该值为2,则表明该参数现为强调参数。
    SELECT kspponm,
    DECODE(ksppoflg, 1,'Obsolete', 2, 'Underscored')
    FROM x$ksppo
    ORDER BY kspponm;
    注:该视图只在sys用户下可以看到。
    11.隐藏参数
    数据库初始化总共有近千个,可见的只有两三百个,其它的都是隐藏参数。
    隐藏参数的参数名都是以下划线开头,比较少用,一般用于进行ORACLE故障诊断或恢复数据库,或者是进行一些不成熟功能的测试。
    使用如下SQL可以查询到所有的初始化参数。
    --用户需要有访问内核表的权限,一般为sys用户登录
    select a.indx,
           a.inst_id,
           a.ksppinm name,
           a.ksppity type,
           a.ksppdesc DESCRIPTION,
           a.ksppiflg FLAG,
           b.ksppstvl value,
           b.ksppstdf ISDEFAULT,
           b.ksppstvf ORDINAL,
           b.ksppstcmnt UPDATE_COMMENT
      from sys.x$ksppi a, sys.x$ksppcv b
     where a.indx = b.indx
    12.自动SGA内存管理的参数
    ORACLE从10g开始可以自动管理SGA了.
    当初始化参数中设置了SGA_TARGET后,ORACLE会自动根据总的SGA大小动态调整SGA中几个区域的大小。当使用数据库关闭时,会将最后调整的大小记录到SPFILE中,以供下次系统启动时直接应用。
    自动调整后的分类参数在SPFILE中类似如下:
    以下是11g数据库SPFILE的部分内容,这是一个使用RAW设备两节点的RAC数据库:
    rawrac1.__db_cache_size=138412032
    rawrac2.__db_cache_size=134217728
    rawrac2.__java_pool_size=4194304
    rawrac2.__large_pool_size=4194304
    rawrac2.__oracle_base='C:\oracle'#ORACLE_BASE set from environment
    rawrac1.__oracle_base='C:\oracle'#ORACLE_BASE set from environment
    rawrac2.__pga_aggregate_target=155189248
    rawrac2.__sga_target=230686720
    rawrac2.__shared_io_pool_size=0
    rawrac1.__shared_pool_size=83886080
    rawrac2.__shared_pool_size=83886080
    rawrac2.__streams_pool_size=0
    *.memory_target=384827392
    参考:
    oralce官方参考文档
  • 【转】REDO LOG 与 UNDO LOG这两个概念的区别

    2010-01-11 10:15:44

    重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志。这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改

    撤消日志:当一些更改在执行一半时,发生意外,而无法完成,则可以根据撤消日志恢复到更改之前的壮态

    网上找到一些解说:以便以后自己参考
    有两个概念:前滚与回退
    比如某一时刻数据库DOWN机了,有两个事务,一个事务已经提交,另一个事务正在处理
    数据库重启的时候就要根据日志进行前滚及回退,把已提交事务的更改写到数据文件,未提交事务的更改恢复到事务开始前的状态。

    redo--> undo-->datafile
    insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据.
    redo->每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件
    undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据
    redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)
    undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)
    redo->已递交的事务,实例恢复时要写到数据文件去的
    undo->未递交的事务.
    redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!
    undo的原因是:在oracle正常运行时,为了提高效率,加入用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。
    undo 也是也是datafile, 可能dirty buffer 没有写回到磁盘里面去。
    只有先redo apply 成功了,才能保证undo datafile 里面的东西都是正确的,然后才能rollback
    做undo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行redo是保证系统的一致性.
    不做undo,系统就不会知道之前的状态,redo就无从谈起
    所以instance crash recovery 的时候总是先rollforward, 再rollback
    undo
    回退段中的数据是以“回退条目”方式存储。
    回退条目=块信息(在事务中发生改动的块的编号)+在事务提交前存储在块中的数据
    在每一个回退段中oracle都为其维护一张“事务表”
    在事务表中记录着与该回退段中所有回退条目相关的事务编号(事务SCN&回退条目)
    redo
    重做记录由一组“变更向量”组成。
    每个变更变量中记录了事务对数据库中某个块所做的修改。
    当用户提交一条commit语句时,LGWR进程会立刻将一条提交记录写入到重做日志文件中,然后再开始写入与该事务相关的重做信息。
    #事务提交成功后,Oracle将为该事备生成一个系统变更码(SCN)。事务的SCN将同时记录在它的提交记录和重做记录中。
    commit
    提交事务前完成的工作:
    ·在SGA区的回退缓存中生成该事务的回退条目。在回退条目中保存有该事务所修改的数据的原始版本。
    ·在SGA区的重做日志缓存中生成该事务的重做记录。重做记录中记载了该事务对数据块所进行的修改,并且还记载了对回退段中的数据块所进行的修改。缓存中的重做记录有可能在事务提交之前就写入硬盘中。
    ·在SGA区的数据库缓丰中记录了事务对数据库所进行的修改。这些修改也有可能在事务提交之前就写入硬盘中。
    提交事务时完成的工作:
    ·在为该事务指定的回退段中的内部事务表内记录下这个事务已经被提交,并且生成一个惟一的SCN记录在内部事务表中,用于惟一标识这个事务。
    ·LGWR后进进程将SGA区重做日志缓存中的重做记录写入联机重做日志文件。在写入重做日志的同时还将写入该事务的SCN。
    ·Oracle服务进程释放事务所使用的所有记录锁与表锁。
    ·Oracle通知用户事务提交完成。
    ·Oracle将该事务标记为已完成。
    rollback
    回退事务完成的工作:
    ·Oracle通过使用回退段中的回退条目,撤销事务中所有SQL语句对数据库所做的修改。
    ·Oracle服务进程释放事务所使用的所有锁
    ·Oracle通知事务回退成功。
    ·Oracle将该事务标记为已完成
    举个例子:
    insert into a(id) values(1);(redo)
    这条记录是需要回滚的。
    回滚的语句是delete from a where id = 1;(undo)
    试想想看。如果没有做insert into a(id) values(1);(redo)
    那么delete from a where id = 1;(undo)这句话就没有意义了。
    现在看下正确的恢复:
    先insert into a(id) values(1);(redo)
    然后delete from a where id = 1;(undo)
    系统就回到了原先的状态,没有这条记录了。
  • 【转】Oracle数据库参数优化

    2010-01-11 10:13:26

    许多开发维护人员并没有真正理解Oracle数据库相关参数在系统运行中的作用,导致数据库系统的执行效率低下。因此,如何设计合理的Oracle数据库初始化参数就显得非常重要。

    为了访问数据库中的数据,Oracle数据库为所有用户提供一组后台进程,并且,有一些存储结构专门用来存储最近的有关对数据库访问的数据。这些存储区域可以通过减少对数据库文件的I/O次数来改善数据库性能。

    数据库实例就是用来访问一个数据库文件集的一个存储结构以及后台进程的集合。它使一个单独的数据库可以被多个实例访问(这是Oracle的并行服务器方式 )。决定实例的组成以及大小的参数存储在文件init.ora中。这个文件在实例启动时候需要装载,也可以在运行中被DBA装载 。instance的init.ora文件通常包含instance 的名字,比如一个instance叫ORA9,其init.ora将被起名为initORA9.ora。本文结合笔者实际工作中的Oracle数据库使用经验讨论其相关参数的调整策略。

     
    通常需要设置的参数:
    ● DB_BLOCK_BUFFERS

    该参数决定了数据库缓冲区的大小,这部分内存的作用主要是在内存中缓存从数据库中读取的数据块,数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读写次数。在Oracle 9i以前版本数据库中,缓冲是由db_block_buffers*db_block_size来决定,db_block_sizBe参数是在创建数据库时设置的,它决定数据库里每个块的大小,9i以前不能改变已经存在的数据库的块大小,因此应该在最初创建数据库时就确保设置适当的数据库块大小。在创建数据库时设置为8k,db_block_buffers*db_block_size的乘积占物理内存的20%~30%,物理内存在1G以内,可以占20%,1G~2G之间可占25%,物理内存在2G以上,可以占30%,甚至更高。
    说明:Oracle 8i以后的数据缓冲区(data buffer)实际可由三部分组成,分别是默认池、保留池(buffer keep)和回收池(buffer recycle)。保留池可用于存放需要极快的访问的小表,回收池可用于存放需要全表扫描的大表。保留池和回收池的大小分别由参数buffer_pool_keep和buffer_pool_recycle决定。这两个参数通常在做性能调整时才设置,因此不建议设置这两个参数。

    ● shared_pool_size
    Shared pool由三部分组成,分别是Dictionary cache(包括数据字典的定义,如表结构、权限等)、Library cache(包括共享的sql游标、sql原代码以及执行计划、存储过程和会话信息)和Control structure。它的大小由初始化参数shared_pool_size控制,它的作用是缓存已经被解析过的SQL,使其能被重用,不用再解析。SQL的解析非常消耗CPU的资源,如果一条SQL在Shared pool中已经存在,则进行的仅是软解析(在Shared pool中寻找相同SQL),这将大大提高数据库的运行效率。当然,这部分内存也并非越大越好,太大的Shared pool,Oracle数据库为了维护共享结构,将付出更大的管理开销。这个参数的设置建议在150M~500M之间。如果系统内存为1G,该值可设为150M~200M;如果为2G,该值设为250M~300M;每增加1G内存,该值增加100M;但该值最大不应超过500M。(Shared pool不足,Oracle将报4031错)。

    ● shared_pool_reserved_size
    它的作用是在shared pool中保留一块区域以放置一些大对象(如大型软件包),如不设置此参数,系统缺省保留5%的shared pool空间用于放置大对象,不建议设置该参数,让系统自动分配即可。

    ● Sort_area_size

    该参数是当查询需要排序的时候,Oracle将使用这部分内存做排序,当内存不足时,使用临时表空间做排序。这个参数是针对会话(session)设置的,不是针对整个数据库。即如果应用有170个数据库连接(session),假设这些session都做排序操作,则Oracle会分配8×170等于1360M内存做排序,而这些内存是在Oracle的SGA区之外分配的,即如果SGA区分配了1.6G内存,Oracle还需要额外的1.3G内存做排序。建议该值设置不超过3M,当物理内存为1G时,该值宜设为1M或更低(如512K);2G时可设为2M;但不论物理内存多大,该值也不应超过3M。

    ● sort_area_retained_size

    这个参数的含义是当排序完成后至少为session继续保留的排序内存的最小值,该值最大可设为等于Sort_area_size。这样设置的好处是可以提高系统性能,因为下次再做排序操作时不需要再临时申请内存,缺点是如果Sort_ara_size设得过大并且session数很多时,将导致系统内存不足。建议该值设为Sort_area_size的10%~20%左右,或者不设置(缺省为0)。

    ● Log_buffer

    Log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。LGWR的写入条件是:用户提交、有1/3重做日志缓冲区未被写入磁盘、有大于1M重做日志缓冲区未被写入磁盘、超时、DBWR需要写入的数据的SCN 号大于LGWR记录的SCN 号,DBWR 触发LGWR写入。从中可以看出,大于1M的log buffer值意义并不大,建议不论物理内存多大,该值统一设为1M。

    ● Large_pool_size

    Oracle的large_pool用于MTS、并行查询和RMAN。如果使用了MTS或RMAN,large_pool特别有用,它可以降低用户对shared_pool的争用,这个参数不推荐设置。(或设为1M)。

    ● Java_pool_size

    Oracle 8i以后版本中,Oracle数据库内置了对Java的支持,短消息系统并未使用这些功能,因此java_pool_size的值可以减少到1M。但如果数据库安装时选择了JServer组件,则这个值可以设置为20M~30M之间。(可以查询v$option动态视图,如果java那一项值为true,则表示安装了JServer,为false,表示未安装)。

    ● SESSION_CACHED_CURSOR

    该参数指定要高速缓存的会话游标的数量。对同一SQL语句进行多次语法分析后,它的会话游标将被移到该会话的游标高速缓存中。这样可以缩短语法分析的时间,因为游标被高速缓存,无需被重新打开。设置该参数有助于提高系统的运行效率,建议无论在任何平台都应被设为50。

    ● re_page_sga

    该参数表示将把所有SGA装载到内存中,以便使该实例迅速达到最佳性能状态。这将增加例程启动和用户登录的时间,但在内存充足的系统上能减少缺页故障的出现。建议在2G以上(含2G)内存的系统都将该值设为true。

    ● ML_LOCKS

    该参数表示所有用户获取的表锁的最大数量。对每个表执行 DML 操作均需要一个 DML锁。例如,如果3个用户修改 2 个表,就要求该值为 6。该值过小可能会引起死锁问题。这个参数同transaction参数有关系,缺省为4倍的transaction大小。建议该参数不应该低于600,可以检查系统的当前值,若比600小,则将transaction参数改为150以上,dml_locks参数会自动变为transaction的4倍。

    ● OB_QUEUE_PROCESS

    该参数指定每个例程的SNP作业队列进程的数量。当使用job或复制时,一定要设置该参数,推荐设为3或4。并行查询中需要设置的参数并行查询仅当在多CPU处于空闲状态且数据分布在不同磁盘时才会对某些查询(有全表扫描操作)的性能产生有益的影响,而且即使在这种情况下,并行查询服务器的最大数量最好也不要超过CPU的数量。这里面应该修改的参数如下。

    ● DB_FILE_MULTIBLOCK_READ_COUNT

    该参数主要同全表扫描有关。当Oracle在请求大量连续数据块的时候,该参数控制块的读入速率。DB_FILE_MULTIBLOCK_READ_COUNT参数能对系统性能产生较大的影响,它和DB_BLOCK_SIZE参数之间有重要关系。因为在Unix物理层上,Oracle总是以最小64K的数据库块进行读入,因此应该使这2个参数的乘积为64K。即如果DB_BLOCK_SIZE为8192,则DB_FILE_MULTIBLOCK_READ_COUNT应设为8。

    ● DB_BLOCK_LRU_LATCHES

    在多CPU机器上通过初始化参数DB_BLOCK_LRU_LATCHES允许多个LRU锁存器。当DBWR和服务器进程扫描数据块缓冲Cache时,它们需要获取LRU锁存器。这种锁存器对于避免缓冲区变脏以及避免被其他进程改变都是必要的,这也避免了扫描时返回不一致的结果。如果没有使用锁存器,某个扫描自由缓冲区的进程可能会发现一个自由缓冲区,但是立刻就可能被其他进程使用。每一个LRU 锁存器至少保护50个数据块缓冲区。所有缓冲区都被Oracle基于Hash算法分配到特定的LRU锁存器之上。如果该值太小,在数据库活动量很大时就会潜在地导致竞争。在多CPU机器之上这种竞争会高一些,这是因为多个服务器进程可能排队以获取一个LRU Cache。该参数默认值为CPU个数的一半,在多CPU系统中,推荐设为等于CPU数目或CPU数目的2倍~3倍(在Oracle 9i中,该参数已经变为一个隐含参数)。

    ● OPEN_CURSORS

    指定一个会话一次可以打开的游标 (环境区域) 的最大数量,并且限制PL/SQL使用的PL/SQL游标高速缓存的大小,以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高,这样才能防止应用程序耗尽打开的游标。此值建议设置为250~300。

    ● LOG_CHECKPOINT_INTERVAL

    该参数同检查点有关,检查点由ckpt 进程执行,检查点发生时Oracle会同步数据文件、控制文件和redo文件。该参数指定当写入重做日志文件中的OS 块 (而不是数据库块) 的数量达到设定值时,强制执行一次检查点。该值较低可以缩短例程恢复所需的时间,但可能导致磁盘操作过量。在Oracle 8i中该值缺省为100000。当值为0时,表示此参数不起作用。该参数的设定需要考虑的因素较多,建议使用缺省值。

    ● LOG_CHECKPOINT_TIMEOUT

    该参数仍然同检查点有关。它指定距下一个检查点出现的最大时间间隔(秒数)。将该时间值指定为0,将禁用以时间为基础的检查点。较低的值可以缩短例程恢复的时间,但可能导致磁盘操作过量。在8i中该值缺省为1800。如果想强制某一时间段后执行检查点,则用此选项。不建议修改该值。

    Oracle 9i中主要参数设置

    ● undo_management

    Oracle 9i中新引入了undo tablespace,它可以自动管理Oracle的回滚,不再需要手工建立回滚段,但9i也支持继续使用手工建立的回滚段。由Undo_management参数决定是使用undo tablespace还是使用手工建立的回滚段。如果该参数为auto,则表示使用undo tablespace。为manual,表示使用手工管理回滚段,这时同8i一样,也需要建立回滚表空间,且要建立回滚段。在9i R2(9i R2指Oracle 9.2.X.X,下同)中,该参数缺省值为auto。建议继续使用该缺省值,即使用undo tablespace,也不用手工建立回滚段。

    ● undo_retention

    该参数的单位为秒,当undo_management参数为auto时,undo_retention表示在undo_tablespace中保留多长时间的回滚信息,Oracle 9i的flash_back功能同该值有关。该值设为多大同undo_tablespace的大小有关,在9i R2中缺省值为10800,一般情况下已经够了,不建议修改该参数。

    ● sga_max_size

    Oracle 9i中该值决定了SGA区的最大值。只要SGA区不大于该值,就可以动态调整数据库缓冲区和share pool的大小。建议该值取物理内存的50%。

    ● db_cache_size

    在Oracle 9i中,数据库缓冲区的大小由db_cache_size决定,Oracle 8i中的db_block_buffers被取消。db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。对该值的建议值可以参照Oracle 8i中对数据库缓冲区的大小建议来设置。

    ● db_nk_cache_size

    这是Oracle 9i中引入的新参数。Oracle 9i允许以不同的数据库块大(db_block_size)建立表空间。比如标准db_block_size(即建立数据库时定义的大小)为8k,Oracle 9i还允许以4k、16k、32k等不同的db_block_size值建立表空间。与此相对应,需要建立不
    同块尺寸的数据库缓冲区,这就需要定义db_nk_cache_size,如db_4k_cache_size等。考虑到我们系统的实际情况,不建议配置该参数。

    ● workarea_size_policy

    这也是Oracle 9i新引入的参数,如果该参数设为auto,Oracle会为所有的session在SGA区之外分配一块大的内存区域做为UGA,该内存由pga_aggregate_target设置。每个session都在这块大内存区中做排序等操作,从而不用再设置其他的“*_area_size” 参数。该值在Oracle 9i中缺省设为auto,建议继续使用缺省值。

    ● pga_aggregate_target

    该参数指定连接到例程的所有服务器进程的目标 PGA 总内存。建议对该值设置为每1G内存增加100M,但最大不要超过500M。设置了workarea_size_policy和pga_aggregate_target参数后,不用再设置sort_area_size等参数。
     
    参数调整方法 
    一、确定我们的系统是使用spfile启动的(9i以上):


    对于Oracle 9i以上的版本,首先要查看一下系统当前使用的配置是否是spfile;

    首先,以sysdba权限登录到系统,查看当前使用的配置是spfile还是pfile:

    SQL> conn / as sysdba
    Connected.
    SQL> show parameter spfile;

    NAME                                 TYPE        VALUE
    ------------------------------------ -----------
    spfile                               string
          ?/dbs/spfile@.ora

    注意蓝色部分,如果与此非常相像,则说明是spfile,否则是pfile。

    如果是spfile,则首先创建一个pfile来备份,以免修改错误不能启动:

    SQL> create pfile from spfile;

    File created.


    这时pfile被创建。

    如果是pfile,我们可以改用spfile启动,使用下面的方法创建spfile, 并重新启动:

    SQL> create spfile from pfile;

    File created.

    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SQL> startup
    ORACLE instance started.

    Total System Global Area  630501376 bytes
    Fixed Size                  2147032 bytes
    Variable Size             452988200 bytes
    Database Buffers          167772160 bytes
    Redo Buffers                7593984 bytes
    Database mounted.
    Database opened.


    二、开始调整:
    我们仅以流行的4GB内存,32位系统为例:

    增大系统全局区:
    SQL> alter system set sga_max_size=1200m scope=spfile;

    增大数据缓存区:
    SQL> alter system set db_cache_size=700m scope=spfile;

    增大共享内存区:
    SQL> alter system set shared_pool_size=320m scope=spfile;

    增大程序全局区:
    SQL> alter system set pga_aggregate_target=500m scope=spfile;

    增大排序区:
    SQL> alter system set sort_area_size=30000000 scope=spfile;

    增加连接数量:
    SQL> alter system set processes=600 scope=spfile;

    三、查看参数:
    show parameters 查看所有参数
    show parameters db 查看所有名称带db的参数
    show parameters log 查看所有名称带log的参数
    (依此类推)
     
    四、注意事项:
        在32位的系统上,ORACLE的SGA+PGA区的大小是不能超过1.7GB的,需要特别的调整,但除非必要一般不推荐这么做。但是,根据以往的使用经验,SGA区在WINDOWS下开到1.5G以上就有可能不稳。
        shared_pool_size 与 db_cache 都在SGA内,所以这两项的大小加在一起一定要小于SGA
  • 【转】美职业顾问公布15个谷歌面试题

    2009-11-06 14:03:05

    转自:

    http://www.51testing.com/html/05/n-179505.html

     据国外媒体昨日报道,美国西雅图市求职顾问刘易斯·林(Lewis Lin)收集了谷歌向应聘者提出过的140个问题,其中15个问题让许多应聘者自叹弗如。

      对那些身处经济衰退大潮中的初级经理和软件开发者而言,谷歌是一个避风港。但其招聘门槛较高,首先,谷歌更青睐长春藤联盟(由美国八所知名大学所组成)的毕业生;其次,即使应聘者已年过30,谷歌也很在意其GPA(平均成绩点数)分数;第三,谷歌需要的是那些想改变世界的人。而且,即使应聘者满足了上述要求,也有可能在面试中被谷歌提出的问题所难倒。以下是15个让许多应聘者感到自己很愚笨的谷歌面试题。

      问题:一辆校车能装下多少个高尔夫球?

      应聘职位:产品经理

      问题:如果让你清洗西雅图市所有的窗户,你会对此索价多少?

      应聘职位:产品经理

      问题:在一个重男轻女的国家里,每家每户都想生男孩。若一户人家生了一个女孩,便会再生一个,直到生下的是男孩为止。请问这个国家的男女比例是多少?

      应聘职位:产品经理

      问题:全世界共有多少位钢琴调音师?

      应聘职位:产品经理

      问题:下水道井盖为什么是圆的?

      应聘职位:软件工程师

      问题:为旧金山市设计一个紧急疏散方案。

      应聘职位:产品经理

      问题:时钟的指针一天内总共会重合多少次?

      应聘职位:产品经理

      问题:阐释“死牛肉”的意义所在。

      应聘职位:软件工程师

      问题:一个人开车来到旅馆,变得一无所有。究竟发生了什么事情?

      应聘职位:软件工程师

      问题:你想知道好友鲍勃是否有你正确的电话号码,但又不能直接问他。你必须在卡片上留言,让伊芙将卡片较交给鲍勃。除了问题以外,你还应该在卡片上写什么,才能既确保鲍勃能看懂留言,又使伊芙看不出卡片上写有你的电话号码。

      应聘职位:软件工程师

      问题:你是一艘海盗船的船长,你的船员要投票决定如何平分金条。如果与你意见一致的船员数量少于一半,你将被杀死。你应该如何提议分配金条,才能既分得较多赃物,又能活下来?

      应聘职位:工程经理

      问题:你有8个大小一样的球,其中7个重量相同,只有一个略重一些。给你一个天平,而且只准称两次,如何找出重量不同的那个球?

      应聘职位:产品经理

      问题:你在一幢100层高的大楼中,给了你两个鸡蛋。鸡蛋有时非常易碎,有时又异常坚韧。这意味着,如果在第1层扔下鸡蛋,鸡蛋或许会碎裂,而如果是从第100层扔下鸡蛋,鸡蛋或许安然无恙。这两只鸡蛋一模一样。你需要计算出,最高从哪层楼扔下时,鸡蛋不会碎。问题是,你需要扔多少次鸡蛋才能算出该楼层。整个过程中,你只允许打碎两个鸡蛋。

      应聘职位:产品经理

      问题:向你8岁的侄子或外甥解释什么是数据库,只能用三个句子。

      应聘职位:产品经理

      问题:你缩小到只有一枚五分硬币那么高,你的质量也成比例缩小以保持原有密度不变。随后你被扔到一个空的玻璃搅拌器里,搅拌刀片将在60秒后开始运转,你该怎么办?

      应聘职位:产品经理

  • 开启mysql远程连接

    2009-10-29 11:14:08

    进入mysql,创建一个新用户test:

        格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码";
       grant select,update,insert,delete on *.* to test@192.168.0.113 identified by "test";
      
        查看结果,执行:
       select host,user,password from user;
      
        可以看到在user表中已有刚才创建的test用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
      
        将host字段的值改为%就表示在任何客户端机器上能以test用户登录到mysql服务器,建议在开发时设为%。  
        update user set host = '%' where user = 'test';

        PS:上面的更新,需要重启服务才可生效。

  • 【转】 oracle的归档模式

    2009-10-28 12:15:33

    转自:

    http://www.cnblogs.com/jacktu/archive/2008/02/27/1083214.html

    一。查看oracle数据库是否为归档模式:
    1.select name,log_mode from v$database;
    NAME               LOG_MODE
    ------------------ ------------------------
    QUERY           NOARCHIVELOG
    2.使用ARCHIVE LOG LIST 命令
    Database log mode              No Archive Mode
    Automatic archival             Disabled
    Archive destination            /data/oracle/product/10.2.0/db_1//dbs/arch
    Oldest online log sequence     739
    Current log sequence
               741

    二。什么是Oracle归档模式?
      Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
      如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
      数据库使用归档方式运行时才可以进行灾难性恢复。
    1.归档日志模式和非归档日志模式的区别
    非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.
    归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.
    用ARCHIVE LOG LIST 可以查看期模式状态时归档模式还是非归档模式.

    三。配置数据库的归档模式

    改变非归档模式到归档模式:
    1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
    2)SQL>STARTUP MOUNT;
    3)SQL>ALTER DATABASE ARCHIVELOG;
    4)SQL>ALTER DATABASE OPEN;

    5)SQL>做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.这一步非非常重要!

    改变归档模式到非归档模式:
    1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
    2)SQL>START MOUNT;
    3)SQL>ALTER DATABASE NOARCHIVELOG;
    4)SQL>ALTER DATABASE OPEN;

    3.启用自动归档: LOG_ARCHIVE_START=TRUE
    归档模式下,日志文件组不允许被覆盖(重写),当日志文件写满之后,如果没有进行手动归档,那么系统将挂起,知道归档完成为止.
    这时只能读而不能写.
    运行过程中关闭和重启归档日志进程
    SQL>ARCHIVE LOG STOP
    SQL>ARCHIVE LOG START

    4.手动归档: LOG_ARCHIVE_START=FALSE
    归档当前日志文件
    SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
    归档序号为052的日志文件
    SQL>ALTER SYSTEM ARCHIVE LOG SEQUENCE 052;
    归档所有日志文件
    SQL>ALTER SYSTEM ARCHIVE LOG ALL;
    改变归档日志目标
    SQL>ALTER SYSTEM ARCHIVE LOG CURRENT TO '&PATH';

    5.归档模式和非归档模式的转换

    第4步的逆过程.

    6.配置多个归档进程
    Q:什么时候需要使用多个归档进程?
    A:如果归档过程会消耗大量的时间,那么可以启动多个归档进程,这是个动态参数,可以用ALTER SYSTEM动态修改.
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10;
    Oracle9i中最多可以指定10个归档进程
    与归档进程有关的动态性能视图
    v$bgprocess,v$archive_processes


    7.配置归档目标,多归档目标,远程归档目标,归档日志格式
    归档目标 LOG_ARCHIVE_DEST_n
    本地归档目标:
    SQL>LOG_ARCHIVE_DEST_1 = "LOCATION=D:ORACLEARCHIVEDLOG";
    远程归档目标:
    SQL>LOG_ARCHIVE_DEST_2 = "SERVICE=STANDBY_DB1";
    强制的归档目标,如果出错,600秒后重试:
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_4 = "LOCATION=E:ORACLEARCHIVEDLOG MANDATORY REOPEN=600";
    可选的归档目标,如果出错,放弃归档:
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_3 = "LOCATION=E:ORACLEARCHIVEDLOG OPTIONAL";

    归档目标状态:关闭归档目标和打开归档目标
    关闭归档目标1
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1 = DEFER
    打开归档目标2
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2 = ENABLE

    归档日志格式
    LOG_ARCHIVE_FORMAT

    8.获取归档日志信息
    V$ARCHVIED_LOG
    V$ARCHVIE_DEST
    V$LOG_HISTORY
    V$DATABASE
    V$ARCHIVE_PROCESSES

    ARCHIVE LOG LIST;
  • ORACLE删除正在连接的用户

    2009-09-29 17:41:19

    1、select sid,serial#,username from v$session where user='USERNAME';
    2、alter system kill session 'sid,serial#';
    3、drop user username cascade;
  • 【转】解析:学习Oracle架构应当掌握哪些知识

    2009-09-03 09:39:32

    1、物理结构

      (由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成)

      一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。

      其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files,alert files)属于数据库文件;

      参数文件(parameter file)口令文件(password file)是非数据库文件

      1.1数据文件:

      存储数据的文件。数据文件典型地代表了根据他们使用的磁盘空间和数量所决定的一个Oracle数据库的容积。

      由于性能原因,每一种类型的数据放在相应的一个或一系列文件中,将这些文件放在不同的磁盘中。

      types:

      .data dictionary .data

      .redo data .index

      .temporary data

      1.2控制文件:

      包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件。

      控制文件内容

    • 数据库名
    • 表空间信息
    • 所有数据文件的名字和位置
    • 所有redo日志文件的名字和位置
    • 当前的日志序列号
    • 检查点信息
    • 关于redo日志和归档的当前状态信息

      控制文件的使用过程

      控制文件把Oracle引导到数据库文件的其它部分。启动一个实例时,Oracle 从参数文件中读取控制文件的名字和位置。安装数据库时,Oracle 打开控制文件。最终打开数据库时,Oracle 从控制文件中读取数据文件的列表并打开其中的每个文件。

      1.3重做日志文件:

      含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件.

      1.4 跟踪文件及警告日志(Trace Files and Alert Files)

      在instance 中运行的每一个后台进程都有一个跟踪文件(trace file)与之相连。Trace file 记载后台进程所遇到的重大事件的信息。

      警告日志( Alert Log)是一种特殊的跟踪文件,每个数据库都有一个跟踪文件,同步记载数据库的消息和错误。

      1.5参数文件:

      包括大量影响Oracle数据库实例功能的设定,如以下设定:

    • 数据库控制文件的定位
    • Oracle用来缓存从磁盘上读取的数据的内存数量
    • 默认的优化程序的选择。

      和数据库文件相关,执行两个重要的功能

      (1)为数据库指出控制文件

      (2)为数据库指出归档日志的目标

      1.6归档文件:

      是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

      1.7口令文件:

      认证哪些用户有权限启动和关闭Oracle例程。

    2、逻辑结构(表空间、段、区、块)

      表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。

      段:是对象在数据库中占用的空间。

      区:是为数据一次性预留的一个较大的存储空间。

      块:ORACLE最基本的存储单位,在建立数据库的时候指定。

      3、内存分配(SGA和PGA)

      SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

      PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收。

      4、后台进程

      包括数据写进程(Database Writer,DBWR)、日志写进程(Log Writer,LGWR)、系统监控(System Monitor,SMON)、进程监控(Process Monitor,PMON)、检查点进程(Checkpoint Process,CKPT)、归档进程、服务进程、用户进程)

      数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件

      日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件

      系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

      进程监控:负责在一个Oracle 进程失败时清理资源

      检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现。对于许多应用情况,CKPT进程是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT进程不将块写入磁盘,该工作是由DBWR完成的。init.ora文件中 CHECKPOINT_PROCESS 参数控制CKPT进程的使能或使不能。缺省时为FALSE,即为使不能。

      归档进程:在每次日志切换时把已满的日志组进行备份或归档

      服务进程:用户进程服务。

      用户进程:在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。

      5、SCN(System ChangeNumber):

      系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。

  • 【转】如何提高回归测试的效率

    2009-09-02 18:12:16

    转自:

    http://www.51testing.com/html/93/n-148193.html

    最近看这个问题也看得蛮多的,学习了一些思想,过来总结下

      看个IBM的资料,里面写的很具体:http://www.51testing.com/html/77/n-147877.html

      大概就是要注意两个方面:

      1、测试用例的优化选择(好的测试用例可以用少的用例覆盖新版本中尽量多的改动)

      2、覆盖率分析(保证回归测试时的质量)

      

      图 3. 测试用例优化选择举例 如上图所示,所有的测试用例都会有一个函数调用的路径。我们把这些调用路径一一记下来。对于新版本所作的改动,所有与之相关的上层调用的测试用例都能够准确地选出来,这样我们就能用这些准确的测试用例来覆盖这次改动所产生的影响。毫不相关的测试用例则不会被选出来。从而用较小的成本完成这次改动所需要的回归测试,既省时省力又保证较高的测试质量。

      

      图 4. 覆盖率分析举例

      如上图所示,在版本更新过程中受到影响的测试用例为 Test Case1, Test Case2, Test Case3 覆盖了 12 个 Node,在版本更新过程中的更新点是 4,其中被覆盖到的为 3,还有 1 个更新点没有被覆盖到,现有测试用例集合的更新覆盖能力为 75% 。这样,我们知道上一个版本的测试用例设计不够充分尚有程序模块没有被任何已有的测试用例所覆盖。由于代码的更新最有可能引起程序的缺陷甚至系统崩溃,所以需要添加新的测试用例以保证对更新的覆盖,以降低程序运行的风险。

      对于软件的节点覆盖率,我们细化到函数粒度。我们是通过软件部署的 Binary 代码分析得知的函数情况。不需要借助源代码,因此对于软件进行测试覆盖率分析来说要求低,用较小的成本完成此次的测试用例覆盖反馈与分析。既省时省力又保证较高的测试质量。

      还有些方法:

      NO.1

      选择回归测试的时候,首先要确定的是,回归测试用例的比例,这个要根据时间情况了,100%是最好了,我个人一般这个比例在60%左右。然后要确定回归测试用例的优先级。根据我的经验,一般有如下必须回归的用例:

      第一,新修改的功能,这个显然是重点

      第二,新修改的功能的关联功能,就是有耦合的部分,这个一般最好咨询一下开发人员

      第三,程序最有卖点或者说亮点的部分,这个地方一旦有问题,会使程序质量大打折扣

      第四,程序中最致命的部分,譬如说安全隐患,数据泄露,加密注册

      第五,程序中比较脆弱的部分,这个要咨询开发人员,一般就是他们心中最没底的地方

      第六,程序的主干功能

      第七,如果以上做完,还有时间的话,最好把用例中级别比较高的用例再执行一遍。

      以上是回归测试用例的选择优先级。

      其实,即使这样做,还是有风险的。最根本的解决方法是自动化测试工具加上手工测试。具体就是常用的程序主干功能,主要功能,用自动化测试,保证每一个版本都能够执行一遍,其他修改频繁的小功能手工测试了。

      说了这么多,好像比较乱,总结一下。

      个人觉得解决这个回归测试的终极解决方案是:

      a.作每日构建

      b.基线功能自动化

      c.编写用例时一定要分级(按照风险度,常用度,重要度)

      手工执行回归测试用例(就是我上面说的7项)

      NO.2

      按照需求说明,把需求和功能点做矩阵表,然后功能点和test case作矩阵表,

      每次需求有变动,就可以看它的变动所涉及的功能点,然后对应的testcase有多少,之后可以客观的分析下,所需的工作量,可以根据具体的时间作一些删减。

     

    以下转自:

    http://www.51testing.com/html/78/n-116678.html

    如何高效进行回归测试

      很久没有写东西了,都是金融危机惹的祸,说说个人想法,最近正在整理一些流程规范的东西,回归测试正是需要考虑的部分。

      说到回归测试,可以说每个做测试的人都做过,重复,无聊,消耗时间等可能是大家做回归测试的记忆。也许实施自动化测试可以解决一部分回归测试,但不是所有的测试都可以自动化,也不是所有的公司都有能力实施自动化,下面写的内容不涉及自动化内容。

      从三方面来讨论做回归测试:

      一、测试流程方面

      一般通用的测试流程都是“测试计划”—“测试设计”—“测试执行/分析”—“测试报告”,贯穿与整个项目,和开发流程相对应。由于本人做游戏测试方面,需求变更对游戏行业来说是很频繁,很正常的,在做游戏行业测试不能和通用软件测试流程一样,游戏测试流程应该是螺旋式的,单元测试,模块功能测试,集成测试,系统测试性能测试,压力测试等是测试的一个过程,“测试计划”—“测试设计”—“测试执行/分析”—“测试报告”应该实施在每个阶段,实施在单元测试阶段,实施在模块功能测试阶段等,这样才能达到螺旋效果。而在每一次螺旋测试结束后,实施下一次螺旋测试前都应该进行回归测试,回归测试在螺旋测试中应该贯穿与每个螺旋阶段,而不是只贯穿与项目测试。

      二、测试用例设计方面

      有了上面的回归测试流程计划,下面要实施的就是回归测试的重点——测试用例。在设计测试用例中就应该把回归测试用例考虑进去,可以通过设置用例优先级做为后期回归测试用例的挑选条件,也可以是其他的。

      测试用例一般在项目中分为三种,单元测试用例,功能测试用例,性能测试用例。

      1、 在不能阶段设计测试用例,挑选回归测试用例是不同的,单元测试用例设计一般选择具有编程能力的测试人员设计,功能测试用例设计选择熟悉业务知识的测试人员设计,性能测试用例设计一般需要与开发人员商讨才能设计。也就是说只有选对设计测试用例的人员,才有可能在后期挑选出好的回归测试用例。

      2、 项目中的拳头功能,亮点,用户大量使用的功能应该是重点保护的地方,这方面可以交给小组核心人员进行设计。

      3、 测试用例设计一定要设置优先级(依靠测试人员个人水平,用例评审等进行设置)。

      三、测试管理方面

      现在的团队都讲究团队精神,可以说,一个测试团队的水平发挥,一半以上可以说和管理的好坏有关,这也就是为什么回归测试会和测试管理有关系了,也就需要一个好管理者来进行管理了。

      1、 单单有计划还不行,还得靠执行,上面的测试流程应该在制定后严格执行,每一轮的螺旋测试后和下一轮螺旋测试之前都应该进行回归测试,如单元测试之后,模块功能测试之前,应该挑选单元测试用例进行回归测试,只有保证单元测试通过才能进入下一轮螺旋测试。

      2、 测试管理人员在测试开始之前要非常熟悉项目,才能在后期安排任务时把不同的测试安排给合适的人选,发挥最大的力量,这就需要管理者具备良好的沟通力和分析能力

      3、 执行测试用例评审——重点模块,亮点模块的测试用例必须经过评审

      4、 回归测试重点地方——BUG修改,关联功能,新增加,修改功能,上一轮测试BUG多的功能。

      5、 做好每轮螺旋回归测试工作——分析上一轮螺旋测试缺陷,找出缺陷比较多的地方是下轮回归测试重点,需要重新挑选回归用例。

      6、 编写每轮螺旋测试报告——分析缺陷,测试方法等,为下一轮螺旋测试做修改,准备。

      7、 持续改进——每一轮的螺旋测试后都应该分析,计划,团队,用例设计等是否需要改进,做到螺旋测试持续改进。

      脑袋有点乱,思路可能没表达清楚,以后再修改,个人认为回归测试方法不是一成不变的,也应该是持续改进。不同阶段需要的回归测试都是不一样的。回归测试不能仅仅只和测试用例相关。

  • ORA-01652(临时表空间无法扩展)解决方法

    2009-09-01 18:20:40

    ORA-01652:unable to extend temp segment by num in tablespace name

    产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。

    解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:

    SQL>Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name=’’;

    返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

    SQL>SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME=name;

    通过下面的SQL命令修改临时段表空间的缺省存储值:

    SQL>ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);

    适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:

    SQL>ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;

    使用ALTER TABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。

    一个报错例子如下:

    ORA-1652:unable to extend temp segment by 207381 in tablespace TEMPSPACE

    相应的英文如下:

    Cause: Failed to allocate extent for temp segment in tablespace

    Action:Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace or create the object in another tablespace.

     

    补充:

    重建Temp表空间 

    1. startup --启动数据库      
    2.      
    3. create temporary tablespace TEMP2 TEMPFILE '/home2/oracle/oradata/sysmon/temp02.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --创建中转临时表空间      
    4.      
    5. alter database default temporary tablespace temp2; --改变缺省临时表空间 为刚刚创建的新临时表空间temp2      
    6.      
    7. drop tablespace temp including contents and datafiles;--删除原来临时表空间      
    8.      
    9. create temporary tablespace TEMP TEMPFILE '/home2/oracle/oradata/sysmon/temp01.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --重新创建临时表空间      
    10.      
    11. alter database default temporary tablespace temp--重置缺省临时表空间为新建的temp表空间      
    12.      
    13. drop tablespace temp2 including contents and datafiles;--删除中转用临时表空间      

     

  • 【转】数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名

    2009-09-01 12:14:18

    详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名
    ----------------------------------------------------

    数据库名、实例名、数据库域名、全局数据库名、服务名,
    这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。

    一、数据库名
    什么是数据库名?

    数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:
    DB_NAME=myorcl
    ...
    在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。

    数据库名的作用
    数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
    有很多Oracle安装文件目录是与数据库名相关的,如:
    winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\...
    Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...
    pfile:
    winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora
    Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
    跟踪文件目录:
    winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...
    另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。
    同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。
    如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。
    还有在备份或恢复数据库时,都需要用到数据库名。
    总之,数据库名很重要,要准确理解它的作用。

    查询当前数据名
    方法一:select name from v$database;
    方法二:show parameter db
    方法三:查看参数文件。

    修改数据库名
    前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:
    1.关闭数据库。
    2.修改数据库参数文件中的DB_NAME参数的值为新的数据库名。
    3.以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)

    二、数据库实例名
    什么是数据库实例名
    数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。
    数据库名和实例名可以相同也可以不同。
    在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。这一点在第一篇中已有图例说明。

    查询当前数据库实例名
    方法一:select instance_name from v$instance;
    方法二:show parameter instance
    方法三:在参数文件中查询。

    数据库实例名ORACLE_SID
    虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而ORACLE_SID是操作系统的环境变量。ORACLD_SID用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。在winnt不台,ORACLE_SID还需存在于注册表中。
    ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:协议适配器错误”。

    数据库实例名与网络连接
    数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle主机连接串的时候,就需要指定实例名。当然8i以后版本的网络组件要求使用的是服务名SERVICE_NAME。这个概念接下来说明。

    三、数据库域名
    什么是数据库域名?

    在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如:
    全国交通运政系统的分布式数据库,其中:
    福建节点: fj.jtyz
    福建厦门节点: xm.fj.jtyz
    江西: jx.jtyz
    江西上饶:sr.jx.jtyz
    这就是数据库域名。
    数据库域名在存在于参数文件中,他的参数是db_domain.

    查询数据库域名
    方法一:select value from v$parameter where name = 'db_domain';
    方法二:show parameter domain
    方法三:在参数文件中查询。

    全局数据库名
    全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz

    四、数据库服务名
    什么是数据库服务名?
    oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。
    如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

    查询数据库服务名
    方法一:select value from v$parameter where name = 'service_name';
    方法二:show parameter service_name
    方法三:在参数文件中查询。

    数据库服务名与网络连接
    oracle8i开如的oracle网络组件,数据库与客户端的连接主机串使用数据库服务名。之前用的是ORACLE_SID,即数据库实例名

  • 【转】vmstat 命令详解

    2009-08-31 15:43:02

    vmstat 是用来实时查看内存使用情况,反映的情况比用top直观一些.
    如果直接使用,只能得到当前的情况,最好用个时间间隔来采集

    vmstat T
    其中T用具体的时间标示,单位是秒 例如:vmstat 5 表格每隔5秒采集一次.
    这样在刷新的时候就能比较系统的看到那个列不正常的

    procs:
    r-->;
    在运行队列中等待的进程数
    b-->;
    在等待io的进程数
    w-->;
    可以进入运行队列但被替换的进程

    memoy
    swap-->;
    现时可用的交换内存(k表示)
    free-->;
    空闲的内存(k表示)

    pages
    re
    --》回收的页面
    mf
    --》非严重错误的页面
    pi
    --》进入页面数(k表示)
    po
    --》出页面数(k表示)
    fr
    --》空余的页面数(k表示)
    de
    --》提前读入的页面中的未命中数
    sr
    --》通过时钟算法扫描的页面

    disk
    显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

    fault
    显示每秒的中断数
    in
    --》设备中断
    sy
    --》系统中断
    cy
    --》cpu交换

    cpu
    表示cpu的使用状态
    cs
    --》用户进程使用的时间
    sy
    --》系统进程使用的时间
    id
    --》cpu空闲的时间

    其中
    :
    如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。

    如果pipo 长期不等于0,表示内存不足。
    如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

  • 【转】ORACLE学习相关

    2009-08-20 15:41:26

    转自:

    http://www.51testing.com/?uid-202848-action-viewspace-itemid-134034

    concepts的英文还是比较简单的,tom写的《oracle编程艺术》还是不错的,建议3个月后再看,稍微有点深度的,没读一次都有不同的体会 呵呵

    浅谈Oracle学习。
    http://itspace.javaeye.com/blog/420550

    上个星期一直在出差,好久没来这个自留地啦,呵呵。现在闲来无事,就谈谈Oracle的学习方法吧。
    1.初接触Oracle,肯定会被其复杂的体系结构,众多的概念给搞混,如process和sessions,restore和recover等等,接触Oracle前3个月肯定会觉得这些概念非常抽象,又觉得无重下手,到处是重点,处处又把握不住,朋友,坚持吧,学习Oracle毅力很重要。
    2.通读Oracle官方文档的concepts章节,至少需要通读2次,英文能力一般的朋友第一次阅读时可适当参考中文文档,因为很多术语英文很难理解。网上有很多关于concepts的中文翻译,其中翻译的比较出色当属于zw1840。第二次阅读时必须抛弃中文资料,英语阅读再困难,也要将其啃下来,因为阅读英文资料,一:会有自己的想法,二:好多好的Oracle资料都是英文的。
    3.学习Oracle初级阶段切忌上一些中文论坛,如itpub,因为那里水平参差不齐,再加上自己水平有限,判断能力有限,他们给出的答案很多都是错误的,很容易形成误导。
    4.遇到问题,先静下来想想,自己先尝试解决问题。
    5.学习Oracle讲究一个“悟”字,即不要浅尝辄止,遇到问题,不是解决就好了,多想想为什么会产生这样的问题,怎么样才能避免,这个问题的背后是什么,牵扯到的知识点有哪些,等等。假如你是Oracle的设计者,你会怎么样设计Oracle?当自己的理念和Oracle的理念产生冲突时,99%是自己错了,多想想这个模块Oracle为什么要这样实现,这样实现会带来什么好处。
    6.实践永远重要于理论,书看的再多,而不会用sqlplus "/as sysdba"操作一系列命令,也是徒然。
    7.不要迷信市面上的Oracle书籍,除了tomas kyte,eygle,piner的书可以读之外,说实在其他的书真的是浪费时间,还不如自己再通读一边concepts。
    8.互联网的神奇之一是产生了google这样的好工具,查阅资料比baidu好多啦
    9.自己研究Oracle的alert日志会给自己带来意想不到的成果,尤其是研究启动过程部分
    10.千言万语,兴趣是第一位的,Oracle好像是一杯醇酒,越品越有味,不知不觉醉心于此。

     

    Oracle书籍推荐
    http://chenjianjx.javaeye.com/blog/295563

     

    Oracle推荐书籍2008-12-06 12:46很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Oracle的基本概念、基本知识的那种。
    我就免为其难,推荐几本。

    首先我想强调的一点是,任何一本系统的Oracle书籍只要认真读下来,都会有不错的收获,读书最忌讳的是虎头蛇尾,浅尝则止。

    1.第一本要推荐给大家的是Oracle的概念手册,这本手册是无数DBA学习的起点:Database Concepts
    这是Oracle的官方文档,详尽的介绍了Oracle的基本概念,是DBA经常需要翻阅的参考书,也是最好的入门学习资料,如果大家阅读英文不存在问题,请先阅读本书,这本书可以在Oracle的官方文档站点Tahiti找到:
    http://www.oracle.com/pls/db102/homepage?remark=tahiti

    Oracle10gR2的下载地址为:
    http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14220.pdf

    下载之前你可能需要注册一个OTN的免费帐号。如果你无法从官方站点下载,也可以通过本站下载这本手册:http://www.eygle.com/orabk/OraDoc/b14220.pdf

    当然我建议大家都从英文版开始你的阅读,即便你的英文不够好,但是如果你觉得还是有障碍,网络上已经有很多朋友将这本手册翻译成了中文,我打包了两个版本(如果CHM格式无法打开,请在右键属性页里选择解除锁定),提供下载:

    http://www.eygle.com/orabk/OraDoc/Oracle.Concepts.zip

    原出处链接请参考:ITPUB链接 ITPUB链接2 网友译本


    2.第二本要推荐的是Thomas Kyte的《Expert One on One: Oracle》,这本书的中译本,被称为《Oracle专家高级编程》。
    毋庸多说,这本书是Oracle界的经典之作,最初是基于Oracle8i进行写作的,现在Tom已经出版了基于Oracle9i/Oracle10g的升级版,书名为《Oracle Database Architecture 9i and 10g Programming Techniques and Solutions》,现在中文译本也已经快要出版了。

    这本书的前几章以介绍Oracle的基础知识为主,后几章则以介绍开发相关的内容为主,侧重于管理DBA的朋友可以着重阅读一下该书的前几章。

    Expert One on One: Oracle 这本书中文版大家可以参考:
    http://www.itpub.net/showthread.php?threadid=224536
    其英文版本参考:
    http://www.itpub.net/showthread.php?threadid=316444

    Oracle Database Architecture 9i and 10g Programming Techniques and Solutions 这本书的英文版参考:
    http://www.itpub.net/showthread.php?threadid=486715

    中文版参考:

    http://www.itpub.net/thread-969575-1-3.html

    我强烈推荐大家仔细阅读本书。

    3.另外要推荐给大家的一个系列图书是,Oracle OCP官方培训教材

    这套官方教材无论从结构还是体系上来说都是非常不错的入门及学习参考资料,虽然其中也存在一些错误和含混之处,但是仍然不失为经典,每个考过OCP认证的人都曾经深入阅读过该系列教材。

    我可以负责任的说:每个全面深入阅读和理解该系列教材的人,都无愧于OCP认证,虽然现在的Paper OCP是那么的多。

    另外一个值得推荐之处是,该系列教材拥有不同版本Oracle8i/Oracle9i/Oracle10g,而且大部分都有中文版本,大家可以对照学习。

    这些教材大都可以从ITPUB上找到,恕我不能一一查出其具体链接:)


    4.此外推荐大家可以看看《ITPUB技术丛书》


    ITPUB的技术书籍来源于实践,对于解决实际问题非常有帮助。
    目前已经出版了四本书《Oracle 数据库DBA专题技术精粹》、《Oracle 数据库性能优化》、《深入浅出Oracle-DBA入门、进阶与诊断案例》、《循序渐进Oracle》。
    其中部分图书的章节可以参考以下链接:
    http://www.eygle.com/archives/2008/08/stepbs_oracle_info.html

    书不在多,精读则灵,希望大家能够静下心来认真阅读,然后一定会有所收获的。
    最后要提醒大家的是,Oracle的英文资料众多,要想真正深入学习Oracle,必须克服英文阅读的障碍。

    开发必看的..
    Oracle 9i & 10g编程艺术,书的内容好..翻译的也很好
    http://www.douban.com/subject/1864527/
    再随便找本PLSQL的书好了..
    这本:http://www.china-pub.com/28201
    或者这本:http://www.china-pub.com/16882

    一直认为,Oracle开发的话,不必废话,唯一的书籍选择标准就是tom的作品。上amazon搜他的最新作品就完了
    上面那本《Oracle 9&10g 编程艺术》在目前来说是最好的
    真的没见有人能够同时在技术水平、写作技巧和事业这3个方面都能达到Tom那个高度的。

     

     

    java太苦了,如何成为一名高薪的DBA呢?
    http://www.javaeye.com/topic/167626

     

    我做php和java已经很久了,真的是太苦了,而且人太多,我想凭我的资质在java里是混不出什么名堂的了,想转dba了。老师说过在IT里面有一黄金行业:DBA,有一个可以干一辈子的IT职位:DBA,因为它是吃经验的,干的时间越久越好。我不想浪费我的时间了,希望从今天开始进入DBA的行列。
    我做了一个简单的计划:想找到第一份DBA的工作要有两个基本的东西:你英语好,有一个精通的数据库oracle9i。
    所以时间是这样安排的:晚上的所有时间放在成为DBA的计划中。
    晚上:
          6:00 --  6:30     学新东方的英语语音(英语的基本功学多久也要练的)

    http://www.youku.com/playlist_show/id_336535_orderby_9_page_1.html
    or
    http://video.xuezhishi.com/play.asp?id=494&m=60&n=1&u=1&v=1

         6:30 --  7:00     学新东方新概念英语2
    http://so.56.com/index?type=video&key=%D0%C2%B6%AB%B7%BD+%D0%C2%B8%C5%C4%EE%D3%A2%D3%EF+%B5%DA%B6%FE%B2%E1&op=or&sortby=3
          7:00 --  8:00     看动感英语2005有文本
    http://www.zaban.cn/forum-74-1.html
          8:00 --  11:00    边看oracle学习视频边写代码(我有俩部视频:oracle内部教学视频,ITlab教学视频)够了
          11:00 --  12:00   边看hibernate学习视频边写代码
    以上的原则:在于熟能生巧,不在多。计划的有效时间是2008年3月4日到2008年12月31日
    因为我想在简历上写精通oracle9i,精通hibernate,英语很棒。有经验。


    当然还有很多的相干知识要学的:
    java的基本知识,struts,spring.数据结构,基本算法,设计模式,离散数学,线形代数,高数,概率统计,但这些不是现在的重点,是以后的事。我也要活下去的:白天不管一切只要能挣到钱就行。什么都干。白天的任务是挣钱。

    做java太苦了,而且也对我来说真的是没有什么上升的空间了,如何成为一名高薪的DBA呢? 一切都在摸索中,希望有高人能指点一下。以上都是自己的感言。下面转些东西吧。谢谢!
    我转一篇很精彩DBA经验文章吧,供自己以后学习借鉴。







    成就DBA职业生涯介绍
    许多年来,我在不同的新闻组上花费了很多时间与那些想知道如何得到数据库管理员(DBA)的工作或者如何成长为一名DBA的IT人进行交谈,现在他们有了工作。这些年来许多人针对如何达到这个目标提出了不同意见。本文即是那些意见的综合并且能够在如何才能出色的完成DBA的工作方面给出好的建议。这篇文章同样对于如何让一名DBA变得对老板更有价值。假如你已经是一名DBA,那么也许你会希望跳过文章的前几段。

    我应该成为一名DBA么?

    我曾问过的一个问题是一个人应该从事DBA这样的职业么。这个问题并不容易回答,因为它因人而异。有的人有成为一名好DBA所需要的天赋。而其他人并不认为能够很容易掌握成为DBA的秘诀。DBA职业需要掌握一定的技能。而且还需要其他IT职业所不必需的要求。因此,为了回答这个问题,我通常给将要成为DBA的人描述DBA职业所必需的要求。下面的段落中,我都将以问题结尾。在继续下一段以前请花一些时间考虑并且回答这些问题。

    许多人因为许多原因而立志要成为DBA。其中一个主要原因是薪水。DBA是IT业中薪水最高的职业之一。其他人想成为DBA是因为喜欢赞扬DBA是受到的荣誉,或者因为他看上去很酷!我个人认为,成为DBA是很值得的。它是一个很有意思,令人兴奋的职业。那么,你把DBA作为一个可能的职业选择的原因是什么呢?

    除非你已经提前准备好了,否则你可能会发现从事DBA职业充满了挫折和令人头痛。一个数据库存在于操作系统和最终用户应用程序之间。同样地,DBA必须非常精通他的数据库所在的操作系统。DBA并不一定需要知道所有有关操作系统的知识,但是他知道得越多越好。数据库与操作系统联系非常紧密。理解这种关联是十分必要的。DBA还需要知道服务器硬件以及它如何影响与帮助数据库。同时,DBA必须理解应用软件。DBA可能会被要求帮助开发人员创建可靠,健全的数据库应用程序。还有,最重要的也是最明显的,DBA必须十分彻底的理解数据库引擎,它是如何工作的,所有的引擎是如何组合在一起的,以及如何影响数据库引擎向最终用户和应用程序传送数据的能力。我见过的最好的DBA有非常深刻的理解而且不仅仅在数据库本身。他们知道一些系统管理与应用开发。好多时候他们在成为DBA之前有其中一个或两个背景。无论如何,成为一名合格的而不是出色的DBA也需要许多背景知识。你是否已经做好准备开始学习直到你感到已经无法再学下去了?

    许多和我交谈过的,在开始DBA职业时遇到困难的人,在尝试着吸收大量DBA所需了解的信息时实际上都会有一些问题。毕竟系统管理员是全职学习操作系统的细节。应用程序开发人员全职学习如何编写好的程序。DBA不仅要非常了解这两种不同的工作,而且还需要花费更多的时间去理解数据库的体系结构,以及理解每一样东西的每一块是如何组合在一起的!听起来是不是很让人畏缩?有许多人失败后这样想,并且把DBA工作看作一项非常困难的事情。也有那些传播和理解所有这些信息,并且使用这些信息做出好的,听起来具有技术性的决定的人。正如我以前是一名DBA时喜欢说的,所有这些对我来说看上去像一个大谜团。把这些所有的很好的组合在一起就是挑战。你是哪一种人?

    许多DBA是随时侯命的。他们会在白天或晚上的所有时间接到呼叫去解决他们的数据库出现的致命问题。数据库是商业信息技术基础组织的必不可少的组成部分。没有数据,就没有必要拥有一个计算机系统。数据推动商业。假如amazon.com的网站不能在数据库中搜索产品并且假如没有人能够为他们的产品下订单,那么它会变成什么样?它就不会在商业中存在很久。当数据库down掉,即使只是很短的时间,公司也会损失重大。基于这个原因,DBA到达现场后必须尽可能迅速的解决问题。许多公司有自己的DBA团队以便可以轮流待命。这些DBA 24×7小时的维持数据库应用程序。假如工作需要的话,你准备好随时候命了么?

    一些DBA的职责包括为软件打补丁或者对数据库做些改变。通常,这些操作不能在公司职员工作的时候做,因为此时数据库必须运行以便他们能够工作。这意味着DBA经常不得不在很早或者深夜甚至周末,总之,在正常工作时间以外来完成工作。你准备好在非正常时间工作,或者你在找一个朝九晚五的工作?

    对DBA而言,需要掌握的一个重要内容就是通常被称为“软技术”的东西。DBA需要在团队中很好的工作,通常团队是在变化的,如系统管理员,网络管理员,应用程序开发人员,项目经理和其他人。DBA要能够用流利的英语解释复杂的技术概念,让团队中其他人明白。DBA还要能够在数据库相关问题上指挥团队队员。你的软技术怎么样?

    下面不是全部列表,但是包括了DBA的典型职责:
    •把监视数据库实例当作每日必做工作以保证其可用性。解决不可用的问题。
    •收集系统统计和性能信息以便定向和配置分析。
    •配置和调整数据库实例以便在应用程序特定要求下达到最佳性能。
    •分析和管理数据库安全性。控制和监视用户对数据库的访问。必要时审计数据库的使用。
    •监视备份程序。必要时提供恢复。测试备份与恢复程序。
    •升级RDBMS软件并且在必要时使用补丁。必要时升级或者迁移数据库实例。
    •通过数据库相关动作来支持应用程序开发人员。
    •跟随数据库趋向和技术。当可应用时使用新技术。安装,测试和评估Oracle新的相关产品。
    •执行存储和物理设计。均衡设计问题以完成性能优化。
    •创建,配置和设计信的数据库实例。
    •诊断,故障检测和解决任何数据库相关问题。必要时联系Oracle支持人员以便使问题得到较好的解决。
    •确保Oracle网络软件(SQL*Net, Net8, Names, OiD)配置和运行的很好。
    •与系统管理员(Unix & NT)一起工作以保证Oracle相关事务得到很好的处理。
    •为有效的,定期的维护数据库创建任何必要的脚本。

    前面各段的问题是为了使你考虑一名DBA该做些什么,帮助你决定这是不是适合你的职业。我并非意味着假如你的目标是成为DBA这些会阻止你。我只是尝试着展现一些事实。我看到过一些DBA一旦被实际工作打击了就一蹶不振。他们花费时间,精力和一些金钱获得了他们的第一份DBA工作。我个人认为这个职业非常有价值。而且我无法想像现在做任何其他的会怎样。所以,这一段帮助你决定这是不是你希望从事的。假如它是,那么尽你所有去得到它!

    我怎样得到第一份DBA工作?
    你已经阅读了前面的段落并且认为成为一名DBA是一个好的职业。祝贺你!我希望你的职业能变成你想像得那么令人兴奋和有意义。那么,你如何找到第一份DBA工作?这个问题我已经听别人问了许多许多遍。

    在90年代早期,因特网急速发展。它使公司象草一般萌芽。公司蜂拥而至并且开始创建他们在网上的形象。几乎所有这些有网站的公司都需要一个数据库作为web应用的后台。不幸的是,当时在该领域却没有那么多DBA。在IT业,DBA变得奇缺。那段时间里,得到一份DBA工作看上去只要可以拼出“Oracle”或者可能只是在大学里接触过一学期的数据库就行。为了使生活变得更好,DBA的匮乏促使公司付给有潜力的职员很高的薪水。假如你想要成为一名DBA,很容易,非常容易。你需要做的就是证明你了解什么是数据库然后工作就会比你预期的更早的出现在你面前。

    然后因特网的泡沫破灭了。大量投产因特网的公司破产。许多给公司工作的DBA重新寻找工作。缺少DBA的公司找到一名有DBA经验的人比以前容易得多。在21世纪初期,由于经济并不十分稳固,因此生活并不容易(至少在美国如此)。公司都勒紧了他们的裤腰带。所有这些转化为更少的工作机会和DBA候选人更少的工作空缺。

    得到第一份DBA工作的最艰难的部分是每一个职位都要求有一些工作经验。如果你从公司的角度出发,你就可以理解为什么对DBA职位而言经验是必需的。假如他没有一点经验,你会付给这个人很高的工资让他去操作,维护和运行你IT基础组织的最大最重要的一部分么?你的公司会付钱给一名没有经验的DBA么?并且,在等待他成长起来的过程中可能会损失上百万美元的收入。对大多数公司而言,这些问题的答案肯定是‘不’。所以,没有经验,获得你的第一份DBA工作是很困难的。

    第一份DBA工作现在成了恶性循环的境遇。假如我没有任何经验,我怎样才能得到DBA的工作呢?我没有工作的话又怎么能得到DBA经验呢?这是要战胜的最困难的障碍。最困难的部分是获得第一个DBA工作。这部分的剩下部分将针对实现你第一个DBA工作的目标给你一些建议。

    提示#1:接受教育。—尽可能多的学习有关数据库的知识。这很可能将占用你正常工作以外的部分时间也精力。参加本地大学举办的数据库培训班。许多培训公司都会举办数据库管理员的培训班。假如你的老板不资助你的学习,那么你可能不得不自己支付这笔费用。许多DBA职业要求至少为计算机科学或相关专业本科以上学历,因此你必须至少有那样的文凭。

    提示#2:锻炼成为DBA。—许多数据库供应商都允许你下载他们数据库系统的测试版或评估版。下载一份并且在自己的个人电脑上安装软件。练习使用数据库。故意破坏数据库并且尝试修复它。尝试着履行你所能想到的尽可能多的DBA职责。测试和磨练你在自己的测试平台上的技能这样你就可以证明你的数据库管理能力。

    提示#3:获得认证。—许多数据库提供商都提供自己的数据库产品的认证。许多公司现在都把认证看作是一种标准。需要记住的一件事是仅获得认证是不够的。通过DBA认证测试并不意味着你知道如何管理一个数据库。它只是告诉你以后可能的老板,现在你拥有了一定的技术。它还告诉你的老板你对DBA工作的态度是很认真的。我看到许多人抱怨他们已经得到了认证但是没有经验,却仍然不能得到第一份DBA工作。认证本身并不能使你得到工作,但它是无害的。即使没有其他的,在你进行认证的时候你也已经学到了许多知识。只是不要依赖认证来给你带来你要找的工作。你需要的比这还要多。但它会在最后帮助你。

    提示#4:利用你现有的技能。—许多DBA具有系统管理员背景。其他的有应用程序开发背景。假如可能,查看你能否利用现有的技能来得到工作。现在的目标就是为你和你的老板创造一个双赢的局面。例如,让我们假设你已经是一名系统管理员而想进入DBA领域。也许你会找到一份工作,这份工作一部分时间里可以用到你的系统管理技能,并且在剩下的时间里可以使你涉及到数据库管理领域。假如你已经是一名某个产品平台上的DBA但你希望转到其他产品平台,那么看看你能否找到一份同时接触两个产品平台的工作。这样,公司和你都得到了想要的。在你定向到了DBA工作后,你可以试着得到一个能让你全职作它的职位,也许还可以在同一个公司中。

    提示#5:利用现在的机会。—有时候,一个人进入DBA领域仅仅需要的是正确的地方和正确的时机。假如你现在的老板有一个机会让你进行任何数据库的项目,抓住这个机会!任何数据库经验就比没有数据库经验要好。让你的管理者知道你十分积极的在寻找任何可能的数据库机会。他们就有可能在下次机会到来的时候想到你。进行这些数据库项目以及看到你要成为一个DBA的渴望以后,他们可能会决定培训你,提拔你。许多许多人都是以这种方式获得他的第一个DBA工作,在进行了一些数据库相关的项目后不知不觉的成为一名较低级的DBA。通常当一名DBA离开公司后,公司将在内部寻找一个候选人,假如他们认为这名候选人是可训练的话。

    提示#6:寻找较低级的DBA职位。—假如你只是为了一个较低级的DBA工作,看到DBA职位的需求描述说他们正在寻找高级DBA或者其他的。所以,让我们严谨一些。你并没有一个高级方面的经验。我已经讨论过了对于这样的职位为什么公司不会考虑你。但是他们会在低级的职位上考虑你。低级的DBA在高级DBA的指导下完成工作。他们摸索窍门。一般来说,高级DBA对数据库承担责任,同时也获得所有的荣誉。但是不要焦急。随着你的事业发展,你将会有越来越多的责任和得到越来越多的信任。因为你没有任何经验,你应该从这里开始启航。

    我也听到过一些公司寻找一名高级DBA,但是到最后,他们实际想要雇一名低级的DBA。你或许希望申请这样的职位虽然你也许没有资格。他们可能还是会决定雇佣你。但是提前说明你仍然在摸索阶段并且已经是较低级的DBA水平。不要试图欺骗他们让他们认为你是高级DBA的水平。这只会降低你得到这项工作的机会。

    这些提示将帮助你得到第一份DBA的工作。祝你在寻找工作时有好运气。当你已经找到了第一份DBA工作后,继续下面的部分来学习如何往下走下去。

    我刚得到我的第一份工作!现在该怎样?

    祝贺你!你现在是DBA俱乐部的正式成员了!对于这份梦寐以求的令人激动的职业,你准备好了么?你的工作才刚开始并且你在学习上已经落在后面。你将会发现要成为一名高效的数据库管理员有大量的知识你必须掌握。你的第一年或前两年将花费比以前更多的时间来学习。假如你发现学习知识的数量使你大脑超负荷,那么休息一下,歇口气,然后再回到学习中去。为了帮助你继续走下去,你可以按照下面的方法进行:

    步骤#1: 关系型数据库理论 –这部分我假设你将管理的数据库是一个“关系型”数据库。其他数据库模型也存在,但是关系型模式是近二十年工业上占统治地位的一种数据库模式。假如你的数据库系统是其他的模式,那么学习它的理论。相关数据库理论是十分重要的。它是其他一切的基础。我也看到许多跳到数据库管理职位的人从不想去学习纯粹的关系型数据库理论。不可避免的,在他们的事业中对理论基础的匮乏作为缺点暴露了出来。假如你对关系型数据库理论理解得很好,那么你将非常容易的在任何平台的关系型数据库管理系统(RDBMS)中转变。我使用Oracle数据库,或者IBM的DB2,或者微软SQL Server是无关紧要的。他们都是关系型数据库系统。他们在最底层都在做着相同的事情。区别在于他们怎样去做相同的事情。纯粹的关系型数据库理论对于较低级的DBA来说并非必需的。但是假如你想要超越低级DBA的水平它就是十分重要的。许多大学的教科书都很好的包含了关系型数据库的理论。其中一本被广泛使用的教科书就是由Elmasri and Navathe编写的数据库系统基础,Bejamin/Cummings Press。

    步骤#2: 彻底的学习查询语言 –数据库都有语言让你能够从数据库中得到数据,把数据放到数据库中,以及修改数据库中的数据。对于关系型数据库而言,这种语言就是结构化查询语言(SQL)。这门语言是你与数据库接触的工具。不能让这个工具成为以后学习的障碍,这一点很重要。在你的测试数据库中练习不同的SQL语句直到他们变成了你的习惯。这方面的一本非常好的书叫做Oracle 9i完全参考(Oracle 9i The Complete Reference)由Loney 和Koch编写,Oracle Press。每一名Oracle DBA都应该在他事业的早期阅读这本书。Oracle 9i参考手册(Oracle 9i SQL Reference manual)是另一个很重要的知识来源。在他们的技术网站TechNet上(http://technet.oracle.com)你可以访问所有的Oracle在线文档。你必须注册一个账号,但是它是免费的。每个都应该在TechNet上有一个账号。

    步骤#3: 开始学习基本的数据库管理工作 –这难道不是你最开始在这里的原因?为什么它在列表的第三位?我们尝试着建造一个知识的金字塔,我强烈的感觉到一个人需要知道关系型数据库理论和SQL,并且在你学习如何进行基本的数据库管理工作时把他们当作工具来使用。这些工作包括启动和关闭数据库,备份和恢复数据库,以及创建/删除/修改数据库对象。对于Oracle数据库管理而言,在市面上有大量的书籍可以给你所期望的一个很好的体会。这本书是Oracle 9i DBA手册(Oracle 9i DBA Handbook by Loney on Oracle Press)。我知道的大多数DBA都在他们事业的早期不只一遍的阅读过这本书。这里,你应该同时阅读和理解Oracle 9i 概念指导,Oracle 9i管理员指导,以及Oracle 9i备份与恢复指导(Oracle 9i Concepts Guide, the Oracle 9i Administrator’s Guide, and the Oracle 9i Backup and Recovery Guide)都来自Oracle文档。

    步骤#4: 阅读,阅读,再阅读 –由于你才刚开始你的DBA职业生涯,因此你正在开始为你的技能奠定基础。这需要一段很长的时间去形成,吸收和领会所有你将学到的知识。毫无疑问的,比你资深的DBA由许多工作要做,因此他们可能不会总是腾出大量时间辅导你的学习。你不得不靠自己学习很多东西。这就是阅读的目的。市面上有许多书籍可以解答许多数据库相关的话题。Oracle Press是Oracle公司的官方出版社,有大量的Oracle相关书籍。同时也有其他的出版社,如Wrox Press 和 O’Reilly Press。你也可以找到Oracle文档来阅读。并且还有许多网站和新闻组。尽可能多的读书使你能够继续下去。还有,不只一遍的阅读它们可以使你吸收你第一次阅读时错过的内容。

    步骤#5: 创建测试案例 –我经常看到初学者问一些很基础的问题,其实假如他们花一些时间来考虑,这些问题都是很容易解答的。毫无疑问的,在你开始学习Oracle的时候你会有许多的问题。看看这些问题你能不能自己回答出来。例如,我又一次被问到能不能向有唯一性约束的列中插入空值。最开始,这看上去也许不是很容易回答的问题。但它却是非常容易去试验的!只需要创建一个简单的表。在其中的一列,假如唯一性约束。尝试着在该列插入一个空值。有效么?你应该能够非常容易的回答出这个问题了。那么,为什么要创建这些案例呢?一个原因是这样做可以提高你解决问题的能力。创建这些案例需要的技能就是解决问题用到的技能。解决问题的技能将会对你的DBA事业有很大的帮助。另一个原因是随着你的事业的发展,你将经常需要创建更复杂的测试案例以便保证数据库和应用程序的成功。在将来,甚至简单的测试案例也可以组成更复杂的数据库和应用程序分解。

    步骤#6: 找一个良师 –一个良师能够为你的DBA生涯(或者其它类似的职业)引领方向。他们能够给你指示,回答问题以及在你的DBA的成长过程中帮助你节约一些时间。但愿这篇文章能够在你事业发展的一段时间内起到良师益友的作用。假如你与一名资深的DBA共同工作,那么那个人应该有责任为你的事业进行有益的指导。你也可以同时选择其他的人指导你。

    步骤#7: 参加本地用户群 –许多跨国家的城市有本地用户群,他们定期聚会讨论数据库相关的话题。假如可能,参加其中一个本地用户群。这将给你一个与他人相互交流的很好的方法。

    我如何能够从一名DBA初学者变为一个具有中级水平的DBA?

    你已经成为DBA一段时间了,你现在希望你的技术水平提高一阶么?下一步该怎么做?首先,往回看前面的部分,确认你已经完成了所有的步骤。彻底理解SQL语言是十分重要的。理解关系型数据库理论和掌握基本的数据库管理任务也是非常重要的。到如今,你应该阅读文档和其他书籍到已经郁闷了。假如没有,那么你还没准备好继续深造,增长你的DBA的技术水平。假如你已经准备好继续了,我已为你的继续深造准备了一些方法。

    步骤#1: 学习操作系统和你的服务器硬件 – 正如我前面所说,数据库存在于操作系统和服务器硬件之上。理解这些组成部分如何工作是很必要的。你应该知道如何与特殊的操作系统相合。你如何删除或者编辑文件?假如你的操作系统是Unix,你应该掌握命令行以及Unix命令如何辅助你工作。对于运行在Windows或其他操作系统上而言也是一样的。你同时需要对服务器的硬件有一定的了解。物理内存和虚拟内存有什么区别?RAID是什么以及不同的级别是如何产生影响的?为什么数据库喜欢更多的物理硬盘而非一个大硬盘卷?你需要知道这些事情以便你能够容易的与系统管理员进行如何配置好你的服务器以便使它能够充分的支持数据库方面的交谈。

    步骤#2: 学习应用程序设计因为它与数据库相关 – 如前面所述,数据库存在于操作系统与数据库应用程序之间。你真的需要这两者。SQL语言是如何帮助创建好的应用程序的?绑定变量是什么并且为什么他们很重要?Tom Kyte 写了一本非常好的书,在Oracle应用程序设计上给出了很好的建议。他的Expert One-on-one Oracle书可在 Wrox Press找到。我强烈推荐阅读此书。他详细的叙述了那些能够生成和破坏Oracle应用程序的东西。你需要知道这些,因为你的应用程序开发人员希望从你这里得到指导和数据库知识。学习任何与应用程序设计有关的知识。也许参加一个关于软件工程,操作系统或数据结构的课程班会有好处。

    步骤#4: 取得认证 – 也许你的工作并不需要,但是取得认证一定对你有益。作为DBA的每一天里,你学到了许多新的和令人激动的事情。也许在你职业生涯的这段时间里,有几天你没学到任何新的东西。但你仍然有很多要学习。成为一名OCP(Oracle Certified Professional) DBA要求你必须已经学到了数据库管理所有方面的基础。我发现在OCP考试的学习过程中,我学到了在我工作中从未接触过的东西。一次我学到了我从未碰到过的一个特殊课题,在后来的日子里我就能够使用那个知识解决问题。假如我从为在OCP考试中学倒它,那么我永远也不会用那种特殊的方法去解决问题。这已经一次次的发生在我的面前。有的人可能会说认证实际上真的不值得。我要说它只会对你有益无害。所以,去取得认证吧!

    步骤#5: 获得一个资源库 – 在前面的部分中,我指出每个DBA都应该在Technet上有个账号。这是你其中一个主要资源。但是同时还有许多其他资源。很多人共享他们的Oracle知识。假如你还没有开始,你应该用网络浏览器去搜索并收集很多Oracle资源。愿意的话,你可以从访问我的网站(http://www.peasland.net)开始。下面是一些Oracle DBA必须了解得网站列表:
    Ask Tom – http://asktom.oracle.com
    Jonathan Lewis web site – http://www.jlcomp.demon.co.uk/
    Ixora (Steve Adams) – http://www.ixora.com.au
    Orapub – http://www.orapub.com
    Metalink (Oracle支持网站) – http://metalink.oracle.com

    还有许多其它的好网站。

    步骤#6: 开始在不同的新闻组和论坛上交流 – 也许你已经发现了他们,但假如现在你还没有那么是时候去开始了。有许多的新闻组和论坛可以回答你的任何Oracle问题。在Oracle群落里还有许多高手愿意和你共享他们的知识。你所要做的就是提问。下面是一个列表包含了可以开始交流的最好的因特网团体:

    Usenet newsgroups – comp.databases.oracle.server 和 comp.databases.oracle.misc 是两个可以交流的非常著名的世界性的新闻组。他们拥有大量的针对Oracle问题的交流卷宗。观看这些组的最好的方法式使用新闻广播员。但是假如你想通过基于web的方式访问,也可以通过Google搜索引擎搜索它。 (http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=comp.databases.oracle)
    Quest Pipelines – 当他们在最开始还属于软件提供商RevealNet的时候,被称为the RevealNet Pipelines。现在,Quest购买了RevealNet 并且拥有Pipelines 。因为Pipelines是中等的,所以这些是我最喜欢的。你可以在这里找到Pipelines (http://www.quest-pipelines.com/index.asp)。

    观察别人是如何经历考验和磨难的是一件好事。假如你有问题,可以自由的在群里提出来。假如你要提出问题,通常应该包括一些信息,比如你的Oracle版本和Oracle运行的平台。这些将会得到有很大的差别的答案。假如你忘记了,会有人提醒你!甚至你不用提问也可以从其他人的答案中学到许多知识。我已经记不得多少次我之所以能够解决问题完全是因为我记得其他人在新闻组里问过相同的问题。

    我如何从一名具有中级水平的DBA转变为一名高级DBA?

    好,作为DBA你已经坚持不懈的努力了很长时间。你感到自己已经准备好往前再走一步。成为一名高级DBA需要什么?下面的部分将帮助你走下去。

    步骤#1: 阅读所有的文档 – Oracle文档通常并不是很容易阅读的。无数次,你翻阅文档只是为了要弄清整件事情。假如文档是最好的东西,那么那些站在你的书架里的Oracle书籍就不会有市场。但是文档确实包含了一些无法在任何其他地方找到的信息。例如,你无法找到每一个专门的INIT.ORA参数或V$视图的详细说明。书本上也许会涉及一部分,但是Oracle文档却包含它们所有。我遇到过一个非常厉害的高级DBA,他没有从头至尾的阅读过Oracle文档。这不是偶然的。Oracle文档是必须阅读的。也许到现在为止你已经读过Oracle概念指导十二遍了。但是当Oracle 10i发布了,你还要再次阅读。任何有关10i的新概念将在文档里记录。假如你真的想更上一层,那么,去阅读那些文档。不要逃避它。

    步骤#2: 成为一名专家 – Oracle数据库是一个非常复杂的东西。为了更上一层,你必须精通产品的许多组成部分。以备份与恢复开始。成为一名备份与恢复的专家。故意的破坏数据库然后察看如何恢复它。尝试以任何可能的方式破坏数据库然后查看还有没有可能恢复。你将彻底的理解备份与恢复的概念。在你成为了备份与恢复的专家以后,再去成为其他领域的专家。你会有无穷无尽的题目要去掌握。在你整个职业生涯中都保持如此。但是请记住,无论你有多么专业,在某些领域,某些人会在某些方面知道的比你多。不要带个人情绪。只是尽可能多的从那个人那里学到知识。

    Route #3: 积极参加新闻组,论坛和用户组 – 在前面,我提过为什么不同的新闻组和论坛是学习新知识的很好的地方。现在轮到你进行下一步并且去回答任何你能够回答的问题。你将会惊讶于在这过程中你能学到那么多!

    Route #4: 写白皮书并且展示它们 – 这与前面提到的方法类似。首先,共享你拥有的知识是很重要的。假如你的职业生涯已经走到这一步,那么从某种意义上讲,是离不开他人的贡献的。所以,现在是你为他人奉献的时候了。第二,当你企图共享你的信息的时候会有令人惊异的事情发生。在你要用清楚的,简练的语言表述问题以便其他人能够使用时,那些信息在你的头脑里经过了一个令人瞠目的过程。这个过程使你巩固了知识,这是无法通过其它方法进行的。所以在白皮书中共享那些信息,讨论会,以及新闻组和论坛都是你学习和使你的能力更上一层的非常好的方法。顺着这条路,你应该作两件事。第一,认识到你将会犯错误。其他人将会很高兴的指出那些错误,有时在某种意义上那并不是很好。不要企图掩藏你的错误。承认它们并从它们那里学习。第二,学会说你不知道答案而不是企图以欺骗的方式通过。人们早晚会知道你在企图蒙蔽他们。简单的告诉他们现在你对答案并不肯定,但你会在查到答案后回来告诉他们。假如你时刻谨记这两件事,你就不会违背你的诚实而且你将成长为一名职业的IT人。

    步骤#5: 成为解决Oracle问题的专家– 高级DBA通常都是被看作是解决复杂的Oracle问题的人。你将会用到你所有的技术来解决许多问题,这些技术都是你的职业生涯中积累下来的。我前面提到的任何事都将会在解决问题的过程中用到;文档,书籍,新闻组,测试案例,和其它DBA都将辅助你解决问题。

    步骤#6: 成为性能调优的专家– 高级DBA通常都是被看作是调整数据库和应用程序性能的人。假如你是高级DBA但是你却不能分析性能瓶颈,那么你的公司将会到别处寻找这些服务。

    步骤#7: 成为承载能力计划的专家– 高级DBA通常都是被看作是根据数据增长量和交易增长来计划数据库承载能力的人。高级DBA需要在影响应用程序性能以前发现系统瓶颈。例如,DBA应该知道在数据库将可用的磁盘空间用完以前预置更多的磁盘空间。不密切关注承载能力计划将会导致生产数据库宕机。

    步骤#8: 密切关注新的技术– 高级DBA应该对IT界的关数据库技术的未来有好的建议。有什么可用的技术可以帮助数据库?例如,学习存储领域网的优缺点以及如何把它们应用到数据库系统。有什么技术在不远的将来可以用,哪些能够帮助我们?例如,写这篇文章的时候,linux操作系统正在变得越来越流行。Lunix会给你的数据库操作系统平台带来些什么?它能为你的公司工作么?

    结论

    从获得第一份工作,到从一名初级的DBA成长成一名高级DBA,我希望这篇文章在如何度过你的职业生涯的各个阶段方面给了你一些建议。无论你现在处在你的DBA职业生涯的哪一阶段都可以用到这篇文章。






    oracle的入门心得


    oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。

    一、定位
        oracle分两大块,一块是开发,一块是管理。
       开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭J;
       管理则需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会down掉整个数据库,相对前者来说,后者更看重经验。

       因为数据库管理的责任重大,很少公司愿意请一个刚刚接触oracle的人去管理数据库。对于刚刚毕业的年轻人来说,可以先选择做开发,有一定经验后转型,去做数据库的管理。当然,这个还是要看人个的实际情况来定。
    二、学习方法
    我的方法很简单,就是:看书、思考、写笔记、做实验、再思考、再写笔记

    看完理论的东西,自己静下心来想想,多问自己几个为什么,然后把所学和所想的知识点做个笔记;在想不通或有疑问的时候,就做做实验,想想怎么会这样,同样的,把实验的结果记下来。思考和做实验是为了深入的了解这个知识点。而做笔记的过程,也是理清自己思路的过程。

         学习的过程是使一个问题由模糊到清晰,再由清晰到模糊的过程。而每次的改变都代表着你又学到了一个新的知识点。

        学习的过程也是从点到线,从线到网,从网到面的过程。当点变成线的时候,你会有总豁然开朗的感觉。当网到面的时候,你就是高手了

        很多网友,特别是初学的人,一碰到问题就拿到论坛上来问,在问前,你有没有查过书,自己有没有研究过,有没有搜索一下论坛?这就叫思维惰性。由别人来回答你的问题,会让你在短时间内不费劲地弄懂这个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点,更重要的是在研究的过程会提高你解决问题和分析问题的能力。总的来说,没有钻研的学习态度,不管学什么东西,都不会成功的。
           
        当然,初学的人很多时候是因为遇到问题时,无从下手,也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别人是如何分析这个问题?从哪里可以找到相关的资料?而不是这个问题的答案是什么?授人以鱼不如授人以渔。

       下面我讲下我处理问题的过程

       首先要知道oracle的官方网站:www.oracle.com 这里有oracle的各种版本的数据库、应用工具和权威的官方文档。其次,还要知道http://metalink.oracle.com/ 这里是买了oracle服务或是oracle的合作伙伴才可以进去的,里面有很多权威的解决方案和补丁。然后就是一些著名网站:asktom.oracle.com www.orafaq.net, www.dbazine.com。这里有很多经验之谈。

          遇到问题了。如果是概念上的问题,第一时间可以找tahiti.oracle.com,这里会给你最详细的解释。如果在运行的过程中出了什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言。

    三、oracle的体系
    oracle的体系很庞大,要学习它,首先要了解oracle的框架。在这里,简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识。

    1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)
    控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件
    数据文件:存储数据的文件
    重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件
    参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数
    归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
    密码文件:认证哪些用户有权限启动和关闭Oracle例程

    2、逻辑结构(表空间、段、区、块)
    表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。
    段:是对象在数据库中占用的空间
    区:是为数据一次性预留的一个较大的存储空间
    块:ORACLE最基本的存储单位,在建立数据库的时候指定

    3、内存分配(SGA和PGA)
    SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
    PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收

    4、后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)
    数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件
    日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件
    系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
    进程监控:负责在一个Oracle 进程失败时清理资源
    检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
    归档进程:在每次日志切换时把已满的日志组进行备份或归档
    服务进程:用户进程服务。
    用户进程:在客户端,负责将用户的SQL 语句传递给服务进程,并从服务器段拿回查询数据。

    5、oracle例程:Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。

    6、SCN(System Change Number):系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
    四、深入学习


    管理:可以考OCP证书,对oracle先有一个系统的学习,然后看Oracle Concepts、oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER等等。

    开发:对于想做Oracle开发的,在了解完Oracle基本的体系结构之后,可以重点关注PL/SQL及Oracle的开发工具这一部分。 PL/SQL主要是包括怎么写SQL语句,怎么使用Oracle本身的函数,怎么写存储过程、存储函数、触发器等。 Oracle的开发工具主要就是Oracle自己的Developer Suite(Oracle Forms Developer and Reports Developer这些),学会如何熟练使用这些工具。

    五、开发经验及常见问题


    常见Oracle安装问题说明 [当前帖子数:5]
    1.问题集锦一
    2.Oracle9i在RedhatLinux8.0中的安装详细步骤
    3.问题集锦二
    4.如何配置和使用iSQL*Plus
    5.Oracle9i中Data Guard的新特性以及配置使用

    常见Oracle入门问题说明 [当前帖子数:5]
    1.关于Linux下DBSTART和DBSHUT脚本中需要修改的地方
    2.如何将EXP出来的数据IMP进不同的表空间
    3.如果系统中安装了多个数据库实例,如何修改默认SID
    4.Oracle9i初始化参数注解
    5.关于Oracle数据库的升级(Migration)

    常见Oracle开发问题说明 [当前帖子数:0]

    Oracle技巧与提示 [当前帖子数:3]
    1.如何修改数据库的字符集
    2.如何查看Control File中保存的内容
    3.Oracle9i(Version 9.2)SYS_CONTEXT函数的用法以及同USERENV函数的比较
    六、共享


    介绍几本oracle入门的好书

    oracle官方文档:《concept》上面讲了oracle的体系和概念,很适合初学者看。

    OCP的教学用书,也就是STUDY GUIDE(SG)。在我的FTP上有down。

    Oracle8i 备份恢复手册
    Oracle8高级管理与优化
    Oracle8i PLSQL程序设计
    Oracle8数据库管理员手册
    以上书本都是机械工业出版社出版。



    介绍几个网站
    http://tahiti.oracle.com      oracle的官方文档
    http://metalink.oracle.com/   oracle的技术支持网站。需要购买Oracle服务才能有一个帐号,才能登陆,有大量的Knowledge Base,大量问题解决经验。
    http://www.oracle.com   oracle的官方网站,可以在这里down oracle的软件、官方文档和获得最新的消息
    http://www.dbazine.com/    Oracle的杂志
    http://asktom.oracle.com   
    http://www.orafaq.net/ 
    http://www.ixora.com.au/
    http://www.oracle-base.com
    http://www.dba-oracle.com/oracle_links.htm




    www.boobooke.com最新网站
    www.boobooke.com/index_old.php这上面视频多又全
    http://www.boobooke.com/bbs/viewthread.php?tid=1857&extra=page%3D1
    小布老师Oracle 9i DBA Fundamentals I的系列视频下载地址
    在线播放地址:
    第一讲:  
    http://www.boobooke.com/v/bbk1109
    第二讲:  
    http://www.boobooke.com/v/bbk1110
    第三讲:  
    http://www.boobooke.com/v/bbk1112
    第四讲:  
    http://www.boobooke.com/v/bbk1114
    第五讲:  http://www.boobooke.com/v/bbk1115
    第六讲:  http://www.boobooke.com/v/bbk1148
    第七讲:  http://www.boobooke.com/v/bbk1149
    第八讲:  http://www.boobooke.com/v/bbk1150
    第九讲:  http://www.boobooke.com/v/bbk1151
    第十讲:  http://www.boobooke.com/v/bbk1152
    第十一讲: http://www.boobooke.com/v/bbk1153
    第十二讲: http://www.boobooke.com/v/bbk1154
    第十三讲: http://www.boobooke.com/v/bbk1161
    第十四讲: http://www.boobooke.com/v/bbk1162
    第十五讲: http://www.boobooke.com/v/bbk1163
    第十六讲: http://www.boobooke.com/v/bbk1164
    第十七讲: http://www.boobooke.com/v/bbk1165
    第十八讲: http://www.boobooke.com/v/bbk1166
    第十九讲: http://www.boobooke.com/v/bbk1167
    第二十讲: http://www.boobooke.com/v/bbk1168
    第二十一讲: http://www.boobooke.com/v/bbk1169
    第二十二讲: http://www.boobooke.com/v/bbk1170
    第二十三讲: http://www.boobooke.com/v/bbk1171
    第二十四讲: http://www.boobooke.com/v/bbk1179
    第二十五讲: http://www.boobooke.com/v/bbk1180

    下载地址:
    第一讲:  http://www.boobooke.com/v/bbk1109.zip
    第二讲:  http://www.boobooke.com/v/bbk1110.zip
    第三讲:  http://www.boobooke.com/v/bbk1112.zip
    第四讲:  http://www.boobooke.com/v/bbk1114.zip
    第五讲:  http://www.boobooke.com/v/bbk1115.zip
    第六讲:  http://www.boobooke.com/v/bbk1148.zip
    第七讲:  http://www.boobooke.com/v/bbk1149.zip
    第八讲:  http://www.boobooke.com/v/bbk1150.zip
    第九讲:  http://www.boobooke.com/v/bbk1151.zip
    第十讲:  http://www.boobooke.com/v/bbk1152.zip
    第十一讲: http://www.boobooke.com/v/bbk1153.zip
    第十二讲: http://www.boobooke.com/v/bbk1154.zip
    第十三讲: http://www.boobooke.com/v/bbk1161.zip
    第十四讲: http://www.boobooke.com/v/bbk1162.zip
    第十五讲: http://www.boobooke.com/v/bbk1163.zip
    第十六讲: http://www.boobooke.com/v/bbk1164.zip
    第十七讲: http://www.boobooke.com/v/bbk1165.zip
    第十八讲: http://www.boobooke.com/v/bbk1166.zip
    第十九讲: http://www.boobooke.com/v/bbk1167.zip
    第二十讲: http://www.boobooke.com/v/bbk1168.zip
    第二十一讲: http://www.boobooke.com/v/bbk1169.zip
    第二十二讲: http://www.boobooke.com/v/bbk1170.zip
    第二十三讲: http://www.boobooke.com/v/bbk1171.zip
    第二十四讲: http://www.boobooke.com/v/bbk1179.zip
    第二十五讲: http://www.boobooke.com/v/bbk1180.zip

    .......


     

  • 【转】在进度较紧的情况下,如何开展测试工作?

    2009-07-29 16:17:37

    转自:

    http://www.51testing.com/html/77/n-141577.html

    问题描述:在进度较紧、资源也不是十分充足的情况下,如何开展测试工作

    精彩答案:

    会员:allenzgw

      首先,我觉得这个问题是一个非常具有现实意义的问题,特别是国内企业,这类问题很严重,相对国外企业项目也会遇到这类问题,但是相对而言更容易解决。基本上在任何一个项目都没有说是人员充足,时间充足的,这个永远都是多多益善。主要谈一下我自己的经验和看法:在进度较紧、资源也不是十分充足的情况下,如何开展测试工作

      1、对外部,对客户,如果这个项目是在某个时期才发现时间紧迫,或者出现什么问题才导致这个时间相当紧迫的,那首先第一点,我们要让客户经理,拖住客户,向客户那边找各种理由多要时间,当然,不一定要告诉客户我们真正的困难,因为也许你说出来,客户更要着急。即使不能拖时间,也要最起码不让客户再压缩时间。如果是非常正规的客户,你们也是非常正规的大公司,在和另外一个公司合作,真的有问题,而且很难隐藏的住,那就跟客户明说,并且寻求客户的帮助,很多国外大公司还是相当开明的,并且喜欢坦诚的这种合作,喜欢共同克服问题,这样效益也是最高的。当然这个看具体情况。这个做目的是稳住客户

      2、对内,分3部分看:

      1)向领导说明情况(后面会提到不少问题需要老板知道,并且决定,需要首先跟你的老板说明情况)。然后在继续要人手,当然,你要确保人手进来要能提高进度,而不是延慢进度,带来更多问题,最好心有某些人选,无论给不给,先要再说。

      2)对开发团队,要求开发协助,开发人员其实很清楚自己的程序那个地方可能有问题,让他们自己说出来,省的你去找了。然后同时需要问开发很多具体的问题,这个我们下面谈测试团队内部问题是会涉及到和开发的合作。这里目的先跟开发打好招呼,需要分一定时间你们合作,到时候不能让他们赖掉。同时跟QA团队也打好招呼,先预告有问题了,在下面具体的论述中我说明谈啥内容。

      3)对测试团队内部的处理,这个是重点:

      a)首先我们需要搞清楚,我们处理这类问题的原理,我们的目标是我们要在这,比如剩下的1各月时间内,产生最大的效益。同样的一个月,也许我们以前能发现60%的缺陷,假设其中缺陷严重从最严重到最不严重的程度比例是(1:3:6),那现在我们的目标是,能够发现70%的缺陷,缺陷的比例是 (1。5:4:4。5),就是说达到投入产出比例最高,尽量把所有最严重的问题都能找出来,这个是我们的目的。然后剩下30%的缺陷没有发现怎么办?没关系,首先他不够严重,我们遗留下来的缺陷,是那些客户绝对不会在刚上线使用的前,比如1个月之内会发现的缺陷,我们可以利用上线之后1个月的时间,继续测试这个项目,找出剩下的20%,然后打补丁过去,在客户还没有完全发现这些缺陷之前,我们这个补丁包过去就全部搞定了。当然这个过程需要老板审批,老板决定后面上线后能继续留出多少时间来给这个系统测试,这个也需要先跟老板打好招呼。然后如何做到,下面说具体的方法:

      b)根据80-20原理,80%的重要缺陷是发现在20%的代码中的,实际中可能不是完全一致。但是这对我们打到最高的效益有相当的指导意义。

      c)分析历史数据,或者从QA那里得到相关的数据,查看同类型的产品,或者本产品的以前版本,发现的各种类型的缺陷的分布,然后和我们当前的测试数据比较,看看我们的具体的未发现的问题主要可能在什么地方,然后重点测试。这里其实能分析出来的问题非常多,具体内容可以单独另辟文章讨论

      d)和系统分析员、开发负责人一起分析,各个模块的重要性,哪些地方关联度最高,缺陷影响最大,这些地方一定要测试。就是把模块按照重要程度排序,然后测试顺序按照这个顺序测试,这可以保证测试完最重要的模块,和主流程。和需求人员、维护人员沟通,找出以前的上线版本经常出现的问题,现在尽早关注搞定。

      e)测试过程,指导测试人员,对于某些非主流程模块,小缺陷不需要写入缺陷库,找出来记住就好了,不影响功能的话,不写,直接写影响功能的缺陷,因为写缺陷还是消耗不少时间的,还有有些缺陷是否可以直接跟开发讲,自己同时记下来,但是不写到缺陷库,我这里是说可以考虑这么做,但是这样的话对后期的缺陷分析有一点问题,后期也可以补充,这些方法可以考虑,自己权衡

      f)跟项目总负责人,QA打好招呼,裁剪流程,某些不必要的文档工作,先等等再说,文档的中间过程可以尽量省略,但是最后的重要讨论结果最好记录

      g)项目进行过程中,注重沟通而不是文档,加强口头沟通,并加强沟通效率,面对面的沟通能减少很多非必要的时间消耗,并且问题说明的更加清楚。这个刚开始要和开发负责人打好招呼,否则这么多沟通,人家不一定愿意,可能他会认为这样浪费了他们时间,这个一定要达成共识,当然,你确实要保证沟通高效

      h)优化项目内部测试人员安排,一般情况下,我们都是经验丰富的人,能力强的人做比较复杂的模块,能力一般的人,做简单的模块,这时候,我们可以考虑时间效益,是否需要让一个能力强的对业务熟悉去做相对简单的模块,这样可能只需要50%的时间,让那个能力一般的做难的部分,可能只多用30%的时间,这样你还多赚了20%的时间。尽管有一定风险,但是你可以考虑,这里我只是说考虑这些因素,考虑优化人员的安排。

      i)以前可能测试人员对业务的了解都需要看需求文档等等,但是,在目前时间紧迫的情况下,可以考虑直接让需求人员来讲解,然后测试理解,再复述给需求人员听,然后需求人员再问他们问题,通过这种方式来确保对业务的理解,同样对开发也是尽量多口头沟通,少书面沟通。

      3、以上步骤,同步进行,自己作为项目测试负责人,一定要心里有谱,同时尽量放权,让每个人责任清晰明确,意识到当前的形势,尽早反馈他们发现的问题,提出各类风险。自己做主要掌控全局的人,同时抽查各个地方的质量。

      总体就这么多吧,实际操作完全看个人能力和以前对队伍的培养了。因为平时是流程起作用,但是流程的弹性不够,关键时刻一定是人的因素更重要。

    版权声明:51Testing软件测试网原创作品,转载请保留链接,标明本文原始出处、作者信息和本声明,否则将追究法律责任。

    本文出自51Testing软件测试网,感谢会员allenzgw在每周一问(09-04-07)中的精彩回答。
    http://bbs.51testing.com/forum-157-1.html

  • 【转】WEB安全测试所需的基础知识

    2009-07-29 16:14:57

    转自:

    http://bbs.51testing.com/thread-121779-1-1.html

    --说明:下文是从其他地方看到的关于WEB安全测试所需的基础知识纲要,大家可以结合本版面的其他WEB安全测试帖子一起学习
    第一章:B/S架构体系安全渗透测试基础
    1. HTTP协议基本概念
    (1)介绍HTTP标示URL
    (2)HTTP响应状态码
    (3)HTTP协议传输内容
    2. WEB应用认证基本概念
    (1)HTTP常见认证机制
    (2)BASE64编码介绍
    3. B/S架构常见安全问题
    (1)拒绝服务攻击基础
    (2)Smurf攻击模型
    (3)Fraggle攻击模型
    (4)SynFlooding攻击模型
    (5)碎片攻击
    4. 嗅探理论基础
    (1)网络嗅探原理
    (2)密码嗅探介绍
    (3)协议分析基础介绍
    第二章:B/S架构体系安全渗透测试攻击基础
    1. B/S架构结构端口扫描分析
    (1)SuperScan工具
    (2)Nmap端口扫描工具

    2. 输入验证攻击基础知识
    (1)输入验证攻击基本概念
    (2)Unicode漏洞介绍
    (3)输入验证二次解码漏洞介绍
    3. ASP脚本注入基础知识
    (1)ASP脚本注入基本概念
    (2)ASP脚本注入检测
    (3)ASP脚本注入信息获取
    (4)AASP脚本注入提权
    4. PHP脚本注入基础知识
    (1)PHP脚本注入基本概念
    (2)PHP脚本注入检测
    (3)PHP脚本注入信息获取
    (4)PHP脚本注入提权
    5.跨站脚本原理及防御
    (1)跨站脚本基本概念
    (2)跨站脚本实例
    (3)跨站脚本解决方法
    6、 Web权限提升分析
    (1)Web权限提升基本概念
    (2)WeBShell上传方法
    (3)Web权限提升7大方法:密码破解、本地提权、Gina木马…
    7.APR嗅探基础
    (1)APR协议概念
    (2)APR欺骗攻击
    (3) 交换域网络嗅探
    第三章:B/S架构体系安全渗透测试攻击与测试工具
    1、 攻击工具介绍
    (1)注入攻击工具原理
    (2)注入攻击工具分析
    (3)攻击测试平台搭建
    2.注入攻击工具使用练习(ASP+SQL Server注入攻击实战)
    (1)注入攻击工具使用
    (2)域名检查攻击工具使用及域名信息查询用
    3.拒绝服务攻击工具使用练习
    (1)SynFlooding攻击工具测试
    (2)UDPflood攻击工具测试
    (3)畸形DDOS攻击工具
    4.嗅探攻击工具使用练习
    (1)ARP欺骗攻击工具 密码嗅探练习
    (2)嗅探协议分析练习
    5. B/S安全评估工具使用练习
    (1)Web脚本评估工具安装
    (2)B/S架构扫描
    (3)评估报告分析撰写模版
  • 【转】 Linux中软件包依赖 烦到你了么

    2009-07-01 10:18:22

    转自:

    http://www.51testing.com/html/24/n-133324.html

       在Linux系统中,软件包的依赖关系让人很是头疼。如在安装Linux系统时,不是选择安装所有的软件包。在安装完Linux系统后,若再进行软件安装的话,就可能会遇到一些依赖关系的问题,如在安装PHP软件包时,系统就可能会提示一些错误信息。说需要其他的一些软件包的支持。其实类似的情况在Windows中也会遇到。如有时候安装一些应用软件可能对浏览器的版本会有要求或者要求操作系统的补丁达到SP2以上等等。不过在微软操作系统上这种软件依赖关系要比在Linux系统中少见的多,而且处理起来也方便一些。

      那么Linux操作系统中如果遇到这种软件包依赖关系的话,该如何处理呢?在谈这个具体的解决措施之前,我先跟大家说说在哪些情况下容易出现软件包的依赖关系问题。

      一是在操作系统安装的时候,没有选择全部的软件包。大部分时候出于安全或者其他方面的原因,Linux系统管理员往往不会选择安装全部的软件包。而只是安装一些运行相关服务所必要的软件包。但是有时候系统管理员可能并不清楚哪些软件包是必须要装的,否则后续的一些服务将无法启动;而那些软件包则是可选的。由于在系统安装的时候很难一下子弄清楚这些内容,故在Linux系统安装完毕后,再部署其他一些软件包的时候,就容易出现这个问题。

      二是在Linux服务器上追加其他的一些应用服务时,容易出现类似的问题。如有一次企业需要使用一个Oracle数据库,我就在原先的文件服务器上安装Oracle数据库。但是在Linux操作系统上安装Oracle服务器是一个很头疼的问题,需要安装不少的软件包。而我一开始部署Linux文件服务器的时候又不知道后来需要安装Oracle数据库,故不少的软件包都没有装。而且后来发现,不少的软件包其实在Linux安装盘中还没有,需要自己到网上去下。所以,如果要在原先已经部署好的Linux服务器中追加一些应用服务时,很容易出现这个软件包的依赖问题。

      其实解决这个软件包的依赖问题说简单也不简单,说复杂也不复杂。我下面总结了几个方法,各位若有需要的话可以借鉴一下。

      一、根据错误提示信息在安装光盘中寻找。

      在安装软件包时如果遇到软件依赖关系问题时,通常情况下系统都会提示相关的信息。如提示“libgd.so.1.8 is needey by php-4.2.2-17”等等。这就表示安装PHP程序时,需要先安装libgd.so软件包。当遇到这个问题时,我建议系统管理员可以根据这个提示信息,先从Linux系统的安装盘中查找一下是否有这个软件包。

      如上图所示,在Linux安装盘中的RPMS目录下面就存放着大量的软件包。通常情况下,像上面的libgd.so等常见的软件包都可以从这个光盘中找到。所以系统管理员根据系统的错误提示信息,就可以了解到安装某个软件之前先要安装那个软件包。然后从系统光盘中找到这个软件包,并进行安装即可。另外需要说明的是,向RedHat操作系统,如果采用的是CD安装盘,则其可能有很多张光盘。而这些软件包往往不是存储在一张CD光盘中的。不过可以肯定的是,每张光盘下都会有RPMS这个目录。当系统管理员不知道某个软件包存储在哪个盘中的话,则可以一张张的找过去。虽然比较麻烦一点,但是大部分情况下都会有收获的。

      不过如果采用这个方法有一个限制。像安装Oracle这种大型的应用软件就不怎么适用。因为安装这种大型的软件本身就比较花费时间。如果等到安装失败之后再根据错误提示来安装软件包的话,则重复来重复去会浪费很多的时间,而且也会让系统产生很多的垃圾文件。为此除非是一些小型的软件包,否则的话,最好还是根据下面我要介绍的方法来做,以节省软件安装的时间。

      二、参考官方的文档。

      通常情况下,一些软件的官方文档会说明安装它们的软件需要哪些软件包。如在安装Oracle数据库时,就必须需要安装不少的软件包。到底需要安装哪些软件包,在Oracle的官方网站上都会有详细的说明。我在安装Oracle数据库时,就先安装这个说明,一一来验证Linux系统中是否安装了这些软件包。如果没有安装的话,就马上装上去。此时各位Linux系统管理员不要抱着侥幸心理,已经不安装不会有大问题,这是大错特错了。对于Oracle公司官方网站建议的软件包在Oracle数据库系统安装之前必须一五一十的安装上去。否则的话轻则导致数据库安装失败,重者的话会导致后续数据库运行不稳定。

      其实不光是Oracle数据库系统,其他的一些应用软件对Linux系统都会有类似的要求。它们要求在安装它们的应用软件之前,Linux系统必须安装有某些软件包,否则的话安装就会失败。所以我建议各位Linux系统管理员,在安装这些软件之前,最好先到官方网站上去寻找类似的文档,然后对照文档的内容去验证Linux系统是否安装了这些软件包。如此的话就可以避免软件包依赖关系的问题。另外,在网络上也可以寻找到很多有用的价值。有些安装过这个软件的Linux系统管理员,会把自己安装过程中系统遇到的软件包依赖关系列举出来,会一一说明需要先安装哪些软件包。这些网络上的文档虽然其专业性可能没有官方提供的文档那么专业。但是对我们来说也具有很大的参考价值。

      三、从专业网络上查询。

      为了正确安装某些软件包,需要安装一些文件。可是有时候系统管理员可能根据系统的提示还不能够确定到底安装哪些软件包才会有这些文件。特别是对于一些不常用的软件包或者系统管理员第一次接触的软件包往往会遇到这种问题。此时,系统管理员就可以到一些专业的网站上去查询。这里我给大家介绍一个很不错的网站,即http://rpmfind.net。系统管理员只需要在这个网站搜索的地方输入需要的文件名字,如libgd.so,则搜索结果中就会显示需要安装哪个软件包才具有这个文件。找到这个软件包的名字之后,只需要从光盘或者网络上下载这个软件包进行安装即可。当然,在安装这些软件包的时候,可能还会遇到其他软件包依赖关系的问题。如安装php软件包需要libgd.so文件,而这个文件属于gb软件包。但是在安装gb软件包时,可能这个软件包跟其他软件包又具有依赖关系,又需要安装其他软件包才行。此时系统管理员就需要耐心的一一按顺序进行解决了。

      可见大部分情况下,在遇到软件包依赖关系问题的时候,操作系统提供的文件名字与软件包名字都会有直接的联系。有可能文件的名字就是软件包的名字。但是有些时候文件的名字与软件包的名字会相差甚远。此时大部分系统管理员可能光凭文件名字无法找到对应的软件包。此时就需要借助笔者上面谈到的一些专业网站,去查询软件包的名字了。

      另外我还有一个小建议。当系统管理员安装了某个软件之后,如果存在软件包之间的依赖关系,则最好能够拿本子或者通过其他手段记录下来。因为在以后的工作中很有可能还会需要安装这些软件。如此的话,在下次安装的时候就不用这么麻烦了。可以对照以前的笔记直接安装需要的软件包。毕竟在同一个地方摔倒多次不是什么光彩的事情。

      以上这些就是我解决软件依赖关系问题的绝招。系统管理员过掌握了这些招数的话,则绝大部们的软件包依赖关系问题会迎刃而解。

  • 【转】linux 中 set,env,export,declare显示shell变量的区别

    2009-06-18 14:39:55

    说明:

    shell变量包括两种变量
    1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量
           A1="1234"
           delcare A2="2345"
    2.用户的环境变量:通过export语法导出shell私有变量,可以通过如下方法将其导出为用户环境变量
          A1="1234"
          export A1  #先定义再导出
          export A3="34"
    导出的用户环境变量可以在所有的shell中看到
     
     
    env显示用户的环境变量;
    set 显示当前shell定义的私有变量,包括用户的环境变量,按变量名称排序;
    export 显示当前导出为用户环境变量的shell变量,并显示变量的属性(是否只读),按变量名称排序;
    declare 同set 一样,显示当前shell的定义的变量,包括用户的环境变量。

  • [转] LINUX下安装ORACLE 10G

    2009-06-17 17:21:43

    ORACLE官方文档:

    http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html

      在linux下安装oracle是一件令人生畏的事情,其复杂程度远远超过安装linux操作系统本身。如果能够进行成功的安装oracle,那么同时也就顺便掌握了linux一些技术。本文介绍在redhat linux 下安装oracle 10g 的方法。在这里说明一下,Oracle 10g的g是grid 的缩写,意为网格,目前较为前沿的网络计算技术。

      Oracle 10g 对软硬件的要求都非常的高,所以要玩转的话的花不少银子。首先来看看它对硬件的要求:内存512兆(建议1G),cpu 主频2.0G以上,硬盘转速7200转以上(建议使用scsi硬盘),依此条件,我看买台服务器才行。其次是软件要求:在oracle 官方的文档里,对于x86系列支持的操作系统只有3种(radhat ES/AS 2.1(x86),redhat ES/AS 3(x86),unitedlinux1.0(x86) ),如果只有redhat 9也是可以安装的,不过要麻烦一点点。当然oracle 10g需要更多的软件模块才能进行安装,这些软件模块我将在后面逐一说明。在本例中,使用RedHat ES 3(x86)作为操作平台,并且安装了xwindow。

      接下来,我们检查是否符合oracle 10g 的安装要求,以表格的形式列出。首先是硬件情况。以root登录系统,并且启动x-window.如果用下表命令输出的值大于或等于建议值,请

      检查项目 命令/方法 建议值

      内存 #grep MemTotal /proc/meminfo 512MB

      交换分区 #grep SwapTotal /proc/meminfo 1GB

      /tmp目录空闲区 #df –k /tmp 400MB

      硬盘空闲空间 #df -k 4GB

      继续往下,检查软件需求。对redhat ES 3(x86),需要如下的软件包:

      · Gnu gcc package, gcc-3.2.3-2 or 更高

      下面的包也必须被安装:· make-3.79· binutils-2.11· openmotif-2.2.2-16· setarch-1.3-1 · compat-db-4.0.14.5· compat-gcc-7.3-2.96.122· compat-gcc-c++-7.3-2.96.122· compat-libstdc++-7.3-2.96.122· compat-libstdc++-devel-7.3-2.96.122

      为了保证系统满足需求,执行下面的步骤检查安装的linux版本和安装的套件。

      检查项目 命令/方法 建议值

      Linux 版本 #cat /etc/issue ES 3

      已安装的包 #rpm -q package_name 安装所需包(上表所列)

      到这里我们已经全面的检查了安装oracle 10g所要求的软硬件环境,接着我们就要为安装创建组和用户。

      下面的组和用户必须存在

      The oinstall group (the oracle inventory group)

      The dba group (the OSDBA group)

      The oracle user (the oracle owner)

      如果上面的组和用户不存在,用下面的步骤创建它们。(1)先查看这些组和用户是否存在:

      #grep oinstall /etc/group

      #grep dba /etc/group

      (2)创建安装oracle 所需的组和用户

      #groupadd osintall

      #groupadd dba

      #useradd –g oinstall –G dba oracle 检查一下oracle 是否属于组 oinstall 和 dba (#id oracle) 再给oracle 设置一个用户口令 #passwd oracle 输入两次密码。

      创建安装所需的目录 /u01/app/oracle (the oracle base directory), /u02/oradata (an optional default directory ),用下表的命令形式创建它.然后改变它的目录权限。

      创建目录 更改权限

      #mkdir –p /u01/app/oracle #chown –R oracle:Oinstall /u01/app/oracle /u02/oradata

      #mkdir –p /u02/oradata #chmod –R 755 /u01/app/oracle /u02/oradata

      配置内核参数,下表是oracle 推荐的内核参数值,请参考。

      Parameter Value File

      semmslsemmnssemopmsemmni 25032000100128 /proc/sys/kernel/sem

      shmall 2097152 /proc/sys/kernel/shmall

      shmmax Half the size of physical memory /proc/sys/kernel/shmmax

      shmmni 4096 /proc/sys/kernel/shmmni

      file-max 65536 /proc/sys/fs/file-max

      ip_local_port_range 1024 65000 /proc/sys/net/ipv4/ip_local_port_range

      确保当前的参数值大于或等于上表所列。那么怎样查看这些参数值呢?用命令 #/sbin/sysctl –a | grep <参数名>,例如查看semmsl,用 #/sbin/sysctl -a | grep sem,余下的与此类似。逐个察看这些参数值,如果参数值不满足要求,就需要修改它们。请完成下面这些步骤

      a.用文本编辑器,创建或者编辑/etc/sysctl.conf文件,添加或修改如下的行

      kernel.shmall = 2097152

      kernel.shmmax = 2147483648

      kernel.shmmni = 4096

      kernel.sem = 250 32000 100 128

      fs.file-max = 65536

      net.ipv4.ip_local_port_range = 1024 65000

      b.改变当前内核参数的值,用命令 #/sbin/sysctl –p 来实现。

      为了提高在linux系统上运行软件的性能,必须对oracle用户设置下列shell 限定。

      Shell Limit Item in limits.conf Hard Limit

      Maximum number of open file descriptors nofile 65536

      Maximum number of processes available to a single user nproc 16384

      现在创建这些限定:

      1. 加入下面的行到文件/etc/security/limits.conf

      * soft nproc 2047

      * hard nproc 16384

      * soft nofile 1024

      * hard nofile 65536

      2. 加入下面的行到文件/etc/pam.d/login ,假如它不存在的话

      session required /lib/security/pam_limits.so

      3.根据oracle 用户的默认shell,对默认 shell start-up文件作如下改变,如果是Bourne, Bash, or Korn shell,修改环境变量/etc/profile文件如下:

      if [ $USER = "oracle" ]; then

      if [ $SHELL = "/bin/ksh" ]; then

      ulimit -p 16384

      ulimit -n 65536

      else

      ulimit -u 16384 -n 65536

      fi

      fi

      如果是c shell,则环境变量文件 /etc/csh.login的修改值如下:

      if ( $USER == "oracle" ) then

      limit maxproc 16384

      limit descriptors 65536

      endif

      接下来挂接光盘,#mount /dev/cdrom /mnt/cdrom 。

      以oracle 用户名登录系统,配置oracle 用户的环境。以oracle 帐号用安装器来安装oracle,但是开始运行安装器之前,还得设定oracle用户的环境变量,因此必须:

      ● 设置shell startup文件的umask 为022

      ● 设置DISPLAY, ORACLE_BASE, and ORACLE_SID 的环境变量。下面这些步骤是对这些环境变量进行设置的方法:

      1、 开启一个终端会话

      2、 确认xwindow 能正常显示。#xhost +

      3、 改变用户为oracle. $ su – oracle

      4、 检查oracle用户的默认shell. $echo $SHELL

      5、 用文本编辑器修改oracle用户的环境变量

      ●bash shell on redhat

      $vi .bash_profile

      ●c shell

      %vi .login

      6、 把下面的行插入上面编辑的文件中

      umask 022

      7、 保存文件并退出

      8、 运行shell开始脚本:

      ●Bash shell on Red Hat $ . ./.profile

      ●C shell % source ./.login

      9、设置环境变量

      ●Bash shell

      $ ORACLE_BASE=/u01/app/oracle

      $ ORACLE_SID=sales

      $ export ORACLE_BASE ORACLE_SID

      ●c shell

      % setenv ORACLE_BASE /u01/app/oracle

      % setenv ORACLE_SID sales

      10、确认ORACLE_HOME and TNS_ADMIN 的环境变量不被用户设置

      ●Bash shell

      $ unset ORACLE_HOME

      $ unset TNS_ADMIN

      ●c shell

      % unsetenv ORACLE_HOME

      % unsetenv TNS_ADMIN

      11、再检验一下上面设定的环境变量是否正确。

      $ umask

      $ env | more

      哎呀!终于算是完成准备工作了,喝口水,伸伸懒腰。进入安装器(runInstaller)所在的目录,执行 ./runInstaller 按步骤进行安装即可。

  • [转] RedHat Linux AS 和ES的区别

    2009-06-16 15:15:26

    概述

     

    Redhat有两大Linux产品系列,其一是免费的Fedora Core系列主要用于桌面版本,提供了较多新特性的支持。另外一个产品系列是收费的Enterprise系列,这个系列分成:AS/ES/WS等分支,他们都是redhat企业级Linux,简称为 RHEL

     

    AS是超级服务器版(Advanced Server),他在标准Linux内核的基础上,做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。可轻松识别IBM/DELL/HP等常见机架式服务器的磁盘阵列卡等设备。

     

    典型的AS应用为:

     

    1.数据库和数据库应用软件

     

    2.WEB和中间件

     

    3.CRM, ERP,SCM

     

    ES是企业服务器(Enterprise Server),AS的精简版本。他与常见的AS系列的区别是,AS支持到4路以上CPU,而ES只能支持两路CPU。AS和ES在大多数程序包上并无区别,只在内核等少数软件包上有差异。AS和ES的售价差别比较大,通常ES用在随服务器一同购买的OEM版本中例如购买DELL服务器,搭配的Linux 会是ES系列。如果要搭配AS系列,则需要多花数千元。

     

    典型的ES应用为:

     

    1. 公司WEB架构

     

    2.网络边缘应用 (DHCP, DNS, 防火墙等)

     

    3.邮件和文件/打印服务

     

    4.中小规模数据库和部门应用软件

     

    WS是工作站服务版(Workstation Server),ES的进一步简化版,主要针对企业内部的桌面办公市场,国内较少采用WS是桌面应用的最佳环境。它包含各种常用的桌面应用软件 (Office工具,邮件,即时信息,浏览器等),可以运行各种客户-服务器配置工具,软件开发工具和各种应用软件(例如EDA和Oil/Gas应用软件, 但它不提供网络服务功能(如DNS和DHCP),它只适合作客户端应用。

     

    AS、ES功能上没有什么区别,无论x86,还是Itanium版,RHEL的后三张盘完全一样,也就是说,软件包完全一样。第一张盘实际上没有什么软件包的,只是启用安装程序,确定安装文件包而已,只是在服务级别,支持的CPU数量和内存数量上有区别。 -

     

  • Linux操作系统下启动与停止WebSphere应用程序

    2009-06-16 14:30:53

    首先找到安装WebSphere的目录,然后进入到WebSphere的bin目录

    比如:cd /opt/IBM/WebSphere/AppServer/bin

    启动WebSphere    ./startServer.sh server1

    停止WebSphere    ./stopServer.sh server1
Open Toolbar