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

您所在的位置:网站首页 oracle数据库实例的启动分为三个步骤 Oracle 数据库(database) 与 实例(instance) 的概念及关系整理

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

2024-07-11 02:47| 来源: 网络整理| 查看: 265

 

环境:

        操作系统: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。

        



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3