oracle学习方法(8篇)
1.oracle学习方法 篇一
一、物化视图实现表的实时备份
(一) 适用情景:
假定本地数据库中有一个表, 希望被实时地 (假定每分钟同步数据一次) 保存到远端的备份库中, 使得本地表被意外损坏时, 可以迅速从备份库中导回数据。
(二) 物化视图简介:
物化视图是包括一个查询结果的数据库对象, 它是远程数据本地副本, 或者用来生成基于数据表求和的汇总表。
(三) 具体方法:
物化视图分为基于主键的物化视图和基于ROWID的物化视图。
1. 基于主键的物化视图, 适用于主表包含主键的情况。
(1) 本地数据库操作 (主表)
(1) 以SCOTT登陆, 并创建主键表PERSON, 插入测试数据。
CREATE TABLE PERSON (ID VARCHAR2 (10) PRIMARY KEY, NAME VARCHAR2 (20) ) ;
(2) 创建基于主表的视图日志CREATE MATERI-ALIZED VIEW LOG ON PERSON;
(2) 远端备份数据库操作 (备份的物化视图)
(1) 以HR登陆, 创建基于远端SCOTT的主键表PERSON的物化视图PERSON_VIEW (假定数据库链接是MY_LINK) 。
CREATE MATERIALIZED VIEW PERSON_VIEW
AS SELECT*FROM SCOTT.PERSON@MY_LINK;
(2) 创建一个过程, 叫TEST, 实现刷新本地物化视图的动作。
(3) 创建一个JOB (叫JOB1) , 1分钟运行1次, 进行调用TEST过程的操作。
(4) 运行这个JOB1, 则每分钟本地数据会与远程数据自动同步刷新一次。
2. 基于ROWID的物化视图, 适用于主表不包含主键、可能有多行重复纪录的情况。
(1) 本地数据库操作 (主表)
以SCOTT登陆, 并创建主表PERSON, 插入测试数据。
CREATE TABLE PERSON (ID VARCHAR2 (10) , NAME VARCHAR2 (20) ) ;
(2) 远端备份数据库操作 (备份的物化视图)
以HR登陆, 创建基于远端SCOTT的主表PER-SON的物化视图PERSON_VIEW (假定数据库链接是MY_LINK) 。
CREATE MATERIALIZED VIEW PERSON_VIEW
REFRESH WITH ROWID———这是ROWID物化视图的方式
AS SELECT*FROM SCOTT.PERSON@MY_LINK;
以下步骤, 和基于主键的物化视图的处理方式完全相同, 这里不再赘述。
二、Streams实现表的实时备份
(一) 适用情景:
假定需要把本地数据库中的一个表的DDL, DML操作, 都应用到远端数据库的表中, 实现数据的同步和复制。
(二) Streams简介:
Oracle的Streams提供了信息共享的一种方式, 通过捕获、传播、应用将指定的信息传输到指定位置, 在捕获消息、管理消息以及在不同数据库或应用之间共享消息等方面, 提供了强大的功能和扩展性。Streams通过Capture进程捕获DML, DDL操作, 然后通过Propagate进程传播到其他数据库, 再通过Apply进程应用的方式复制数据。这中间的每个步骤都是可定制的, 可以实现复杂的数据复制的要求。
(三) 具体方法:
举例演示如何把本地的ORCL数据库的SCOTT用户的PERSON表复制到远端TEST数据库。
1. 前提条件
(1) 参数global_names必须设置为true, global_name=db_name+db_domain。
(2) ORCL数据库采用archive log模式。
(3) 使用netca, 双机互相创建指向对方机器的本地命名服务。
(4) ORCL数据库和TEST数据库中, 都建立了用户stradmin, 赋予了DBA权限。
(5) 查看双方数据库的global_name, 本例中ORCL端的global_name是:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM;TEST端的global_name是:TEST.REGRESS RDBMS.DEV.US.ORACLE.COM。
2. 主要操作步骤
(1) 在ORCL端, 建立一个指向TEST端的数据库链接DATABASE LINK:
SQL>CREATE DATABASE LINK TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM CONNECT TO stradmin IDENTIFIED BY stradmin USING'OrcltoTest';
这里特别注意, 因为TEST端的global_name是TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM, 而ORCL端的global_names设置为true, 所以link名字必须是TEST端的global_name, 才可以正确访问。
(2) 在TEST端, 建立一个指向ORCL端的数据库链接DATABASE LINK, 方法同上。
(3) 在ORCL端, 使用stradmin登录:通过dbms_streams_adm包的add_table_rules方法创建捕获规则, 把对scott.person表的DDL, DML操作进行捕获, 给这个捕获到的流队列命名为stradmin.streams_queue;然后使用dbms_streams_adm包的add_table_propagation_rules方法创建传播规则, 把创建的源流队列stradmin.streams_queue进行传播。
(4) 在TEST端, 使用stradmin登录:通过dbms_streams_adm的add_table_rules方法创建应用规则, 把流队列stradmin.streams_queue进行应用。然后执行:
(5) 在ORCL端, 使用stradmin登录后启动捕获进程:exec dbms_capture_adm.start_capture (capture_name=>'capture_stream') ;这样就完成了整个Streams表级复制的环境的搭建, 以后所有在ORCL端对于SCOTT的PERSON表的DML, DDL操作都可以传输并应用到TEST数据库端。
三、EXP/IMP实现表的定期备份
2.oracle学习方法 篇二
关键词:Oracal;SQL;优化
中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02
The Optimization Principles and Methods of SQL on Oracle Database
Zhang Xiaorong
(Xi’an University of Arts and Science,Xi’an710065,China)
Abstract:Oracle is RDBMS applying large,mediamsized and microcomputer.The problem of the database’performace optimization has been the focal point which people show solicitude for commonly,and a key factor affecting it’s performance is that executive efficiency of the SQL query sentence.In this paper we analyzed the need to optimize the SQL query,and Introduced the basic principles and methods of SQL statement optimization in Oracle Database,proved that SQL statement optimization greatly improve the performance of the database.
Keywords:Oracal;SQL;Optimization
一、引言
数据库系统是管理信息系统的核心,从大多数系统的应用实例可以看出,SQL语句的书写技巧以及其性能优劣往往是系统性能是否稳定的关键因素。SQL语句的执行效率直接影响系统的性能和运行速度。而相对于其他SQL操作,数据库中的查询操作所占的比重最大,查询优化也就有着相对重要的地位,构造科学合理的数据库查询系统,是开发数据库应用系统的重要步骤和环节。
二、查询优化的必要性
对于关系型数据库Oracle来说,大多数性能问题都是数据库设计不合理造成的,而SQL语句是对数据库进行操作的唯一途径,应用程序对数据库的操作最终要归结为SQL语句的执行。对于基于Oracle数据库的复杂的多层B/S结构的软件系统,用户终端对数据库的操作往往比较频繁,数据量较大,很多情况下查询过程是非常复杂的,如果能确保每个SQL语句能在最短时间执行,则用这些SQL组合成的系统将有着较高的运行效率。SQL语句的执行效率对数据库系统的性能起决定性作用,对查询语句的优化是提高系统查询效率的根本途径。
三、SQL语句优化原则和方法
Oracle数据库中影响SQL语句执行时间的因素主要是系统I/O(输入/输出)时间和SQL语句解析和执行的速度。因此,SQL语句的优化应遵循以下原则:(1)尽可能减少系统I/O操作。过多的I/O操作会大量占用系统CPU时间,影响SQL语句的执行速度。(2)优化排序操作,减少排序。过多的排序操作会增加SQL语句的解析和执行时间。(3)减少表的访问次数,尽可能避免全表扫描。表的访问次数过多或对比较大的表的全表扫描都会耗费系统资源,影响执行速度。遵循以上原则,Oracle中SQL语句优化的基本方法如下:
(一)合理使用索引:1.在经常使用为过滤器或查询频率较高的字段上建立索引。2.在用于连接的字段上(主键/外键)建立索引。3.在经常使用Group by和Order by的字段上建立索引。4.在经常存取的多个列上依据使用频率建立复合索引。但是,索引也是需要耗费系统开销的。一般过小的表没有必要建立索引。对于超大的表来说,,当返回的行数占表总行数的10%到15%时,使用索引可以极大地节省查询的时间,但当返回行数占40%以上时,使用索引将不再能提高查询效率。而且,由于表的更新同时要更新相关的索引信息,一张表上建立过多的索引会影响表的更新速度。所以,索引的建立需要均衡考虑相关因素,力求恰到好处。
(二)SELECT查询子句中只选择必要的列。SELECT*语句在执行时,Oracle先通过查数据词典获得每一列的字段名,然后才进行查询,如果其中一列被修改,则需要重新解析执行语句,这样将浪费CPU的处理时间和系统的I/O资源,而且也增加了维护的工作量。例如:Select*from phone,优化后可写为Select depart,number from phone。在服务器硬件性能不改变的情况下,优化前语句的执行时间是0.652s,优化后执行时间缩短为0.235s。
(三)正确使用DISTINCT。DISTINCT用来过滤掉重复记录只保留一条,往往用它来返回不重复记录,其执行时将产生一张工作表,通过排序来删除重复记录,这样大大增加了查询以及I/O操作次数,因此应合理使用DISTINCT,在不必要时尽量避免使用,以免系统资源浪费。
(四)可用WHERE子句代替HAVING子句。HAVING子句是在检索出所有记录集后才对结果进行过滤,这个处理需要现对结果进行排序、总计等操作,增大了系统开销。如果通过WHERE子句在汇总前就将汇总信息进行过滤,就可以节省这部分开销。例如,查询次消费金额大于1000元的客户的总消费金额。
优化前:Select Customer,Sum(Order Price)from Orders group by Customer having Order Price>1000;
優化后:Select Customer,Sum(Order Price)from Orders where Order Price>1000 group by Customer;
优化前执行时间为0.344s,优化后执行时间为0.289s。
(五)可用UNION代替OR(适用于索引列)。如果在WHERE子句中的索引列使用OR联接,执行时将会进行全表扫描,此时用UNION代替OR可提高查询效率。注意,此规则适用于多个索引列有效,如果没有索引列,查询效率可能会因为没有使用OR而降低。例如:
优化前:Select S_name,S_salary,S_allowance from Tab_Sal where S_salary>1500 or allowance>2000;
优化后:Select S_name,S_salary,S_allowance from Tab_Sal where S_salary>1500 union(Select S_name,S_salary,S_allowance from Tab_Sal where allowance>2000);
检出记录数321条,优化后执行时间由0.925s缩短为0.691s。
(六)可用UNION ALL代替UNION。UNION操作使多个记录集联接成为一个集。UNION操作在表联接后对产生的结果进行排序,删除掉重复的记录后才返回结果。而UNION ALL操作允许重复,不要求进行SORT UNIQUE操作,从而节省了系统开销。
(七)注意WHERE子句中约束条件的顺序。Oracle数据库是采用自下而上的方式来解析WHERE子句的,因此应该将能过滤掉最多记录的条件写在WHERE子句的最后,而将表之间的连接写在其他约束条件之前,从而提高查询效率。例如:
优化前:Select A.S_name,A.S_salary,A.S_allowance,B.eage from Tab_Sal A,Tab_Num B where A.S_salary>2000 and A.S_name=B.Name;
优化后:Select A.S_name,A.S_salary,A.S_allowance,B.eage from Tab_Sal A,Tab_Num B where A.S_name=B.Name and A.S_salary>2000;
优化前执行时间为0.325s,优化后执行时间为0.236s。
(八)有效整合Sql语句,减少表的访问次数。对于同一张表的多次访问,可以通过将相近SQL语句有效整合,从而减少对该表的访问次数,避免过多的系统资源消耗,有效提高查询效率。举一个简单的例子:
Select Customer,Level,Sum(Order Price)from Orders where Level=3 group by Customer;
Select Customer,Level,Sum(Order Price)from Orders where Level>=4 group by Customer;
整合后:
Select Customer,Sum(Order Price)from Orders where Level>=3 group by Customer;
对如上SQL语句进行整合后,其执行速度提高了一倍。
四、结束语
通过本文提出的SQL优化原则和方法对某企业Oracle数据库进行性能优化调整之后,其系统响应时间已明显下降,程序运行速度有所提高,良好的保障了系统的运行。Oracle数据库内部结构比较复杂,影响其性能的因素较多,但是在系统硬件性能一定的情况下,优化SQL语句是数据库性能得以提高的根本途径。SQL语句的优化方法還有很多,本文提出的只是笔者在使用过程中总结的原则和方法,更多的优化策略需要我们在实际应用中不断地总结和探索。
参考文献:
[1]周志德.Oracle数据库的SQL查询优化研究[J].计算机与数字工程,2010,11:173-178
[2]邓春娜,周晓红.Oracle数据库的查询优化方案[J].信息科学,2010,5:19
3.Oracle深入学习 篇三
开发:对于想做Oracle开发的.,在了解完Oracle基本的体系结构之后,可以重点关注PL/SQL及Oracle的开发工具这一部分,
PL/SQL主要是包括怎么写SQL语句,怎么使用Oracle本身的函数,怎么写存储过程、存储函数、触发器等。 Oracle的开发工具主要就是Oracle自己的Developer Suite(Oracle Forms Developer and Reports Developer这些),学会如何熟练使用这些工具。
介绍几本oracle入门的好书
oracle官方文档:《concept》上面讲了oracle的体系和概念,很适合初学者看。
OCP的教学用书,也就是STUDY GUIDE(SG)。
Oracle8i 备份恢复手册
Oracle8高级管理与优化
Oracle8i PLSQL程序设计
4.oracle学习方法 篇四
作者:Sephiroth 字体:[增加 减小] 类型:转载
import cx_Oracle dns_tns=cx_Oracle.makedsn(”192.168.0.288“,1521,”skynet“) print dns_tns con = cx_Oracle.connect(‘alibaba‘, ‘zhimakamen‘, dns_tns) cur=con.cursor() for index,line in enumerate(file(”f2.csv“)): sql=”“”insert into iq_data_B011F8286A1B2000A (field1,field2,field3,field4) values (“”“ for fields in (line.split(”,“)): sql=sql+”‘“+fields+”‘,“ cur.execute(sql[:-1]+”)") con.commit() con.close()
希望本文所述对大家的Python程序设计有所帮助,
5.oracle学习方法 篇五
很多朋友只用了oracle的删除,但很多情况下,他会发现重新安装时,点了下一步安装界面就消失了,往往无奈下只好重装系统,其实只是你数据库没删干净,删干净就不会出现这种情况了。
实现方法:
1、开始->设置->控制面板->管理工具->服务
停止所有Oracle服务。
2、开始->程序->Oracle - OraHome81->Oracle Installation Products->
Universal Installer
卸装所有Oracle产品,但Universal Installer本身不能被删除
5、运行regedit,选择HKEY_LOCAL_MACHINESOFTWAREORACLE,按del键删除这个入口。
6、运行regedit,选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动
这个列表,删除所有Oracle入口。
7、运行refedit,
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication,
删除所有Oracle入口,
8、开始->设置->控制面板->系统->高级->环境变量
删除环境变量CLASSPATH和PATH中有关Oracle的设定
9、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标
10、删除Program FilesOracle目录
11、重新启动计算机,重起后才能完全删除Oracle所在目录
12、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:Oracle,删除这个入
口目录及所有子目录,并从Windows目录(一般为C:WINNT)下删除以下文
件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。
13、WIN.INI文件中若有[ORACLE]的标记段,删除该段
14、如有必要,删除所有Oracle相关的ODBC的DSN
15、到事件查看器中,删除Oracle相关的日志
说明:
如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装。安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了
(责任编辑:铭铭 mingming_ky@126.com TEL:(010)68476636)
6.oracle学习方法 篇六
Oracle数据库依靠其在处理大型数据时的高性能,而成为商业领域应用最广泛和最流行的的数据库平台,随着用户数的不断增长,已成为大型商业应用系统的御用后台数据管理系统。但在实际应用过程中,由于对Oracle本身的不熟悉,无法充分地发挥Oracle在处理少量数据的优越性。数据库设计的性能是否优化,会直接影响数据库应用系统的正常运行和工作效率,该文从数据库设计的性能优化着手,从数据库系统内存优化和SQL语句使用优化等方面进行全面阐述。
1 Oracle数据库高性能设计方法
该文通过六个不同的侧面,为Oracle数据库高性能优化设计提供参考方法。
1.1 优化可变结构OFA
数据库的设计中的逻辑配置决定着其性能是否优化,因此在对表的空间设计时Oracle提供了一种优化结构,即OFA(Optimal flexible Architecture),第一步是根据数据的用途以及使用对象进行归类,如可区分为用户数据与系统数据,索引数据与一般数据,高活动表与低活动表。
在进行数据库的逻辑数据配置时就遵循以下原则:
1)将使用方式相同的段类型存储相同位置;2)设计系统时以Oracle提供的标准方式为基准;3)创建分离区域,以用于处理例外;4)将表空间的冲突设置为最小化;5)分享数据字典。
1.2 合理设计和管理数据表
数据进行物理的分享可能通过表分区功能来实现,也就是可以将不同分区的数据以数据文件的方式储存在不同的磁盘中。例如:对于一张含有大量数据的表,根据其中的一个字段进行表分区,在查询的时候即可对某一个表分区进行查询,而省去了全表扫描的麻烦,也大大缩短了查询的时间,数据在不同的磁盘进行输入和输出,可有效在进行数据管理与查询。
1.3 有效地使用索引
索引的主要功能是提高数据库数据的查询速度,表中的逻辑值可能通过索引映射到某一行,所以数据的数理位置能够通过这个映射关系很快被定位。在创建索引时,要考虑到这个索引能够最大限度地应用到where、group by、order by等子句中。
1)少建或不建索引的场景
表记录的数据少。
如果一个表仅有10来条记录,如果采用索引功能去访问数据,首先需要访问索引表,然后再通过索引表访问记录,而一般情况下,索引表和数据表没有保存在同一数据块,因此此时至少需要对数据库进行两次读取和数据返回。而如果不用索引,Oracle则可一次性将所需的数据读出,速度显而易见。
经常进行记录的添加、修改、删除操作,而不要求查询效率。
数据重复率高,而且字段分布比较平均。
例如一个表有1万行数据记录,而其中一个字段X只有a和b两种值,且每个值的分布概率都为50%,则对这种表X字段建立索引时没有太大意义。
需要经常与主字段一起组合查询,但主字段索引值比较多的情况。
如水费表经常按收费序号、用户编号、查表日期、年月日、操作标志来具体查询某一笔费用,如果将这些需要查询的字段都建立在一个索引中,则会大大增加数据更新的时间,实际情况是,只要按照收费的序号建立索引,则数据量就会大大减少,而按照其它字段查询时也不会影响效率。
2)数量量大的表的索引问题
对于字段多,数据多的表来说,由于索引数据相对于一般数据来说,都具有更高的优先级和权限,所以建立索引未必能够使数据表的查询效率有所提高,因此在空间不足时,一般的普通数据会被移出。因此在对大型的表建立索引表时,可能会完全占用所有的数据块空间,因此在读写数据来,就要不断地进行磁盘的访问。遇到这种情况时,可对大型表的不同分区来立索引,如果需要频繁地查询大型表,则可以不建立索引。
1.4 合理设计数据分片
在实际使用过程中,可能某个表会含有相当的数据量,而且还在急剧增长的情况下,为保障数据能保持比较快的响应速度,根据数据所处的时间与空间的局部性,利用横向和竖向分片进行数据表分片的设计。
1)横向分片
将数据表根据使用的机构或者部门拆分成N个子表,这样不同机构的数据就能够成为独立管理的表,这种情况主要适用于部门之间不需要交互,不需要进行数据共享和交换的情况。
2)竖向分片
将数据表以流程为标准拆分成N个表,将表中不经使用的数据移植到其它表中,如针对某个学校,可将在校生和毕业生储存在不同的数据表中,当学生毕业后,即可将相关学生信息转入到毕业生表中,由于在校生的数据信息是需要定期更新和操作的,因此这样的分片方式确保了在校生表能够控制在某个定量,进而提高查询速度。
3)分片原则
在表中的记录量少时,而且无需进行部门数据的频繁交换情况下,可采用竖向分片方式,这种方式能够确保逻辑配置的简单化,而且具有高可靠性,减少了管理人员的工作量。当竖向分片无法解决问题时,可引入横向分片,将需要进行数据频繁交换的部门设置为一组,保存在同一张数据表中,注意横向分片数要尽量少,以控制程序的复杂性。
1.5 SQL语句的优化方法
SQL优化方法主要有以下几种:
尽量控制对数据库表的查询,即减少对系统资源的消耗,实现方式主要采用分布式数据库对象,如快照、显形图等。
充分地使用SQL提供的共享池中已经过分析的语法树,使用非常接近或者完全相同的SQL语句实现查询,同时可实现数据在SGA的准确率大大提高。
动态SQL是一个非常便捷好用的功能,但是动态SQL每次使用时都需要进行语法的分析,无论共享池是是否存在所需要的查询值,因此会大大影响数据库的性能,因此这个功能需要限制使用。
尽量避免使用不带任何条件的SQL语句,由于这种语句在执行时,需要定位某一个数据块,然后按照顺序对整个数据表进行扫描,如果数据表记录多,则需要相当长的一段时间。
屏蔽SQL语句自动提交的模式,而可采用集中一组SQL语句整体提交的方式。
1.6 复杂SQL语句的编写
以某个学校学生的成绩管理为例一般会包括课程表(course)、学生表(student)、成绩表(score),每个表里包括的字段主要如以表1-表3所示:
如果统计某个班级成绩都为MM的数据信息,并以下格式显示:
解决办法是在三个表中分别查询相应的值,然后转换为最终需要的值,具体实现如下:
方法二,SQL2,将一个表、3个值同时查出来,据不同段值,转化成3个值。
select S_Name,max(decode(Course_ID,’语文’,Score,null))as Score1,
max(decode(Course_ID,’英语’,Score,null))as Score2,
max(decode(Course_ID,’数学’,Score,null))as Score3
from Score_view where班级=’填写某个班级’
这种方法是直接使用Decode函数,可大大提高数据查询效率。
2 结束语
迄今为止,数据库技术发展和处理性能已成为应用系统运行的瓶颈。数据库设计与管理员需要结合多方面因素,在建立数据表时,能够根据应用系统的需求和可能出现的变化合理设计各个表和字段,以及表空间、存储的数据块空间、内存等参数。另外,数据库的性能调优是一个系统工程,涉及的诸多方面。如何才能进行有效的调整,结合其它技术实现Oracle数据库的全面优化。
摘要:为提高Oracle数据库的性能,该文通过对数据库的工作原理和系统主要结构的分析,从数据库的优化可变结构、SGA的使用、数据库表的设计、索引的使用等六个方面的综合阐述,总结了Oracle数据库高性能优化设计的方法。
关键词:Oracle,数据库,优化,设计
参考文献
[1]格林威尔.Oracle精髓[M].龚波,译.北京:机械工业出版社,2009.
[2]谭怀远.Oracle性能分析与优化思路[M].北京:电子工业出版社,2010.
[3]李丙洋.涂抹.Oracle.三思笔记之一步一步学Oracle[M].北京:中国水利水电出版社,2010.
[4]秦靖,刘存勇.Oracle从入门到精通[M].北京:机械工业出版社,2011.
7.微软和Oracle联姻的背后 篇七
微软将向Windows Azure用户提供Oracle Java、Database和WebLogic Server等服务,而Oracle还将向Windows Azure用户提供Linux服务。
这事情太出乎意料了,甚至有些诡异。不过微软CEO鲍尔默却说,长期以来两家公司一直在公众视线以外进行合作,但“在云计算的世界里,光有幕后合作是不够的”。
一切皆有缘,背后的原因,是诸如Amazon、Google等互联网公司对传统IT企业及服务交付模式的冲击。在Oracle和微软这种传统大企业的基因里,缺乏挣10美元/小时这种小钱的基因,而Amazon和Google们的牙齿却那么锋利,他们有耐心、有机制、有系统保障提供价廉物美的云计算资源和服务,一开始只是大口吞噬个人公众市场,后来很快显示出蚕食Oracle和微软们的传统强势领域——企业市场的苗头。
曾经被嘲笑虚无缥缈的云计算,终于显示了改变商业市场服务交付模式的力量。谁拒绝或者忽视,谁注定会是loser。
应该说,微软比Oracle先意识到了这种危机。在被唱衰的微软大局中,Azure是最具未来战略性的布局——微软的所有软件产品和服务都需要一个符合云时代要求的快速交付模式。无论Azure本身是否能为微软带来盈利,微软拥有的是一个直接对接到客户门口的交付渠道。
虽然,现在看上去Azure的交付模式与价廉物美的Amazon和Google短平快交付模式相比,依然显得笨拙且生疏,但是微软的方向已经对了。相比之下,Oracle就倔多了。直到两年前,Larry才开始接受云计算。但是,习惯了赚大钱的Oracle根本没能适应盘踞着Amazon这样出身贫寒、一单一单打拼出来、能够低头赚小钱的对手的云市场,所以迄今为止,Oracle仍然没有一个成型的云服务交付渠道和平台。
Azure能够成全Oracle,因为,微软拥有大量面向个人市场战斗的基因,这也是为什么微软做云平台成了而Oracle败了的根本因素。
新型的互联网新贵们实际上一点都不缺钱,但是他们的基因决定了他们依然能够低头创新出各种短平快的交付模式,去赚10美元/小时的小钱。他们对于企业市场的蚕食速度,应该说大大快于市场的预测,终于引起了传统的IT大佬们的惶恐。
除了应对,没有选择。外媒评论说,虽然该合作无法解决微软和Oracle在云市场上面临的重大竞争挑战,但仍被视为标志性的重要举措。投资银行FBR分析师丹尼尔·艾维斯(Daniel Ives)称:“这项合作是否能在今天改变游戏规则?那是不可能的,但这却表明两家公司在从事云业务方面都是认真的。这两家在以往历史上一直都彼此竞争的对手现已成为朋友,这充分说明了云市场上的机会有多大。此外,这项合作还为两家公司开辟了潜在的增长道路。”
我的看法是,Azure为微软包括Windows、Office、Server、安全、即时通讯等全线产品和服务的交付准备了一个完全可以与Amazon和Google抗衡的平台,而与Oracle的联盟,会让微软的服务更具竞争力;因为犯倔而被动的Oracle通过Azure这样的平台,可以在云时代的竞争中改变完全被动的局面,加速交付时间和效率,从而继续赢得市场。
相比之下,IBM却未能有一个类似Azure的平台,的确是战略性失误。W
8.oracle学习方法 篇八
一、oracle系统
1.oracle产品结构及组成
oracle系统是由以rdbms为核心的一批软件产品构成.
2.oracle系统特点
oracle公司于1979年,首先推出基于sql标准的关系数据库产品,可在100多种硬件平台上运行(所括微机、工作站、小型机、中型机和大型机),支持很多种操作系统。用户的oracle应用可方便地从一种计算机配置移至另一种计算机配置上。oracle的分布式结构可将数据和应用驻留在多台计算机上,而相互间的通信是透明的。1992年6月oracle公司推出的oracle7协同服务器数据库,使关系数据库技术迈上了新台阶。根据idg(国际数据集团)1992年全球unix数据库市场报告,oracle占市场销售量50%。它之所以倍受用户喜爱是因为它有以下突出的特点:
支持大数据库、多用户的高性能的事务处理。oracle支持最大数据库,其大小可到几百千兆,可充分利用硬件设备。支持大量用户同时在同一数据上执行各种数据应用,并使数据争用最小,保证数据一致性。系统维护具有高的性能,oracle每天可连续24小时工作,正常的系统操作(后备或个别计算机系统故障)不会中断数据库的使用。可控制数据库数据的可用性,可在数据库级或在子数据库级上控制。
oracle遵守数据存取语言、操作系统、用户接口和网络通信协议的工业标准。所以它是一个开放系统,保护了用户的投资。美国标准化和技术研究所(nist)对oracle7 server进行检验,100%地与ansi/iso sql89标准的二级相兼容。
实施安全性控制和完整性控制。oracle为限制各监控数据存取提供系统可靠的安全性。oracle实施数据完整性,为可接受的数据指定标准。
支持分布式数据库和分布处理。oracle为了充分利用计算机系统和网络,允许将处理分为数据库服务器和客户应用程序,所有共享的数据管理由数据库管理系统的计算机处理,而运行数据库应用的工作站集中于解释和显示数据。通过网络连接的计算机环境,oracle将存放在多台计算机上的数据组合成一个逻辑数据库,可被全部网络用户存取。分布式系统像集中式数据库一样具有透明性和数据一致性。
具有可移植性、可兼容性和可连接性。由于oracle软件可在许多不同的操作系统上运行,以致oracle上所开发的应用可移植到任何操作系统,只需很少修改或不需修改。oracle软件同工业标准相兼容,包括许多工业标准的操作系统,所开发应用系统可在任何操作系统上运行。可连接性是指oralce允许不同类型的计算机和操作系统通过网络可共享信息。
二、oracle数据库系统的体系结构
oracle数据库系统为具有管理oracle数据库功能的计算机系统。每一个运行的oracle数据库与一个oracle实例(instance)相联系。一个oracle实例为存取和控制一数据库的软件机制。每一次在数据库服务器上启动一数据库时,称为系统全局区(system global area)的一内存区(简称sga)被分配,有一个或多个oracle进程被启动。该sga 和 oracle进程的结合称为一个oracle数据库实例。一个实例的sga和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。
在oracle系统中,首先是实例启动,然后由实例装配(mount)一数据库。在松耦合系统中,在具有oracle parallel server 选项时,单个数据库可被多个实例装配,即多个实例共享同一物理数据库。
1.oracle实例的进程结构和内存结构
1)进程结构
进程是操作系统中的一种机制,它可执行一系列的操作步。在有些操作系统中使用作业(job)或任务(task)的术语。一个进程通常有它自己的专用存储区。oracle进程的体系结构设计使性能最大。
oracle实例有两种类型:单进程实例和多进程实例。
单进程oracle(又称单用户oracle)是一种数据库系统,一个进程执行全部oracle代码。由于oracle部分和客户应用程序不能分别以进程执行,所以oracle的代码和用户的数据库应用是单个进程执行。
在单进程环境下的oracle 实例,仅允许一个用户可存取。例如在ms-dos上运行oracle 。
多进程oracle实例(又称多用户oracle)使用多个进程来执行oracle的不同部分,对于每一个连接的用户都有一个进程。
在多进程系统中,进程分为两类:用户进程和oracle进程。当一用户运行一应用程序,如pro*c程序或一个oracle工具(如sql*plus),为用户运行的应用建立一个用户进程。oracle进程又分为两类:服务器进程和后台进程。服务器进程用于处理连接到该实例的用户进程的请求。当应用和oracele是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可降低系统开销。然而,当应用和oracle运行在不同的机器上时,用户进程经过一个分离服务器进程与oracle通信。它可执行下列任务:
对应用所发出的sql语句进行语法分析和执行。
从磁盘(数据文件)中读入必要的数据块到sga的共享数据库缓冲区(该块不在缓冲区时)。
将结果返回给应用程序处理。
系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个oracle实例可以有许多后台进程,但它们不是一直存在。后台进程的名字为:
dbwr 数据库写入程序
lgwr 日志写入程序
ckpt 检查点
smon 系统监控
pmon 进程监控
arch 归档
reco 恢复
lckn 封锁
dnnn 调度进程
snnn 服务器
每个后台进程与oracle数据库的不同部分交互。
下面对后台进程的功能作简单介绍:
dbwr进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个oracle后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,dbwr的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,dbwr将管理缓冲存储区,使用户进程总可得到未用的缓冲区。
oracle采用lru(least recently used)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使i/o最小。在下列情况预示dbwr 要将弄脏的缓冲区写入磁盘:
当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知dbwr进行写。该临界长度是为参数db-block-write-batch的值的一半。
当一个服务器进程在lru表中查找db-block-max-scan-cnt缓冲区时,没有查到未用的缓冲区,它停止查找并通知dbwr进行写。
出现超时(每次3秒),dbwr 将通知本身。
当出现检查点时,lgwr将通知dbwr
在前两种情况下,dbwr将弄脏表中的块写入磁盘,每次可写的块数由初始化参数db-block-write-batch所指定。如果弄脏表中没有该参数指定块数的缓冲区,dbwr从lur表中查找另外一个弄脏缓冲区。
如果dbwr在三秒内未活动,则出现超时。在这种情况下dbwr对lru表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,dbwr查找一个新的缓冲区组。每次由dbwr查找的缓冲区的数目是为寝化参数db-block-write-batch的值的二倍。如果数据库空运转,dbwr最终将全部缓冲区存储区写入磁盘。
在出现检查点时,lgwr指定一修改缓冲区表必须写入到磁盘。dbwr将指定的缓冲区写入磁盘。
在有些平台上,一个实例可有多个dbwr。在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。参数db-writers控制dbwr进程个数。
lgwr进程:该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个oracle后台进程。lgwr进程将自上次写入磁盘以来的全部日志项输出,lgwr输出:
当用户进程提交一事务时写入一个提交记录。
每三秒将日志缓冲区输出。
当日志缓冲区的1/3已满时将日志缓冲区输出。
当dbwr将修改缓冲区写入磁盘时则将日志缓冲区输出。
lgwr进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,lgwr可继续地写入该组的其它文件。
日志缓冲区是一个循环缓冲区。当lgwr将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。lgwr 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。
注意:有时候当需要更多的日志缓冲区时,lwgr在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。
oracle使用快速提交机制,当用户发出commit语句时,一个commit记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(scn),它同事务日志项一起记录在日志中。由于scn记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。
ckpt进程:该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由lgwr执行。然而,如果检查点明显地降低系统性能时,可使ckpt进程运行,将原来由lgwr进程执行的检查点的工作分离出来,由ckpt进程实现。对于许多应用情况,ckpt进程是不必要的。只有当数据库有许多数据文件,lgwr在检查点时明显地降低性能才使ckpt运行。ckpt进程不将块写入磁盘,该工作是由dbwr完成的。
初始化参数checkpoint-process控制ckpt进程的使能或使不能。缺省时为false,即为使不能。
smon进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。在具有并行服务器选项的环境下,smon对有故障cpu或实例进行实例恢复。smon进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。
pmon进程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释放该进程所使用的资源。例:它要重置活动事务表的状态,释放封锁,将该故障的进程的id从活动进程表中移去。pmon还周期地检查调度进程(dispatcher)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。
pmon有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。
reco进程:该进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障。一个结点reco后台进程自动地连接到包含有悬而未决的分布式事务的其它数据库中,reco自动地解决所有的悬而不决的事务。任何相应于已处理的悬而不决的事务的行将从每一个数据库的悬挂事务表中删去。
当一数据库服务器的reco后台进程试图建立同一远程服务器的通信,如果远程服务器是不可用或者网络连接不能建立时,reco自动地在一个时间间隔之后再次连接。
reco后台进程仅当在允许分布式事务的系统中出现,而且distributed – transactions参数是大于0。
arch进程:该进程将已填满的在线日志文件拷贝到指定的存储设备。当日志是为archivelog使用方式、并可自动地归档时arch进程才存在。
lckn进程:是在具有并行服务器选件环境下使用,可多至10个进程(lck0,lck1……,lck9),用于实例间的封锁。
dnnn进程(调度进程):该进程允许用户进程共享有限的服务器进程(server process)。没有调度进程时,每个用户进程需要一个专用服务进程(dedicatedserver process)。对于多线索服务器(multi-threaded server)可支持多个用户进程。如果在系统中具有大量用户,多线索服务器可支持大量用户,尤其在客户_服务器环境中。
在一个数据库实例中可建立多个调度进程。对每种网络协议至少建立一个调度进程。数据库管理员根据操作系统中每个进程可连接数目的限制决定启动的调度程序的最优数,在实例运行时可增加或删除调度进程。多线索服务器需要sql*net版本2或更后的版本。在多线索服务器的配置下,一个网络接收器进程等待客户应用连接请求,并将每一个发送到一个调度进程。如果不能将客户应用连接到一调度进程时,网络接收器进程将启动一个专用服务器进程。该网络接收器进程不是oracle实例的组成部分,它是处理与oracle有关的网络进程的组成部分。在实例启动时,该网络接收器被打开,为用户连接到oracle建立一通信路径,然后每一个调度进程把连接请求的调度进程的地址给予于它的接收器。当一个用户进程作连接请求时,网络接收器进程分析请求并决定该用户是否可使用一调度进程。如果是,该网络接收器进程返回该调度进程的地址,之后用户进程直接连接到该调度进程。有些用户进程不能调度进程通信(如果使用sql*net以前的版本的用户),网络接收器进程不能将如此用户连接到一调度进程。在这种情况下,网络接收器建立一个专用服务器进程,建立一种合适的连接。
2)、oracle内存结构
oracle在内存存储下列信息:
执行的程序代码。
连接的会话信息
程序执行期间所需数据和共享的信息
存储在外存储上的缓冲信息。
oracle具有下列基本的内存结构:
软件代码区
系统全局区,包括数据库缓冲存储区、日志缓冲区和共享池.
程序全局区,包括栈区和数据区.
排序区
软件代码区
用于存储正在执行的或可以执行的程序代码。
软件区是只读,可安装成共享或非共享。oracle系统程序是可共享的,以致多个oracle用户可存取它,而不需要在内存有多个副本。用户程序可以共享也可以不共享。
系统全局区
为一组由oracle分配的共享的内存结构,可包含一个数据库实例的数据或控制信息。如果多个用户同时连接到同一实例时,在实例的sga中数据可为多个用户所共享,所以又称为共享全局区。当实例起动时,sga的存储自动地被分配;当实例关闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可自动地被分配;当实例关闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可使用其sga中的信息,但仅仅有几个进程可写入信息。在sga中存储信息将内存划分成几个区:数据库缓冲存储区、日志缓冲区、共享池、请求和响应队列、数据字典存储区和其它各种信息。
程序全局区
pga是一个内存区,包含单个进程的数据和控制信息,所以又称为进程全局区(process global area)。
排序区
排序需要内存空间,oracle利用该内存排序数据,这部分空间称为排序区。排序区存在于请求排序的用户进程的内存中,该空间的大小为适就排序数据量的大小,可增长,但受初始化参数sort-area-sizer所限制。
2.oracle的配置方案
所有连接到oracle的用户必须执行两个代码模块可存取一个oracle数据库实例:
应用或oracle工具:一数据库用户执行一数据库应用或一个oracle工具,可向oracle数据库发出sql语句。
oracle服务器程序:负责解释和处理应用中的sql语句。
在多进程实例中,连接用户的代码可按下列三种方案之一配置:
对于每一个用户,其数据库应用程序和服务器程序组合成单个用户进程
对于每一个用户,其数据库应用是由用户进程所运行,并有一个专用服务器进程。执行oracle服务器的代码。这样的配置称为专用服务器体系结构
执行数据库应用的进程不同于执行oracle服务器代码的进程,而且每一个服务器进程(执行oracle服务器代码)可服务于多个用户进程,这样的配置称为多线索服务器体系结构。
1)user/server进程相结合的结构
在这种配置下,数据库应用和oracle服务器程序是在同一个进程中运行,该进程称为用户进程。
这种oracle配置有时称为单任务oracle(single_task oracle),该配置适用于这样的操作系统,它可在同一进程中的数据库应用和oracle代码之间维护一个隔离,该隔离是为数据安全性和完整性所需。其中程序接口(program interface)是负责oracle服务器代码的隔离和保护,在数据库应用和oracle用户程序之间传送数据。
2)使用专用服务器进程的系统结构
使用专用服务器进程的oracle系统在两台计算机上运行。在这种系统中,在一计算机上用户进程执行数据库应用,而在另一台计算机上的服务器进程执行相应的oracle服务器代码,这两个进程是分离的。为每个用户进程建立的不同的服务器进程称为专用服务器进程,因为该服务器进程仅对相连的用户进程起作用。这种配置又称为两任务oracle。每一个连接到oracle的用户进程有一个相应的专用服务进程。这种系统结构允许客户应用是有工作站上执行,通过网络与运行oracle的计算机通信。当客户应用和oracle服务器代码是在同一台计算机上执行时,这种结构也可用。
3)多线索服务器的系统结构
多线索服务器配置允许许多用户进程共享很少服务器进程。在没有多线索服务器的配置中,每一个用户进程需要自己的专用服务器进程。在具有多线索服务器的配置中,许多用户进程连接到调度进程,由调度进程将客户请求发送到一个共享服务器进程。多线索服务器配置的优点是降低系统开销,增加用户个数。
该系统中需要下列类型的进程:
网络接收器进程,将用户进程连接到调度进程和专用服务器进程。
一个或多个调度进程
一个或多个共享服务器进程
其中网络接收器进程等待新来的连接请求,决定每一用户进程能否用共享服务器进程。如果可以使用,接收器进程将一调度进程的地址返回给用户进程。如果用户进程请求一专用服务器,该接收器进程将建立一个专用服务器进程,将用户进程连接到该专用服务器进程。对于数据库客户机所使用的每种网络协议至少配置一个调度进程,并启动它。
当用户作一次调用时,调度进程将请求放置在sga的请求队列中,由可用的共享服务器进程获取。共享服务器进程为完成每一个用户进程的请求作所有必要的数据库调用。当服务器完成请求时,将结果返回到调度进程的队列,然后由调度进程将完成的请求返回给用户进程。
共享服务器进程:除共享服务器进程不是连接指定的用户进程外,共享服务器进程和专用服务器进程提供相同的功能,一个共享服务器进程在多线索服务器的配置中可为任何客户请求服务。一个共享服务器进程的sga不包含有与用户相关的数据,其信息可为所有共享服务器进程存取,它仅包含栈空间、进程指定变量。所有与会话有关的信息是包含有sga中。每一个共享服务器进程可存取全部会话的数据空间,以致任何服务进程可处理任何会话的请求。对于每一个会话的数据空间是在sga中分配空间。
oracle根据请求队列的长度可动态地调整共享服务器进程。可建立的共享服务器进程将请求放到请求队列。一个用户请求是对数据库的一次程序接口调用,为sql语句。在sga中请求队列对实例的全部调度进程是公用的。服务器进程为新请求检查公用请求队列,按先进先出的原则从队列检出一个请求,然后为完成该请求对数据库作必要的调用。共享服务器进程将响应放在调度进程的响应队列。每一个调度进程在sga中有自己的响应队列,每个调度进程负责将完成的请求回送给相应的用户进程。
3.oracle运行
1)使用专用服务进程的oracle的运行
在这种配置下,oracle运行过程如下:
(1)数据库服务器计算机当前正在运行oracle(后台进程)。
(2)在一客户工作站运行一个数据库应用(为用户进程),如sql*plus。客户应用使用sql*net driver建立对服务器的连接。
(3)数据库服务器计算机当前正运行合适的sql*net driver,该机上接收器进程检出客户数据库应用的连接请求,并在该机上为用户进程建立专用服务器进程。
(4)用户发出单个sql语句。
(5)专用服务器进程接收该语句,在此处有两种方法处理sql语句:
如果在共享池一共享sql区中包含有相同sql语句时,该服务器进程可利用已存在的共享sql区执行客户的sql语句。
?如果在共享池中没有一个sql区包含有相同的sql语句时,在共享池中为该语句分配一新的共享sql区。
在每一种情况,在会话的pga中建立一个专用sql区,专用服务器进程检查用户对查询数据的存取权限。
(6) 如果需要,服务器进程从数据文件中检索数据块,或者可使用已存储在实例sga中的缓冲存储区的数据块。
(7) 服务器进程执行存储在共享sql区中的sql语句。数据首先在sga中修改,由dbwr进程在最有效时将它写入磁盘。lgwr进程在在线日志文件中记录用户提交请求的事务。
(8)如果请求成功,服务器将通过网络发送一信息。如果请求不成功,将发送相应的错误信息。
(9)在整个过程中,其它的后台进程是运行的,同时注意需要干预的条件。另外,oracle管理其它事务,防止不同事务之间请求同一数据的竞争。
2)使用多线索服务器的oracle的运行
在这种配置下,oracle运行过程如下:
(1)一数据库服务器计算机运行使用多线索服务器配置的oracle。
(2)在一客户工作站运行一数据库应用(在一用户进程中)。客户应用合适的sql*net驱动器试图建立到数据库服务器计算机的连接。
(3)数据库服务器计算机当前运行合适的sql*net驱动器,它的网络接收器进程检出用户进程的连接请求,并决定用户进程如何连接。如果用户是使用sql*net版本2,该网络接收器通知用户进程使用一个可用的调度进程的地址重新连接。
(4)用户发出单个sql语句
(5)调度进程将用户进程的请求放入请求队列,该队列位于sga中,可为所有调度进程共享。
(6)一个可用共享服务器检验公用调度进程请求队列,并从队列中检出下一个sql语句。然后处理该sql语句,同前一(5),(6)和(7)。注意:会话的专用sql区是建立在sga中。
(7)一当共享服务器进程完成sql处理,该进程将结果放置发入该请求的调度进程的响应队列。
(8)调度进程检查它的响应队列,并将完成的请求送回请求的用户进程。
4.数据库结构和空间管理
一个oracle数据库是数据的集合,被处理成一个单位。一个oracle数据库有一个物理结构和一个逻辑结构。
物理数据库结构(physical database structure)是由构成数据库的操作系统文件所决定。每一个oracle数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。
逻辑数据库结构是用户所涉及的数据库结构。一个oracle数据库的逻辑结构由下列因素决定:
一个或多个表空间
数据库模式对象(即表、视图、索引、聚集、序列、存储过程)
逻辑存储结构如表空间(dataspace)、段(segment)和范围将支配一个数据库的物理空间如何使用。模式对象(schema object)用它们之间的联系组成了一个数据库的关系设计。
1)物理结构
(1)数据文件
每一个oracle数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:
一个数据文件仅与一个数据库联系。
一旦建立,数据文件不能改变大小
一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。
数据文件中的数据在需要时可以读取并存储在oracle内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由oracle后台进程dbwr决定如何将其写入到相应的数据文件。
(2)日志文件
每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。
日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,oracle允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。
日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,oracle自动地应用日志文件中的信息来恢复数据库数据文件。
(3)控制文件
每一oracle数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:
数据库名;
数据库数据文件和日志文件的名字和位置;
?数据库建立日期。
为了安全起见,允许控制文件被镜象。
每一次oracle数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,oracle自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。
2)逻辑结构
数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。
(1)表空间
一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(tablespace)。一个表空间可将相关的逻辑结构组合在一起。dba可利用表空间作下列工作:
控制数据库数据的磁盘分配。
将确定的空间份额分配给数据库用户。
通过使单个表空间在线或离线,控制数据的可用性。
执行部分数据库后备或恢复操作。
为提高性能,跨越设备分配数据存储。
数据库、表空间和数据文件之间的关系如下图所示:
database
dtatafile1
(2mb) datafile2
(2mb) datafile3
(2mb)
driver1 driver2
每个数据库可逻辑划分为一个或多个表空间
每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。dba可以建立新的表空间,可为表空间增加数据文件或可删除数据文件,设置或更改缺省的段存储位置。
每一个oracle数据库包含有一个名为system的表空间,在数据库建立是自动建立。在该表空间中总包含有整个数据库的数据字典表。最小的数据库可只需要system表空间。该表空间必须总是在线。表和存储的pl/sql程序单元(过程、函数、包和触发器)的全部存储数据是存储在system表空间中。如果这些pl/sql对象是为数据库建的,dba在system表空间中需要规划这些对象所需要的空间。
表空间利用增加数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。
dba可以使oracle数据库中任何表空间(除system表空间外)在线(online)或离线(offline)。表空间通常是在线,以致它所包含的数据对数据库用户是可用的。当表空间为离线时,其数据不可使用。在下列情况下,dba可以使其离线。
使部分数据不可用,而剩余的部分允许正常存取
执行离线的表空间后备
为了修改或维护一应用,使它和它的一组表临时不可用。
包含有正在活动的回滚段的表空间不能被离线,仅当回滚段不正在使用时,该表空间才可离线。
在数据字典中记录表空间的状态,在线还是离线。如果在数据库关闭时一表空间为离线,那么在下次数据库装配和重新打开后,它仍然保持离线。
当出现某些错误时,一个表空间可自动地由在线改变为离线。通过使用多个表空间,将不同类型的数据分开,更方便dba来管理数据库。
oracle数据库中一表空间是由一个或多个物理数据文件组成,一个数据文件只可与一个表空间想联系。当为一表空间建立一数据文件时,oracle建立该文件,分配指定的磁盘空间容量。在数据文件初时建立后,所分配的磁盘不包含任何数据。表空间可以在线或离线。在oracle中还允许单独数据文件在线或离线。
(2)段、范围和数据块
oracle通过段、范围和数据块逻辑数据结构可更细地控制磁盘空间的使用。
段
段(segment)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。在oracle数据库中有几种类型的段:数据段、牵引段、回滚段和临时段。
数据段:对于每一个非聚集的表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。
索引段:每一个索引有一索引段,存储索引数据。
回滚段:是由dba建立,用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息、在数据库恢复时使用、回滚未提交的事务。
临时段:当一个sql语句需要临时工作区时,由oracle建立。当语句执行完毕,临时段的范围退回给系统。
oracle对所有段的空间分配,以范围为单位。
范围
一个范围(extent)是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。每一个段是由一个或多个范围组成。当一段中间所有空间已完全使用时,oracle为该段分配一个新的范围。
为了维护的目的,在数据库的每一段含有段标题块(segment header block)说明段的特征以及该段中的范围目录。
数据块
数据块(data block)是oracle管理数据文件中存储空间的单位,为数据库使用的i/o的最小单位,其大小可不同于操作系统的标准i/o块大小。
数据块的格式:
公用的变长标题
表目录
行目录
未用空间
行数据
(3)模式和模式对象
一个模式(schema)为模式对象(scehma object)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。
表
表(table)为数据库中数据存储的基本单位,其数据按行、列存储。每个表具有一表名和列的集合。每一列有一个列名、数据类型、宽度或精度、比例。一行是对应单个记录的列信息的集合。
视图
一个视图(view)是由一个或多个表(或其他视图)中的数据的一种定制的表示,是用一个查询定义,所以可认为是一个存储的查询(stored query)或是一个虚表(virtual table)。视图可在使用表的许多地方使用。
由于视图是由表导出的,视图和表存在许多类似,视图象表最多可定义254列。视图可以被查询,而在修改、插入或删除时具有一定的限制,在视图上执行的全部操作真正地影响视图的基本表中的数据,受到基本表的完整性约束和触发器的限制。
视图与表不同,一个视图不分配任何存储空间,视图不真正地包含数据。由查询定义的视图相应于视图引用表中的数据。视图只在数据字典中存储其定义。
引入视图有下列好处:
。通过限制对表的行预定义集合的存取,为表提供附加的安全性
。隐藏数据复杂性。
。为用户简化命令
。为基本表的数据提供另一种观点。
。可将应用隔离基本表定义的修改
。用于不用视图无法表示的查询。
。可用于保存复杂查询。
聚集
聚集(cluster)是存储表数据的可选择的方法。一个聚集是一组表,将具有同一公共列值的行存储在一起,并且它们经常一起使用。这些公共列构成聚集码。例如:emp表各dept表共享deptno列,所以emp表和dept表可聚集在一起,聚集码的列为deptno列,该聚集将每个部门的全部职工行各该部门的行物理地存储在同一数据块中。
索引
索引(index)是与表和聚集相关的一种选择结构。索引是为提高数据检索的性能而建立,利用它可快速地确定指定的信息。oracle索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。
索引可建立在一表的一列或多列上,一旦建立,由oracle自动维护和使用,对用户是完全透明的。索引是逻辑地和物理地独立于数据,它们的建立或删除对表没有影响,应用可继续处理。索引数据的检索性能几乎保持常数,而当一表上存在许多索引时,修改、删除和插入操作的性能会下降。
索引有唯一索引各非唯一索引。唯一索引保证表中没有两行在定义索引的列上具有重复值。oracle在唯一码上自动地定义唯一索引实施unique完整性约束。
组合索引是在表的某个列上所建立的一索引。组全索引可加快select语句的检索速度,在其where子句中可引用组合索引的全部或主要部分 。所以在定义中给出列的次序,将经常存取的或选择最多的列放在首位。
在建立索引时,将在表空间自动地建立一索引段,索引段空间分配和保留空间的使用受下列方式控制:
索引段范围的分配常驻该索引段的存储参数控制。
其数据块中未用空间可受该段的pctfree参数设置所控制。
序列生成器
序列生成器(sequence generator)产生序列号。在多用户环境下该序列生成器特别有用,可生成各返回序列号而不需要磁盘i/o或事务封锁。
序列号为oracle整数,最多可有38个数字。一个序列定义指出一般信息:序列的名字、上升或下降、序列号之间间距和其它信息。对所有序列的确的定义以行存储在system表空间中的数据字典表中,所以所有序列定义总是可用。由引用序列号的sql语句使用序列号,可生成一个新的序列号或使用当前序列号。一旦在用户会话中的sql语句生成一序列号,该序列号仅为该会话可用。序列号生成是独立于表,所以同一序列生成器可用于一个和多个表。所生成序列号可用于生成唯一的主码。
同义词
一个同义词(synonym)为任何表、视图、快照、序列、过程、函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因而经常使用,可用于:
可屏蔽对象的名字及其持有者。
为分布式数据库的远程对象提供位置透明性。
为用户简化sql语句。
有两种同义词:公用和专用。一个公用同义词为命名为public特殊用户组所持有,可为数据库中每一个用户所存取。一个专用同义词是包含在指定用户的模式中,仅为该用户和授权的用户所使用。
杂凑
杂凑(hashing)是存储表数据一种可选择的方法,用以改进数据检索的性能。要使用杂凑,就要建立杂凑聚集,将表装入到该聚集。在骠凑聚集中的表行根据杂凑函数的结果进行物理学存储和检索。杂凑函数用于生成一个数值的分布,该数值称为杂凑值,它是基于指定的聚集码值。
程序单元
程序单元(program unit)是指存储过程、函数和包(package)。一个过程和函数,是由sql语句和pl/sql语句组合在一起,为执行某一个任务的一个可执行单位。一个过程或函数可被建立,在数据库中存储其编译形式,可由用户或数据库应用所执行。过程和函数差别在函数总返回单个值给调用者,而过程没有值返回给调用者。
包提供相关的过程、函数、变量和其它包结构封装起来并存贮在一起的一种方法,允许管理者和应用开发者利用该方法组织如此的程序(routine),来提供更多的功能和提高性能。
数据库链
数据库链是一个命名的对象,说明从一数据库到另一数据库的一路径(path)。在分布式数据库中,对全局对象名引用时,数据库链隐式地使用。
三、数据库和实例的启动和关闭
一个oracle数据库没有必要对所有用户总是可用,数据库管理员可启动数据库,以致它被打开。在数据库打开情况下,用户可存取数据库中的信息。当数据库不使用时,dba可关闭它,关闭后的数据库,用户不能存取其信息。
数据库的启动和关闭是非常重要的管理功能,通过以internal连接到oracle的能力来保护。以internal 连接到oracle需要有下列先决条件:
该用户的操作系统账号具有使用internal连接的操作系统特权。
对internal数据库有一口令,该用户知道其口令。
另外:当用户以internal连接时,可连接到专用服务器,而且是安全连接。
1.数据库启动
启动数据库并使它可用有三步操作:
启动一个实例;
装配数据库
打开数据库
1)启动一个实例
启动一实例的处理包含分配一个sga(数据库信息使用的内存共享区)和后台进程的建立。实例起动的执行先于该实例装配一数据库。如果仅启动实例,则没有数据库与内存储结构和进程相联系。
2)装配一数据库
装配数据库是将一数据库与已启动的实例相联。当实例安装一数据库之后,该数据库保持关闭,仅dba可存取。
3)打开一数据库
打开一数据库是使数据库可以进行正常数据库操作的处理。当一数据库打开所有用户可连接到该数据库用存取其信息。在数据库打开时,在线数据文件和在线日志文件也被打开。如果一表空间在上一次数据库关闭时为离线,在数据库再次打开时,该表空间与它所相联的数据文件还是离线的。
2.数据库和实例的关闭
关闭一实例以及它所连接的数据库也有三步操作:
1)关闭数据库
数据库停止的第一步是关闭数据库。当数据库关闭后,所有在sga中的数据库数据和恢复数据相应地写入到数据文件和日志文件。在这操作之后,所有联机数据文件和联机的日志文件也被关闭,任何离线表空间中数据文件夹是已关闭的。在数据库关闭后但还安装时,控制文件仍保持打开。
2)卸下数据库
停止数据库的第二步是从实例卸下数据库。在数据库卸下后,在计算机内存中仅保留实例。在数据库卸下后,数据库的控制文件也被关闭。
3)停止实例
停止数据库的最后一步是停止实例。当实例停止后,sag是从内存中撤消,后台进程被中止。
3.初始化参数文件
在启动一个实例时,oracle必须读入一初始化参数文件(initialization parameter file),该参数文件是一个文本文件,包含有实例配置参数。这些参数置成特殊值,用于初始oracle实例的许多内存和进程设置,该参数文件包含:
一个实例所启动的数据库名字
在sga中存储结构使用多少内存;
在填满在线日志文件后作什么;
数据库控制文件的名字和位置;
在数据库中专用回滚段的名字。
四、数据字典的使用
数据字典是oracle数据库的最重要的部分之一,是由一组只读的表及其视图所组成。它提供有关该数据库的信息,可提供的信息如下:
oracle用户的名字;
每一个用户所授的特权和角色;
模式对象的名字(表、视图、快照、索引、聚集、同义词、序列、过程、函数、包及触发器等);
关于完整性约束的信息;
列的缺省值;
有关数据库中对象的空间分布及当前使用情况;
审计信息(如谁存取或修改各种对象);
其它一般的数据库信息。
可用sql存取数据字典,由于数据字典为只读,允许查询。
1.数据字典的结构
数据库数据字典是由基本表和用户可存取的视图组成。
基本表:数据字典的基础是一组基本表组成,存储相关的数据库的信息。这些信息仅由oracle读和写,它们很少被oracle用户直接存取。
用户可存取视图:数据字典包含用户可存取视图,可概括地方便地显示数据字典的基本表的信息。视图将基本表中信息解码成可用信息。
2.数据字典的使用
当数据库打开时,数据字典总是可用,它驻留在system表空间中。数据字典包含视图集,在许多情况下,每一视图集有三种视图包含有类似信息,彼此以 前缀 相区别,前缀 user、all和dba。
?前缀为user的视图,为用 视图,是在用户的模式内。
?前缀为all的视图,为扩展的用户视图(为用户可存取的视图)。
?前缀为dba的视图为dba的视图(为全部用户可存取的视图)。
在数据库中oracle还维护了一组虚表记录当前数据库的活动,这些表称为动态性能表。动态性能表不是真正的表,许多用户不能存取,dba可查询这些表,可以建立视图,给其它用户授予存取视图权。
五、事务管理
1.事务
一个事务为工作的一个逻辑单位,由一个或多个sql语句组成。一个事务是一个原子单位,构成事务的全部sql语句的结果可被全部提交或者全部回滚。一个事务由第一个可执行sql语句开始,以提交或回滚结束,可以是显式的,也可是隐式的(执行ddl语句)。
在执行一个sql语句出现错误时,该语句所有影响被回滚,好像该语句没有被执行一样,但它不会引起当前事务先前的工作的丢失。
2.oracle的事务管理
在oracle中一个事务是由一个可执行的sql语句开始,一个可执行sql语句产生对实例的调用。在事务开始时,被赋给一个可用回滚段,记录该事务的回滚项。一个事务以下列任何一个出现而结束。
当commit或rollback(没有savepoint子句)语句发出。
一个ddl语句被执行。在ddl语句执行前、后都隐式地提交。
用户撤消对oracle的连接(当前事务提交)。
用户进程异常中止(当前事务回滚)。
1)提交事务
提交一事务,即将在事务中由sql语句所执行的改变永久化。在提交前,oracle已有下列情况:
在sga的回滚段缓冲区已生成回滚段记录,回滚信息包含有所修改值的老值。
在sga的日志缓冲区已生成日志项。这些改变在事务提交前可进入磁盘。
对sga的数据库缓冲区已作修改,这些修改在事务真正提交之前可进入磁盘。
在事务提交之后,有下列情况:
对于与回滚段相关的内部事务表记录提交事务,并赋给一个相应的唯一系统修改号(scn),记录在表中。
在sga的日志缓冲区中日志项由lgwr进程写入到在线日志文件, 这是构成提交事务的原子事务。
在行上和表上的封锁被释放。
该事务标志为完成 。
注意:对于提交事务的数据修改不必由dbwr后台进程立即写入数据文件,可继续存储在sga的数据库缓冲区中,在最有效时将其写入数据文件。
2)回滚事务
回滚事务的含义是撤消未提交事务中的sql语句所作的对数据修改。oralce允许撤消未提交的整个事务,也允许撤消部分。
在回滚整个事务(没有引用保留点)时,有下列情况:
在事务中所有sql语句作的全部修改,利用相应的回滚段被撤消。
所有数据的事务封锁被释放。
事务结束。
当事务回滚到一保留点(具有savepoint)时,有下列情况:
仅在该保留点之后执行的语句被撤消。
该指定的保留点仍然被保留,该保留点之后所建立的保留点被删除。
自该保留点之后所获取的全部表封锁和行封锁被释放,但指定的保留点以前所获取的全部数据封锁继续保持。
该事务仍可继续。
3)保留点
保留点(savepoint)是在一事务范围内的中间标志,经常用于将一个长的事务划分为小的部分。保留点可标志长事务中的任何点,允许可回滚该点之后的工作。在应用程序中经常使用保留点;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个保留点之后,该保持点之后所获得的数据封锁被释放。
六、数据库触发器
1.触发器介绍
数据库触发器(database trigger)是存储在数据库中的过程,当表被修改时它隐式地被激发(执行)。在oracle中允许在对表发出insert、update或delete语句时隐式地执行所定义的过程,这些过程称为数据库触发器。触发器存储在数据库中,并与所相关表分别存储。触发器仅可在表上定义。在许多情况中触发器用于提供很高级的专用数据库管理系统,来补充oracle的标准功能。触发器一般用于:
自动地生成导出的列值;
防止无效的事务;
实施更复杂的安全性检查
在分布式数据库中实施跨越结点的引用完整性;
实施复杂的事务规则;
提供透明事件日志;
提供高级的审计;
维护同步表复制;
收集关于存取表的统计。
注意:数据库触发器与sql*forms触发器之间的差别。数据库触发器是定义在表上,存储在数据库中,当对表执行insert、update或delete语句时被激发,不管是谁或哪一应用发出。而sql*forms触发器是sql*form应用的部分,仅当在指定sql*forms应用中执行一个指定触发器点时才被激发。
触发器和说明性完整性约束都可用于约束数据的输入,但它们之间有一定区别:
说明性完整性约束是关于数据库总是为“真”的语句。一个完整性约束应用于表中已有数据和操纵表的任何语句。
而触发器约束事务不可应用于在定义触发器前已装入的数据,所以它不能保证表中全部数据服从该触发器的规则。触发器实施瞬时约束,即在数据改变时实施一约束。
2.触发器的组成:
一个触发器有三个基本部件:触发事件或语句、触发器的限制、触发器动作。
触发事件或语句:为引起触发器激发的sql语句,是对指定表insert、update或delete语句。
触发器限制:为一布尔表达式,当触发器激发时该条件必须为true。触发器的限制是用when子句来指定。
触发器的动作:为一个pl/sql块(过程),由sql语句和pl/sql语句组成。当触发语句发出,触发器的限制计算得true时,它被执行。在触发器动作的语句中,可使用触发器的处理的当前行的列值(新值、老值),使用形式为:
new.列名 引用新值
ole.列名 引用老值
在定义触发器时可指定触发器动作执行次数:受触发语句影响每一行执行一次或是对触发语句执行一次。
对每一触发语句可有四种类型触发器:
行触发器:对受触发语句所影响的每一行,行触发器激发一次。
语句触发器:该类型触发器对触发语句执行一次,不管其受影响行数。
定义触发器可以指定触发时间,指定激发器动作的执行相对于触发语句执行之后或之前。
before触发器:该触发器执行触发器动作是在触发语句执行之前。
after触发器:该触发器执行触发器动作是在触发语句执行之后。
一个触发器可处于两种不同的方式:使能触发器和使不能触发器。
使能触发器:只要当触发语句发出,触发器限制计算为true,这种类型的触发器执行其触发动作。
使不能触发器:这种触发器即使其触发语句被发出,触发器限制计算为true,也不执行触发器动作。
触发器的源代码存储在数据库中,在第一次执行时,触发器的源代码被编译,存储在共享池中。如果触发器从共享池中挤了,再使用时必须再重新编译。
七、分布处理和分布式数据库
1.简介
一个分布式数据库在用户面前为单个逻辑数据库,但实际上是由存储在多台计算机上的一组数据库组成。在几台计算机 上的数据库通过网络可同时修改和存取,每一数据库受它的局部的dbms控制。分布式数据库中每一个数据库服务器合作地维护全局数据库的一致性。
在系统中的每一台计算机称为结点。如果一结点具有管理数据库 软件,该结点称为数据库服务器。如果一个结点为请求服务器的信息的一应用,该结点称为客户。在oracle客户,执行数据库应用,可存取数据信息和与用户交互。在服务器,执行oracle软件,处理对oracle数据库并发、共享数据存取。oracle允许上述两部分在同一台计算机上,但当客户部分和服务器部分是由网连接的不同计算机上时,更有效。
分布处理是由多台处理机分担单个任务的处理。在oracle数据库系统中分布处理的例子如:
客户和服务器是位于网络连接的不同计算机上。
单台计算机上有多个处理器,不同处理器分别执行客户应用。
sql*net是oracle网络接口,允许运行在网络工作站的oracle工具和服务器上,可存取、修改、共享和存储在其它服务器上的数据。saql*net可被认为是网络通信的程序接口。sql*net利用通信协议和应用程序接口(api)为oarcle提供一个分布式数据库和分布处理。
sql*net驱动器为在数据库服务器上运行的oracle进程与oracle工具的用户进程之间提供一个接口。
参与分布式数据库的每一服务器是分别地独立地管理数据库,好像每一数据库不是网络化的数据库。每一个数据库独立地被管理,称为场地自治性。场地自治性有下列好处:
系统的结点可反映公司的逻辑组织。
由局部数据库管理员控制局部数据,这样每一个数据库管理员责任域要小一些,可更好管理。
只要一个数据库和网络是可用,那么全局数据库可部分可用。不会因一个数据库的故障而停止全部操作或引起性能瓶颈。
故障恢复通常在单个结点上进行。
每个局部数据库存在一个数据字典。
结点可独立地升级软件。
可从分布式数据库的所有结点存取模式对象,因此正像非分布的局部的dbms,必须提供一种机制,可在局部数据库中引用一个对象。分布式dbms必须提供一种命名模式,以致分布式数据库中一个对象可在应用中唯一标识和引用。一般彩在层次结构的每一层实施唯一性。分布式dvms简单地扩充层次命名模型,实施在网络上唯一数据库命名。因此一个对象的全局对象名保证在分布式数据库内是唯一。
oracle允许在sql语句中使用佤对象名引用分布式数据库中的模式对象(表、视图和过程)。在oracle中,一个模式对象的全局名由三部分组成:包含对象的模式名、对象名、数据库名、其形式如:
其中scott为模式名,emp为表名,@符号之后为数据库名.
一个远程查询为一查询,是从一个或多个远程表中选择信息,这些表驻留在同一个远程结点.
一个分布式查询可从两个或多个结点检索数据.一个分布式更新可修改两个或两个以上结点的数据.
一个远程事务为一个事务,包含一人或多个远程语句,它所引用的全部是在同一个远程结点上.一个分布式事务中一个事务,包含一个或多个语句修改分布式数据库的两个或多个不同结点的数据.
在分布式数据库中,事务控制必须在网络上直辖市,保证数据一致性.两阶段提交机制保证参与分布式事务的全部数据库服务器是全部提交或全部回滚事务中的语句.
oracle分布式数据库系统结构可由oracle数据库管理员为终端用户和应用提供位置透明性,利用视图、同义词、过程可提供oracle分布式数据库系统中的位置透明性.
oracle允许在select(查询)、insert、update、delete、select…for update和lock table语句中引用远程数据。对于查询,包含有连接、聚合、子查询和select …for update,可引用本地的、远程的表和视图。对于update、insert、delete和lock table语句可引用本地的和远程的表。注意在引用long和long raw列、序列、修改表和封锁表时,必须位于同一个结点。oracle不允许作远程ddl语句。
在单场地或分布式数据库中,所有事务都是用commit或rollback语句中止。oracle提供两种机制实现分布式数据库中表重复的透明性:表快照提供异步的表重复;触发器实现同步的表的重复。在两种情况下,都实现了对表重复的透明性。
2.分布式数据库全局名与数据库链
1)分布式数据库全局名:每一个数据库有一个唯一的全局名,由两部分组成:数据库名(小于等于8字符)和网络域。全局数据库名的网络域成分必须服从标准互联网规范。域名中的层次 由符号“.”分开,域名的次序由叶至根,从左至右。
2)数据库链:为对过程数据库定义的一路径。数据库链对分布式数据库的用户是透明的,数据库链的名字与链所指向的数据库的全局名相同。其由二部分组成:远程账号和数据库串。例建立数据库链的形式:
creat public datebase link sale。division3。acme。com
connect to guest identified by password
using‘db串’;
其中:sales。divisin3。acme。com为定义的链名;guest/password 为远程数据库的用户账号和口令;db串用于远程连接。由账号和db串构成完全路径。如果只有一个则为部分路径。
有三种数据库链可用于决定用户对全部对象名的引用:
专用数据库链:为一指定用户建立。专用数据库链仅链的主人可使用。在sql语句中用于指定一全局对象名或者在持有者的视图过程定义中使用。
公用数据库链:为特殊的用户组public建立。公用数据库链可为任何用户使用,在sql语句中用于指定一个全局对象名或对象定义。
网络数据链:由网络域服务器建立和管理,可为网络中的任何数据库的任何用户使用,可在sql语句中指定全局对象名或对象定义中使用。注意:当前网络域服务器对oracle不能用,所以网络数据库链不可用。
3.表快照
oracle的表快照特征允许一个主表在分布式数据库的其它结点进行复制。只允许修改主表,而复制只可读。主表达式每一个复制称为一个快照。快照异步的刷新,反映主表的一个最近事务一致状态。
一个快照可为表的完全拷贝或者为表的一个子集,由引用一个或多个主表、视图或其它快照的分布式查询所定义。包含主表的数据库称为主数据库。
快照有简单快照和复杂快照。简单快照的每行是基于单个远程表中的一行。所以定义简单快照的查询中不能有groub by或connect by子句,或子查询、连接或集合操作。如果在快照定义的查询中包含有上述子句或操作,这种快照称为复杂快照。
在快照建立时,oracle在快照的模式中建立几种内部对象:
在快照结点,oracle建立一基表用于存储由快照定义的查询所检索的行,然后为该表建立一个只读的视图,并为远程主表建立一视图,该视图用于新快照。
一个快照周期地被刷新,反映它的主表的当前情况。为了刷新一快照,快照定义查询是被发出,其查询结果想在存储在快照中,代替以前的快照数据。
【oracle学习方法】推荐阅读:
如何学习Oracle06-24
oracle数据库学习心得10-17
oracle综合实验报告12-28
oracle数据库课程10-25
oracle函数及触发器12-13
oracle数据库恢复技术12-18
关于oracle分区技术初了解01-30
甲骨文(oracle)技术笔试题01-08
oracle9i简单介绍01-23