5.数据库的启动和关闭01

1.前言

  通常来说Oracle server 主要由两个部分组成:instance和database. instance是指一组后台进程(在window上是一组线程)和一块共享内存区域,database是指存储在磁盘上的一组物理文件,通过instance与database协同,Oracle数据库才能形成一个动态的可访问关系型数据库系统。

2.数据的启动

  oracle的数据库的启动不是仅仅看表象用sysdba/sysoper身份登录然后输入startup命令即可启动数据库。其实往往当执行startup之后,Oracle需要执行一系列的复杂的操作。

  Oracle数据库的启动主要包括3个过程:

  • 启动数据库到nomount状态;
  • 启动数据库到mount状态;
  • 启动数据库到open状态;  

  完成这3个过程,数据库才能进入就绪状态,准备提供数据访问。

3.启动数据库到nomount状态的过程

  在启动的第一步,Oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置(内存分配等设置),创建实例(instance),分配内存,启动后台进程,Nomount的过程也就是启动数据库实例的过程,这个过程在后台是启动oracle可执行程序的过程,window上是oracle.exe文件的初始化,在unix/linux上是oracle可执行文件的初始化。

  在linux中可以通过file命令查看oracle执行文件来判断oralce是64位或者是32位 

[oracle@node04 dbs]$ file $ORACLE_HOME/bin/oracle
/data/oracle/product/11.2.0/db_1/bin/oracle: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=af262d40ee8c98c737770f1d9685cc6de14bb355, not stripped

  查看数据库启动文件位置 

SQL> show parameter spfile;

NAME                     TYPE                 VALUE
------------------------------------ ---------------------- ------------------------------
spfile                     string            /data/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora

  通常默认用的是spfile启动,spfile是一个二进制文件,一般我们可以用strings命令进行查看: strings   spfileorcl.ora

  在nomount初始化过程中,只要拥有一个参数文件,就可以凭之启动实例(instance),这一步骤并不需要任何的控制文件或者数据文件参与。

  以下是正常情况下启动数据库到nomount状态的过程: 

SQL> startup  nomount
ORACLE instance started.

Total System Global Area  759943168 bytes
Fixed Size            2217224 bytes
Variable Size          473959160 bytes
Database Buffers      276824064 bytes
Redo Buffers            6942720 bytes

  注意这里,oracle根据参数文件的内容,创建了instance,分配了相应的内存区域,启动了相应的后台进程,SGA的分配信息从以上的输出中可以看到。

  观察告警日志(alert_<oracle_SID>.log),可以看到这一阶段的启动过程,读取参数文件,应用参数启动实例,所有在参数文件中定义的非缺省参数都会记录在告警日志文件中,启动告警日志的文件可以通过命令:   

SQL> show parameter background_dump_dest;

NAME               TYPE       VALUE
------------------------------------ ---------------------- ------------------------------
background_dump_dest       string     /data/oracle/diag/rdbms/orcl/orcl/trace

 这里我们可以通过该alert_<oracle_sid>.log,可以看到这一阶段启动的过程,读取参数文件,应用参数启动实例,所有在参数文件中

Fri Sep 17 17:42:08 2021
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 3
Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on.
IMODE=BR
ILAT =27
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options.
Using parameter settings in server-side spfile /data/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora
System parameters with non-default values:
  processes                = 150
  memory_target            = 728M
  control_files            = "/data/oracle/oradata/orcl/control01.ctl"
  control_files            = "/data/oracle/flash_recovery_area/orcl/control02.ctl"
  db_block_size            = 8192
  db_16k_cache_size        = 12M
  compatible               = "11.2.0.0.0"
  db_recovery_file_dest    = "/data/oracle/flash_recovery_area"
  db_recovery_file_dest_size= 3882M
  undo_tablespace          = "UNDOTBS1"
  remote_login_passwordfile= "EXCLUSIVE"
  db_domain                = ""
  dispatchers              = "(PROTOCOL=TCP) (SERVICE=orclXDB)"
  local_listener           = "LISTENER_ORCL"
  audit_file_dest          = "/data/oracle/admin/orcl/adump"
  audit_trail              = "DB"
  db_name                  = "orcl"
  open_cursors             = 300
  diagnostic_dest          = "/data/oracle"

应用参数创建实例之后,后台进程依次启动,注意以下输出中包含了PID以及OS ID两个信息,PID代表该进程在数据库内部的标识符编号,而OS ID则代表该进程在操作系统上的进程编号:

Fri Sep 17 17:42:09 2021
PMON started with pid=2, OS id=86062
Fri Sep 17 17:42:09 2021
VKTM started with pid=3, OS id=86064
VKTM running at (100ms) precision
Fri Sep 17 17:42:09 2021
GEN0 started with pid=4, OS id=86068
Fri Sep 17 17:42:09 2021
DIAG started with pid=5, OS id=86070
Fri Sep 17 17:42:09 2021
DBRM started with pid=6, OS id=86072
Fri Sep 17 17:42:09 2021
PSP0 started with pid=7, OS id=86074
Fri Sep 17 17:42:09 2021
DIA0 started with pid=8, OS id=86076
Fri Sep 17 17:42:09 2021
MMAN started with pid=9, OS id=86078
Fri Sep 17 17:42:09 2021
DBW0 started with pid=10, OS id=86080
Fri Sep 17 17:42:09 2021
LGWR started with pid=11, OS id=86082
Fri Sep 17 17:42:09 2021
CKPT started with pid=12, OS id=86084
Fri Sep 17 17:42:09 2021
SMON started with pid=13, OS id=86086
Fri Sep 17 17:42:09 2021
RECO started with pid=14, OS id=86088
Fri Sep 17 17:42:09 2021
MMON started with pid=15, OS id=86090
Fri Sep 17 17:42:09 2021

这个关系我们也可以通过视图v$process查询到

select addr,pid,spid,username,program from v$process;      --这里的pid是数据库内部的标识符编号,而spid则代表该进程在操作系统上的编号

  如果在操作系统上发现某个进程表现异常(如占用很高的cpu资源),那么通过操作系统上的PID和v$process视图中的SPID关联,就可以找到这个os上的进程在数据库内部的化身,从而进一步的跟踪诊断。

  

  

posted on 2021-09-22 23:12  太白金星有点烦  阅读(223)  评论(0编辑  收藏  举报

导航