实例
实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以操作数据库;实例 就是治理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)
数据库
数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据
3.服务名
服务名 就是对外公布的名称,为网络监听服务
4.SID
sid用于实例区分各个数据库,service name用于外部链接。
这里我说简单一点吧,理论上的东西有点绕。
数据库:有一定的方法去管理的,按照一定方式存放和读取数据的空间。(比如oracle有表空间,数据文件,视图,角色,权限等进行管理和存放数据)
实例:说白了,就是给上面的数据库分配的内存,以及为了这个数据库启动的进程。(比如,在oracle数据库启动后,非配给这个数据库sga的内存空间,而且启动了smon(oracle系统管理进程),pmon(内存管理进程),ckpt(检查点进程)等,这两项和在一起,叫做实例)
服务名:服务名其实没有明确的定义(个人理解),基本应用是在配置监听的时候才有用(rac的时候有些用处),这个名字其实是随便起的,没有什么固定的意义,只要你能分辨出来,其实起什么名字都行。(中文的好像不行)
SID:是数据库和实例的标识。(假设你的机器上有两台数据库,而且都启动了,那么怎么证明这个这部分SGA是分给A数据库的,怎么证明这个pmon进程是B数据库的,其实就是通过这个标识去判断的。一般认为每个数据库的SID在同一个网络中唯一就行。)