• oracle的体系结构之基本概念(一)


    通过这段时间废寝忘食的对Oracle数据库的学习,感觉还有小有所成,Oracle确实很庞大,不计其数的参数和术语,当然其能够实现的细腻操作也不是其他数据库系统所能够相提并论的,这里对这段时间所学作一下总结,也能够让初学者有所参考,当然本人技术水平和表达能力都有限,文中难免有错误之处,望指出改正。

    1. oracle的基本概念

    (1)全局数据库名(global_name)

    主要用于在分布式数据库系统中区分不同的数据库,它是由数据库名和数据库域名组成,格式为“数据库名.数据库域名”,数据库域名允许为空,即只写数据库名。

    全局数据库名(global_name)=数据库名(db_name)+数据库域名(db_domain)。

    如数据库名为myOracle ,数据库宿主机的域为mydomain,则数据库的全局数据库名为myOracle.mydomain,呵呵 又出来个数据库名和数据库域名。
     
    查询当前全局数据库名
     
    方法一:  select * from global_name;

    (2)数据库名(db_name)

    oracle可以在一台电脑上可以创建多个数据库,数据库名(db_name)就是一个数据库的标识。db_name会保持在数据文件头里。

    查询当前数据库名

    方法一:  select name from v$database;
    方法二:show parameter db_name
    方法三:查看参数文件

    (3)数据库域名(db_domain)

    定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。

    查询数据库域名

    方法一:select value from v$parameter where name = 'db_domain';
    方法二:show parameter db_domain
    方法三:在参数文件中查询

    使用数据库名(da_name)对一个数据库进行唯一标识,这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了db_domain参数,这样在数据库的标识是由db_name和db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将db_name和db_domain两个参数用‘.’连接起来,表示一个数据库,并将该数据库的名称称为global_name,即它扩展了db_name。db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。

    一个完整的Oracle数据库包括两个部分:数据库和数据库实例。

    (4)数据库

    数据库是存储数据的多个物理文件的集合,如控制文件,数据文件,参数文件,日志文件,临时文件等 ,它是静态的、永久的,只要文件存在它就存在。数据库名(db_name)就是对数据库的标识。

    (5)数据库实例

    oarcle数据库服务器主要有两部分组成:物理数据库和数据库管理系统
    数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为实例结构。
    在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个实例(instance),然后由该实例装载、打开数据库,最后由这个实例来访问和控制数据库的各种物理结构。 数据库至少由一个oracle实例引用,该实例由oracle系统标识符(system identity)唯一标识,用于区别此计算机上的任何其他实例。

    在启动数据库并使用数据库的时候,实际上是连接到该数据库的实例,通过实例来连接、使用数据库。所以实例是用户和数据库之间的一个中间层。
    实例是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。
    一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个实例。为了不使这些实例相互混淆,每个实例都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。

    数据库实例是用户访问数据库的中间层,是使用数据库的手段,它为用户访问数据库提供了必要的内存空间和多个工作进程,它是动态的、临时的,简单的说,Oracle实例就是由内存空间和工作进程两部分组成。 我们只能通过实例操作数据库,同一时间,一个实例只能打开一个数据库,也就是一个实例只能操作或管理一个数据库,但一个数据库可以被多个是实例打开。实例可以在没有数据文件的情况下单独启动,(startup nomount)但这通常是没有意义的,一个实例在生成期内只能装载(alter database mount)和打开(alter database open)数据库。

    ORACLE实例有两种类型:单进程实例 和 多进程实例。

    单进程ORACLE(又称单用ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。

    多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分 ,对于每一个连接的用户都有一个进程。
    在多进程系统中,进程分为两类:用户进程 和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程。

    进程是操作系统的基本执行单元,它是具有独立数据处理功能的正在执行的程序。Oracle系统的进程包括三种类型:

    ①用户进程

    用户在客户端运行一个应用程序(例如 Pro*C 程序)或 Oracle 工具(如OEM或 SQL*Plus)时,系统将为该用户创建一个用户进程。

    用户进程负责与Oracle服务器建立连接和会话并向服务器发出数据处理请求,得到处理结果后再输出给用户。

    Oracle允许为一个用户同时创建多个会话 。

    ②服务进程

    Oracle为用户进程创建一个服务进程或分配一个空闲的服务进程。

    服务进程负责在用户进程和Oracle实例之间调度请求和响应,主要完成:

    •解析与运行应用程序提交的SQL语句;

    •数据处理时用到的数据如果不在SGA 中,负责将所需的数据块从磁盘上的数据文件读入SGA 的数据缓存区;

    •以用户进程能理解的形式返回SQL 语句的执行结果。

    用户进程和服务进程之间的对应关系是由Oracle数据库的工作模式决定的。数据库通常有两种工作模式:

    image 专用服务器模式
    image

    共享服务器模式

                                                                            

    ③后台进程

    Oracle实例启动时,为了保证该实例的正常使用,系统将为该实例启动一些后台进程。

    这些进程是操作数据库的基础,不管有没有用户连接数据库,这些进程都会被启动。

    后台进程包括:

    DBWR(Database Write) : 数据库写入程序

    LGWR(Log Write) : 日志写入程序

    CKPT(Checkpoint) : 检查点

    SMON (System Monitor): 系统监控

    PMON(Process Monitor) : 进程监控

    ARCH(Archive) : 归档

    RECO : 恢复

    LCKn : 封锁;

    (6)实例名(instance_name)

    数据库实例名(instance_name)用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。例如,要去连接一个数据库服务器,就必须知道其数据库实例名。

    查询当前数据库实例名
    方法一:select instance_name from v$instance;
    方法二:show parameter instance_name
    方法三:在参数文件中查询。

    (7)服务名(Service_name)

    该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。如果数据库有域名,则数据库服务名就是全局数据库名,否则,数据库服务名与数据库名相同。

    查询当前数据库服务名
    方法一
    :select value from v$parameter where name = 'service_name';
    方法二:show parameter service_name
    方法三
    :select instance_namefrom v$instance;
    方法四:在参数文件中查询。

    注意:方法三:select instance_namefrom v$instance; 的值是来自操作系统的oracle_sid,oracle_sid是操作系统的环境变量。

    以上这些概念非常容易混淆,且不容易理解,有的可能在使用过程中才能理解的比较透彻。

    本文就先到这儿,下篇为《oracle的体系结构之权限管理(二)》

  • 相关阅读:
    第十五章:Android 调用WebService(.net平台)
    第十四章:样式(Style)和主题(Theme)
    第十三章:常用控件下
    第十三章:常用控件上
    第十二章:Android数据存储(下)
    第十一章:Android数据存储(上)
    第十章:Intent详解
    PHP7.X连接SQLSERVER数据库(CENTOS7)
    CentOs install oracle instant client
    softmax
  • 原文地址:https://www.cnblogs.com/Aion/p/3554066.html
Copyright © 2020-2023  润新知