签到成功

知道了

CNDBA社区CNDBA社区

oracle启动过程物理架构

2016-12-06 09:22 1857 0 原创
作者: Anshen

Process Startup Sequence 进程处理过程

instance-qidong.png


操作系统启动的时候init 进程就会调用 init.ohasd  这个脚本控制了很多注册oracle组件,会会按照顺序自动启动 (解释:当系统启动的时候会自动的把ASM,listenerDB instanceuser Definedapplications全部起起来)

 

vim /etc/inittab

h1:35:respawn:/etc/init.d/init.ohasd?run?>/dev/null?2>&1?</dev/null?

我们可以看到是启动35,如果linux进入3 文本模式  5 图形模式都会去调用init.ohasd

[root@anshenoracle ~]# cd /etc/init.d/

[root@anshenoracle init.d]# vim init.ohasd(系统启动会按照里面的脚本挨个启动)

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

并不是所有的组件都管理 ,如果要被grid管理,必须注册进去

怎么查看有那些资源被管理

 

[grid@anshenoracle ~]$ crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    anshenoracle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    anshenoracle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    anshenoracle

ora.orcl.db    ora....se.type 0/2    0/1    OFFLINE   OFFLINE

以上这些组件都被管理了,特例我手工建立的组件是不会被gird管的,要像被gird管理只能手工注册进去

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

Target  目标 要求处于这个状态 

State   实际:实际处于的状态

(扩展:我们看到最后行ora.orcl.db    ora....se.type 0/2    0/1    OFFLINE   OFFLINE

有了这一行话我们就知道了下次数据库启动的时候是绝对不会自己启动的,因为它的targetoffline

你要想让数据库随系统一起启动要执行crs_start ora.orcl.db

[grid@anshenoracle ~]$ crs_start ora.orcl.db

[grid@anshenoracle ~]$  crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host       

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    an...acle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    an...acle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    an...acle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    an...acle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    an...acle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    an...acle

ora.orcl.db    ora....se.type 0/2    0/1    ONLINE    ONLINE    an...acle

---------------------------------那么下次再次启动系统的时候数据库就一起启动了。

su - root

chkconfig  sendmail off

init 6  重启

重启好后我们发现数据库一起启动了(如果发现没有起来等一会就好)

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

如果假设数据库不被自动管理就是在实际工作中可能有多个数据库 或者你自己手工建立的数据库想被管理(注意:这会已经扩展到集群里面了)

[grid@anshenoracle ~]$ srvctl

Usage: srvctl <command> <object> [<options>]

    commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config

    objects: database|service|asm|diskgroup|listener|home|ons|eons

For detailed help on each command and object and its options use:

  srvctl <command> -h or

  srvctl <command> <object> -h

 

[grid@anshenoracle ~]$ srvctl stop database -d orcl先关闭数据库

[grid@anshenoracle ~]$ crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    anshenoracle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    anshenoracle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    anshenoracle

ora.orcl.db    ora....se.type 0/2    0/1    OFFLINE   OFFLINE

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

[grid@anshenoracle ~]$su - oracle

[oracle@anshenoracle ~]$ srvctl  remove database -d orcl  删除

Remove the database orcl? (y/[n]) y

 

[grid@anshenoracle ~]$ crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    anshenoracle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    anshenoracle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    anshenoracle

看到没有又好了~~~~~

如果是数据库被管理 ----》数据库拥有者是oracle 由他注册

那么我们再来

su - oraclehttp://www.cndba.cn/redhat/article/1618

srvctl add  database -d orcl -o $ORACLE_HOME

 

su - grid

[grid@anshenoracle ~]$ crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    anshenoracle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    anshenoracle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    anshenoracle

ora.orcl.db    ora....se.type 0/2    0/1    OFFLINE   OFFLINE

看到没又关闭了

srvctl start database -d orcl

或者 crs_start ora.orcl.db

[grid@anshenoracle ~]$ crs_stat -t -v

Name           Type           R/RA   F/FT   Target    State     Host

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

ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.FRA.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    anshenoracle

ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    anshenoracle

ora.cssd       ora.cssd.type  0/5    0/5    ONLINE    ONLINE    anshenoracle

ora.diskmon    ora....on.type 0/10   0/5    ONLINE    ONLINE    anshenoracle

ora.orcl.db    ora....se.type 0/2    0/1    ONLINE    ONLINE    anshenoracle

 

表示这些组件会随操作系统启动而启动,不需要手工干预

 

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

内存

进程


 

 

 

 

 http://www.cndba.cn/redhat/article/1618

 

 http://www.cndba.cn/redhat/article/1618

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

接下来实例启动的过程就是分配内存,启动后台进程的过程

实例启动后,后台进程去加载数据库,然后把数据库打开

数据库的概念:一些文件

zucheng.png

文件顺序:是数据库启动过程读文件顺序讲解 (那么这块讲完了以后各位的数据库起不来虽然不能解决问题但是已经可以知道是哪个位置的问题了)

首先找1参数文件canshu.png

当执行startup 启动数据库,先读取环境变量ORACLE_SID 就是找实例名 ,然后在到

cd $ORACLE_HOME/dbs目录去找参数文件

先找 spfile<sid>.ora

没有找到继续找spfile.ora文件

没有找到继续找 init<sid>.ora

还没有找到就报错!!!!!

为什么要找这文件?

参数文件包含的你的数据库的名字,以及内存如何分配,以及控制文件在哪里

所有先读这个文件给数据库分配内存 -------》实例就启动了!!!

 

例如:我的实例名叫orcl  ----》找到的是 initorcl.orahttp://www.cndba.cn/redhat/article/1618

参数文件分配pfilespfile文件

pfile文本文件

spfile二进制文件

具体执行:

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

[oracle@anshenoracle dbs]$ ls

hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl

[oracle@anshenoracle dbs]$ cat initorcl.ora  是一个路径

SPFILE='+DATA/orcl/spfileorcl.ora'

最终读取的是+data/orcl/spfileorcl.ora 根据这个文件启动实例

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

我们还可以在数据库中查看

SQL> show parameter spfile

 

NAME                                        TYPE        VALUE

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

spfile                                          string      +DATA/orcl/spfileorcl.ora

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

案例:说明原因

[oracle@anshenoracle dbs]$ export ORACLE_SID=ORCL

[oracle@anshenoracle dbs]$ ls

hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl

这会在里面发现找不见一个叫ORCL的了,所以

[oracle@anshenoracle dbs]$ sqlplus  / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on Sat Aug 2 01:58:13 2014

 

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

 

Connected to an idle instance.

 

SQL> startup

ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initORCL.ora'

 

证明:没有参数文件 启动不了实例

 

      实例名区分大小写

 

总结:参数文件只能在 $ORACLE_HOME/dbs  名字叫 spfile<sid>.ora  init<sid>.ora

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

SQL>create pfile='/u01/app/oracle/pfile' from spfile;

把二进制的spfile变为文本格式pfile (这样数据库就可以正常启动了)

 

vim /u01/app/oracle/pfile

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files控制文件在哪里='+DATA/orcl/controlfile/current.260.853023315','+FRA/orcl/controlfile/current.256.853023315'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain='example.com'

*.db_name='orcl'  数据名

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=4070572032

http://www.cndba.cn/redhat/article/1618

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.memory_target=536870912 内存分配

*.open_cursors=300

*.processes=200

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=300

*.undo_tablespace='UNDOTBS1'

~

 

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

2 Control files 控制文件kongzhi.png

根据参数文件中记录的控制文件路径,去找控制文件,并读取控制文件

作用:控制文件,记录数据库的所有的数据文件在哪里,所有的日志文件在哪里,数据库字符集 RMAN备份信息

 

控制文件在哪里叫什么?

 

方法1 spfile -->pfile 然后去找

 control_files  这个参数(参考vim /u01/app/oracle/pfile里面的control_files

 

方法2

SQL> select status from v$instance;  (由于刚才不正常操作多次所以要检查下基础命令是否打开)

STATUS

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

OPEN

 

SQL> show parameter control_files

/

NAME                                 TYPE        VALUE

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

control_files                        string      +DATA/orcl/controlfile/current

                                                 .260.853023315, +FRA/orcl/cont

                                                 rolfile/current.256.853023315

方法3

SQL> select name from v$controlfile;

 

NAME

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

+DATA/orcl/controlfile/current.260.853023315

+FRA/orcl/controlfile/current.256.853023315

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

 

3 数据文件+日志文件

根据控制文件中记录的数据文件信息读取数据文件

3.1 数据文件

作用:物理上存放数据

SQL> select  NAME   from v$datafile;

 

NAME

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

+DATA/orcl/datafile/system.256.853023133

+DATA/orcl/datafile/sysaux.257.853023133

+DATA/orcl/datafile/undotbs1.258.853023133

+DATA/orcl/datafile/users.259.853023133

+DATA/orcl/datafile/example.265.853023375

+DATA/orcl/datafile/inx.267.853045119

 

3.2

根据控制文件中记录的日志文件信息读取数据文件

 

日志文件非常的重要,用日志组来管理,重要日志组是可用,则数据库的日志就可用

日志组就由多个日志文件组成 ,一个组的日志文件之间是相互镜像的关系

 

3.2.1 检查日志组 v$log

SQL> desc v$logfile

 Name                                             Null?    Type

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

 GROUP#                                                 NUMBER

 STATUS                                                    VARCHAR2(7)

 TYPE                                                          VARCHAR2(7)

 MEMBER                                                VARCHAR2(513)http://www.cndba.cn/redhat/article/1618

 IS_RECOVERY_DEST_FILE                                     VARCHAR2(3)

 

SQL> select  GROUP#, THREAD# , SEQUENCE# , STATUS , ARCHIVED,MEMBERS,BYTES/1024/1024

  2  from v$log;

 

    GROUP#    THREAD#  SEQUENCE# STATUS           ARC    MEMBERS BYTES/1024/1024

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

         1          1         16 INACTIVE         NO           2              50

         2          1         17 INACTIVE         NO           2              50

         3          1         18 CURRENT          NO           2              50

解释:GROUP#进程号,THREAD#线程号(非集群环境一定是1,集群环境就有可能是1234等),SEQUENCE#序列(gwr把当前日志信息写入第三组,因为第三组sequence最大,下一个是sequence最小的或者看status=current)ARC代表归档(显示是NO所以没有归档),MEMBERS 每个组有2个成员,BYTES/1024/1024每个组有50兆。(扩展:如果这会我们的ARC         开启了也就是说每次保存归档文件就有50兆) (重点)

 

 

3.2.2 日志文件v$logfile

SQL> col MEMBER for a50

SQL> select GROUP# , MEMBER from v$logfile ;

    GROUP# MEMBER

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

         3 +DATA/orcl/onlinelog/group_3.263.853023339

         3 +FRA/orcl/onlinelog/group_3.259.853023343

         2 +DATA/orcl/onlinelog/group_2.262.853023327

         2 +FRA/orcl/onlinelog/group_2.258.853023335

         1 +DATA/orcl/onlinelog/group_1.261.853023319

         1 +FRA/orcl/onlinelog/group_1.257.853023325

这里我们结合前面的日志组可以看到每组有两个成员,假设这会第三组的+FRA坏了不要紧数据库还可以正常运行,再假设第三组+DATA也坏了那么你的数据库就挂了。

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

 

4 如果启用了归档模式,每次日志组切换都会产生归档文件archive.png

归档文件在哪里?

先看log_archive_dest_N  的设置

http://www.cndba.cn/redhat/article/1618

show parameter log

log_archive_dest_N 

log_archive_dest_1                        string

 

NAME                                        TYPE        VALUE

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

log_archive_dest_10                      string

log_archive_dest_11                      string

log_archive_dest_12                      string

log_archive_dest_13                      string

log_archive_dest_14                      string

log_archive_dest_15                      string

log_archive_dest_16                      string

log_archive_dest_17                      string

log_archive_dest_18                      string

log_archive_dest_19                      string    

我们可以看到VALUE是没有设置的,如果log_archive_dest_N没有设置,则看快速恢复区

SQL> show parameter recovery

 http://www.cndba.cn/redhat/article/1618

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      +FRA  归档路径

db_recovery_file_dest_size           big integer 3882M

 

如果这个快速恢复区也没有设置,则默认在$ORACLE_HOME/dbs目录(扩展:每个归档文件,是通过序列号区分的)

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

5 Password file 密码文件

管理员如果想远程连接数据库,则是通过密码文件验证的

在哪里?

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

[oracle@anshenoracle dbs]$ ls

hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl

cd $ORACLE_HOME/dbs   名字 orapw<sid> 例如: orapworcl

 

案例;

删除密码文件

 rm -rf orapworcl

 

sqlplus sys/oracle@orcl as sysdba

失败!!!

[oracle@anshenoracle dbs]$ sqlplus sys/oracle@orcl as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 28 03:57:00 2014

 

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

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

-----------------------------------(这个一定和conn / as sysdba区分看,我这会做的一个远程登录 通过tcp/ip访问  conn / as sysdba一个是本地登录走ipc协议)

那么我们重建密码文件

 [oracle@anshenoracle dbs]$ orapwd 回车 看到语法

Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

 

例如:管理员登录设置为anshen

[oracle@anshenoracle dbs]$ orapwd  file=$ORACLE_HOME/dbs/orapworcl password=anshen

 

[oracle@anshenoracle dbs]$ sqlplus  sys/oracle@orcl as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied 密码错误拒绝登陆

 

 

[oracle@anshenoracle dbs]$ sqlplus  sys/anshen@orcl as sysdba

成功!!!!

 

场景:如果远程登录密码忘记了 ----》重建密码密码文件

     如果不允许管理员远程登录-----》删除密码文件

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

6 备份文件

目录:用来还原

用户可以指定备份到哪里去,如果不指定默认路径

SQL> show parameter recoveryhttp://www.cndba.cn/redhat/article/1618

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      +FRA 默认备份路径

db_recovery_file_dest_size           big integer 3882M

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

7 Alert log and trace files

Alert log:用户操作故障都写入警告文件

trace文件:后台进程后者用户跟踪文件

 

10g 11g是不一样(这个地方一定要注意!) 11g重构体系结构 把所有诊断信息放到一起

 

11g先插出诊断的根目录

SQL> show parameter diag

 

NAME                                 TYPE        VALUE

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

diagnostic_dest                      string      /u01/app/oracle

 

diagnostic_dest/diag/rdbms/数据库名/实例名

具体位置在:

[oracle@anshenoracle dbs]$ cd  /u01/app/oracle/diag/rdbms/orcl/orcl/

[oracle@anshenoracle orcl]$ ls

alert  cdump  hm  incident  incpkg  ir  lck  metadata  stage  sweep  trace

 

警告日志文件

 alert  ----》警告日志文件log.xml

 trace-----  alert_orcl.log  格式;alert_实例名.log  文本格式(最常看的是这个)

http://www.cndba.cn/redhat/article/1618

 [oracle@anshenoracle orcl]$cd  /u01/app/oracle/diag/rdbms/orcl/orcl/trace

下面的alert_orcl.log

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

数据库物理结构=参数文件+控制文件+数据文件+日志文件 (要备份就考走这4个)

               密码文件 归档问价  备份文件 警告文件 


版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Anshen

Anshen

关注

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

  • 69
    原创
  • 0
    翻译
  • 5
    转载
  • 8
    评论
  • 访问:291880次
  • 积分:326
  • 等级:中级会员
  • 排名:第13名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ