Oracle 数据库(database) 与 实例(instance) 的概念及关系整理

 

环境:

        操作系统:windows 10

        数据库:Oracle Database 11g r2

写的啥:

        是这样子的,接触Oracle有小段时间了,前段时间有个接触Oracle数据库没多久的朋友找我问了些问题。我就跟朋友说,我简单整理个文档给你吧,于是、、、

        然后这篇算是Oracle Database 的基本体系中的一小部分吧,主要是整理下Oracle数据库管理系统中的数据库(database)和实例(instance)之间的关系。

        从毕业进公司接触Oracle到现在,发现挺多同事对Oracle数据库的数据库和实例的基本概念和之间的关系这些都不怎么清晰,所以大多时候都是自己摸索,所以下面记下来的也不一定都对哈哈(尴尬而不失礼貌的笑),也讲不了太详细的东西,发现错误还请大佬指正!

        加个声明:部分概念来自官方文档!

一、Oracle Database

        感觉首先应该说一下这个东西,以免跟后面混淆,这个就是Oracle公司搞出来的一款关系数据库管理系统,也就是我们安装的这个软件。

        然后有了这个数据库管理系统我们就可以在机子上创建一个或者多个数据库(database)。

二、数据库(database)

        据官方文档的说法:数据库是一组文件,位于磁盘,用于存储数据。

        所以,我们要说的数据库,就是指这一组文件,主要包括控制文件,数据文件,联机重做日志文件等。

        然后,数据库主要的创建方式就是用Oracle的数据库配置助手(Database Configuration Assistant,简称DBCA)或者是CREATE DATABASE语法(emm...反正我没用过这语法)。

        一台机子上是可以创建多个数据库的,一般,安装Oracle Database 的时候如果选择了同时创建数据库的话就会同时创建一个数据库名为orcl的数据库。实际工作中的话,我们一般是根据项目来创建数据库,例如接了个北京的项目,就建个叫做bj的库,接了个广州的库,就建个叫gz的库这样。

三、实例(instance)

        上面有说到,数据库是一组文件,那我们需要操作数据库,往里面写入和修改数据是怎么实现的呢?

        Oracle的实例就充当了操作系统与数据库沟通交流的这个角色。

        再拉一拉官方的定义:数据库实例是一组用于管理数据库文件的内存结构。

        有个通俗点的说法,实例,就是一系列的系统进程和为这些进程分配的内存块。

        实例有个生命周期的说法,从startup开始,到shutdown immediate结束。

        更多介绍还是看官方文档吧,这里不深入说了(别问为什么,不会),官方文档有一章三十多页专门讲这个的。

四、数据库和实例的关系

        首先,数据库和实例是一对一的关系(部署了Oracle集群(RAC)的话会有一个数据库对应多个实例的情况,这里不考虑Oracle集群的情况啦)。

        然后,数据库和实例的关系我们就用startup命令执行的几个步骤来理解,我们知道startup命令后就可以直接正常使用数据库了,那我们把这个命令拆一下来理解,如下:

C:\Users\Lhy>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 6月 2 10:58:17 2018

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


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> startup nomount
ORACLE 例程已经启动。

Total System Global Area 1068937216 bytes
Fixed Size                  2182592 bytes
Variable Size             624951872 bytes
Database Buffers          436207616 bytes
Redo Buffers                5595136 bytes
SQL> alter database mount;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select status from v$instance;

STATUS
------------
OPEN

        1、startup nomount

        启动实例(不加载数据库),这个过程,会读取配置文件(spfile / pfile)文件的相关参数来创建实例,也就是一系列的进程,启动完成后实例是 STARTED 状态。

        2、alter database mount;

        加载(关联)数据库,这个过程的时候,实例读取控制文件,关联到对应的数据库,此时实例为MOUNTED状态。

        3、alter database open;

        打开数据库,实例连接到数据文件,这个时候其他用户就可以访问到数据库进行读写操作了,此时实例的状态是OPEN。

 

        所以,我们打开的过程中实例的状态就是:Deaded(idle)>>Started >> Mounted >> Open。

        而关闭的过程就跟打开的过程相反。关闭>>卸载>>结束进程。

 

        再写一个,当一台机子上有多个数据库的时候,怎么启动自己想启动的那个实例呢?

        通过oracle_sid控制,oracle_sid是数据库在操作系统的一个唯一标识,我们先设定oracle_sid,然后再启动实例,如下:

C:\Users\Lhy>set oracle_sid=orcl

C:\Users\Lhy>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 6月 2 11:34:02 2018

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

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 1068937216 bytes
Fixed Size                  2182592 bytes
Variable Size             633340480 bytes
Database Buffers          427819008 bytes
Redo Buffers                5595136 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      orcl
SQL>

        当然,我们一般不会这么麻烦,我会直接打开services,启动OracleServiceORCL。

        

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值