十三、分布式ORACLE系统简介
1.分布式体系结构的ORACLE
1986年,ORACLE公司推出了它的分布式体系结构的ORACLE数据库系统。该系统是由分布式数据库管理系统(ORACLE RDBMS)、支持多种操作系统和通信协议的分布式处理环境软件SQL*NET、以及与非ORACLE RDBMS联接的软件SQL*CONNECT这三部分组成的一个软件群。分布式ORACLE采用了典型的开放式体系结构,对环境的适应范围非常广泛,可适应多种通信协议、多种操作系统、多种硬件环境及多种DBMS和数据源。
2.网络ORACLE的连接过程
网络ORACLE的连接过程大致包括以下几步:
(1)确认网络结点是否安装了SQL*NET,如未安装,则需执行:*$SYS@ORACLE:NCONFIG.COM≠进行安装,并且使用SGAPAD.COM重新链接。
(2)确认安装中选取的网络驱动器与操作系统环境下所配置的通信协议是否相符。(3)待(1)、(2)两项均确认后,则可在服务器(Server)结点上建立一个命令文件。这个命令文件主要完成以下工作:指定ORACLE系统标识码SID,从而确定将哪一个ORACLE RDBMS作为服务器。这是因为同机上可运行多个ORACLE RDBMS,指定方式为:$ASSIGN〈SID标识码〉ORACLE$SID指定ORACLE系统所在目录:$ASSIGN〈目录名〉SYS$ORACLE指定SQL*NET执行代码的逻辑名$ORASRV=SYS$ORACLE:ORASRV.EXE启动SQL*NET的执行代码$ORASRV DECNET-NSP:
(4)待完成以后,用户即可进行远程访问。(注意两个结点上的ORACLE系统应处于开启状态)
(5)为了加强网络通信管理和避免冲突等原因,可以通过VAX/VMS网络控制程序NCP建立一和于ORACLE网络通信的缺省帐号。
3.网络ORACLE的使用
除了以下实用程序以外,其它ORACLE实用程序和软件工具均可以通过SQL*NET访问远程结点的ORACLE系统IOR AJI仅供本地使用。另外,用户通过各种语言编写的应用程序也可以进行远程存取。用户远程存取的方式非常简单,仅需要在“用户名/口令”(ORACLE的合法用户)后面附上结点信息。
4.分布式查询
分布式查询和数据传输,主要指用户在前端机上执行本地的进程通过SQL语句或SQLplus命令查询或传输远程结点上的数据。由于网络ORACLE系统的分布式查询功能很强,用户可以同时查询多个结点上的数据库数据。传输数据功能用于两个结点之间数据及定义的复制,下面将分别介绍。ORACLE系统分布式查询的功能使得一个结点上的用户可以通过SQL查询语句访问其它结点数据库的数据。并且用户还可以同时存取访问多个结点(包括本地结点)的数据,从而使数据库的查询功能大大增强。
(1)数据库链路(DATABASE LINK)为了使分布式查询操作更加简单方便,ORACLE RDBMS为用户提供了一个新的数据定义方式:数据库链路。用户可以通过数据库链路定义,在本地结点和远程之间进行查询和连接。进行远程访问的用户需要明确:远程数据库所在的结点;远程结点上的哪个数据库;远程数据库的哪个用户。数据库链路即用于标识以上内容。用户通过SQL的CREATE DATABASE LINK语句定义数据库链路。其格式为:CREATE[PUBLIC]DATABASE LINK链路名CONNECT TO用户名INENTIFIED BY口令USING‘驱动器前缀:结点名““操作系统用户名口令”””::“““TASK=ORDN后缀.COM”””;如果用户事先定义一个逻辑名:$ASSIGN结点名,“““操作系统用户名口令”””::“““TASK=ORDN后缀.COM”””,逻辑名那么CREATE DATABASE LINK就变得十分简洁:CREATE[PUBLIC]DATABASE LINK链路名CONNECT TO用户名IDENTIFIED BY口令USING‘驱动器前缀:逻辑名’;这里PUBLIC代表公用数据库链路,只有DBA才能使用PUBLIC限定词。
(2)远程查询操作在数据库链路定义以后,远程查询就变得非常简单和方便。用户访问查询数据库的表或视图时,只要在表名或视图名后面附上数据库链路名即可通过SELECT语句进行查询。其形式为:SELECT列表达式[,列表达式,…] FROM表名@数据库链路名[,表名@数据库链路名,…] [WHERE逻辑表达式];
(3)定义同义名用户可以用同义名来简化一些繁琐的表名或视图名。对于远程查询操作,用户也可以为远程数据库的表名或视图名定义相应的同义名。
(4)连接操作在远程查询中,用户可以连接相同(或不同)结点上数据库中的表。连接(JOIN)操作可以针对以下情况:同一数据库中的两个表或多个表;同一结点不同数据库中的两个表或多个表;不同结点上数据库中的两个表或多个表;
(5)查询远程数据库中其他用户的数据用户在通过数据库链路进行远程查询时,可以访问其他用户的数据。数据库链路的定义中指定一个远程用户名及口令,这个用户名被称为链路用户名。上面所述的“其他用户”即指非链路用户。如果链路用户具有访问其他某一用户,记为用户A的权限,那么,Client用户就可以通过数据库链路查询服务器用户A中的数据。
(6)远程子查询前面介绍的是基于主查询的远程访问。事实上,SQL语句中的子查询(Sub-query)也可以访问远程结点的数据库数据。这种子查询称为远程子查询。可嵌入查询的语句有:SELECT INSERT UPDATE CREATE TABLE CREATE VIEW
5.远程数据传输
目前网络ORACLE系统尚不能通过INSERT,UPDATE语句更新远程结点的数据库数据。但是ORACLE提供结点之间传输数据库数据的能力。SQL/plus的COPY命令将用于实现这一功能。用户使用COPY命令可以进行从一个结点(称为源结点)到另一结点(称为目标结点)之间的数据传输或复制。使用COPY命令与数据库链路的定义类似,需要反映定结点名、数据库(即命令文件和“用户名/口令”。其中源描述和目标描述分别用于指示源结点目标结点上的结点名、数据库(即命令文件)和“用户名/口令”,下面是COPY命令的基本形式:COPY[FROM源名][TO目标名] {APPEND|CREATE|INSERT|REPLACE} 表名[(列名[,列名…])] USING SELECT语句其中源名和目标名分别用于指定源结点和目标结点上的结点名、数据库和“用户名/口令”,如:用户名/口令@驱动器前缀:结点名“““用户名口令”””::“““TASK=ORDN后缀.COM”””;如果事先分配了逻辑名,则源描述和目标描述会变得更简洁一些。如果源结点为本地,则COPY命令可略去FROM子句。如果目标结点为本地,则可除去TO子句。COPY命令将传送数据到目标数据库指定表。具体传输的数据是子查询的结果。其中APPEND、CREATE、INSERT和REPLACE限定词用于指定传输的方式:APPEND 将传输的数据加在指定表中。如果该表不存在,则先建表,再加入;INSERT 将传输的数据加在指定的表中。如果该表不存在,则先建表,再加入数据;CREATE 建立指定的表,并加入数据,如果该表存在,则出错;REPLACE 将传输数据替换原表中已有的数据。
十四、面向对象方法与面向对象数据库
1.面向对象技术的形成与发展
80年代以来,面向对象语言如雨后春笋搬出现,形成了面向对象语言的两大类:一类是纯面向对象的语言,如Smalltalk和Eiffel等;另一类是混合型面向对象语言,即在过程语言中增加面向对象的机制,如C++、Objective-C等等。现在,作为80年代最流行的C语言的扩充的面向对象C++,是目前应用最广泛的语言。C++编译产生的代码性能几乎与传统的C编译产生的代码性能相同。面向对象的Pascal和BASIC也已在DOS、Windows上OS/2中实现。现在,面向对象技术已成为一种广泛使用的成熟的技术和方法,有一系列成熟的商品软件工具支持OON。OON中涉及到下列一些基本概念:信息(Information)是指对事物的一种表示或描述。对象(Object)是一个由信息及其关于信息处理的描述组成的包。消息(Message)是对某种信息的处理的描述。类(Class)是对一个或几个相似对象的描述。实例(Instance)是被某一个特定的类所描述的一个对象。因此,每一个对象都是某个类的一个实例,而类是一些实例的全部相似特征的描述。方法(Method)是描述对象对消息的响应。对象是一个普遍适用的基本的逻辑概念,是一个有组织形式的、含有信息的实体或结构。它既可以表示一个抽象的概念,也可以表示一个具体的程序模块;既可以表示软件,也可以表示硬件。于是,OOM提供了同时在现实世界和机器世界进行系统分析、设计和实现的统一的方法。
2.程序设计方法学
随着软件系统规模的扩大和复杂性的增加,软件的开销也惊人地增加了,而软件的可靠性和可维护性却明显地下降了。为此,人们惊呼软件危机。产生软件危机的根本原因在于传统的冯•诺依曼机(Von Neumann Machine)的结构和人们求解问题的方法的不一致性。这种不一致性主要表现在以下几个方面:
(1)语言的鸿沟;
(2)程序设计的鸿沟;
(3)Von Neumann机的鸿沟。语言的鸿沟是形成软件危机的主要原因之一。从目前看,面向对象的语言在缓解软件危机方面起到了很大的作用,取得了前所未有的积极效果。
3.面向对象的程序设计方法
经验告诉我们:在软件系统中,“过程”或“操作”是不稳定的、多变的,而“数据结构”或“对象”却是相对稳定多了。因此,传统的以过程为中心而设计的软件的可重用性差;而以数据结构或对象为中心而设计的软件的可重用性较好。面向对象的程序设计方法以数据结构或对象为中心,力求问题在现实世界和机器世界中的一致性。在使用OOM进行程序设计时,首先进行的是面向对象的分析(Object Oriented Analysis)。其任务是了解问题所涉及的对象、对象间的关系,然后在现实世界中构造该问题的对象模型,以反映所要解决的“实质问题”。然后,进行面向对象的设计(Object Oriented Design),即设计软件的对象模型。根据软件开发环境的功能,把问题的对象模型从现实世界过渡到机器世界。在软件系统内设计出各个对象、对象间的关系(如继承关系),对象间的通信方式(如消息模式)等等。总之,在该阶段应明确各个对象应做些什么及其关系。面向对象的实现(Object Oriented Implementation)是指软件功能的具体实现,即怎么做的实现其中包括对象内部功能的实现、确定系统的用户接口。在实际开发一个系统时,上述三个阶段必须有机地结合在一起。现在提倡面向对象的软件开发方法,并进一步规范化,还开发了一系列OOM的软件工具和软件环境,以支持软件自动生成。
4.面向对象的方法的基本概念与特征
实质上,软件是问题及其求解方法的一种表达形式。显然,如果软件能直接自然地表达求解方法,则软件不仅易于理解,而且也具有较高可靠性与可维护性。如果能按照人们通常的思维方式,在机器世界里建立问题的模型,则可以提高软件的模块化和重用的可能性。面向对象方法的基本原则是:按照人们在现实世界中的通常的思维方式建立问题在机器世界的模型,设计尽可能自然地表现求解方法的软件。在OOM中,对象(object)和消息传递(Message passing)分别作为表达事物及事物间相互联系的概念。类(class)和继承(inheritance)作为适合人们一般思维方式的描述机制。方法(method)允许各种操作作用于某类对象上。这种集对象、类、消息、继承和方法于一体的OOM的基本点在于对象的封装(encapsulation)和继承。通过封装能将对象的定义和其实现分开;通过继承能体现类与类间的关系,并由此带来了动态连接(dynamic binding)和实体的多态性(polymorphisim)从而构成了OOM的基本特征。
(1)对象为了使用计算机求解问题,现实世界的对象必须表示成计算机内部的概念,即机器世界的对象(简称机器对象,或对象)。为此,“对象”有在两个不同世界的不同含义,可以从下文中区分开来。从存储角度来看,机器对象占有一块存储空间,其中有数据也有方法。从机器实现机制来看,机器对象中私有数据表示了对象的状态,该对象的状态只能由私有的方法来改变它。每当需要对象来完成一定处理工作时,只能由其它对象向该对象发送消息,本对象响应消息后按照消息模式找出匹配的方法,并执行该方法,方法定义了该对象上的操作。
(2)消息和方法程序的执行是靠在对象间传递消息来完成的。7发送消息的对象称为发送者,接收消息的对象称为接收者。消息中仅包含发送者的要求,它只告诉接收者需要完成哪些处理,但并不指示接收者应如何完成这些处理。消息完全由接收者解释,并决定完成所需的处理的方式。一个对象可以接收不同形式、不同内容的多个消息;相同形式的消息可以发往不同的对象。不同的对象对形式相同的消息可以有不同的解释,因而可以作出不同的反应。这里,反应并不是必需的。这与子程序的调用/返回有明显的不同。把全部对象分成各种对象表,每个类都定义一组所谓“方法”。方法实际上是允许作用于该类对象上的各种操作。当一个面向对象的程序在运行期间,一般要做三件事:
(1)根据需要创建对象;
(2)从一个对象(或用户)向另一个对象传递消息;
(3)若不再需要该对象时,应删除它,并回收它所占用的存储单元。
(3)类和类的层次在面向对象的程序设计中,对象是程序的基本单位。相似的对象,可以像传统程序设计语言中的变量与类型关系一样,归并到一类(class)中去。程序员只需定义一个类对象,就可以得到若干实例(instance),作为可以使用的对象。具体地说,类由方法和数据组成,是关于一类对象的性质的描述。它包括外部特性和内部特性两个方面。通过描述消息模式及其相应的处理能力来定义对象的外部特性。通过描述内部状态的表现形式及固有的处理能力的实现来定义对象的内部实现特性。对象是在执行过程中,根据对象所属的类,动态地生成的。一个类可以生成多个不同的对象。同一类对象具有相同的特性。一个对象的内部状态只能由其自身来修改,任何别的地象都不可能修改它。因此,同一个类的对象,虽然在内部状态的表现形式上相同,但它们可以有不同的内部状态,故此这些对象并不完全一模一样。一个类的上层可以有超类(superclass),下层可以有子类(subclass),这样形成了一种类的层次结构。层次结构的一个重要特点是继承性,一个类可以直接或间接地继承其超类的全部描述。继承性具有传递性。一个类可以有多个子类,也可以有多个超类。抽象类(abstract class)是一种不能建立实例的类。抽象类将有关的类组合在一起,提供了一个公共的根,其它一些子类从这个根派生出来。通常一个抽象类只描述了这个类的 有关的操作接口。或者操作的部分实现;完整的实现则被留给一个或几个子类,抽象类一般用于定义一种协议或概念。
(4)继承性继承性(inherintance)是自动地共享子类、超类和对象中的方法和数据的一种机制。如果没有继承性,不同类中的对象中的数据和方法就可能出现大量的重复。继承性比较自然地体现了对象间的联系。
(5)封装性封装是一种信息隐蔽技术,用户只能看到对象封装界面上的信息,对象内部的信息对用户是隐蔽的。封装的目的是使对象的使用者和对象的设计者分开,使用者不必知道实现的具体细节,只须按设计者的要求来访问对象,这样方便于系统的集成。封装是一种强有力的系统集成手段。封装和类说明有关。一个类的每一个实例都是一个单独的封装(或组件)。显式地把对象的规格说明(specification)和对象的实现分开是面向对象的一大特色。封装本身即是一个模块,把对象的定义模块和实现模块分开,从而使得维护和修改变得方便。
(6)多态性所谓多态(polymorphic),即一个名字可以具有多种语义。多态与动态类型和静态类型有关。动态类型是指在执行期间可以改变的类型。静态类型是在程序文本中声明时确定下来的类型。在面向对象的系统中,利用重名这样多义性不会带来混乱,并且为需求分析和设计带来了好处。
5.动态聚束
聚束(binding)其实并不是一个新概念。一个程序经编译到连接成为可运行的目标代码,就是将可执行代码聚束在一起。用传统语言写的程序在运行之前即可聚束,故此称之为静态聚束(static binding)。而面向对象语言则在程序运行时可发生聚束,故称之为动态聚束(dynamic binding)。动态聚束增加了程序的简单性和可扩充性,使程序增删自如,不易出错,但效率略低。应该指出,静态聚束运行效率高,但修改维护时工作量大。
6.面向对象的系统分析方法
系统分析过程就是提取一个系统的需求过程,即是指为了满足用户的需求,系统必须做什么,而不是指系统如何实现。系统分析通常是一个需求文档开始点,同用户进行一系列的讨论为开端。一般来说,参加制定文档的人应包括系统的最终用户、问题域专家、系统的开发者以及其它感兴趣的人。在过去的10年中,已经在系统分析中使用了功能分解法、数据流法、信息模拟法。最近研究了面向对象分析(OOA)方法。下面将综述这4种主要的需求分析方法。
(1)功能分解法 它可表示为功能=子功能+子功能接口
(2)数据流法 数据流法,即通常所说的结构分析法,它可表示为数据流=数据存储+数据变换+过程说明+数据字典
(3)信息模拟法 信息模拟的主要建模工具是实体-关系图,现已发展成为语义数据模型。信息模拟法可以表示为信息模拟法=对象+属性+关系+超类+子类+对象
(4)面向对象法 面向对象的含义很广,因为“对象”一词可以在不同领域有不同的解释,面向对象的可以表示为面向对象法=对象+类+继承+消息通信面向对象分析是建立在信息模拟和面向对象程序设计语言的概念基础之上的。作为一个比较全面的方法,面向对象分析由5个步骤组成:①确定类和对象;②识别结构;③识别主题;④定义属性;⑤定义方法。现在已有了一些面向对象分析的CASE工具支持OOA,以加速OOA的自动化和标准化。
7.面向对象设计和面向对象实现
从面向对象分析到面向对象设计是一个逐步扩充的细分过程,同传统的实体关系模型为基础的系统分析和设计类似,面向对象的设计使用的是面向对象的概念模型。在面向对象的概念模型中以面向对象方法中的基本概念为基础。最后,使用面向对象的语言,对设计的概念模型加以实现。限于篇幅不再详细讨论
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |