Fork me on GitHub

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

 

 

 

 

 

 

 

posted on 2015-07-10 15:42  阳光-源泉  阅读(1432)  评论(0编辑  收藏  举报

导航