1. 数据库和实例

什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在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实例 = 进程 + 进程所使用的内存(SGA)

ORACLE实例和数据库之间的关系
1. 临时性和永久性
2. 实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义
3. 一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库
4. 一个数据库可被许多实例同时装载和打开(即RAC),RAC环境中实例的作用能够得到充分的体现
 
2. db_name instance_name ORACLE_SID

db_name用于区分一个数据库的内部标识,在安装数据库、创建新数据库、创建控制文件、修改数据库结构、利用RMAN备份时都需要使用数据库名。

存在于(但不仅限于)以下地方:

(1) 以二进制方式存储在控制文件中。

(2) Pfile/spfile中:db_name

(3) 数据库物理结构文件目录中

D:\oracle\oradata\db_name\*.*

D:\oracle\admin\db_name\*.*

查询方法:select name from v$database;

 

instance_name用于和操作系统进行联系。在操作系统中要取得与数据库之间的交互必须使用实例名。例如,要和某一个数据库服务器连接,则必须知道其数据库实例名,知道数据库名是没用的。在安装/创建数据库后,实例名允许修改的。

存在于(但不仅限于)以下地方:

(1) Windows nt/2000注册表中(oracle_sid)

(2) pfile/spfile中:instance_name

(3) 数据库参数文件名中:init.ora

查询方法:select instance_name from v$instance;

与数据库名的关系:一般是一一对应的,RAC中除外。

 
从名称上来说,instance_name=oracle_sid。对于数据库实例名的描述,有时使用instance_name,有时使用oracle_sid,这两个都是数据库实例名。但instance_name是oracle数据库参数,而oracle_sid是操作系统环境变量。

Oracle_sid用于和操作系统交互。也就是说,在操作系统中要想得到实例名,必须使用oracle_sid。例如同一服务器上创建了多个数据库,则就有多个对应的实例,可以通过在操作系统中设置oracle_sid指定要登录的数据库:

$oracle_sid=orcl

$export oracle_sid

C:\>set oracle_sid=orcl

存在于(但不仅限于)以下地方:

(1) Windows nt/2000注册表中(oracle_sid)

(2) 数据库参数文件名中:init.ora

实例名除用于和操作系统联系外,还用于网络连接,即与客户端或其他服务器之间的连接。配置网络连接,就是配置网络连接串。

3. sid、service name、net service name

SID唯一地标识一个Oracle实例,而ORACLE_SID启动该实例,启动之后我们得到一个Oracle实例,这个实例有一个名字:INSTANCE_NAME。SID==>>ORACLE_SID==>>INSTANCE_NAME这三者是一致的,是完全相同的。同时这个实例向外提供服务,所以又有一个SERVICE_NAME。

而SID_NAME出现在lisnter.ora文件中:

 SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PL***tProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2./db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = jiagulun)
(ORACLE_HOME = /u01/app/oracle/product/10.2./db_1)
(GLOBAL_DBNAME = jiagulun)
)
) LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = redhat4)(PORT = ))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

listener.ora中的SID_NAME的值必须与SID的值一致。通过listener.ora中的SID_NAME和GLOBAL_DBNAME两 个参数以及客户端的tnsnames.ora中的SERVICE_NAME,这三个参数一起作用,可以实现ORACLE客户端与服务端的隔离。

 //tnsnames.ora

 JIAGULUN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = ))
)
(CONNECT_DATA =
(SERVICE_NAME = jiagulun)
)
) EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PL***tProc)
(PRESENTATION = RO)
)
)
客户端根据tnsname.ora中的SERVICE_NAME和地址(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)),到这个地址去访问监听器。然后监听器根据文件lisnter.ora文件中的GLOBAL_NAME来判断是否有一个 GLOBAL_DBNAME 和 SERVICE_NAME 相等。 如果相等,则建立客户端到SID标识的服务端实例的连接。(有一个例外:tnsnames.ora中可以用参数SID来取代SERVICE_NAME,这 时比较的是tnsnames.ora中的SID和lisnter.ora中的SID_NAME,但是从oracle9i开始不推荐使用SID。因为SID 无法隔离客户端和服务端)
 tnsnames.ora中的地址(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))是监听器监听的地址。监听器进程一直在这个地址上监听,等待客户端的连接。
总结一下
1)客户端和服务端的隔离是通过lisnter.ora中的GLOBAL_DBNAME来实现的,GLOBAL_DBNAME是一个连接客户端和服务端的桥梁:
a>client端tnsnames.ora中的SERVICE_NAME和server端lisnter.ora中的GLOBAL_DBNAME相等;
b>server端的lisnter.ora中的SID_NAME与系统的SID相等;
2)SID==>>SID_NAME==>>ORACLE_SID==>>INSTANCE_NAME 四者是一致的,相等的;
3)可以在lisnter.ora中配置多个不同的GLOBAL_NAME来供不同的客户端SERVICE_NAME来对应,从而实现不同的客户端使用不同的SERVICE_NAME来访问同一个SID实例使用,配置如下:
 //lisnter.ora

     (SID_DESC =
(SID_NAME = jiagulun)
(ORACLE_HOME = /u01/app/oracle/product/10.2./db_1)
(GLOBAL_DBNAME = jiagulun)
)
(SID_DESC =
(SID_NAME = jiagulun)
(ORACLE_HOME = /u01/app/oracle/product/10.2./db_1)
(GLOBAL_DBNAME = jgl)
) //tnsnames.ora JIAGULUN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = ))
)
(CONNECT_DATA =
(SERVICE_NAME = jiagulun)
)
) JGL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = ))
)
(CONNECT_DATA =
(SERVICE_NAME = jgl)
)
)
 

Oracle基本概念的更多相关文章

  1. [转载]oracle游标概念讲解

    原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互 ...

  2. Oracle基本概念与数据导入

    Oracle基本概念 实例 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成.一 ...

  3. 【转载】Oracle死锁概念,阻塞产生的原因以及解决方案

    参考原文:http://blog.sina.com.cn/s/blog_9d12d07f0102vu72.html 锁是一种机制,一直存在:死锁是一种错误,尽量避免.​ 首先,要理解锁和死锁的概念:​ ...

  4. ORACLE游标概念讲解

    1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制. ②关系数据库中的操作是在完整的行集合上执行的.   由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所 ...

  5. Oracle表概念

    对于初学者来说,对表的概念也有一定的认识.因为我们对数据库的操作,90%以上是对表的操作. 常见表的规则表(Regular table),严格意义上来说又叫 heap table(堆表),也就是我们最 ...

  6. Oracle 用户概念与基本操作

    目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...

  7. oracle asm 概念

    automated storage management ,即自动存储管理,简称asm .. 在oracle 10g 这个版本之前,管理一个大型数据库成千上万的数据文件对数据库管理员来说是一个既无技术 ...

  8. OCP读书笔记(1) - Oracle核心概念和工具

    ohasdoracle high available service daemon OEMweb -- Database Control资料库 -- sysman Starting Oracle Re ...

  9. Oracle数据库概念和一些基本的SQL语句

    1.数据 定义:描述事物的符号.例如:文本.音频.视频都是数据. 2.数据库 存放数据的仓库,存放在计算机中,按照一定格式存放,可以为用户共享. 3.数据库的发展阶段 1.网状数据库 2.层次数据库 ...

  10. Oracle 基础概念

    数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) --查询当前数据库名:select name from v$database; 数据库实例是一组Oracle后台进程/线程以及 ...

随机推荐

  1. 解决OV系列摄像头寄存器读数据无法收到的问题

    最近工作中接了一款OV7725的sensor,由于平台已经接过很多的家的sensor也就没有太当回事.问题出现的很奇怪,再看了 register map后基本确定了要尽心register  R/W测试 ...

  2. vim-addon-manager【转】

    Vim是一个非常优秀的编辑器,但是没装插件的Vim就始终只是个编辑器而已,是插件让Vim变得更加强大. 但是插件装得多了,管理就成了问题,Vim本身并没有提供插件管理功能,往往时间一长,.vim/vi ...

  3. CodeIgniter框架——数据库类(配置+快速入门)

    CodeIgniter用户指南——数据库类 数据库配置 入门:用法举例 连接数据库 查询 生成查询结果 查询辅助函数 Active Record 类 事务 表格元数据 字段元数据 自定义函数调用 查询 ...

  4. mysql with python

    前言: 数据库为人类解决了三大问题:持久化存储.优化读写.数据标准化. MySQL它不是数据库,它是管理数据库的软件.MySQL管理了很多数据库.是典型的服务型数据库,需要TCP/IP去连接. MyS ...

  5. splay tree成段更新,成段查询poj3466

    线段树入门题,换成splay tree 来搞搞. #include <stdio.h> #include <string.h> #include <algorithm&g ...

  6. 一张图玩转H5测试

    背景 随着各种H5页面的普及和运用,并深深的影响着我们各个业务的发展,前两年也对H5测试的有着不少积累,但都是根据项目的要求,这里测试下,那里测试下,今年上半年专门成立了H5测试研究虚拟小组,专门研究 ...

  7. Brouwer fixed-point theorem

    w https://en.wikipedia.org/wiki/Brouwer_fixed-point_theorem https://zh.wikipedia.org/wiki/布劳威尔不动点定理 ...

  8. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  9. JavaScript数据结构-树

    我认为这社会上,也不差钱好多人,可能好多人也不差权力.可是我认为能得到这样的满足的也不多. –郭小平<临汾红丝带学校校长> ​ 树是计算机科学中经经常使用到的一种数据结构. 树是一种非线性 ...

  10. 设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)

    思想:图G是不带权的无向连通图.一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地 ...