Process Startup Sequence 进程处理过程
操作系统启动的时候init 进程就会调用 init.ohasd 这个脚本控制了很多注册oracle组件,会会按照顺序自动启动 (解释:当系统启动的时候会自动的把ASM,listener,DB instance,user Defined,applications全部起起来)
vim /etc/inittab
h1:35:respawn:/etc/init.d/init.ohasd?run?>/dev/null?2>&1?</dev/null?
我们可以看到是启动3和5,如果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
有了这一行话我们就知道了下次数据库启动的时候是绝对不会自己启动的,因为它的target是offline)
你要想让数据库随系统一起启动要执行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 - oracle
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
表示这些组件会随操作系统启动而启动,不需要手工干预
----------------------------------------------------------------------------------------------------------
内存
进程
接下来实例启动的过程就是分配内存,启动后台进程的过程
实例启动后,后台进程去加载数据库,然后把数据库打开
数据库的概念:一些文件
文件顺序:是数据库启动过程读文件顺序讲解 (那么这块讲完了以后各位的数据库起不来虽然不能解决问题但是已经可以知道是哪个位置的问题了)
首先找1参数文件
当执行startup 启动数据库,先读取环境变量ORACLE_SID 就是找实例名 ,然后在到
cd $ORACLE_HOME/dbs目录去找参数文件
先找 spfile<sid>.ora
没有找到继续找spfile.ora文件
没有找到继续找 init<sid>.ora
还没有找到就报错!!!!!
为什么要找这文件?
参数文件包含的你的数据库的名字,以及内存如何分配,以及控制文件在哪里
所有先读这个文件给数据库分配内存 -------》实例就启动了!!!
例如:我的实例名叫orcl ----》找到的是 initorcl.ora
参数文件分配pfile和spfile文件
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
*.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 控制文件
根据参数文件中记录的控制文件路径,去找控制文件,并读取控制文件
作用:控制文件,记录数据库的所有的数据文件在哪里,所有的日志文件在哪里,数据库字符集 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)
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 如果启用了归档模式,每次日志组切换都会产生归档文件
归档文件在哪里?
先看log_archive_dest_N 的设置
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
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 recovery
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 文本格式(最常看的是这个)
[oracle@anshenoracle orcl]$cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace
下面的alert_orcl.log
---------------------------------------------------------------------------------------------------------------------------------
数据库物理结构=参数文件+控制文件+数据文件+日志文件 (要备份就考走这4个)
密码文件 归档问价 备份文件 警告文件
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Linux 7 密码破解
- 下一篇:oracle启动过程物理架构