一、通俗解释
首先说说,数据库是做什么?
数据库是用来长久存储数据的,而我们大家都知道内存只能临时存储,磁盘等才能真正存储数据.
那数据库会放那里呢?肯定是存放在磁盘上,其实数据库就是磁盘上的一个文件。
从上面我们得出结论:数据库==磁盘上的文件.
既然数据库可以看成磁盘上文件,我们怎么使用数据库呢?
如果说我们可以直接使用数据库,那就等价与直接使用磁盘上的文件.
我们知道这样的一个常识:必须把磁盘上的文件读入内存才能使用.这就与我们以前所知道的一个常识相违背了.
那正确的流程是不是应该这样呢?把磁盘上文件先读入内存,然后再使用呢.
对了,这个才是使用数据库的正确流程.
数据库如何读入内存呢?
这个时候,就是我们要介绍的instance(实例)了.实例就是内存结构和一组后台进程.
实际上,正常的数据库读入内存的过程是,由实例中一组后台进程从磁盘上将数据文件读入到实例的内存中,然后经过在内存中对数据的操作再从实例的内存中经过一组后台进程写到数据库中.
那实例相对与数据库而言,应该就是数据库的运行环境(随不准确但也很贴切).
二、专业解释
实例是“内存”和“后台进程”的集合。数据库是数据的物理存储。特别注意,一个实例可以用于一个数据库,多个实例也可以同时用于一个数据库,实例和数据库的关系是一对多的关系。
举个例子,如果把数据库比作一架飞机,实例就是飞机的发动机。那么,一台发动机可以驱动飞机,两台发动机也可以同时驱动一架飞机。
多个“实例”同时驱动一个“数据库”的架构叫“集群(Oracle real application clusters,简称RAC)”,这是Oracle的一种高端应用,如果结合磁盘阵列的保护机制,RAC能最大限度的保护我们的应用不间断运行,数据不丢失。
什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Oracle数据库的,不能作为别的用途。这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。
而什么是Instance呢,Instance其实就是指的操作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问操作。
所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行操作。而如果只有数据库Instance,那么我们虽然可以急性操作,但是也不知道操作哪些数据,操作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。
在这里要注意一点的是,Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。
三、Oracle
什么是oracle? 平常所说的 Oracle 或 Oracle 数据库指的是 Oracle 数据库管理系统. Oracle 数据库管理系统是管理数据库访问的计算机软件(Oracle database manager system). 它由 Oracle 数据库和 Oracle 实例(instance)构成(区别mysql,mysql没有实例的概念)
Oracle 实例: 位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被所有进程访问.Oracle 用它们来管理数据库访问.用户如果要存取数据库(也就是硬盘上的文件) 里的数据, 必须通过Oracle实例才能实现, 不能直接读取硬盘上的文件.实际上, Oracle 实例就是平常所说的数据库服务(service) .在任何时刻一个实例只能与一个数据库关联,访问一个数据库;而同一个数据库可由多个实例访问(RAC)
1、一个Oracle数据库系统中可以同时安装几个数据库,每一个数据库对应一个唯一的实例,但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务器
2、只是一个名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中,service_names是对外的服务名,是服务器端使用的,一个库可以设置多个对外服务名。比如你身份证叫王大锤,这个就是SID,但是对外不同圈子你有很多外号,蛋蛋,二狗子,这些对外的称呼就是SERVICE_NAME.
3、NET EASY CONFIG操纵的应该是主机字符串,是为客户端服务的,
一个数据库可以对外公布多个服务名(SERVICE_NAMES)
一个客户端也可以用多个主机字符串连接到同一个数据库服务器上
4、一个OS上可以装多个Oracle数据库(小的概念),每个库可以对外公布多个服务名,都通过init.ora和listener.ora来实现
注意:在mysql中数据库与数据库实例是一对一之间的关系,区别于oracle一对多的概念
四、举例
在Oracle中打开一个数据库,这个时候我们要使用sqlplus了.sqlplus是oracle的一个连接工具,相当于sql server中的查询分析器.
用户名:system
密码:manger(自己在装Oracle时设定的)
点登录进入sqlplus.
登录sqlplus以后,system这个用户是没有权限启动实例的,所以我们这时要更换登录用户.
使用sys用户连接
的命令如下 :
conn sys as dba
密码:
输入完后.可以再输入如下命令查看当前用户:
show user;
一:下面就可以打开数据库了
1.启动实例(instance)
startup nomount
2.将数据库装载到实例(instance)中
alter database mount
3.打开数据库
alter database open
二:关闭数据库:
1.shutdown immediate(包括三个步骤如下所述:)
首先关闭数据库
然后从实例上卸载数据库
最后关闭实例
通过Oracle打开以及关闭一个数据库的例子我们可以清楚的区分.数据库(database)和实例(instance)的概念.