• oracle参数文件与启动过程


    oracle随系统启动而启动

    cs65-64桌面版
    orcle-11.2.0.4

    启动监听器,后台进程,OEM.


    注意:

    如果只做一和三,只能启动后台进程,监听器不启动,
    如果只做二和三,只能启动监听器,不能启动后台进程。
    三步都做,才能正常启动。

    一、
    vi /etc/oratab
    将默认的N改为Y,这一步的Y/N控制数据库的启动,也就是那些后台进程的启动与否
    fzf:/u01/app/oracle/product/11.2.0/dbhome_1:Y

    二、
    vi $ORACLE_HOME/bin/dbstart
    编辑 dbstart和dbshut脚本,将ORACLE_HOME_LISTNER=$1修改成ORACLE_HOME_LISTNER=$ORACLE_HOME

    三、
    vi /etc/rc.d/rc.local
    切换到root用户,添加下面两行,如果有命令后面有参数,须用双引号引起来。
    su - oracle -lc /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart

    su - oracle -lc "/u01/app/oracle/product/11.2.0/dbhome_1/bin/emctl start dbconsole"

    在不修改第二步的情况下。
    在dbstart后面经测试不管是加 $ORACLE_HOME,还是/u01/app/oracle/product/11.2.0/dbhome_1/,都不能启动监听器
    但是在oracle用户下执行$ORACLE_HOME/bin/dbstart $ORACLE_HOME却是成功的

    同是会有三个相关日志文件生成
    $ORACLE_HOME/listenr.log,shutdown.log,startup.log
    OEM日志路径$ORACLE_HOME/oracle1.aa.com_orcl/sysman/log/

    下面是另一种方法(未经本人测试)

    1、添加启动项
    [root@db01 ~]# cat >> /etc/rc.d/rc.local <<EOF
    
    su - Oracle -c "lsnrctl start"
    su - oracle -c "sqlplus sys/oracle as sysdba @/home/oracle/.script/.startup"
    su - oracle -c "emctl start dbconsole"
    EOF
    
    
    2、创建并编辑启动文件
    [root@db01 ~]#su - oracle
    [root@db01 ~]#mkdir -p /home/oracle/.script/
    
    [root@db01 ~]# cat > /home/oracle/.script/.startup <<EOF
    startup;
    alter system register;
    exit 0
    EOF

    创建数据库两种方法

    1.dbca如果是asm环境,须用asmca
    2.手动创建

    dbca

    netca

    emca

    asmca

    参数文件位置
    [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
    [root@localhost dbs]# ls
    hc_orcl.dat  init.ora  lkORCL  orapworcl  spfileorcl.ora
    参数文件里包含数据库初始化参数,用于设置数据库实例和数据库的运行特征及使用限制。

    oracle支持两种类型的参数文件,oracle按照参数文件的设定启动实例并打开数据库
    initorcl.ora是实例的文本参数文件        文本型必须通过手工修改
    spfileoracl.ora是实例的服务器参数文件    二进制型通过alter system命令修改

    pfile    文本型,通常命名为initSID.ora,pfile并不一定存在,可以手动创建,过程如下
    sqlplus / as sysdba
    SQL> create pfile from spfile;
    File created.
    spfile     二进制,通常命名为spfileSID.ora。

    参数大多使用了默认值,因此参数文件里的参数实际上是非默认的参数。11gr1,r2支持289-342个显式参数,还有相当多未文档化的隐式参数。

    Oracle 9i以后启动的时候默认使用的初始化文件是spfile,但是如何判断数据库启动是使用spfile还是pfile初始化文件.可以以下方法,
    1、show parameter spfile
    2、show parameter pfile
    3、看v$spparameter视图

    [oracle@localhost dbs]$ sqlplus /nolog

    SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 10 15:17:59 2015

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.

    SQL> conn / as sysdba
    Connected.

    下面是修改为pfile启动过程
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> create pfile from spfile;

    File created.
    也可以用 create spfile from pfile,二者可以相互转化。
    SQL> startup pfile=$ORACLE_HOME/dbs/initorcl.ora
    ORACLE instance started.

    Total System Global Area 1653518336 bytes
    Fixed Size                  2213896 bytes
    Variable Size            1006635000 bytes
    Database Buffers          637534208 bytes
    Redo Buffers                7135232 bytes
    Database mounted.
    Database opened.
    SQL> show parameter spfile

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string
    SQL> show parameter pfile

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string
    SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified = 'TRUE';

    DECODE
    ------
    pfile

    [oracle@localhost dbs]$ sqlplus /nolog
    
    SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 10 15:29:14 2015
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    SQL> conn / as sysdba
    Connected to an idle instance.
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 1653518336 bytes
    Fixed Size                  2213896 bytes
    Variable Size            1006635000 bytes
    Database Buffers          637534208 bytes
    Redo Buffers                7135232 bytes
    Database mounted.
    Database opened.
    SQL> show parameter spfile
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string      /u01/app/oracle/product/11.2.0
                                                     /dbhome_1/dbs/spfileorcl.ora

    通过spfile启动,用alter system修改参数

    [oracle@localhost dbs]$ sqlplus /nolog
    
    SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 10 15:32:51 2015
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    SQL> conn / as sysdba
    Connected.
    SQL> alter system set sga_max_size=1524M scope=spfile;
    
    System altered.
    
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 1603411968 bytes
    Fixed Size                  2213776 bytes
    Variable Size             956303472 bytes
    Database Buffers          637534208 bytes
    Redo Buffers                7360512 bytes
    Database mounted.
    Database opened.
    SQL> show parameter sga_max_size
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    sga_max_size                         big integer 1536M
    动态参数是指在运行过程中可以动态修改的参数
    静态参数是指必须通过重启来调整的参数,随着oracle的不断升级,参数逐渐动态化,在11g中,静态已没有几个了。
    SQL> show parameter optimizer_index_caching
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    optimizer_index_caching              integer     0
    SQL> alter system set optimizer_index_caching=50 scope=both;
    both的含义是指在内存与文件中,并且立刻生效。重启oracle后还是生效。
    如果改为memory,则只对当前实例有效,即内存中,重启后失效。
    如果改为spfile,则对当前实例无效,重启后生效。
    一些参数也可以在会话级使用alter session来调整,如
    alter session set sql_trace=true;
    SQL> alter system set parallel_max_servers=100 scope=memory;
    
    System altered.
    
    SQL> show parameter optimizer_index_caching
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    optimizer_index_caching              integer     50
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 1603411968 bytes
    Fixed Size                  2213776 bytes
    Variable Size             956303472 bytes
    Database Buffers          637534208 bytes
    Redo Buffers                7360512 bytes
    Database mounted.
    Database opened.
    SQL> show parameter optimizer_index_caching
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    optimizer_index_caching              integer     50

    [oracle@oracle1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Sep 15 13:05:23 2016

    Copyright (c) 1982, 2013, Oracle.  All rights reserved.

    Connected to an idle instance.

    SQL> startup nomount
    ORACLE instance started.

    Total System Global Area 1.3362E+10 bytes
    Fixed Size                  2265864 bytes
    Variable Size            6777998584 bytes
    Database Buffers         6576668672 bytes
    Redo Buffers                4911104 bytes
    SQL> select instance_name,status from v$instance;

    INSTANCE_NAME    STATUS
    ---------------- ------------
    fzf              STARTED

    SQL> select value from v$spparameter where name='control_files';

    VALUE
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/fzf/control01.ctl
    /u01/app/oracle/fast_recovery_area/fzf/control02.ctl

    SQL> alter database mount;

    Database altered.

    SQL> select instance_name,status from v$instance;

    INSTANCE_NAME    STATUS
    ---------------- ------------
    fzf              MOUNTED

    将数据库带到mount状态
    select value from v$spparameter where name='control_files';
    Alter database mount;
    Mount数据库的过程是读参数文件中描述的控制文件,校验控制文件的正确性,将控制文件的内容读入到
    内存,mount是挂接的意思,是操作系统中的概念.一旦mount之后,就是将一个没有意义的实例和一个
    数据库发生了联系.因为实例是空壳.没有任何数据库和该实例发生关系,我们可以理解为实例是水泵,放
    到哪个水塘里就会抽取哪里的数据,实例是通用的.mount的意思是将一个通用的水泵放入到指定的水塘.
    mount是读控制文件,控制文件中有数据文件和日志文件的信息.
    select instance_name,status from v$instance;


    打开数据库
    Alter database open;
    读控制文件中描述的数据文件
    验证数据文件的一致性,如果不一致,使用日志文件将数据库文件恢复到一致的状态.
    数据库open后,普通用户才可以访问数据库
    用户的表才为可见
    只读方式open数据库
    Alter database open read only;
    select OPEN_MODE from v$database;
    默认的open方式为read write
    想改read only为read write 必须重新启动数据库
    我们现在回想一下数据库启动的三个台阶,我们先读的是参数文件,参数文件可以有我们来编写.读完参数
    文件后又读了控制文件,控制文件描述了数据文件和日志文件的信息,如果控制文件丢失可以重新建立,最
    后是读数据文件.数据文件里才存放了我们的数据.数据库将启动分为三个台阶,目的是我们可以准确的知
    道哪里有问题,迅速的排除.有点象老鼠拖木钎,大头在后面.由最开始的一个1k的参数文件,最后到几个t
    的大型数据库.当我们只打startup而不加任何参数的时候.默认是到open,等于startup open;
    SQL> startup
    ORACLE instance started.


    以 oracle 用户如下命令:
      $cd $ORACLE_HOME/dbs
      -- 查看参数文件
      $ls
      $sqlplus "/ as sysdba"
      SQL> startup nomount
      说明:
          启动到nomount 状态,这个阶段数据库读取参数文件(spfile/pfile)文件中的参数,启动数据库实例。
          初始化参数文件默认位置在 $ORACLE_HOME/dbs 目录下,
          Oracle9i 初始化参数文件的读取顺序是 spfile<sid>.ora --> spfile.ora --> init<sid>.ora  
          这一阶段主要是指定控制文件及数据库实例名, 分配系统全局区 ,启动后台进程 ,打开alertSID.log文件和跟踪文件。


      启动数据库到 nomount 状态以后, Oracle 就可以从参数文件中获得控制文件的位置信息。
      找到控制文件, 并锁定控制文件。
      以 oracle 用户执行如下命令:
      SQL>alter database mount;
      SQL>select * from v$control_files;
      说明:
          启动到mount状态,这个阶段数据库打开控制文件,验证控制文件。
          在 mount 数据库阶段, 会读取口令文件, 该文件缺省位于:$ORACLE_HOME/dbs/orapw<sid> 或 orapwd
          在数据库没有启动之前, 数据库内建用户是无法通过数据库本身来验证身份的,正是通过口令文件,
          Oracle 实现对用户的身份认证, 在数据库未启动之前登陆,启动数据库。
          如果丢失了口令文件, 在mount 阶段就会报错, 并无法启动数据库。
          将数据库与一个已打开的实例相关联, 打开控制文件, 计算 mount id  并写入控制文件。
          获取数据文件和重做日志文件的名称和状态。
          此时数据库的基本结构信息都能够查询了,但是还不能查询用户表的内容。


    启动数据库到 mount 状态以后, Oracle 就可以从控制文件中获得数据文件、日志文件的位置信息、
      检查点信息等重要信息, 并在 open 阶段, Oralce 可以根据控制文件中记录的这些信息找到文件,
      然后进行检查点及完整性检查。如果不存在问题就可以启动数据库,
      如果存在不一致或文件丢失则需要进行恢复。
      以 oracle 用户如下命令:
      SQL>alter database open;

      说明:启动到open状态,这个阶段数据库打开控制文件里描述的文件。
            在完成数据库的验证和恢复过程后, 数据库处于一致的状态,
            数据库还需要进行一系列的处理过程:将UNDO 段在线等操作,
            然后数据库就可以提供访问, 同时SMON 可以开始进行事务回滚。



    SQL> alter database mount; Database altered. SQL> alter database open read only; Database altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. 启动为限制模式,限制模式打开的数据库只有具备管理权限的数据库用户才能访问。 例如具有restricted session权限或dba角色的数据库用户。 管理员往往在执行数据库结构调整及数据库维护期间,为防止普通用户访问,则以限制模式启动数据库。 SQL> startup restrict ORACLE instance started. Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 956303472 bytes Database Buffers 637534208 bytes Redo Buffers 7360512 bytes Database mounted. Database opened. 将受限转为正常 SQL> alter system disable restricted session; System altered. 关闭的四种方式 shutdown normal|transactional|immediate|abort shutdown 等同于shutdown normal 检查数据库状态 SQL> select database_status from v$instance; DATABASE_STATUS ----------------- ACTIVE 挂起/暂停数据库 SQL> alter system suspend; System altered. SQL> select database_status from v$instance; DATABASE_STATUS ----------------- SUSPENDED 恢复数据库 SQL> alter system resume; System altered. SQL> select database_status from v$instance; DATABASE_STATUS ----------------- ACTIVE

    http://blog.csdn.net/pan_tian/article/details/41160155  shutdown关闭图解挺直观的

    1、shutdown normal
       正常方式关闭数据库。 通常很慢

    2、shutdown immediate
       立即方式关闭数据库。
       在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,
       而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),
       当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
     
    3、shutdown abort
       直接关闭数据库,正在访问数据库的会话会被突然终止,
       如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间
    --------------------------------------------------------
    shutdown abort 的时候,跟kill 进程是一样的效果
    数据库立即关闭,这个时候文件状态可能不一致
    因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致并且不用进行崩溃恢复

    若检查点信息一致,则做崩溃恢复
    若检查点信息不一致(正好在更新文件头)则需要做介质恢复

    这些问题都好处理,最怕的问题是这个时候系统有大量IO,结果这样造成写的突然中断,碰巧造成文件块的逻辑坏块,那麻烦比较大一些,尤其是系统表空间的block损坏

    虽然shutdown abort 出错的几率很小,1000个人可能只有一个人碰到,但是我们还是要小心。
    正确的处理流程是,shutdown immediate ,若数据库迟迟不能down下来,在os上观察IO状况,几乎没有io的时候,另开一窗口shutdown  abort ,几乎不会出问题了
    --------------------------------------------------------
    http://www.itpub.net/showthread.php?threadid=180315&pagenumber=
    先用IMMEDIATE来DOWN,实在不行了,看一下数据库文件上没IO了,再用ABORT
    ------------------------------------------------------------------------------
    你可以尝试先在系统级杀掉非后台Oracle进程,在连接shutdown immediate就安全多了

    在Oracle8i里,当数据库失去响应以后,你在操作系统上杀掉用户进程后,一般数据库就可以恢复正常了
    -------------------------------------------------------------------------------
    先 shutdown immediate 应该是首选
    然后不行再重新shutdown abort
    其实起不来也是因为os的缘故,在文件正在写的时候出现问题导致文件不一致或者损坏……

    用 ps -ef|grep smon
    看你当前有多少个已经启动的实例,

    没启动的,只能去$ORACLE_HOME/dbs下面去数你有多少init文件了。
    如果你有多个ORACLE HOME,那就挨个数吧

    在创建库的时候创建了一个实例库,这样的话Oracle中就会有两个实例库,一个是自带的ORCL,另外一个是自己创建的NewOrcl,怎么才能区分出来当前使用的是哪个实例库呢?根据SID,如想用哪个库修改成哪个库的实例名就行了。

    http://blog.itpub.net/10896118/viewspace-1044094/

    ORACLE_SID和ORACLE_HOME是最基本的必须设置的两个环境变量。

    下面,摘录一段TOM大师光辉著作《Expert Oracle Database Architecture 》的原文:

    If you’re unfamiliar with the term SID or ORACLE_SID, a full definition is called for. The SID is a site identifier. It and ORACLE_HOME (where the Oracle software is installed) are hashed together in UNIX to create a unique key name for attaching an SGA. If your ORACLE_SID or ORACLE_HOME is not set correctly, you’ll get the ORACLE NOT AVAILABLE error, since you can’t attach to a shared memory segment that is identified by this unique key. On Windows, shared memory isn’t used in the same fashion as UNIX, but the SID is stillimportant. You can have more than one database on the same ORACLE_HOME, so you need a way to uniquely identify each one, along with their configuration files.
    根据Tom大师所说的,在Unix/Linux下,Oracle的实例是有一块共享内存(SGA)和一组后台进程组成的,

    Oracle使用ORACLE_HOME和ORACLE_SID进行hash,得到一个key,
    Oracle根据这个key来寻找SGA,如果不设置这两个环境变量,oracle就无法找到分配的SGA,
    也就无法连接到实例。这也是这两个环境变量为什么必须设置的原因。

    [@more@]我们可以利用oracle自带的sysresv工具查看到

    [oracle@db ~]$ sysresv

    IPC Resources for ORACLE_SID "orcl" :
    Shared Memory:
    ID        KEY
    7045138     0x00000000
    7077908     0x00000000
    7110677     0x42e38fd0
    Semaphores:
    ID        KEY
    589826      0x89a83438
    Oracle Instance alive for sid "orcl"

    另外,使用ipcs也可以看到共享内存与信号量的情况
    [oracle@db ~]$ ipcs -m |grep 138
    0x00000000 7045138    oracle     640        33554432   40                      
    [oracle@db ~]$ ipcs -m |grep 908
    0x00000000 7077908    oracle     640        3087007744 40                      
    [oracle@db ~]$ ipcs -m |grep 677
    0x42e38fd0 7110677    oracle     640        2097152    40                      
    [oracle@db ~]$ ipcs -s |grep 826
    0x89a83438 589826     oracle     640        154  
    可以看到,两者是对应的。

    由上面的结论可知,在相同的ORACLE_HOME下,必须使用不同ORACLE_SID来区分不同的实例,
    在不同的ORACLE_HOME下,可以有相同的ORACLE_SID,Oracle照样可以区分不同的实例,
    这点在盖国强先生的《深入解析Oracle》中也得到了验证。

    1:ORACLE使用环境变量里(ORACLE_SID+ORACLE_HOME)的值进行hash运算,来确定SGA区的内存地址。
    2:如果当你使用sqlplus / as sysdba 连接到一个idle的instance时,表示你使用的(ORACLE_SID+ORACLE_HOME) hash后的值在内存中没有找到相应的sga区,一个可能是数据库没有启动,另一个可能是和当前正在运行的数据库的(ORACLE_SID+ORACLE_HOME)内容不相同,导致你没有正确的连接到当前的数据库的SGA。

    在提交startup命令之后,在上述目录下Oracle会自动按照如下的顺序查找参数文件完成数据库的启动。
       1)spfile$ORACLE_SID.ora
       2)spfile.ora
       3)init$ORACLE_SID.ora

    注意事项
    这里强调指出的一个问题是:不可像显式使用特定pfile的方法去使用spfile!
    虽然可以显式指定具体pfile作为启动数据库的参数文件,但这里需要注意的是,不可以显式指定某个spfile作为启动的参数文件。
    下面的用法是不正确的。
    SQL> startup spfile=$ORACLE_HOME/dbs/spfilefgy.ora
    SP2-0714: invalid combination of STARTUP options
    错误提示:startup命令后面跟随的选项不正确。原因很简单,spfile作为系统参数文件是在启动过程中自动识别到的,其命名规则也是固定的。因此请不要尝试显式的去使用spfile启动数据库。
    此时,如果我们显式的使用pfile是可以完成数据库的启动。
    sys@ora10g> startup pfile='?/dbs/initora10g.ora';

    http://blog.chinaunix.net/uid-26190190-id-2420722.html

    http://www.cnblogs.com/smartvessel/archive/2009/07/06/1517690.html

     
     
  • 相关阅读:
    Latex学习
    【测试】安卓自动化测试代码片段Java
    【测试】adb(Android debug bridge译名:安卓测试桥)的介绍与常用命令
    【测试】安卓开发中常用的布局和UI元素
    mac终端命令大全
    【测试】使用UIAutomatorViewer做App元素探测工作
    【测试】adb连接夜神模拟器
    mac版本夜神模拟器卡99的解决办法
    mac电脑查看apk文件的包名等信息
    新版macbook pro 取消/恢复开盖启动 revert
  • 原文地址:https://www.cnblogs.com/createyuan/p/4635922.html
Copyright © 2020-2023  润新知