您的位置:首页 > 数据库

第三十三讲--参数文件及数据库的启动和关闭详解

2016-03-22 13:10 453 查看
Oracle数据库分为数据库和实例,实例是一堆进程和内存。Oracle启动时如何分配内存,SGA分多大,SGA里面的每个池子改分多大,这些信息全部存在参数文件里面。对oracle进行配置和修改,绝大多数都是对参数文件的操作。

在Linux系统中,参数文件存放在$ORACLE_HOME/dbs目录下。在Windows系统中,参数文件存放在database目录下。

[oracle@redhat4 ~]$ cd $ORACLE_HOME/dbs

[oracle@redhat4 dbs]$ ls

hc_cgh.dat       initdw.ora  lkJIAGULUN orapwjiagulun   spfilejiagulun.ora

hc_demo.dat      init.ora    lkTEST     orapwtest       spfiletest.ora

hc_jiagulun.dat  lkCGH      orapwcgh    spfilecgh.ora

hc_test.dat      lkDEMO      orapwdemo   spfiledemo.ora


参数文件:spfile+实例名.ora。单实例环境,数据库名等于实例名,多实例环境,一个数据库的名字对应多个实例名。

在oracle9i 9i以前,是静态参数文件:init+实例名.ora,oracle9i以后是动态参数文件:spfile+实例名.ora。静态参数文件是文本文件,动态参数文件是二进制文件。Vi命令参看动态参数文件时,一定要用q!的方式退出,不然文件要损坏。

静态参数文件只在oracle启动时读一次,读完就关闭,如果要改oracle的任何参数,只能重启数据库。动态参数文件在oracle启动时读一次,但是参数文件在oracle运行期间是打开的,可以动态的修改部分参数,还有少部分参数可以动态改,但是改完不一定马上生效,需要重启。

Oracle启动的第一步是找参数文件。在Linux中,oracle根据环境变量$ORACLE_SID设置的oracle SID的名字到$ORACLE_HOME目录下找动态参数文件,也就是说,能不能找到参数文件取决于环境变量设置的是否正确。如果找不到动态参数文件,oracle会尝试着找静态参数文件。

修改$ORACLE_SID:

[oracle@redhat4 ~]$ vi .bash_profile

PATH=$PATH:$HOME/bin

export PATH

unset USERNAME

ORACLE_BASE=/u01/app/oracle

export ORACLE_BASE

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_HOME

<span style="color:#FF0000;">ORACLE_SID=jiagulun

export ORACLE_SID</span>

NLS_LANG=american_america.zhs16gbk

export NLS_LANG

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin


假如把$ORACLE_SID修改成一个错误的名字:jiagulun1,则启动时oracle报错:找不到参数文件。

[oracle@redhat4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Productionon Wed Dec 30 08:47:32 2015

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

Connected to an idle instance.

SQL> startup

<span style="color:#FF0000;">ORA-01078: failure inprocessing system parameters

LRM-00109: could not openparameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initjiagulun1.ora'</span>


Oracle数据库启动的三个阶段:nomount、mount、open。

1. nomount,oracle找到参数文件(读spfile文件),根据参数文件的配置将内存空间划分出来和将进程起起来。只要有参数文件,参数文件设置正确,就可以nomonut。

SQL> startup nomount

<span style="color:#FF0000;">ORACLE instance started.</span>

Total System Global Area 285212672 bytes

Fixed Size                  2020192 bytes

Variable Size            113249440 bytes

Database Buffers         163577856 bytes

Redo Buffers                6365184 bytes


#实例启动起来了,进程和内存空间都有了,同时打开了参数文件
#查看nomount启动的oracle进程:
[oracle@redhat4 ~]$ ps -ef

UID       PID  PPID  C STIME TTY          TIME CMD

oracle   7447  7446  0 14:27 pts/1    00:00:00 -bash

oracle   7508     1  0 14:27 ?        00:00:00 ora_pmon_jiagulun

oracle   7510     1  0 14:27 ?        00:00:00 ora_psp0_jiagulun

oracle   7512     1  0 14:27 ?        00:00:00 ora_mman_jiagulun

oracle   7514     1  0 14:27 ?        00:00:00 ora_dbw0_jiagulun

oracle   7516     1  0 14:27 ?        00:00:00 ora_lgwr_jiagulun

oracle   7518     1  0 14:27 ?        00:00:00 ora_ckpt_jiagulun

oracle   7520     1  0 14:27 ?        00:00:00 ora_smon_jiagulun

oracle   7522     1  0 14:27 ?        00:00:00 ora_reco_jiagulun

oracle   7524     1  0 14:27 ?        00:00:00 ora_cjq0_jiagulun

oracle   7526     1  0 14:27 ?        00:00:00 ora_mmon_jiagulun

oracle   7528     1  0 14:27 ?        00:00:00 ora_mmnl_jiagulun

oracle   7530     1  0 14:27 ?        00:00:00 ora_d000_jiagulun

oracle   7532     1  0 14:27 ?        00:00:00 ora_s000_jiagulun

oracle    7762 7447  0 14:31 pts/1    00:00:00 ps –ef


#查看nomount成功后oracle占用的内存:
[oracle@redhat4 ~]$ ipcs -a

------ Shared Memory Segments --------

key        shmid      owner     perms      bytes      nattch  status

0x36010028       65537     oracle         640    287309824     13

------ Semaphore Arrays --------

key        semid      owner     perms      nsems

0x7df2e688 98304     oracle    640        154

------ Message Queues --------

key        msqid      owner     perms      used-bytes   messages

#查看nomount成功后打开的参数文件:

SQL> desc v$parameter;

Name                                     Null?    Type

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

NUM                                               NUMBER

NAME                                             VARCHAR2(80)

TYPE                                              NUMBER

VALUE                                            VARCHAR2(512)

DISPLAY_VALUE                                     VARCHAR2(512)

ISDEFAULT                                         VARCHAR2(9)

ISSES_MODIFIABLE                                   VARCHAR2(5)

ISSYS_MODIFIABLE                                   VARCHAR2(9)

ISINSTANCE_MODIFIABLE                              VARCHAR2(5)

ISMODIFIED                                        VARCHAR2(10)

ISADJUSTED                                         VARCHAR2(5)

ISDEPRECATED                                      VARCHAR2(5)

DESCRIPTION                                      VARCHAR2(255)

UPDATE_COMMENT                                 VARCHAR2(255)

HASH                                              NUMBER


#通过参数文件查看控制文件在什么地方:
SQL> show parameter control;

NAME                                                                TYPE                                     VALUE

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

control_file_record_keep_time                  integer                                 7

control_files                                                     string

/u01/app/oracle/oradata/JIAGULUN/controlfile/o1_mf_7p5b2xty_.ctl,         /u01/app/oracle/flash_recovery_area/JIAGULUN/controlfile/o1_mf_7p5b2y0c_.ctl


2. mount,根据参数文件保存的控制文件的位置,找到控制文件,把控制文件打开(读*.ctl文件),控制文件中记录着数据文件和redo log的位置,同时控制文件记录着数据库的运行状态,根据运行状态判断数据库的一致性。

SQL>alter database mount;

Database altered.


3. open,把数据文件和redolog打开。

SQL>alter database open;

Database altered.


动态参数文件和静态参数文件可以相互生成。

#由动态参数文件生成静态参数文件:

SQL>create pfile from spfile;

File created.


#找到生成的静态参数文件:

[oracle@redhat4~]$ cd $ORACLE_HOME/dbs

[oracle@redhat4dbs]$ ls

hc_cgh.dat       <span style="color:#FF0000;">initjiagulun.ora  </span>lkTEST        spfilecgh.ora

hc_demo.dat      init.ora          orapwcgh       spfiledemo.ora

hc_jiagulun.dat  lkCGH             orapwdemo      spfilejiagulun.ora

hc_test.dat      lkDEMO            orapwjiagulun  spfiletest.ora

initdw.ora       lkJIAGULUN        orapwtest


#静态文件是可编辑的

当我们使用动态参数文件的时候,在spfile里面有参数,在内存里也有参数。

假如把spfile的参数改错了,导致数据库打不开,数据库打不开又不能改spfile,陷入死锁。

1.以sqlplus / assysdba登录数据库,用create pfile from spfile生成一个静态文件,然后在静态文件里修改参数;

2.再以sqlplus /as sysdba登录数据库,用create spfile from pfile从静态文件中生成一个动态文件。

3.这样就可以startup了。

Oracle的关闭方式:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: