Oracle最最基本的概念: 实例和数据库
实例就是oracle进程和一块共享内存,
数据库就是静态的文件,如datafile, log file, redo logfile, control file, spfile等
下面通过一些实验看看这些进程和文件
1. 刚启动你的linux server的时候,还没有打开任何oracle 进程或服务, 查看进程: ps -aef | grep orcl
返回结如下,可以看到什么oracle进程都没有
oracle@ora10g:~$ ps -aef | grep orcl
oracle 1988 1825 0 08:32 pts/2 00:00:00 grep orcl进程间通信信息
oracle@ora10g:~$ ipcs -a------ Shared Memory Segments --------key shmid owner perms bytes nattch status------ Semaphore Arrays --------key semid owner perms nsems------ Message Queues --------key msqid owner perms used-bytes messages
2. 打开sqlplus: sqlplus "/as sysdba"
注意, 用sqlplus时,必须设置好ORACLE_SID, 否则sqlplus会提示错误"ERROR, ORA-12162 TNS:net service name is incorrectly specified"
这是查看进程, 可以看到这里只有oracle服务进程,还没有其他进程
oracle@ora10g:~$ ps -aef | grep orcl
oracle 2065 2064 0 08:36 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 2067 1825 0 08:36 pts/2 00:00:00 grep orcl
3. 在sqlplus中执行>startup nomount, 这时还没有转载数据库。
这时查看进程,我们就可以看到如下oracle进程,pmon进程监视器进程,lgwr日志写入进程, 这些就是数据库实例了。
oracle@ora10g:~$ ps -aef | grep orcloracle 2071 1 0 08:38 ? 00:00:00 ora_pmon_orcloracle 2073 1 0 08:38 ? 00:00:00 ora_psp0_orcloracle 2075 1 0 08:38 ? 00:00:00 ora_mman_orcloracle 2077 1 0 08:38 ? 00:00:00 ora_dbw0_orcloracle 2079 1 0 08:38 ? 00:00:00 ora_lgwr_orcloracle 2081 1 0 08:38 ? 00:00:00 ora_ckpt_orcloracle 2083 1 0 08:38 ? 00:00:00 ora_smon_orcloracle 2085 1 0 08:38 ? 00:00:00 ora_reco_orcloracle 2087 1 0 08:38 ? 00:00:00 ora_cjq0_orcloracle 2089 1 0 08:38 ? 00:00:00 ora_mmon_orcloracle 2091 1 0 08:38 ? 00:00:00 ora_mmnl_orcloracle 2093 1 0 08:38 ? 00:00:00 ora_d000_orcloracle 2095 1 0 08:38 ? 00:00:00 ora_s000_orcloracle 2096 2064 0 08:38 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 2100 1825 0 08:39 pts/2 00:00:00 grep orcl
这个时候查看进程间通信情况,就可以看到这里有共享内存和信号量
oracle@ora10g:~$ ipcs -a
------ Shared Memory Segments --------key shmid owner perms bytes nattch status0x00000000 163840 oracle 600 393216 2 dest0x00000000 196611 oracle 600 393216 2 dest0x00000000 229380 oracle 600 393216 2 dest0x00000000 262149 oracle 600 393216 2 dest0x00000000 294918 oracle 600 393216 2 dest0x00000000 327687 oracle 600 393216 2 dest0x00000000 360456 oracle 600 393216 2 dest0x00000000 393225 oracle 600 393216 2 dest0x00000000 425994 oracle 600 393216 2 dest0x00000000 458763 oracle 600 393216 2 dest0x00000000 491532 oracle 600 393216 2 dest0x00000000 524301 oracle 600 393216 2 dest0xc108207c 557070 oracle 640 469762048 14------ Semaphore Arrays --------key semid owner perms nsems0x90023ad8 131073 oracle 640 154------ Message Queues --------key msqid owner perms used-bytes messages
4. 转载和打开数据库
>alter database mount
>alter database open
这时再查看进程,这时你会发现多了多个 j00x进程, 这些是 oracle DBMS job进程, 可以通过select * from DBA_JOBS_RUNNING查看这些job是什么。
oracle@ora10g:~$ ps -aef | grep orcl
oracle 2071 1 0 08:38 ? 00:00:00 ora_pmon_orcloracle 2073 1 0 08:38 ? 00:00:00 ora_psp0_orcloracle 2075 1 0 08:38 ? 00:00:00 ora_mman_orcloracle 2077 1 0 08:38 ? 00:00:00 ora_dbw0_orcloracle 2079 1 0 08:38 ? 00:00:00 ora_lgwr_orcloracle 2081 1 0 08:38 ? 00:00:00 ora_ckpt_orcloracle 2083 1 0 08:38 ? 00:00:00 ora_smon_orcloracle 2085 1 0 08:38 ? 00:00:00 ora_reco_orcloracle 2087 1 0 08:38 ? 00:00:00 ora_cjq0_orcloracle 2089 1 0 08:38 ? 00:00:00 ora_mmon_orcloracle 2091 1 0 08:38 ? 00:00:00 ora_mmnl_orcloracle 2093 1 0 08:38 ? 00:00:00 ora_d000_orcloracle 2095 1 0 08:38 ? 00:00:00 ora_s000_orcloracle 2096 2064 0 08:38 ? 00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 2125 1 0 08:45 ? 00:00:00 ora_qmnc_orcloracle 2127 1 1 08:45 ? 00:00:01 ora_j000_orcloracle 2129 1 0 08:45 ? 00:00:00 ora_j001_orcloracle 2131 1 0 08:45 ? 00:00:00 ora_j002_orcloracle 2133 1 0 08:45 ? 00:00:00 ora_j003_orcloracle 2135 1 0 08:45 ? 00:00:00 ora_j004_orcloracle 2141 1 0 08:46 ? 00:00:00 ora_q000_orcloracle 2143 1 0 08:46 ? 00:00:00 ora_q001_orcloracle 2145 1825 0 08:47 pts/2 00:00:00 grep orcl5. 查看数据文件
SQL>select * from v$datafile;
NAME----------------------------------------------------------------------------------------------------/u01/app/oracle/oradata/orcl/system01.dbf/u01/app/oracle/oradata/orcl/undotbs01.dbf/u01/app/oracle/oradata/orcl/sysaux01.dbf/u01/app/oracle/oradata/orcl/users01.dbf/u01/app/oracle/oradata/orcl/example01.dbf/u01/app/oracle/oradata/orcl/users02总结
实例是一组后台进程和共享内存
数据库是磁盘上存储的数据集合
实例一生只能转载和打开一个数据库
数据库可以由一个或多个实例(RAC)打开。 转载一个数据库的实例数量会随时间变化。