通常所说的Oracle server主要由两部分组成:Instance和Database, Instance是指一组后台进程和一块共享内存域,Database是指存储在磁盘上的一组物理文件。通过instance和Database协同,Oracle数据库才能形成一个动态的可访问关系型数据库系统。
1.Nomount 阶段
这是启动的第一步,Oracle首先寻找参数文件,然后感觉参数文件的设置(内存分配等设置),创建instance实例,分配内存后,启动后台进程,也就是启动数据库实例的过程
SQL> startup nomount; ORACLE instance started. Total System Global Area 1653518336 bytes Fixed Size 2253784 bytes Variable Size 486542376 bytes Database Buffers 1157627904 bytes Redo Buffers 7094272 bytes SQL>
后台进程:
oracle 6933 1 0 21:14 ? 00:00:00 ora_pmon_orcl oracle 6935 1 0 21:14 ? 00:00:00 ora_psp0_orcl oracle 6937 1 7 21:14 ? 00:00:04 ora_vktm_orcl oracle 6941 1 0 21:14 ? 00:00:00 ora_gen0_orcl oracle 6943 1 0 21:14 ? 00:00:00 ora_diag_orcl oracle 6945 1 0 21:14 ? 00:00:00 ora_dbrm_orcl oracle 6947 1 0 21:14 ? 00:00:00 ora_dia0_orcl oracle 6949 1 0 21:14 ? 00:00:00 ora_mman_orcl oracle 6951 1 0 21:14 ? 00:00:00 ora_dbw0_orcl oracle 6953 1 0 21:14 ? 00:00:00 ora_lgwr_orcl oracle 6955 1 0 21:14 ? 00:00:00 ora_ckpt_orcl oracle 6957 1 0 21:14 ? 00:00:00 ora_smon_orcl oracle 6959 1 0 21:14 ? 00:00:00 ora_reco_orcl oracle 6961 1 0 21:14 ? 00:00:00 ora_mmon_orcl oracle 6963 1 0 21:14 ? 00:00:00 ora_mmnl_orcl oracle 6965 1 0 21:14 ? 00:00:00 ora_d000_orcl oracle 6967 1 0 21:14 ? 00:00:00 ora_s000_orcl o
在nomount节点都已经起来一些后台进程了,如上所示。
这里可以通过视图v$process中pid(数据库中内部的进程号)和spid(操作系统进程号)进行关联,进行诊断分析。
2.实例启动最小参数
在参数文件中,通常需要最少的参数是DB_NAME,只要有这个参数,数据库实例(nomount)就能起来。
3.ORACLE_SID
oracle_sid就是oracle system IDentifier的缩写,在oracle系统中,oracle_sid以环境变量的形式出现,当oracle实例启动时,在操作系统上fork的进程就依据这个oracle_sid来创建,这就是它的作用。
4.INTANCE_NAME
oracle数据库内部存在一个初始化参数instance_name,用于标示数据库实例的名称,其缺省值通常就是oracle_sid,但是初始化参数instance_name和oracle_sid可以不同,不同的实例可以拥有相同的instance_name
在同一个ORACLE_HONE下,只要ORACLE_SID不同,数据库不校验instance_name参数,通过简单的参数文件复制,就可以在同一台服务器上创建多个具有相同instance_name的实例,因此,在同一台主机上可以启动多个实例,ORCLE_SID不同,但是拥有了相同的instance_name,
5.DB_NAME
相较于instance_name参数来说,DB_NAME代表了实例即将挂载的数据库名称。关系到具体的物理文件。通常缺省的数据库Instance_name和db_name可以设置相同(在rac下,由于多个实例对应一个数据库,所以instance_name和DB_name不同)
结论:
1. 一个实例可以mount并打开任何数据库,但是同一时间一个实例只能打开一个数据库
2.一个数据库可以被多个实例所有mount并打开(rac环境)。