Oracle环境
Oracle环境(精选12篇)
Oracle环境 第1篇
近年来,随着互联网及企业内部网的高度普及,不仅大部分新生的应用程序都采用基于Web的技术来开发,而且很多企业也开始将其旧的程序系统移植到Web平台上来。然而,怎样选用一个可靠而又灵活的安全机制,始终是一个复杂而又容易被忽略的方面。本文将讨论在ASP.NET+Oracle环境下的安全控制方案。
1 安全控制的问题及分析
一般来讲,一个安全方案主要涉及用户验证(authentication)及权限控制(authorization)两大方面怎么实现的问题。从安全控制的实现位置来看,一般有两大类实现机制:一类是程序级的控制,另一类是数据库级的控制。
(1)在程序级的安全控制中,程序用户的管理局限在应用程序一层。每个用户使用其各自的账户登录到程序上,而程序则在后台使用唯一一个高权限数据库账户连接到数据库上,如图1所示。
(2)在数据库级的安全控制中,每个用户的账户实际上都是数据库账户。在安全控制方面,应用程序基本上就完全“让权”给数据库,如图2所示。
这两类机制各有利弊。程序级的安全控制相对容易实现,也比较容易管理。通常适用于相对小型的,单一的或者纯粹面向Internet的程序系统;但却不适用于企业级系统(Enterprise Systems),这类系统一般都比较复杂,往往涉及到企业的多个部门,以及多个相互独立但又相互关联(通过共享全部或部分数据库)的应用程序。许多用户不但需要通过一个或多个程序访问数据,而且需要对数据库具有直接的访问权限(比如通过SQL觹PLUS或TOAD之类的工具)。在这样的环境中,程序级的安全控制便会显现出以下不足:
(1)由于每个应用程序都必须实现自己的安全控制,重复劳动不但是对企业资源的一种浪费,而且也很容易在不同程序中带来不一致性甚至冲突。虽然代码共享可以有效地降低这些负面效应,但在某些情况下代码共享却是很困难的,比如在不同的操作系统平台之间,或在不同的体系结构之间。
(2)由于用户账户不是数据库账户,某些用户便有可能绕过应用程序中的层层安检机制而直接访问数据库。特别是可以看到程序数据库账户的那些人。
(3)不便于实现数据库级的审核记录(Audit Trail)。多数企业级的数据库由于存有大量关键的或保密的数据,需要实现数据库级别的审核记录(比如通过数据库触发(Triggers))。但假如所有程序用户公用同一个数据库账户,这种审核机制便失去了作用。
由此看来,数据库级的安全控制虽然实现起来较为繁琐,但从长远的角度看,收益还是大于投入的。接下来看一下在Oracle数据库环境下实现安全控制所面临的一些挑战及其解决方案。这里将假设开发环境是ASP.NET,但是文中所讨论的问题和解决方案同样适用于其他开发环境,比如JSP。
2 安全问题的解决方案
2.1 采用角色级的授权,或是用户级的授权
比如说,Lin作为人事部经理,可以看到企业中每个人的薪水。那么,是应该直接赋予Lin对Salary表的访问权限呢,还是将权限赋给一个叫做HR_Manager的角色,然后再将该角色赋给Lin呢?这一问题比较简单,一般都会通过角色来实现间接的授权,就非常易于管理。比如,可以将同一个角色很方便地同时赋给多个用户。再比如,若修改某一角色的具体权限,那么与其相关联的所有用户的权限便会自动作出相应的调整。关于这两种授权方式的不同,参见图3和图4。
2.2 充分利用ADO.NET(或者JDBC)中的连接池(Conn-ection Pool)
在基于Web的程序中,考虑到HTTP协议下网络连接的短期性特点及系统的可伸缩性(Scalability)需求,每次网页请求一般都会建立一个新的数据库连接、使用该连接存取数据、然后再释放该连接。下次网页请求将会重复这一过程。当网页请求频繁或同时有多个用户在使用系统时,数据库连接就会处于不断的建立和释放中。而建立一个全新的数据库连接通常消耗较多的系统资源。连接池的作用便是通过共享和重用此前已经打开的连接来大大降低这一情况下的系统开销,从而提高整个系统的性能及可伸缩性。当今主流数据库的ADO.NET Provider都支持连接池,包括Oracle Data Provider for.NET。但是,熟悉连接池的读者都知道,连接池中连接的重用是建立在相同连接字符串(Connection String)的基础上的。比如,Zhang访问了一个网页,ADO.NET使用Zhang的连接字符串(比如“Data Source=TOTL;Min Pool Size=5;Max Pool Size=20;User Id=zhang;Password=zhang_Password;”)建立了一个数据库连接。该网页处理完成之后,这一连接便被归还给连接池以备重用。这时如果用户Li也来访问一个网页,ADO.NET首先试图去连接池中寻找一个空闲的而且匹配用户Li的连接字符串(比如“Data Source=TOTL;Min Pool Size=5;Max Pool Size=20;User Id=li;Password=li_Password;”)的连接。由于找不到匹配的连接池,那么ADO.NET便会去建立一个新的连接池并在其中建立一个或多个新的连接。于是,Zhang最初建立的连接处于空闲的状态,却不能被用户Li重用。这样,当很多用户同时使用系统时,连接池中会出现大量空间的连接池,从而带来严重的系统性能问题,甚至会引起系统崩溃,如图5所示。
Oracle针对这一问题的解决方案是代理验证(Proxy Authentication)。代理验证是Oracle 9i引入的一项功能。在一个实际的连接之上,可以建立很多“轻量级会话”(Lightweight Sessions)。每个轻量级会话代表一个具体的数据库用户,而且只占用很少的系统资源。实际的连接通常是用一个具有极低权限的共用账户(且称它为代理账户)来建立。同时再绑定到一个用户自己的轻量级会话上。这样,在数据库服务器一端,数据库会使用轻量级会话上的账户信息来做审计标识,而不是使用实际连接上的代理账户。而且,数据库会根据轻量级会话的账户来决定连接的访问权限。在客户端(ADO.NET+Oracle Data Provider),连接池会通过代理账户的名字来标识,而不是实际用户的标识。因为所有实际用户共用同一个代理账户,ADO.NET便仅仅创建一个连接池供所有用户使用(如图6所示)。这样,前面所说的连接池可伸缩性的问题便迎刃而解了。下面,将对在程序中实现这一功能的方式予以详述。
首先,要在数据库中创建一个代理账户,并可赋予该账户最低的权限(比如只有连接的权限),从而解决了共用账户的密码流失的问题。具体Oracle语句如下:
CREATE USER my_proxy_user IDENTIFIED BY proxy_password;
GRANT CONNECT TO my_proxy_user;
然后,利用Oracle让每一个用户通过这一代理账户来登录。对于每一个新用户,都要执行类似下面的语句:
ALTER USER zhang GRANT CONNECT THROUGHmy_proxy_user AUTHENTICATED USING PASSWORD
最后,在ASP.NET的配置文件(Web.config)中,要对连接字符串做出修改,以指示Oracle Data Provider使用代理账户来连接数据库。比如:
Data Source=TOTL;Min Pool Size=5;Max Pool Size=20;Proxy User Id=my_proxy_user;Proxy Password=proxy_password;User Id=zhang;Password=zhang_Password;
2.3 防止直接数据库访问中权限的滥用
在数据库程序开发过程中,为降低开发的工作量及复杂度,通常会将较高的数据库权限(甚至管理员权限)赋给用户。同时,通过程序的逻辑来实现进一步的访问限制。然而,假如用户直接连到数据库(比如通过SQL觹PLUS),由于失去了程序逻辑的保护,数据库便犹如大门敞开一样。用户就有可能进行未授权的操作或误操作。
在Oracle中,可以通过禁用那些敏感的角色来初步解决这一问题。在2.1中人事部经理Lin的例子中,假定Lin既可以查看员工的人事数据,也有权通过人事管理程序来更新这些数据。那么,当Lin偶尔使用SQL觹PLUS直接连到数据库去收集一些特殊数据时,Lin便有可能意外地更新一些数据。为防止这一情况出现,可以在Oracle中创建两个角色:HR_DATA_VIEWER和HR_DATA_UPDATOR。这两个角色同时都赋给Lin,然而只有HR_DATA_VIEWER被指定为“缺省角色(default role)”。缺省角色在数据库连接建立时便会自动激活,而其余的角色,即非缺省角色则是被禁用的。因此,Lin在登录到SQL觹PLUS后便只能查看人事数据而不能修改了。缺省角色可以通过以下的命令来指定:
ALTER USER lin DEFAULT ROLE(HR_DA-TA_VIEWER);
在数据库连接建立之后,非缺省角色可被显式地激活。比如,当Lin登录到人事管理程序中时,程序代码可以显式地激活HR_DATA_UPDATOR这一角色。这样,Lin便可以通过程序来修改人事数据。非缺省角色可以通过调用以下系统过程来激活:
DBMS_SESSION.set_role(HR_DATA_UPDATOR);
这一方案可以有效地减少对数据库的误操作,然而在控制蓄意的越界访问方面却基本无效。比如,在Lin的例子中,进一步假定Lin是一个分公司的人事经理,只能修改本分公司内的人事数据,而无权修改其他分公司的数据。在人事管理程序中,可以轻松地实现这一需求。然而,如果Lin通过SQL觹PLUS直接连接数据库并显式地激活HR_DA-TA_UPDATOR角色的话,此时就可以更改其他分公司的数据。试想,假如HR_DATA_UPDATOR这一角色只能通过程序代码来激活而不能在SQL觹PLUS中激活,问题就可得到解决。而Oracle中也存在这样一种解决方案:在创建HR_DA-TA_UPDATOR角色时,可以指示Oracle这一角色只能通过某一个PL/SQL包(Package)来激活。在该包的代码中,根据查看当前的连接是否代理连接来决定是否激活HR_DA-TA_UPDATOR这一角色。需要提及的是,这个包必须定义为使用调用者权限(invoker rights),而非缺省的定义者权限(definer rights)。在这个例子中,可以通过以下的代码来定义该包的规范(package specification):
在这段代码中,“IF”语句用来检查当前的连接是否代理连接,并以此来决定激活HR_DATA_UPDATOR角色或者报错。然后,需要更改一下HR_DATA_UPDATOR角色,使其只能通过my_invoker_rights_pkg来激活:
现在,假如Lin在SQL觹PLUS中试图激活HR_DA-TA_UPDATOR角色,无论是通过DBMS_SESSION系统包还是调用以上的调用者权限包,Oracle都会拒绝执行并报错。要想更新数据,Lin必须通过登录到人事管理程序中来进行。
3 结束语
本文讨论的这套完全机制,将Oracle提供的若干个特殊的安全功能集成在一起,在维持了Oracle内在的灵活而强大的安全性能的同时,又充分利用了现代数据库开发工具(比如ADO.NET或JDBC)的优化功能。
概括起来,这套安全机制大体包括以下几个步骤:
(1)创建一个低权限的代理账户。(2)修改现有用户的账户,使得彼此可以建立代理连接。
(3)修改程序中的数据库连接字符串(比如在web.config文件中)以使用代理连接。
(4)创建一个调用者权限的PL/SQL包去激活那些高权限的角色。
(5)修改或者创建高权限的角色,指定该角色只能通过以上的PL/SQL包来激活。
(6)把这些角色作为非缺省角色分配给相应的用户。
(7)在程序代码中,调用PL/SQL包过程来激活这些角色。
摘要:分析ASP.NET+Oracle环境下的用户验证和权限控制两方面的问题,将Oracle提供的若干个特殊的安全功能集成在一起,提出了程序控制和数据库控制两方面的安全控制方案。
关键词:ASP.NET,Oracle,安全,审核,用户验证,权限控制
参考文献
[1]林海,张元全.计算机网络安全[M].北京:高等教育出版社,2006.
[2]谢希仁.计算机网络[M].北京:电子工业出版社,2009.
[3]汪永益,王涛,张永.基于Oracle的数据库安全策略[J].现代情报,2006,26(1):119-120.
[4]王新民,王飞.Oracle9i数据库安全管理机制剖析[J].信息技术,2002(12):18-20.
[5]张云帆.Oracle数据库的安全及备份恢复[J].计算机工程,2009(8):85-87.
[6]浦云明,林颖贤.oracle数据库实用教程[M].北京:机械工业出版社,2007.
[7]陈从锦,杨昱.Oracle数据库的安全防护概述[J].中山大学学报论丛,2003(3):208-211.
Oracle环境 第2篇
su - root
mkdir /asmdisk
==在unix/linux中,所有设备都是文件,所以我们可以建几个文件来模拟多块硬盘,先用dd建若干个文件,大小为1G
dd if=/dev/zero f=/asmdisk/disk1 bs=1024k count=500
dd if=/dev/zero f=/asmdisk/disk2 bs=1024k count=500
dd if=/dev/zero f=/asmdisk/disk3 bs=1024k count=500
dd if=/dev/zero f=/asmdisk/disk4 bs=1024k count=500
////// 如果在安装失败可以使用这个命令,清空ASM磁盘ddif=/dev/zeroof=/asmdisk/disk4bs=8192count=500//////
==用losetup命令,使这些文件在linux看来是某个存储设备
/sbin/losetup /dev/loop1 /asmdisk/disk1
/sbin/losetup /dev/loop2 /asmdisk/disk2
/sbin/losetup /dev/loop3 /asmdisk/disk3
/sbin/losetup /dev/loop4 /asmdisk/disk4
raw /dev/raw/raw1 /dev/loop1
raw /dev/raw/raw2 /dev/loop2
raw /dev/raw/raw3 /dev/loop3
raw /dev/raw/raw4 /dev/loop4
注意:如果要删除通过dd模拟出的虚拟磁盘文件的话,直接删除模拟出的磁盘文件(也就是asm_disk1、asm_disk2asm_disk6)还不够,
还必须执行losetup -d /dev/loopN,在这里N从1到6,
否则,磁盘文件所占用的磁盘空间不能释放。
cd /dev/raw
Oracle中国大破大立 第3篇
“在亚太企业应用市场,我们已经让SAP感觉如芒刺在背。”
2005年4月26日的新闻发布会上,Oracle亚太区应用及行业副总裁Mark Gibbs的开场白借用了两个重量级拳击手的画面。其中红色腰带的一方代表Oracle,而蓝色腰带的一方,Mark Gibbs则以美国式幽默让大家“随便怎么猜”,但很明显,以蓝色为主色调的SAP就是这一红蓝相争的另一主角。
这是过去1年以来,Oracle在中国公开场合露面的最高级别官员,此次发布会也是Oracle在中国就系列收购行动首次作出说明。事实上,在此之前不到半个月的时间里,Oracle与中国媒体已经有过连续两次不断升级的沟通。4月13日,京城不少媒体都接到Oracle的邀请,由Oracle中国北方区董事总经理李翰璋向媒体通报其2005财年第三季度在亚太地区的业绩;4月22日,Oracle全球客户计划亚太高级总监Tony Banham来到中国,希望打开Oracle网格计算的市场局面。现在看来,这不过是Mark Gibbs在中国向SAP宣战的路演。
在对PeopleSoft的世纪大收购尘埃落定,中国区组织架构调整完毕的时候,Oracle希望人们的目光更多聚焦在它与竞争对手在应用软件和技术产品领域的贴身肉搏战上。
而事实上,Oracle过去一年来让人眼花缭乱的变化并不是简单地为了今天向SAP宣战,Oracle业务板块面临重重挑战的内在事实以及全球软件行业的整体气候变迁才是其背后的变化逻辑。年营业额几乎是SAP两倍的Oracle在应用软件上对SAP的挑战只不过是虚晃一枪,这只是Oracle战略布局的一个小棋子。作为全球第二大的软件厂商,Oracle不会改变它将微软掀翻马下的“野心”,应用软件在Oracle体系中的现时突出将随着对微软斗争路线的变化而改变。
史无前例地重视“应用软件”
“2004年9月份的重组是有史以来Oracle亚太地区软件业务上最重要的事件。”Mark Gibbs告诉记者。2004年9月,Oracle宣布调整其亚太地区销售和咨询业务模式,把业务重点放在3个核心领域—应用产品、技术产品和行业,即所谓“三驾马车”,并配备专业队伍。而Oracle中国公司把原有的技术部门和应用部门分别支持7大行业的业务模式,改为应用产品、行业、技术产品和区域4大块。原有的制造、消费品、电信、金融、政府、高科技和交通等7个行业除了电信、金融、政府3大行业(这3大行业占Oracle利润总额的30%以上)以外,其他几个行业包括汽车制造、能源、交通运输等则归属应用产品部门。
在这之前,Oracle的应用软件业务是在和专售应用产品的软件公司进行竞争,对于以底层数据库技术产品起家的Oracle来说,难以掌握应用软件上的先发优势,在Mark Gibbs看来,重组是业务模式调整的必然选择,这一次重组也“对应用软件赋予了史无前例的重视”。
而在李翰璋对记者的解释中,这一次重组更是Oracle的一个战略选择,一种自我定位的改变。“Oracle的目标是做全球大而全的信息公司”,而不再是技术产品的供应商。
“信息公司”的概念根据Oracle老板拉里·埃里森“大的客户只会找大的IT厂商”的思路提出,一向个性张扬的埃里森希望从底层数据库到应用层面一统天下,铺全企业级应用软件产品。“这种思路的成形源于,一方面客户对这种供货商不必有被收购的担心,另一方面,客户不必因购买多种不同厂商的产品而增加IT成本,”李翰璋告诉记者。
已在Oracle工作14年的Mark Gibbs对Oracle的这一变化轨迹有着清晰认识。“当我和企业的CIO们谈论集成的信息架构时,他们两眼放光,因为他们都承认,如今企业IT环境的复杂性和局限性。有了Oracle,他们就可以只选择一家软件公司既为他们提供数据管理和集成技术,又为他们提供完整的应用套件。”
而在上海国通供应链管理有限公司市场总监战秀强看来,“Oracle现在的业务模式更多是出于市场销售的策略,以技术产品带动应用产品的销售。”数据库是企业应用软件正常运行的基础,在3驾马车不能并驾齐驱的时候,领先的数据库业务就成了其他两者的发动机。事实上,在中国市场上,早在2000年,Oracle就已经采取这种打包销售的方式,只是以后会更加明显。
“对于Oracle和微软这样的软件巨头来说,竞争不在技术和市场层面,业务模式之争才是最为关键的。Oracle希望借助商业模式的调整寻求突围。”独立软件分析师李际告诉记者,“但Oracle要做这种大而全的软件公司,其实存在很大的风险。一个公司的市场生存要求它的内部业务板块要相对均衡发展,Oracle是否能够以它的发展速度来抵消这种不均衡带来的风险性,还有待观察。”
事实上,Oracle在这3个领域都将面对强大对手,IBM、BEA以及SAP和微软等都不是等闲之辈。
没有绝对领导人的Oracle中国
与此同时,Oracle中国公司开始为其全球业务模式的变化让路,中国区由此接二连三地上演了人员入局出局的公司大戏。
2004年6月,张书恒这个人称在Oracle做的职位最高的“大陆仔”从Oracle辞掉中国区副总经理的职务,并以职业经理人罕有的姿态旗帜鲜明地公开批评其上司—Oracle大中华区总裁陆纯初,称其缺乏对中国市场的了解,并在辞职前绕过陆纯初,向Oracle亚太区总裁直陈陆治下的Oracle中国区域市场的诸多问题。
随后,陆纯初开始发动反击,公开宣称张书恒是由于不合格而被Oracle“炒鱿鱼”。正当人们为此嘘唏不已的时候,3个月后的2004年9月,陆纯初也颇为悲壮地离开Oracle,其直接原因是Oracle从此取消大中华区总裁的位置,将原先由其负责的市场范围“肢解”为华北、华南和中国香港、华东和华西几个区域,并受Oracle亚太区的直接管理。
同时,Oracle在中国的运营模式整体变阵,以矩阵式管理进行市场运作,与3驾马车的业务模式进行结合。“现在是以行业为矩阵纵向,而技术产品和应用产品横向插入行业中”,Oracle一位经理告诉记者,“这也是国际上公认的比较好的业务管理模式。”
以前要对销售业绩负责的区域老总们,现在不再背负销售任务,“角色转为对客户、合作伙伴、社区的维护和商业机会的寻觅”,与之前张书恒等人前线将军的身份和权力有着天壤之别。事实上,如今Oracle中国区不像以前,已经没有绝对领导人,每个地区的董事总经理都可以在自己的区域代表Oracle。
而在Mark Gibbs看来,这种运营机制符合Oracle全球范围的统一风格,中国区必须服从Oracle全球范围的商业利益。“重组之后,我们有了一支专注于应用软件产品的专业销售队伍。”矩阵式的管理模式也让Oracle的技术产品和应用产品能够捆绑在一起,打入各个行业领域。事实上,各个区域总经理其实还分别负责不同的行业,比如李翰璋就同时是Oracle中国区通信行业总经理,负责Oracle在中国电信市场打单前后的工作,“这样一来,以行业为先导,技术产品和应用产品跟上来就比较容易了。”Oracle经理告诉记者。
“当然,这并不代表Oracle以前在中国的运营模式就不对,只是现在更适合这种模式。”在这位Oracle经理看来,Oracle全球范围的系列收购以及在中国的变化都是基于“Oracle要做大而全的信息公司”的定位变化这一背景。
Oracle在中国区的变阵更像是一场“削藩”。“张书恒等本地代表是真正的藩主,而陆纯初不过是Oracle做掉这些藩主的工具。”业内某位不愿透露姓名的知名人士告诉记者,Oracle要收权,推行变阵,张书恒等人才是真正的障碍,所以用了大半年的时间煞费苦心导演了这一场戏,当陆纯初的历史使命已经完成的时候,离开就是一个必然选择。
但跳出Oracle公司层面,在不少业内人士看来,这表示跨国公司全球化运动时代的到来,这一点这位经理也表示认同。“以前中国市场有不少不规范的操作方式,对于讲究商业规则的跨国公司来说,这只能是暂时的。”Oracle经理告诉记者,“Oracle中国今后更多的是按照Oracle全球的做法来运营。”
渠道:静悄悄的黎明
尽管纷纭繁杂,但Oracle的变化已由内向外悄然开始。
黄庆是上海一家IT咨询公司老板,做Oracle代理已有近两年时间,主要做Oracle企业应用软件的实施。2005年3月,Oracle亚太区来人突然造访,这让黄庆有些吃惊,“这在过去两年是没有的事。”在与黄庆对话的时候,造访者很认真地记录了黄庆针对Oracle渠道政策的意见,并表示Oracle将在中国改变一些渠道政策,重新扶持一批重要的合作伙伴。
在过去的几年中,Oracle在中国市场上的渠道商被人们嗤笑为Oracle的“提款机”—不管产品是否落实在最终客户身上,代理商们要先将所有款项打到Oracle账上,而且用户名不可更改,这样一来,如果初始谈判的客户变卦,代理商只能为Oracle买单。正因为如此,造成曾经不少Oracle金牌合作伙伴由于现金流压力要么死掉,要么倒向竞争对手。
事实上,Oracle在中国执行的是其全球通行的政策,只是前几年在中国遭遇全球规则之外的潜规则问题,由此衍生的台下交易在之前Oracle技术产品和应用产品的售前过程中屡见不鲜。
而在售后,Oracle“与民争利”的现象也很多见。“有一家叫OSC的公司挂靠在Oracle下面,我们在做实施的时候就经常碰上他们。”黄庆告诉记者。很明显,类似OSC这样的公司与Oracle有着千丝万缕的利益关系,“不明就里的客户往往更愿意相信OSC,我们有的时候很难做。”
这些问题Oracle迟早要面对,在其计划中,2005年5月底完成对PeopleSoft的整合后,处理好与合作伙伴共生共存的关系将成为Oracle在中国的一大主题。
在李翰璋看来,与合作伙伴和客户加强关系是与Oracle中国区组织架构的调整同步进行的。“在2005年,我们将继续推动‘金色中国’计划,除了在应用软件和技术产品领域加大力度外,加强业务伙伴关系和市场承诺也是我们的重要工作。”
而在《互联网周刊》记者此次对Oracle合作伙伴和客户的调查中,尽管Oracle中国公司内部调整不断,但这种变化似乎还没有这么快传递到合作伙伴和客户身上。
在李际看来,“中国区的调整更多是为了配合Oracle全球的调整步伐,中国市场的合作伙伴和客户感觉不到变化很正常。”
内部正在经历阵痛的Oracle中国,在其最核心的业务—渠道、销售层面,颇给人一种“这里的黎明静悄悄”的感觉,但谁也不能轻易否认,变化正在悄悄波及。
豪门争锋
没有人敢肯定Oracle最后一定能胜出。
在2005年的媒体答谢会上,SAP大中华区总裁西曼要求在场媒体记者举杯“为SAP中国干杯”,“由于PeopleSoft被Oracle购并,SAP减少了一个重要的竞争对手,这将直接推动SAP走进快速增长的轨道。”西曼的得意与Mark Gibbs宣布挑战SAP时的兴奋相得益彰,而这只是孔翰宁和拉里·埃里森各自心情在中国前台的表现。
与此同时,分析师Dominy表示,现在Oracle拉开3条战线,可能产生的结果之一就是IBM与SAP进行更密切的合作。IBM多年以来一直是Oracle除微软之外的一大竞争对手,IBM告诉第三方应用软件厂商说,它不会像甲骨文希望的那样与它们在应用软件领域进行竞争。
“今后只有像Oracle这样大而全的软件公司才有可能活得更好!”这样的话李翰璋和Tony Banham以及Mark Gibbs都向记者表述过,在Oracle看来,现在SAP也在“跟着Oracle学”,意图进入应用服务器领域,摆脱单一产品线可能遭遇的瓶颈。“但SAP的发展速度很难跟上Oracle。”—从收购PeopleSoft开始,Oracle就一直在以这样自励的语气鼓励自己。
而在中国市场上谁将领跑?在专注汽车领域的软件提供商QAD中国区总经理缪青看来,Oracle要想如愿以偿,关键在两个方面,“一是人员和组织架构的调整,这一系列调整需要基于全球战略和中国市场的结合;二是整合PeopleSoft和J.D.E的速度。”
对于Oracle中国区组织架构的调整,缪青认为,“更像是为了架构调整而调整”,缺乏有规律的变化节奏,这样的调整只能让自己的市场大伤元气,并给竞争对手创造虎口夺食的机会。
而关于对PeopleSoft和J.D.E的整合,Oracle经理告诉记者,“中国区这边现在进行得很顺利,不久两边就可以一起办公了。”对于双方产品方面的整合,Mark Gibbs介绍说,这已列入Oracle赶超SAP制定的4大战略之一,“我们将遵守承诺推进‘合成工程’。”其中合成工程是指Oracle下一代应用软件、集成和架构组成的解决方案,准备在2008年推出。“下一版本的Oracle电子商务套件、PeopleSoft Enterprise 9和J.D.Edward 8.12中将包括合成工程的许多模块。”
而在整合Peoplesoft之后,甲骨文大中华区企业应用软件总经理王春文告诉记者,Oracle正在展开一系列全球并购行动,目标集中在如同Retek(零售、分销ERP软件提供商)一样按行业区分的解决方案提供商,从而在3到5年的时间里,丰富甲骨文在应用套件方面的技术能力与客户群。
Oracle环境 第4篇
我院的HIS服务器于2006年由两台HP-dl760升级为两台IBM-346,操作系统为Windows2000 advanced server;数据库为Oracle 8.1.7版本。服务器采用镜像备份,并归档日志进行热备。目前联网客户端450个,并发会话达750个。LIS、PACS、手术麻醉等需要和HIS系统频繁交换数据。
由于医院计划于2008年9月启用新住院楼,预计增加客户端260个,预测新大楼启用后并发会话可能达到1000个。中心摆药站也会由两个增加到三个。门诊医生站、住院结算、等需要进行大量数据查询、大量计算的业务,占用服务器的资源很大,影响医院的工作效率。另外,信息科网管中心也一并搬迁。为此,医院决定按照“配置满足需要,并适度超前,能满足五年内医院业务增长的需要”的原则,升级HIS中心服务器。
经过市场调查和反复论证,选择了两台IBM-P55A小型机,分别用作主服务器和备用服务器。操作系统采用LinuxAIX(Advanced Interactive Executive,先进的图形输入执行者),Oracle数据库使用10.2.0。
2 实施方案
2.1 确定方案
本次数据迁移,不但对操作系统、Oracle数据库进行升级,还涉及网络机房的搬迁。还需要对原有的住院楼的光纤进行重新熔接。涉及到硬件设备的搬迁及更换、网络重构、数据迁移等多个方面,迁移过程十分复杂,耗时也会很长。根据我们测算:硬件设备的搬迁及更换约需40分钟。网络重构约需60分钟。数据迁移约需3~4个小时,共需4~5个小时,这几个小时对医院的影响是巨大的。因此,我们想方设法要把这种影响降低到最低程度。为了兼顾网络停运时的影响和数据完整性,确定的具体方案如下:
(1)利用导入/导出工具(Export/Import)进行数据迁移。
(2)充分发挥双机镜像的数据同步[1]优势。停机后两机分离,启动一台IBM346-a进行数据导出,另一台IBM346-b进行正常启动,用来门诊挂号、收费、医生站的使用,其余科室暂不使用。
(3)利用导出、导入的时间进行设备移位和光纤熔接。
(4)数据导入完毕后全院停机,利用日志分析或数据管道对门诊增量数据进行录入,保证其数据完整性。
(5)在老服务器IBM-346上配置后台应用。
(6)系统恢复正常。
2.2 此方案的优点
(1)利用导入/导出工具进行全数据库操作。由于是由Windows系统升级到Linux系统平台,无法采用Oracle自带的Upgrade工具直接升级,只能采用Export/Import的方式迁移数据[2]。Export导出是指把数据库信息放入二进制文件中,导出文件只可用程序读出[3]。这种方法不但对数据进行了完整的迁移,同时将表空间、触发器也完整地导入,保证了数据库的完整性。
(2)利用镜像备份的数据,做到停机时间最短。我院原来使用的主服务器是使用RAID-1进行镜像备份,两台服务器中存储着相同的数据。在迁移时使用一台进行EXP导出,另一台继续保证挂号、急诊、门诊收费、药房等重要部门的使用。
(3)利用归档日志或数据管道,进行增量转储。在导入/导出的几个小时内发生了一些数据,为保证数据的完整性,还需将这些数据导入新服务器。日志挖掘工具是Oracle数据库本身的一部分,它可以通过SQL语句接口查询联机的和归档的重做日志文件,这些都是通过DBMS_LOGMNR工具包实现的[4]。还可以利用PowerBuilder的数据管道Data Pipelines对表中的增加数据向新服务器传送。
2.3 方案测试
确定升级方案后,对每一个大步骤进行细化,尽量做到每一步操作不可再分。对不可再分的操作进行详细测试,同时将所有操作脚本化,减少手工输入的命令。创建脚本时,同时生成log文件。将所有命令及执行结果、命令开始时间和结束时间都记录在日志文件中,在脚本运行结束后,查看脚本运行正常,并记录所需的时间。发现错误后,对脚本进行相应修改并再次测试,直到正确为止。并确定每一升级步骤的执行时间点,并做详细的书面记录。
3 数据迁移
在进行了10个工作日的反复测试后,我们完善了运行脚本。定于周五晚23点开始正式操作。这样做是因为转天周六门诊病人较少、住院病人的信息量也相对少一些。
3.1 前期协调准备工作
数据迁移表面上看是信息科的工作,其过程的复杂和其影响面之大是医院很少遇到的。为此医院领导对此极为重视,启动了网络安全预案并派出了机关人员分散到各科室具体协调。急诊、门诊收费、住院药房、各检查检验科室以及个重症监护病房更是要保证不出现任何问题。住院药房对执行的长期医嘱多摆出一天的药品,各科室领取了手工表格。信息科则最后一次检查操作文档和各执行人的准备情况。在老机房、新机房和熔接光纤处等工作点都配备了无线对讲机。老服务器进行完后台划价后信息科进入准备状态。新服务器IBM-P55A-a也做好准备,系统稳定,表空间已建立。
3.2 分离老服务器
23:00对老服务器停机,并切断住院部光纤。停机后要拔掉两台服务器间的心跳连线。分别启动两台服务器:23:04IBM346-b启动,门诊、急诊正常运行;与此同时IBM346-a启动,开始导出数据。
3.3 数据导出
执行语句:
>Exp system/manager file=g:datafile.dmp full=y direct=yrows=y log=g:datafile.Log(导出用户名/口令文件路径及名称全部导出直接导出按行导出日志路径及名称)。23:35数据完整导出,并由移动硬盘送至新机房。比预计时间提前2分钟。以此同时光纤熔接处进展顺利,并开始进行核心交换机的切换。
3.4 数据导入
执行语句:
>Imp system/manager file=g:datafile.dmp ignore=y log=g:datafile.Log(导入用户名/口令文件路径及名称忽略错误日志路径及名称)。
此工作时间较长,可以利用这段时间迁移核心交换机以及熔接光纤。数据导入后配置数据库参数,而后关闭数据库。启动归档日志模式后再打开数据库[5]。03:21数据导入完毕。03:22执行IBM346-b停机,准备导入这4个余小时的数据。
3.5 停用触发器
在写入数据之前,一定要关闭所有触发器。执行关闭触发器的脚本,以关闭药品价表触发器为例,运行语句:
(改变该触发器为不可用)。
3.6 写入最新数据
应用了两种不同的方法来写入最新数据。一种方法是利用日志恢复。将23:00以来IBM346-b所发生的数据的日志文件分析成sql语句,在新服务器上运行一遍。为了保证万无一失,我们还采用了数据管道Data Pipelines从IBM346-b向新服务器IBM-P55A-a传输数据。挂号、门诊收费和门诊医生站一共会向16个表写入数据,提前在pbl文件中写好,传输时直接执行即可。在此过程中一定要注意表的主键。有些表的时间格式约束了管道不能按时间时分秒来精确,在管道中就只能采用Updata/Insert Rows(修改并插入)模式。
3.7 启用触发器、测试数据
新服务器IBM-P55A-a数据完整后,启用所有触发器。升级后需要对新数据库的性能进行测试,并调整有关初始化参数[6]。我们还安排了3个人分别对门诊医生站、住院医生站、医嘱摆药程序进行前台测试。用时3分钟,测试完毕,前台程序运行正常。
3.8 修改IP地址
修改新服务器IBM-P55A-a的IP地址为原服务器的IP地址172.16.1.1。原服务器作为文件服务器继续使用,定义一个新的IP地址172.16.1.150,并在主服务器medrec.mr_work_path表中ip_addr字段中写入172.16.1.150。03:33通知科室网络恢复。
3.9 配置后台应用
HIS中的后台应用包括后台划价、后台日统计程序[7],需要在老服务器IBM346上Windows系统环境执行。首先修改配置文件里数据库别名的方式使程序连接到新服务器IBM-P55A-a,还要通过操作系统的计划任务功能定时执行。
病历文件自动备份、Pubdata(P:盘)也在老服务器IBM346上执行。
4 应用测试
在升级后我们进行了连续监控。监控结果表明,升级后的性能全面达到或超过了预期目标。在业务高峰期,并发用户数在700以上,CPU使用在15%左右,空闲内存在2.9G左右,交换分区使用率在1%以下,可以预测当并发用户达到1200时,系统性能不会有明显下降。
升级前需要l0余秒的中心摆药、住院结算等需要进行大量查询和计算的复杂业务,响应时间在3秒以内,达到了升级前的预期。
5结论
由于各项测试和准备工作充分,所有的操作都实现了脚本化。所以在实际进行升级时,所有升级步骤的执行结果都同于或优于测试,整个升级过程没有出现任何错误。急诊、门诊收费等重点部门的停机时间只有23:00-23:04和03:22-03:33共15分钟。数据迁移后数据库性能有较大提高。
迁址通知
《中国医疗设备》杂志社原“编辑一部”与“编辑二部”于2009年1月正式合并。合并后,《中国医疗设备》杂志社地址统一为:北京市朝阳区东三环中路39号建外SOHO 6号楼3601室(邮编100022);编辑部联系电话:010-58697365/4756;投稿邮箱:cmd_ed@126.com。原“编辑一部”办公地址及联系电话不再使用。稿件处理流程及刊登周期保持不变。《中国医疗设备》杂志社编辑部合并后,将进一步利用资源整合优势,提高学术水平和办刊质量,突出期刊特色,适应医疗事业的发展和知识经济时代的要求,一如既往地为广大读者和作者服务。
摘要:本文介绍我院中心机房搬迁的同时升级HIS服务器的实施过程。研究了双机镜像备份环境下Oracle数据库升级的方法和数据迁移时应注意的问题。将Oracle数据库顺利的升级到Linux系统,并充分发挥双机镜像的优势,缩短停机时间。
关键词:HIS,Oracle数据库,镜像备份
参考文献
[1]李东武.医院信息系统双机热备和数据备份的设计与实现[J].中国医疗设备,2008(7):38-40.
[2]李刚荣,等.UNIX操作系统在HIS中心服务器上的应用[J].中国医疗设备,2008,(1):31-34.
[3]付继彬,等.ORACLE8入门与提高[M].北京:清华大学出版社,2000.
[4]刘志敏,等.Oracle数据库日志挖掘工具的利用[J].中国医疗设备,2008(1):29-30.
[5]刘志敏.Oracle数据库应用管理解决方案[M].北京:电子工业出版社,2002.
[6]梁昌明,等.Oracle数据库升级或迁移的方法探讨[J].医疗卫生装备,2008(1):35-37.
Oracle学习笔记 第5篇
Varchar2 变长字符串,使用默认国家支持字符集,varchar2(10)最长10字节.varchar2字段最大可以存储4000字节, varchar2(10 byte)最多10字节,而可能的字符数跟字符集有关,在多字节字符集中可能只有两个字符.varchar2(10 char)最多10字符,字节可能40字节.Nvarchar2 包含unicode的变长字符串,nvarchar2(10)最长10字符,nvarchar2 字段最大可以存储4000字节
Raw 变长二进制数据类型,采用此数据类型不会发生字符集转换.此种类型最多可存储2000字节
Number 最多存储精度为38位的数字.number(p,s)p:precision 精度,默认38,也可用*代表,取值范围1-38。S取值范围-48-127.默认为0
Oracle环境 第6篇
近日,针对政府、教育、医疗机构,甲骨文推出了全面的解决方案,不仅提供了各个机构在信息化建设和转型中所需的所有关键组件——数据库、中间件和管理软件,并且它们全部基于开放标准; 更提供了全面集成的解决方案——从人力资源和财务管理到采购和公众关系管理; 并遵守了主要的行业标准。
甲骨文公司大中华区应用软件业务总经理卢汝文表示: “越来越多的政府、教育、医疗机构选择了Oracle行业解决方案。甲骨文公司将积极推进融合战略,为中国的政府、教育、医疗机构客户提供更符合他们需要的行业解决方案。”
针对政府部门未来的发展,甲骨文推出了Oracle iGovernment架构,提出了创新、集成和智能是政府及公共事业信息化建设目标的理念。Oracle iGovernment基于开放标准和服务导向架构,结合行业的需求,融合了甲骨文领先的数据库、中间件和应用产品,可帮助政府机关和公共行业的机构实现创新性、集成式和智能化的管理。
而PeopleSoft校园解决方案则支持数字化校园建设。这一方案可以帮助学校在一个安全稳定的环境中管理整个学生生命周期——从招生和入学到学生服务和校友关系。据介绍,PeopleSoft校园解决方案为学院和大学提供了它们所需的灵活性,能有效管理潜在学生和处于摇摆状态的学生。借助PeopleSoft校园解决方案,学校能够集中财务、学生和人力资源数据,从而提高管理效率和信息准确性。
Oracle医疗卫生信息管理资源平台是一个以开放标准和服务导向架构为基础开发的行业化综合管理信息平台,以单一信息架构实现强大的多层次服务能力,融合了从“信息获取、信息整合,到信息资源利用”的一揽子解决方案,适合面对分布式数据孤岛和应用烟囱环境下实现信息整合,支撑业务流程协同整合。
Oracle环境 第7篇
Oracle数据库在全世界范围内都被广泛应用。 简而言之,Oracle数据库在诸多企业所保存的相关信息中是非常关键的。 为了进一步确保Oracle数据库的安全,以防出现意外, 需要对Oracle数据库进行备份处理。Oracle数据库系统拥有一个强大的关系型数据库系统,而其高效以及安全的优势使得数据库在各种高端网络技术中处于优势地位。 Oracle数据库管理员需要采取正确的解决方式,有效降低数据库的发生故障频次,在数据库遭到破坏时及时恢复相关数据,继而将相关损失降到最低, 在更高程度上保证用户的安全以及用户的利益。 总而言之,数据库为用户提供了良好的备份功能以及恢复功能,进一步保证了系统的高效性以及价值性。
2 备份策略确立
在Oracle数据库中,其主要的恢复策略分为几种:其一,注重介质的管理;其二,工作模式设成自动归档;其三,采取多个物理键;其四,培养备份的习惯。 从注重介质的管理角度来看, 对介质的相关管理主要表现在两个方面: 其一, 需要将数据库内容进行信息分类管理;其二,在介质管理的基础上能够提供更为科学合理的计划安排,防止数据再次出现丢失。 从备份的主要目的角度来看,为了不影响相关数据的使用,需要将丢失的情况进行科学有效的处理。 举例来说,对数据采取多重备份的处理措施。 在将数据储存的过程中,千万不要选择相同的计算机地址, 此举是为了防止计算机软件以及计算机硬件故障等问题, 也是为了防止更多损失情况的出现。
2.1 分析备份需求
根据数据管理系统建设的基本情况可以分析威胁数据安全的相关因素,继而分析其具体需求:首先,需要具备灵活方便的可扩张能力;其次,需要具备良好的备份数据可恢复性;最后,保持业务的连续性。 灵活方便的可扩张能力从字面意思来看,主要是根据数据库的基本数量来进行一定程度的升级,简而言之,在阴性环境基础上进行扩张。 良好的备份数据可恢复性的字面意思就是将备份管理进行数据的统一,在此基础上能够充分保障好数据的可靠性,继而将数据恢复工作做到极致。
2.2 备份设备选型
根据相关数据路分析备份需求,本文的主要是采用IBM存储备份管理软件TSM作为备份管理软件系统,继而能够有助于支持备份数据管理。 IBM存储备份管理软件TSM是为了解决企业级的数据而设计的备份解决方案, 能够为电信以及金融等大型企业解决备份管理问题。 IBM存储备份管理软件TSM的管理结构以极其高度的操作平台支持以及自动储存管理等方面的优势,为企业提供可扩展以及自动化的备份管理系统。IBM存储备份管理软件TSM的数据传输格式,经过相关加密处理之后拥有独特的二进制格式, 在数据备份以及数据恢复的过程中进行相关的数据校验工作,在此基础上保证数据备份以及数据恢复过程中的安全性以及准确性。
3 备份方案实施
3.1 冷备份
在数据库以正常的方式关闭后,进行相关备份主要分为两类:其一,脱机备份;其二,冷备份。 从数据库正常关闭的状态来看,冷备份利用计算机操作系统内的相关拷贝命令对需要的相关数据文件进行高效备份。 假如计算机数据路不慎出现相关故障,需要立即将拷贝好的相关文件覆盖到原文件中去。 除此之外,由于数据库需要保证全天不停止的运行状态,此时冷备份的相关工作又需要在数据库关闭的条件下进行相关操作,所以在进行相关工作之前需要多次检查计算机备份系统的状态。
3.2 逻辑备份
数据库在二进制文件当中需要将逻辑备份模式相应地导入计算机当中, 继而利用数据库的相关操作工具。 逻辑备份在三种模式中进行导出:其一,全库模式;其二,用户模式;其三,表模式。 上述所说的三种模式都比较灵活方便以及靠谱,其中采取辅助备份的工作模式能够帮助计算机系统进行相关数据的备份。 从另外一个角度来看,采用逻辑的方式来展开导入数据方法能够实现不同操作系统平台的转移操作,尤其是对物理备份情况能够进行有效的逻辑备份工作。
3.3 RMAN备份
RMAN是一个由Oracle提供的外部工具, 专门用来对数据库进行备份与恢复操作。RMAN通过在目标数据库中启动Oracle服务进程完成备份任务。 创建RMAN备份的具体步骤:(1) 在数据库服务器安装TSM Client产品的路径下, 编辑相关的OPT文件, 建立起RMAN备份与TSM备份管理软件系统的连接;(2)创建RMAN备份恢复目录数据库,以保存备份索引信息;(3)启动RMAN恢复管理器, 在连接目标数据库的同时连接至恢复目录数据库中。
4 Oracle数据库恢复
数据库恢复以备份工作为基础前提,其主要作用体现在两个方面:其一,恢复即将丢失的数据;其二,达到备份时的相关状态。 从恢复策略的角度来看,往往使用的策略方式有介质修复以及故障修复等。 在数据库恢复相关工作期间,不需要任何人力参与,计算机数据库系统能够自己运行。 此种自动运行的方式对缓冲数据有着详细记录的作用,与此同时能够有效地保存在数据库文档之中。 从上述角度来看,数据库的工作状态能够将数据的准确性以及完整性发挥到极致。 举例来说,计算机故障恢复未完全成功时,则需要安全以及稳定的进行逻辑备份工作,继而恢复已经崩盘的数据库。 上述方式有效利用了在线数据库的文档记录模式,但是却没有在编辑文档工作中很好地完善相关备份工作。 此种方式既有效减少了人工参与的时间, 也降低了数据丢失的可能性。 介质恢复中主要通过块介质恢复以及数据文件介质恢复。 块介质恢复过程中较为特殊,需要设置为在线状态,一旦文件的损坏在设置的范围内可以直接采取此种模式。 但是此种方式也存在一定缺点,需要遵循一定的原则,对数据本身有清楚的认识,继而能够争取在最短的时间内完成恢复数据的相关任务。 从数据文件介质恢复来看,此种方式与块介质恢复状态工作相反,需要设置为离线状态。
应用最为广泛的是RMAN不完全恢复。 在RMAN中可以通过不完全恢复将数据库恢复到一个指定的时刻、 指定的SCN或应用了指定日志顺序号的归档重做日志后的状态, 即从时间、SCN或日志顺序号三种方式中选择一种作为恢复终止标记。
以指定还原时间的恢复方式为例说明:
第一步,关闭目标数据库;
第二步,启动目标数据库到MOUNT状态;
第三步,启动RMAN恢复管理器,以具有Sysdba权限的用户身份登录目标数据库,同时连接至恢复目录数据库;
第四步,进行基于时间的RMAN不完全恢复;
第五步,因为使用恢复目录,因此需要注册目标数据库的新复本。
5 结束语
综上所述,由于Oracle数据库系统会发生相关故障问题,直接对用户工作造成一定程度的影响,因此做好Oracle数据库的备份与恢复工作非常重要。
参考文献
[1]王志力,李小飞.高校教务管理系统Oracle数据库备份与恢复浅析[J].中国科技信息,2012,11(8):115-116.
[2]曹文琴,朱海燕,刘映球等.基于Oracle数据库容灾技术的研究[J].制造业自动化,2012,34(21):61-64.
[3]邱云飞,王雪,丁艺博等.Oracle数据库备份文件有效性检测设计方案[J].计算机应用与软件,2012,29(3):94-97.
[4]胡率,陈燕熙.ERP系统数据库备份策略研究及增量备份模式的实现[J].湖北电力,2013,37(2):64-66.
Oracle环境 第8篇
目前, 多数军队医院的信息系统是2000年前后在总后卫生部的统一指导下, 采用Oracle8i数据库做支撑部署的。随着医院业务量的逐渐扩大和医院信息系统应用的逐步深入, 工作站的数量越来越多, 医院信息系统服务器的性能和稳定性面临严峻挑战[1,2]。近期, 我院在人工干预、全程可控、较低风险的情况下, 成功实现了“军卫一号”数据库由Windows2000Server x32系统下的Oracle8.16升级到Windows2003 Server x64系统下的Oracle10.2.0.4, 突破了原来32位操作系统内存管理4 GB (232) 的先天不足, 充分发挥了服务器的高性能, 极大地提高了数据库处理复杂事务的能力, 为医院信息化的深入发展奠定了坚实的基础。
2 升级过程介绍
我院原有信息系统数据库运行在“HP ML370 (32位) +Windows2000 Server+2 GB内存+Oracle8.16”系统架构中, 由于Oracle数据库在32位的硬件平台上有内存限制 (SGA最大为1.7 GB) [3], Oracle数据库的性能在很大程度上取决于系统可用内存的大小, 随着计算机技术的飞速发展, 大内存及CPU多核技术日趋成熟。经过充分的市场调研, 结合我院实际情况, 选购了具有8核芯Intel至强处理器 (2块) 的HP DL380G6服务器, 内存扩展至12 GB, 操作系统选用Windows2003 Enterprise Server x64版本, 数据库直接跨过Oracle9i, 安装了稳定性和性能表现卓越的Oracle10.2.0.4 Enterprise x64 for Windows, 从操作系统层面突破了32位系统最大4 GB内存寻址空间的瓶颈制约, 充分发挥了Oracle10g数据库的性能。
2.1 安装操作系统
利用服务器自带的智能系统引导盘配置好磁盘阵列, 我们将6块HP146 GB的SAT硬盘配置成安全性和读写速度都比较优秀的RAID5, 然后按系统提示安装Windows2003 Enterprise Server x64操作系统。操作系统安装完成后, 创建活动目录、DNS及域, 结合原有用户创建域用户, 以便内网安全管理。
2.2 安装数据库软件
首先, 安装Oracle10.2.0.1 Enterprise x64 for Windows数据库软件, 此过程需要注意以下几个方面:
(1) 在数据库安装模式选择页面选择“高级模式”中的“定制安装”, 以便选择安装需要的数据库组件。
(2) 在数据库安装组件选项页面勾选掉“EM” (企业管理工具) 下的所有项目, 在数据库配置成功后再安装该选项。
2.3 手工创建数据库
在操作系统命令行模式下执行dbca, 开始手工创建所需数据库。此过程需要注意以下几个方面:
(1) 创建过程中, 把数据库闪回目录设置为F:Flash_Recovery_Area, 快速闪回恢复区大小设定为:100 GB (要依据服务器配置的硬盘容量大小来具体确定) 。
(2) 综合考虑原来Oracle8i下表空间的扩展使用情况和Oracle10g的新特性, 设定回滚表空间UNDOTB1大小为500 MB, 用户表空间USERS大小为20 MB, 临时表空间TEMP大小为100 MB。
(3) 重做日志文件大小设定为5 120 KB, 设置合理与否影响数据库重做日志的归档频率及备份安全。
(4) 数据库内存大小分配为系统内存的70%。
数据库创建完成后, 启动数据库工具SQL*PLUS, 以sys用户连接数据库, 验证数据库能否正常启动。数据库正常启动后, 退出SQL*PLUS程序, 必须手工停掉本机“服务”中的3项服务, 具体为:Distributed File System、Oracle Service ORCL和Oracle Ora Dblog_home TNSListener, 为安装数据库补丁做好准备, 否则数据库补丁安装过程中报错。
2.4 安装数据库补丁, 升级数据库到Oracle10.2.0.4
安装Oracle10.2.0.4补丁程序, 按提示一步步进行。补丁程序安装结束后, 手工启动上述停掉的3项服务, 在SQL*PLUS环境中运行数据库升级脚本catupgrd.sql, 以升级Oracle10.2.0.4的系统字典。命令如下 (我们的数据库安装在D:ORACLE目录) :
此脚本文件较为复杂, 运行时间取决于服务器的性能, 我们在HP DL380 G6/Intel Xeon E5 520@2.27 GHz/12 GB内存 (2块) 服务器上运行时间约45 min。该脚本运行结束后, 执行以下命令:
至此, 数据库已经由Oracle10.2.0.1升级到Oracle10.2.0.4。
2.5 创建表空间
上述过程执行完之后, Oracle10g数据库系统已经有5个表空间:SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS, 而“军卫一号”自身的表空间则需要手工创建, 我院“军卫一号”数据库应用系统表空间共有21个, 可以通过下述语句查询得到:
根据查询得到的表空间名称, 在Oracle10g的SQL*PLUS下手工创建这些应用系统所必需的表空间, 仔细对照不要遗漏。同时, 在创建表空间时应结合Oracle8i下表空间的实际大小, 对那些业务量增长缓慢的表空间, 基本上与Oracle8i下大小保持一致, 对那些业务量增长迅猛的如TSP_OUTPBILL, 则应适当地扩大表空间数据文件的大小, 以免出现表空间的频繁扩充而影响数据库性能。表空间创建语句举例如下:
以此类推, 完成其他表空间创建语句的书写, 并保存成一个ctsp.sql文件, 在SQL*PLUS中执行, 完成“军卫一号”系统应用表空间的创建。
2.6 创建数据库所有者OWNER
我院Oracle8i下数据库系统所有者 (OWNER) 有29个, 可以通过下述语句查询得到:
根据查询得到的OWNER名称, 在Oracle10g的SQL*PLUS下手工创建, 仔细对照不要遗漏。数据库OWNER的创建语句举例如下:
此过程需要注意的是, 临时表空间必须指定为TEMP表空间, 而不能是Oracle8i下的TSP_TEMP。按照上述创建语句, 写出数据库其他OWNER的创建语句, 并最终形成一个创建脚本COWNER.sql, 在SQL*PLUS中执行一次性创建所有OWNER。
2.7 创建数据库角色ROLE
我院Oracle8i下数据库系统角色 (ROLE) 有31个, “军卫一号”系统用户角色都是以ROLE开头定义的, 因此可以通过下述语句查询得到所有角色:
根据查询得到的角色ROLE, 在Oracle10g的SQL*PLUS下手工创建, 创建角色语句举例如下:
依据此语句, 写出创建角色的脚本crole.sql, 在SQL*PLUS中执行一次性创建所有角色。
2.8 创建用户USER
各医院“军卫一号”系统用户差别较大, 可以通过以下语句自动生成创建用户的脚本cuser.sql:
在这里需要注意的是, 生成的脚本文件cuser.sql并不能直接使用, 必须要做以下处理方可使用:
(1) 删除脚本文件中有关创建数据库OWNER的用户语句, 因为OWNER用户已经创建。
(2) 由于上述语句生成的temporary_tablespace是在Oracle8i下得到的, 其值是TSP_TEMP, 因此, 必须将其全部修改为TEMP, 可以通过查找替换的方法批量完成。
(3) 检查生成的脚本文件中所有的default tablespace是否为USERS, 如果不是必须全部修改为USERS。
2.9 创建同义词及角色授权
通过以下语句自动生成创建同义词的脚本csynonym.sql:
通过以下语句自动生成角色授权的脚本cgrant.sql:
注意事项:角色SNMPAGENT只在Oracle8i存在, 在Oracle10g中是不存在的, 因此, 需要手工删除生成的CGRANT.SQL脚本中与该角色有关的授权语句。
至此, 已手工完成“军卫一号”后台数据库的基本架构。
2.1 0 数据导出及数据库字符集转换
断开Oracle8i服务器的所有数据库用户, 考虑到导出和导入的可控和稳定性, 以OWNER方式将整个数据库导出为3个文件, 具体导出脚本如下:
其中, 参数文件parfile1内容如下:
其他2个参数文件, 只需修改不同的OWNER即可。
利用16进制文件编辑器打开上述导出的3个文件, 修改每个文件的第2、第3字节由原来的00 01修改为03 54, 实现由英文字符向中文字符的转换, 并保存文件, 以备导入之用。
2.1 1 数据导入
分3次导入上述导出的3个文件, 命令如下:
至此, 已完成数据库的完整升级。
2.1 2 配置服务器监听、数据完整性验证及无效对象编译
借助数据库管理工具完成数据库监听的配置, 用pb连接新的数据库, 验证业务数据的完整性, 并对无效的触发器、视图、过程以及包进行编译。
3 Oracle10g数据库启用前的准备工作
上述过程完成了“军卫一号”数据库的升级工作, 正式启用新的数据库前, 还需完成电子病历的迁移、后台自动计价的配置及后台自动统计方面的配置等, 依据实际情况完成详细配置。
4 升级关键问题及解决办法
依据此次的升级经验, 升级过程需要有以下几个方面的关键问题需要引起足够的重视:
(1) 数据库补丁的安装。
由于数据库初步安装完之后, 其版本号是Oracle10.2.0.1, 该版本经过测试和其他数据库用户的使用反映来看, 存在诸多漏洞, 因此, 必须下载Oracle10.2.0.4补丁文件, 将数据库升级到Oracle10.2.0.4, 具体过程参见本文2.4描述。
(2) 数据库字符集的转换。
利用16进制文件编辑器WinxHex可以方便地对导出的dmp格式的数据库文件进行编辑。只需把导出文件的第2、第3字节由原来的00 01修改为0354, 即可实现数据库字符集由英文字符向中文字符的转换, 相比传统的命令行修改模式简便易行。
(3) 升级节奏的可控性。
为控制数据库的升级节奏, 尽可能地规避升级过程中的未知风险, 数据库软件的安装采用用户自定义模式, 以方便对数据库的关键参数进行科学、合理的设置, 在本文2.2和2.3已有详细描述。同时, 对“军卫一号”后台所有数据库对象:TABLESPACE、OWNER、ROLE、USER、SYNONYM以及相关角色授权等全部采用手工生成脚本的形式。采用这种模式一方面可以控制升级的节奏, 另一方面可以很好地理解“军卫一号”的后台数据库结构, 方便处理升级过程中所出现的问题。
(4) 数据库的多用户连接。
要满足多个用户同时连接o-racle10g服务器, 必须对Oracle10g安装目录下的文件sqlnet.ora进行修改, 用#屏蔽掉操作系统验证, 否则, 数据库只允许一个用户连接。具体如下:
修改完之后保存, 重启数据库监听进程即可。
5 结论及探讨
我院此次升级不仅在硬件上更换了服务器、操作系统, 同时数据库由Oracle8.1.6升级到Oracle10.2.0.4, 版本跨度较大, 存在的风险较高。因此, 升级过程的可控、回逆尤为重要, 必须确保在升级不成功的情况下, 原来数据库能够完整可用。升级过程中, 数据库的创建采用手工编写脚本的形式, 不仅升级过程清晰明了、节奏可控, 而且有助于数据库管理员对HIS系统数据库的整体架构有一个明晰的认识, 对HIS数据库包含的用户、对象、OWNER等有详细了解, 从而更好地维护数据库。
数据库升级完成后, HIS服务器的性能得到明显提升, 稳定性得到加强, 客户端程序运行流畅, 科室用户反映良好。由于升级后的服务器是64位的操作系统, 彻底摆脱了32位操作系统下内存管理4 GB的瓶颈制约[3,4]。另外, 由于Oracle10g支持负载均衡 (RAC) [5], 此次数据库升级为后续RAC的运用奠定了基础。
摘要:目的:介绍Oracle数据库由Oracle8i升级到Oracle10g的一种完整实现方法及重点注意事项。方法:采用手工可控的方式, 利用数据库自带的Exp/Imp工具, 实现了数据库的跨平台、跨版本升级。结果:成功实现了Oracle数据库由32位Windows2000 Server系统下的Oracle8.1.6升级到64位Windows2003 Server系统下的Oracle10.2.0.4。结论:在节奏可控的方式下完成数据库的跨平台、跨版本升级, 升级过程清晰明了, 数据库升级过程的未知风险较少, 适合推广应用。
关键词:Oracle,数据库升级,军卫一号
参考文献
[1]徐正雄, 王玲, 乔静, 等.用Exp/Imp实现“军卫一号”从Oracle8i升级到Oracle10g的升级[J].医疗卫生装备, 2009, 30 (1) :55-56.
[2]夏洪斌, 陈金雄, 陈薇薇.“军卫一号”数据库从Oracle8.1.7到Oracle10g的升级实现[J].医疗卫生装备, 2008, 29 (4) :40-44.
[3]黄志中, 杜战伟, 郑万松.基于Oracle数据库升级方法的研究[J].医疗卫生装备, 2009, 30 (4) :43-44.
[4]刘志敏.Oracle数据库应用管理解决方案[M].北京:电子工业出版社, 2002.
Oracle分区技术 第9篇
Oracle分区技术在1997年的Oracle 8.0中首次引入, 它是Oracle数据库最重要、最成功的功能之一, 可以提高数以万计的应用程序的性能、可管理性和可用性。Oracle数据库11g引入了第8代分区, 继续提供突破性的新增强功能。新的分区技术使客户能够针对更多的业务案例进行建模, 为更多的业务需求提供最佳分区技术。
2.分区的概念
分区技术能够将表、索引或按索引组织的表进一步细分为小块。这些数据库对象的小块称为分区。每个分区都有自己的名称, 还可以选择自己的存储特性。这样带来一系列好处:
1.增强可用性:如果表的某个分区出现故障, 表在其他分区的数据仍然可用。
2. 维护方便:如果表的某个分区出现故障, 需要修复数据, 只修复该分区即可。
3. 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O, 改善整个系统性能。
4.改善查询性能:对分区对象的查询可以仅搜索自己关心的分区, 提高检索速度。
从数据库管理员的角度来看, 分区后的对象具有多个小块, 这些小块既可以集中管理, 也可以单独管理。这就使管理员在管理分区后的对象时具有相当大的灵活性。
从应用程序的开发人员角度来看, 分区后的表与未分区的表完全相同, 在使用SQL DML语句访问分区后的表时, 无需任何修改。
3. 分区策略
Oracle提供了三种基本数据分配方法:范围 (range) 、列表 (list) 与散列 (hash) 。使用上述数据分配方法, 可以将表分成单一表或组合分区表。用户可以根据实际业务需要以最佳方式调整数据细分。
3.1 单一分区
通过指定其中一个数据分配方法来定义表, 并使用一个或多个列作为分区键。例如, 某个表使用数字列作为分区键, 并具有两个分区"less_than_five_hundred"和less_than_thousand", "less_than_thousand"分区包含符合以下条件的行:500<=分区键<1000。
3.2 组合分区
使用两个数据分配方法的组合来定义组合分区表。首先, 使用一个数据分配方法将表分区, 然后使用第二个数据分配方法为每个分区进一步划分子分区。给定分区的所有子分区一起代表数据的逻辑子集。例如, 首先对范围-散列组合分区表进行范围分区, 然后使用散列分区技术为每个单独的范围分区进一步划分子分区。
所提供的组合分区技术包括范围-散列、范围-列表、范围-范围、列表-范围、列表-列表和列表-散列。
4. 分区扩展
除了基本分区策略以外, Oracle 11g中还提供了分区扩展, 包括间隔分区、引用分区与基于虚拟列的分区。分区扩展显著增强分区表的可管理性, 扩展分区键定义的灵活性。
4.1 间隔分区
间隔分区扩展了范围分区的功能, 可以使用间隔定义来定义同类分区范围。当分区的数据首次插入时, Oracle将根据需要自动创建分区, 而非显式指定单独的范围。间隔分区可以大大提高分区表的可管理性。例如, 可以定义一个间隔分区表, 以便Oracle为日历年的每个月份创建一个新分区;随后, 当"Sep2007"的第一条记录插入数据库时, 就会为该月份自动创建一个分区。
可用于间隔分区表的技术包括间隔、间隔-列表、间隔-散列和间隔-范围。
4.2 引用分区
Oracle数据库11g允许利用现有的父子关系对表进行分区。子表可以继承父表的分区策略, 而无需在子表中存储父表的分区键列。在没有引用分区的情况下, 如果您想要利用相同的分区策略, 就必须将父表的所有分区键列复制到子表。此外, 引用分区还允许您根据逻辑数据模型自然地对表进行分区, 而无需存储分区键列, 从而减少了非规范化的手动开销并节省了空间。引用分区还可以透明地继承所有分区维护操作, 从而将表的逻辑形式从父表更改为子表。此外, 引用分区还可以为父表和子表的同类分区自动进行分区智能联接, 从而提高该操作的性能。
例如, 父表ORDERS根据ORDER_DATE列进行了范围分区;其子表ORDER ITEMS没有包含ORDER_DATE列, 但可以根据对ORDERS表的引用进行分区。如果ORDERS表按月份分区, 则"Jan-2007"订单的所有订单项将存储在ORDER ITEMS表的单个分区中, 该表与父表ORDERS具有相同类型的分区。如果将"Feb-2007"分区添加到ORDERS表, Oracle将透明地将同类分区添加到ORDER ITEMS表。
所有基本分区策略都可用于引用分区。
4.3 基于虚拟列的分区
在以前的Oracle版本中, 只有当分区键以物理方式存在于表中, 才可以对表进行分区。虚拟列是Oracle数据库11g中的一个新功能, 该功能移除了这个限制, 并允许使用表达式定义分区键, 以便使用表的一个或多个现有列, 并将表达式仅作为元数据存储。
分区已经得到增强, 以允许在虚拟列上定义分区策略, 从而实现更全面地满足业务需求。您通常会看到信息过载的列;例如, 一个10位的帐户ID可以在前三位中包含帐户分支信息。利用基于虚拟列的分区扩展, 可以通过虚拟 (派生) 列AC-COUNT_BRANCH来扩展包含ACCOUNT_ID列的ACCOUNTS表, ACCOUNT_BRANCH列派生自ACCOUNT_ID列 (该表的分区键) 的前三位。
基于虚拟列的分区支持所有基本分区策略。
5. 索引分区
索引可以与基础表的基本分区策略耦合, 也可以不与之耦合, 包括局部索引、全局分区索引与全局非分区索引。应该根据业务需求选择相应的索引分区策略, 从而实现最合适的分区, 以支持任何类型的应用程序。
5.1 局部索引
局部索引是针对分区表的索引, 该索引可以与基本分区表耦合, 并"继承"该表的分区策略。因此, 局部索引的每个分区仅对应于基础表的一个分区。耦合可实现优化的分区维护;例如, 在删除表分区之后, Oracle只需删除相应的索引分区。不需要进行代价高昂的索引维护。局部索引在数据仓库环境中是最常见的。
5.2 全部分区索引
全局分区索引是使用不同于其所在表的分区键或分区策略进行分区的索引, 其所在表可以是分区表, 也可以是非分区表。全局分区索引可以使用范围分区或散列分区进行分区, 还可以解除与基础表的耦合。例如, 某个表可以按月份进行范围分区, 因此具有12个分区, 而该表上的索引则可以使用不同的分区键进行范围分区, 从而具有不同的分区数量。全局分区索引在OLTP中比在数据仓库环境中更为常见。
5.3 全局非分区索引
全局非分区索引实质上与非分区表的索引一样。索引结构未分区并且未与基础表耦合。在数据仓库环境中, 全局非分区索引的最常见用法是实现主键约束。另一方面, OLTP环境在很大程度上依赖于全局非分区索引。
6. 利用分区进行信息生命周期管理
利用Oracle分区, 可以最好地解决当今面临的以尽可能低的成本存储大量数据的挑战。单个分区的独立性是解决"分层存档"策略联机部分的关键点。特别是在包含历史数据的表中, 数据的重要性 (以及访问模式) 在很大程度上依赖于数据的年龄;分区使您能够将单个分区 (或分区组合) 存储在不同的存储层, 从而提供不同的物理属性和价值点。例如, 一个包含2年数据的Orders表可以仅将最近一个季度的数据存储在昂贵的高端存储层上, 并将表的其余数据 (绝大多数的数据) 存放在廉价的低成本存储层上。通过Oracle分区, 可以大大降低存储成本, 并且不会影响最终用户访问, 从而最佳化存储信息的拥有成本。
7. 总结
Oracle分区可以大大增强几乎所有数据库应用程序的可管理性、性能和可用性。分区可用于前沿应用程序, 并且是确保这些应用程序成功的关键技术因素。对于较为普通的数据库应用程序, 以便简化这些应用程序的管理工作, 并降低管理成本。而且, 分区对应用程序是透明的, 因此可以轻松实现, 因为这不需要进行高成本且耗时的应用程序更改
参考文献
[1].Thomas Kyte, 《Oracle 9i&10g编程艺术》, 人民邮电出版社, 2007.7
Oracle闪存技术介绍 第10篇
多项研究表明,40%的应用程序损耗都是由操作员或用户的错误造成的。人非圣贤,孰能无过,这些错误很难避免,而且在没有事先规划和使用正确技术的前提下尤其难以恢复。如何能快速的从这些失误中快速恢复并尽量不造成损失,Oracle数据库10g体系结构使用了独一无二的一个技术革新,此技术用于人为失误造成的数据库恢复领域--闪回技术。闪回10g技术包括闪回数据库、闪回表、闪回删除、闪回版本查询以及闪回事务查询。
无论采取什么方式恢复时间都是很关键的一个指标。如果发生无法预料的事件,使用传统的方式可能需要几个小时,甚至许多天时间,有了Oracle数据库10g的闪回技术,纠正错误只是几分钟甚至几秒的时间。闪回技术使恢复过程实现了革命性变化,您只需对更改的数据进行操作。
2 闪回数据库
闪回数据库可快速地将某个Oracle数据库倒回至以前的时间,以便纠正由逻辑数据损坏或用户错误造成的任何问题。闪回数据库就像数据库的“倒退按钮”。
它提供数据库的时间恢复点,而无需首先恢复数据库备份,其效果类似于常规的时间恢复点。它允许您将数据库返回到其近期的状态。若要启用闪回数据库功能,用DBA配置闪回恢复区。快速恢复区在Oracle数据库10g中是一项新功能,它为Oracle数据库中所有与恢复相关的文件和操作提供了统一的存储位置。除了闪回数据库日志以外,恢复区还包含重做存档日志和RMAN备份。有关闪回恢复区的详细信息,请参考Oracle备份和恢复文档。
启用闪回数据库的性能费用少于2%。您可能不希望牺牲任何产品数据库的性能费用,而是实现一种平衡。如果能在数分钟而不是数小时内恢复数据库,则可以避免公司上百万美元的收益损失。
3 闪回表
当发生人为错误或应用程序错误时,可能想将一个或更多个表恢复至故障发生以前的时间点。闪回表使DBA能够将一个或一组表快速轻松并联机恢复到指定时间点。闪回表可在恢复表的同时自动保留其相关属性,如当前索引、触发器和限制。闪回表缓解执行更为复杂的时间点恢复操作的需求。以下命令将ORDERS和ORDER_ITEMS表闪回到7月7日下午2:33。
FLASHBACK TABLE orders,order_items TO TIMESTAMP(JUL-07-2008,02:33:00);
就像闪回查询,闪回表也依靠撤销数据恢复表。因此撤销数据必须可用,这样闪回表才能成功。自动撤销管理功能允许您指定利用UNDO_RETENTION初始化参数保留撤销数据的时间。通过使用此参数并适当地规定撤销表空间大小,DBA能够控制使用闪回表的情况下可修复表的回退时间长短。
4 闪回删除
对于用户和DBA来说意外删除对象始终都是一个问题。用户很快认识到了他们所犯的错误,但恢复这些删除的表、索引、约束和触发器等已经为时已晚,而且从以往来看也并非易事。在Oracle数据库10g中删除对象时闪回删除提供了一个安全网。用户删除表时,Oracle会自动将其放入“回收站”。那什么是oracle回收站?回收站是一个虚拟容器,所有被删除的对象都驻留在这里。在封面的下面,这些对象占据与当创建它们时所占据相同的空间。如果在USERS表空间中创建表EMP,那么删除的表EMP保留在USERS表空间中。并不移动删除的表和任一相关对象(如索引、约束、嵌套表和其他相关对象),仅对它们进行重命名,使其前缀为BIN$$。可以继续访问删除表中的数据,甚至可以依据删除表使用闪回查询。
在删除回收站对象前,每个用户对回收站对象都拥有相同的权利和权限。可以通过查询新回收站视图来查看删除表。回收站中的对象将保留在数据库中,直到删除对象的所有者决定使用新清除命令永久性删除这些对象。
5 闪回查询
随Oracle9i一起引入的Flashback Query提供了查看存在以前状态数据的能力。默认情况下,数据库上的操作使用最近提交的可用数据。如果希望查询过去某时状态中的数据库,那么,可以使用闪回查询功能进行此项操作。此功能可以指定时间或系统更改编号(SCN),并使用提交的数据从相关时间中进行查询。
当使用自动撤消管理时,闪回查询机制最有效。Oracle数据库将撤消操作当作第一等级的数据库对象。撤消操作具有持续性,可以使数据库系统继续有效,也可以崩溃或关闭数据库系统。为获取更佳性能,它还与其他数据库对象分享数据库缓冲存储器。Oracle数据库使用超出事务处理提交范围的撤消操作,提供长期运行查询的读取一致性,并从逻辑损坏中恢复。
Oracle数据库提供了直接指定为保留而进行的撤消数量的方法。此系统自动回收过期的撤消操作,以为新事务处理生成撤消提供空间。撤消保持值的选择依赖于长期运行查询的长度以及逻辑损坏的恢复需求。然而,用户可以不选择指定的撤消保持,以及允许系统为指定的撤消空间提供最佳保持。此最佳保持考虑到长期运行查询以及从逻辑损坏中恢复的最佳可能范围。并不保证默认的撤消保持。如果用尽用于现行事务处理的过期撤消,那么,系统可以使用最早的未过期撤消操作。如果将UNDO_RETEN-TION设置为大于5天,那么,Oracle Database10g中一项新功能是可以查询过去5天以前的数据。只要为UNDO表空间数据文件分配足够的磁盘空间,那么,Oracle将维护一段时间内的撤消操作。
闪回查询的唯一功能是可以查看处于过去状态的数据,然后正确选择如何处理此信息,可能要进行一项分析,撤消此更改或捕获更改的数据,以备以后处理。
6 闪回版本查询
闪回版本查询提供了审核表的行并检索有关更改行事务处理信息的方法。它检索所有提交的行版本,这些行位于或曾经位于发布查询的时间和过去某一时间点之间。它通过利用自动撤消管理完成此项操作。
闪回版本查询是SQL的扩展,可用于在指定表中检索不同行的版本,此表存在于特定时间段内。对于任一指定的表,每次执行COMMIT语句时,都会创建一个新行版本。闪回版本查询返回存在于指定时间段内的每个行版本的行。
上述例子表示的SELECT语句的VERSIONS BETWEEN从句调用闪回版本查询功能。它看上去像除新附加列以外的任一其他SQL查询。有四种新的伪列,它们提供了关于行数据事务处理的详细信息,此行数据允许DBA查明Oracle数据库中数据更改的时间和方式。
1)VERSIONS_XID–此行版本创建的事务处理标识
2)VERSIONS_OPERATION–创建此行版本的操作,如删除、插入和更新。
3)3VERSIONS_STARTSCN–The SCN此行版本首先在基中发生。
4)VERSIONS_STARTSCN–The SCN此行版本首先在基中更改。
闪回版本查询是DBA运行分析和回答问题(如何发生这些情况)的强大工具。DBA不仅可以运行手动分析,而且闪回版本查询还是应用程序开发人员的强大工具。可以创建用于审核目的的自定义应用程序。并不是每个人都能够真正解释他/她的操作。
7 结论
人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的前提下尤其难以恢复。此处“正确”的技术就是Oracle数据库10g。为什么犯错误只需几秒,恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。单一的外部命令就可维修人为错误导致的损坏。闪回技术去除了恢复复杂性的同时,降低了从难以预测的人为错误恢复的时间。
参考文献
[1]韦尔斯.oracle DBA日常管理[M].孙杨,译.北京:清华大学出版社,2007.
Oracle数据库的性能优化研究 第11篇
关键词:Oracle;数据库;性能优化
中图分类号:TP311.138 文献标识码:A 文章编号:1006-8937(2015)15-0073-02
Oracle是一种大型的关系数据库,在多个行业中都得到较好的应用,并是一个重要的数据库平台。随着Oracle的不断应用,其规模也有所扩大,使用的人数不断增加,在这个过程中,Oracle数据库存在的问题也越来越明显。工作人员对这种数据库进行优化,让其能够在合理的条件下,更好的发挥作用,优化系统的使用性能,降低系统的支出,为数据库的推广奠定了良好的基础。
1 性能优化目标
1.1 缩短系统响应时间
该数据库的系统响应时间是指在SQL语句到数据库结果集时所用的时间。相关人员可以适当缩短这个时间,从而降低系统的服务时间,让人们的等待时间减短。该时间单位一般用ms表示,这种做法能够减小处理用户请求的时间,由此提高系统的利用效率。
1.2 提升吞吐量
数据库的吞吐量会受到SQL语句的影响,数据库能够完成的SQL语句数量越多,那么在单位时间内,该吞吐量越大。吞吐量=SQL语句数量/时间,其单位用TPS表示。相关人员要想提高数据库的吞吐量,可以增加单位时间处理SQL语句的数量。
1.3 提升数据库指标命中率
相关人员要制定数据库指标,例如缓冲区的命中率、软解析率等。在数据库工作中,最常用的指标是高速缓冲区命中率,这种指标主要是衡量Oracle数据库的性能,相关人员结合这种情况进行分析。
1.4 优化磁盘
Oracle数据库将数据存储在磁盘和内存中,这种过程与I/O操作有关,所以要合理规划磁盘,通过高速缓存技术,增加系统的吞吐量,从而在一定程度上缩短用户的响应时间,多使用系统内存,避免使用磁盘I/O进行操作。
1.5 合理的应用内存
在大量并发用户的影响下,如果Oracle数据库的存储量不够,会影响程序的处理效率。相关人员要尽量缩短数据库的响应时间,然后确保内存得到合理应用,判断最大回报和最小损失的标准,通过内存的有效使用,提高系统的性能。
1.6 减少磁盘的排序
如果用户提交的SQL语句中有排序或聚合函数,那么要保证这些排序可以在内存上进行,也可以在物理磁盘上。系统的物理磁盘有独特的结构,所以其读写速度比内存读写速度慢,所以相关人员要尽量减小物理操作。
2 影响因素分析
很多因素都会影响Oracle的性能,例如操作系统或CPU性能等,所以相关人员合理设置这些具体方面,降低其对数据库性能的影响。
①在操作系统上,Oracle数据库与系统的服务器运行有非常密切的联系,如果操作系统没有合理设置就会导致Oracle性能的降低。
②CPU占用过高:在系统运行中,CPU是非常关键的资源。如果该资源被占用,那么很可能导致整体数据库的停止运行。
③内存没有合理分配:Oracle性能会受到内存配置的影响,内存分配不合理会导致计算机减少系统的缓冲控制,操作系统频繁转换。
④I/O冲突:因为在系统运行中,磁盘在同一时间段只能满足一个进程的需求,所以当拥有多个进程,就会造成读写冲突,从而降低整个系统的运行速度。
⑤SQL常见错误:应用Oracle数据库,有大量的SQL语句,相关人员容易出现配置和数据迁移的错误。经过长时间的全表扫描,数据库没有得到合理的设置,I/O没有合理规划,SQL语句执行效率较差。
3 优化技术
3.1 数据库优化
应用Oracle数据库中,增加索引是最常见的调优方法,数据库对象是索引。相关人员应充分利用索引对系统中的扫描情况进行描述,通过查询索引能够节省大面积描述。在设置索引内容时,要重视SQL语句的使用,具体情况要结合查询条件。相关人员要比对直接全表的检索情况,然后通过相关数据对I/O进行分析。
工作人员可以完善数据库的数据,掌握这个逻辑关系,能够在数据库使用时,让代码和其他信息分离,这种做法能够有效降低网络的传输量,并提高数据情况的执行能力。相关人员在进行数据存储的过程中,用户可以发出执行命令,并提交SQL语句,从而节省对该语句的分析,充分使用SQL共享池的优势。
3.2 内存优化
Oracle数据库的信息主要存储在内存和磁盘上,从实际应用来看,内存的访问量比较大,明显高于磁盘的访问量。但是这种情况会降低数据库的响应时间,减慢其运行速度,所以相关人员要设置合适的内存尺寸,确保数据库性能得到更好的提升。
例如,相关人员要优化数据缓冲区的高速缓存性能,从而降低系统磁盘中的I/O数据,通过适当对缓冲区尺寸进行调整,能够让缓冲区找到需要的数据,从而对数据库的性能进行优化,减小用户的等待时间和缓冲时间。相关单位可以通过减小全表扫描的方式,得到优化数据库性能的目的。相关人员可以用索引的方式,降低全表扫描的次数,应用全表扫描的次数越少,系统的缓冲命中率越高。
提高共享池性能,能够较快的提高数据库性能。共享池是存放近期使用SQL语句的地方,共享池内的数据字典数据比缓冲区的内存停留时间更长,拥有更好的命中率。所以可以优先度缓冲区进行调整,相关人员可以根据实际情况对每个节点的共享池大小进行记录和分析,从而有利于下一步调整。利用代码重新书写能够快速提高共享池的命中率。针对比较大的对象,例如自定义的程度等,相关人员需要应用共享池,进行有效的解析。相关人员要将重要的对象保存在内存中,这样就能够提高共享池的性能。
3.3 磁盘优化
应用Oracle数据库使用对象产生I/O的机会较多,所以相关人员要将访问量较大的数据文件放置在磁盘中,不同的对象要尽量分开放置,从而为索引创造有利条件。相关人员要注意内存中修改过的数据并不是写入到数据文件中,所以要优先将其写入到日志文件中,并保持其容量。在这个过程中,相关人员应减少对不同对象对磁盘的竞争,合理将日志文件进行分组,一组写满后再换到下一组,这个过程要循环进行。在数据库中,要创建回滚段和其专用的表空间,其中从系统操作失败后得到的恢复数据是回滚段,所以应尽量减小I/O进程之间的竞争,并确保空间竞争能够有效完成。
3.4 SQL优化
SQL语句的执行效率会影响Oracle数据库的性能,所以优化SQL语句能够直接提高Oracle系统执行效率。执行SQL会消耗数据库系统70%-85%的资源,所以合理设计SQL语句非常重要,从而提高系统的利用效率,优秀的SQL语句,能够加快执行的速率,降低网络传输的频率,从而充分发挥数据库的性能。
4 结 语
通过上文对Oracle数据库性能优化研究,可以得出,Oracle数据库规模的增大和用户的增加,该数据库中隐藏的问题会逐渐暴露出来,所以相关人员要对数据库的性能进行优化,并不断调整数据库的各个方面。在这个过程中,要充分掌握数据库系统的性能影响因素,然后针对这些因素,进行合理优化,采用先进的技术调试数据库,从而使系统性能更加优化,为用户提供更多便利。
参考文献:
[1] 郭霞.基于Oracle数据库性能优化技术研究[J].电脑知识与技术,2011,(24).
[2] 魏亚楠,宋义秋.oracle数据库应用系统的性能优化[J].制造业自动化,2010,(8).
[3] 戴伟敏.Oracle数据库系统性能优化与调整[J].赤峰学院学报(自然科学版),2010,(12).
Oracle体系结构研究 第12篇
Oracle的存储结构分为物理存储结构和逻辑存储结构。
1.1 物理存储结构
主要由数据文件、控制文件、联机日志文件及数据库实例构成。
Oracle数据库中有许多初始化参数, 这些参数用于对整个数据库进行设置或调整, 如设置数据库名、数据库块大小、控制文件的名称和位置、数据库实例数等信息。Oracle把这些参数存放在一个文件中, 这个文件就叫初始化参数文件。启动数据库时, Oracle会读取参数文件中的值, 并根据这些值对数据库实例 (instance) 进行设置。具体说是Oracle先从初始化参数文件中获得控制文件的名称及位置, 打开控制文件, 然后再从控制文件中读取数据文件和联机日志文件的名称和位置, 打开它们, 因为表、索引等对象的数据就存放在数据文件中, 从而就打开了数据库。
1.1.1 控制文件
Oracle启动数据库时会访问控制文件, 控制文件是在创建数据库的时候创建的, 它是一个很小的二进制文件, 记录了数据库的名称、创建数据库的时间、数据文件的名称和位置、联机日志文件的名称和位置及表空间等信息。
所以说一个数据库的控制文件是相当重要的, 一旦被损坏, 数据库将不能正常启动和运行。所以DBA应该镜像控制文件, 把每个镜像的控制文件分布到不同的物理磁盘上, 发生灾难时既使其中一个控制文件被损坏, 也不会使整个数据库限于瘫痪。
1.1.2 数据文件
当用户在Oracle中创建数据库的时候, 就创建了一个或多个数据文件, 表和索引等对象的数据就物理地存放在数据文件中。一个表的数据可能会存储在多个数据文件中, 但一个数据文件只能属于一个数据库。用户查询一个表时, 如果所需数据不在内存中, Oracle会读取该表所在的数据文件, 并把数据调入内存中, 也就是说访问表实际上就是对数据文件进行读写操作。创建数据文件时可以指定其初始大小, 当其空间耗尽时, 也可自动或手动扩展其大小。
1.1.3 联机日志文件
当用户在内存中对数据库做了修改时 (如插入、删除、修改) , 如果数据还没有来得及写入数据文件中就发生断电, 用户的修改就会丢失。为了防止这种情况的发生, Oracle运行过程中会在内存中产生日志条目, 这些日志条目反应了用户所做的修改, 并每隔一段时间把日志条目写到物理的联机日志文件中。重启数据库时, Oracle会从联机日志文件中找回丢失的修改数据并重新把它写到数据文件中。由此可见, 联机日志文件主要用于对数据库实例 (Instance) 的恢复。当用户提交一个事务或每隔3秒钟或日志缓冲区被填满1/3时, 产生的日志信息就会被写到联机日志文件中。
1.2 逻辑存储结构
Oracle的逻辑存储结构由数据块、区、段和表空间构成。
1.2.1 表空间
一个数据库被分成一个个的逻辑单元, 这些逻辑单元叫“表空间”。表空间用于在逻辑上存放数据库对象如表、索引等。一个数据库逻辑上由一个或多个表空间组成。表空间又由一个或多个数据文件物理地支持着, 表空间中的数据库对象 (如表) 的数据实际上是存储在数据文件中的。表空间的大小是组成表空间的所有数据文件的大小之和。但表和数据文件却不是一一对应的, 一个表的数据可以存放在一个或多个数据文件中。每个数据库用户都要有一个默认表空间, 当用户创建对象 (如表) 时, 如果没有指定这个对象放在哪个表空间中, 则这个对象将被存放在默认表空间中。
1.2.2 数据块
数据块简称块, 是Oracle存取数据的最小单位。Oracle数据存放在块中, 一个块占用一定的磁盘空间。这里的“块”是Oracle的数据块, 而不是操作系统的“块”。Oracle每次读写数据的时候都以块为单位, 如果读写的数据不到一块, Oracle也会读写整个块。Oracle块的大小一般是操作系统块大小 (512bytes) 的整数倍, 如2k, 4k。块大小由初始化参数文件中的DB BLOCK SIZE参数指定。
1.2.3 区
区是数据库中的一个逻辑存储单元, 由连续的数据块组成。特别强调的是区是一段连续的存储空间。当段中的空间耗尽时, Oracle会分配一个新区给这个段。
段由一系列的区组成, 也是存放数据的逻辑单元。
表由段组成, 一个表由一个或多个段组成。普通表由一个段组成, 分区表由多个段组成。
创建表的时候实际上就创建了段, Oracle会给表的段分配一个初始区。随着数据的插入, 初始区被填满, Oracle会再分配一个新区给表的数据段, 这个区叫做“递增区”。如果递增区用完, Oracle还会分配另外的递增区。
1.2.4 段
段由一系列的区组成, 也是存放数据的逻辑单元。表由段组成, 一个表由一个或多个段组成。普通表由一个段组成, 分区表由多个段组成。创建表的时候实际上就创建了段, Oracle会给表的段分配一个初始区。随着数据的插入, 初始区被填满, Oracle会再分配一个新区给表的数据段, 这个区叫做“递增区”。如果递增区用完, Oracle还会分配另外的递增区。
2 内存结构
在Oracle中, “数据库”是指物理地存储在磁盘上的数据库文件。而数据库的启动和运行, 是需要一定的内存空间和后台进程的, 我们把这些内存空间和后台进程称为Oracle数据库实例 (Instance) .也就是说一个数据库实例是由一块大的内存空间和一系列的后台进程构成。对于第一次接触“实例”这个概念的朋友来说, 容易把“实例”和“数据库”这两个概念混淆。实例是“内存”和“后台进程”的总称, “数据库”是数据的物理存储。一个数据库可以由一个或多个实例驱动, 二者之间的关系是一对多的关系。
数据库实例所占用的内存空间分为两部分, 一部分叫系统全局区 (SGA) , 另一部分叫程序全局区 (PGA) 。
2.1 系统全局区 (SGA)
系统全局区是一组共享的内存结构, 这块内存结构用于存放数据和数据库实例的控制信息。多个用户可以同时连接到同一个实例 (Instance) , 这些用户可以共享该实例的SGA中的数据, 因此, 系统全局区又叫“共享全局区”。当启动一个实例时, Oracle会分配SGA给这个实例, 关闭实例时它的SGA又被回收, 每个数据库实例都有一个SGA。SGA主要由以下几部分构成:数据库高速缓冲区 (Database Buffer Cache) 、重做日志缓冲区 (Redo Log Buffer) 、共享池 (Shared Pool) 、Java池 (Java Pool) 、大池 (Large Pool) 、流池 (Streams Pool) 。
SGA的每部分结构都是为了满足不同的需求。
(1) 数据库高速缓冲区 (DataBase Buffer Cache) 。数据库高速缓冲区是SGA的重要组成部分, 用于存放从数据文件中读取的数据或者存放用户对数据库所做的修改, 所有连接到相同实例的用户都可以共享这些数据。
数据库高速缓冲区中的缓冲器被组织成两个列表:一个是写列表 (Write List) , 一个是最近最少使用列表 (Least Recently Used List, LRU) 。最近最少使用列表LRU存放三种缓冲器:自由缓冲器 (Free Buffers) 、正在被访问的缓冲器 (Pinned Buffers) 和脏缓冲器 (Dirty Buffers) 。写列表存放那些被修改了, 但还没有写到磁盘上的脏数据。
当用户查询数据时, Oracle首先在数据库高速缓冲区 (DataBase Buffer Cache) 中的正在被访问的缓冲器 (Pinned Buffers) 中进行查找, 如果找到, 则把数据返回给用户;如果未找到, Oracle则从数据文件中读取所需数据到自由缓冲器 (Free Buffers) 中, 自由缓冲器就变成了Pinned Buffers, 并把该缓冲器排放到最近最少使用列表 (LRU) 的末尾, 然后把Pinned Buffers中的内容返回给用户。
当用户修改数据库时, 直接修改的是Pinned Buffers中的内容, Pinned Buffers则变成了脏缓冲器 (Dirty Buffers) 。当LRU中不再有自由缓冲器可用时, Oracle会把位于LRU头部 (最近最少使用的) 的脏缓冲器中的内容 (用户的修改) 移动到写列表中, 而该脏缓冲器又变成了自由缓冲器, LRU中的缓冲器就是这样被周而复始地循环使用的。写列表中的数据最终要被写入磁盘上的数据文件中。
(2) 重做日志缓冲区 (Redo Log Buffer) 。重做日志缓冲区是SGA的组成部分, 它是一个循环使用的缓冲区, 用于存放日志条目, 日志条目可实现数据库实例的恢复。
当用户对数据库进行修改 (insert, update, delete, create, alter, drop) 等操作时, 一旦发生断电等意外, 用户所做的修改还没有来得及写入数据文件就丢失了。为了防止这种情况的发生, 在数据库运行过程中Oracle会把用户的修改以日志条目的形式记载在SGA的重做日志缓冲区中, 并每隔3秒钟或用户提交一个事务时由日志写进程LGWR把日志条目写入磁盘上的联机日志文件。也就是说Oracle为了以防万一会在数据库运行过程中对还没来得及写入数据文件的用户修改做一物理备份。当数据库重新启动时, Oracle会从联机日志文件中读取反映用户修改的日志条目, 读入日志缓冲区中, 再根据日志缓冲区中的日志条目恢复用户先前对SGA中的数据库高速缓冲区所做的修改, 最终把用户的修改写入数据文件, 从而恢复数据库实例。
初始化参数LOG BUFFER用于设置日志缓冲区的大小。比较大的日志缓冲区能够减少联机日志文件的磁盘I/O。如果一个系统中经常有大的、长时间运行的事务, 应该增大LOG BUFFER的值。
(3) 共享池 (Shared Pool) 。共享池也是SGA的重要组成部分, 用于存放SQL语句、PL/SQL程序代码、数据字典等信息。共享池主要包含库缓冲区和数据字典缓冲区。初始化参数SHARED POOL SIZE用于控制共享池的大小。在默认情况下, 32位的平台, SHARED POOLSIZE的值是8M, 64位的平台, SHARED POOL SIZE的值是64M。
库缓冲区存放解析并执行过的SQL语句和PL/SQL程序代码。当用户发送一条SQL语句或PL/SQL程序代码到数据库时, Oracle首先对这条语句进行语法解析, 然后将解析结果 (解析树和执行计划) 保存到库缓冲区中。如果不同的用户执行相同的SQL语句, 他们可以共享这些解析结果, 这会加快SQL语句的执行。
库缓冲区主要包含共享SQL区、私有SQL区、PL/SQL过程和包等。共享SQL区可被所有的用户共享。
具体说SQL语句或PL/SQL代码的解析树和执行计划是存放在库缓冲区的共享SQL区中。之所以称之为“共享”是因为如果另外一个用户执行相同的SQL语句, 则这个用户可以直接使用共享SQL区中的解析树和执行计划, 而不必对这条SQL语句重新进行解析。这样可以提高SQL语句的执行效率。SQL语句的一部分信息存放在共享SQL区中, 另外一部分存放在私有SQL区中。存放在私有SQL区中的这部分信息只能被执行这条SQL语句的用户独享, 其他用户不能使用。这部分信息包括SQL语句的绑定变量、环境和会话参数, 还包括运行PL/SQL程序单元所需的局部变量、全局变量和包变量。
Oracle在执行SQL语句时经常要访问表、视图、存储过程和触发器等数据库对象, Oracle把这些对象的信息 (如表的创建者, 创建时间, 所属表空间, 用户访问权限等) 存放在数据字典中。数据字典是在创建数据库的时候由Oracle自动创建的, 存储在磁盘上的系统表空间 (System Tablespace) 中。数据库对象的信息是以表和视图的形式存储在数据字典中的。由于每次执行SQL语句都要访问磁盘上的数据字典, 会大大降低数据库性能, 所以Oracle把频繁访问的数据字典信息缓存到共享池的数据字典缓冲区中, 然后根据其中的表、视图等对象的信息对SQL语句进行解析并执行的。
(4) Java池主要用于支持在数据库中运行Java代码。
(5) 大池是Oracle可选的内存结构, 数据库的备份和恢复, 并行查询的时候会用到大池。
(6) 流池也是可选的内存结构, 引入流池的目的是加强对流的支持。
2.2 程序全局区 (PGA)
连接到数据库实例的用户程序请求数据库时, 用户的SQL语句由Oracle的服务器进程负责解析并执行。启动一个服务器进程的时候, Oracle会给这个进程分配一块内存区域, 这块内存区域就是程序全局区。程序全局区用于存放服务器进程的数据和控制信息。每个服务器进程的程序全局区不能被其他进程共享, 只能由这个服务器进程读写这块内存区域。
3 进程管理
进程是操作系统的一种机制, 它执行一系列的步骤, 完成指定的任务 (有些操作系统中叫作业或任务) 。进程和程序的区别是, 进程是动态的, 程序是静态的。程序是一系列指令的集合, 进程强调的是执行过程。一个进程通常有自己私有的内存区。
进程分为两类:用户进程和Oracle进程。
3.1 用户进程
当用户运行应用程序或使用Oracle客户端 (如SQL*PLUS) 时, 就创建了用户进程。
用户进程在访问数据库实例 (简称实例) 时, 会建立一条通信路径, 这条通信路径叫连接。连接使用不同的通信机制, 如果用户进程和实例在同一台机器上, 则使用进程间的通信机制;如果用户进程和实例不在同一台机器上, 则使用网络通信机制。
一个用户必须提供用户名和密码才能登录到数据库, 用户成功登录数据库后就建立了一次会话。会话是有生命周期的, 会话的生命从用户登录开始, 到退出数据库实例为止。一个用户没有登录数据库时就是一个用户, 一旦登录数据库以后就建立了一次会话。一个用户可以创建多个会话。如用100个客户端使用同一个用户名scott同时登录一个数据库实例, 就创建了100个会话。
会话是Oracle数据库服务器对连接数据库的用户进行记录的一种手段。管理员通过对会话进行管理, 就可以掌握有哪些用户、在什么时间、以什么客户程序连接了数据库并执行了什么样的操作, 在必要的时候 (如密码泄露、恶意连接的用户等) 管理员还可以随时中断会话, 切断连接, 保护数据库的安全。
3.2 Oracle进程
Oracle进程运行在Oracle数据库服务器端, 分为服务器进程和后台进程。服务器进程用于处理连接到数据库实例的用户进程的请求, 负责解析并执行SQL语句, 如果用户需要的数据不在SGA中, 服务器进程会把数据从磁盘上的数据文件中读取到SGA的数据库高速缓冲区中, 并把结果返回给用户。也就是说服务器进程是为用户进程服务的。
Oracle系统为了使性能最佳和协调多个用户, 使用了一些附加进程, 称为后台进程, 后台进程是在实例启动时自动建立的。一个Oracle实例可以有许多后台进程, 但它们不一定一直或者同时存在, 每个后台进程只是在需要的时候才存在。Oracle的后台进程有:数据库书写进程、日志书写进程、归档进程、系统监控进程、校验点进程、进程监控进程、恢复进程、作业队列进程、队列监控进程、其它后台进程。
启动实例时, Oracle会自动启动后台进程, 下面阐述几个重要的后台进程。
3.2.1 数据库书写进程 (DBWR)
当Oracle发现SGA中的数据库高速缓冲区中没有自由缓冲器 (Free Buffers) 时, Oracle会通知数据库书写进程利用最近最少使用机制把最近最少使用的脏缓冲器中的数据从写列表中写入磁盘, 从而脏缓冲器又变成了自由缓冲器, 可以接收从数据库中读取的数据了。
3.2.2 日志书写进程 (LGWR)
当用户输入SQL语句对SGA中的数据库高速缓冲区进行修改时, 为了防止发生断电等意外修改还没有来得及写入数据文件就丢失了, 服务器进程把与这个修改相关的信息以日志条目 (Redo Entries) 的形式复制到日志缓冲区中。通常, 日志书写进程 (LGWR) 会以最快的速度 (如每隔3秒钟) 把这些日志条目写到联机日志文件中, 以便在日志缓冲区中预留出更多的空余空间, 进而服务器进程又把新的日志条目写到日志缓冲区中。日志文件用于日后的数据库实例的恢复。每当用户提交一个事务或每隔3秒钟或日志缓冲区的1/3已被填满时, 日志书写进程会把日志缓冲区中的日志条目写入联机日志文件:
3.2.3 归档的概念
Oracle把写满的联机日志文件复制到一个或多个路径下, 这个过程叫归档。这样生成的文件叫归档日志文件 (Archived Redo Log) , 存放归档日志文件的路径叫归档路径 (或者归档目录) 。只有数据库运行在归档模式下才能进行归档。归档过程一般由归档进程自动完成。
在创建数据库的时候, DBA可以指定数据库运行在归档模式。
联机日志文件实际上是由多个联机日志组构成, 每组里有几个日志文件。
如果当前联机日志组被填满, 日志书写进程 (LGWR) 会切换到下一组联机日志文件组, 当下一组联机日志文件组被填满, LGWR又会切换, 直到最后一组联机日志文件。当最后一组联机日志被填满后, LGWR将切换到第一组联机日志文件。所以这时候, 如果数据库运行在归档模式, LGWR会等待归档进程 (ARCn) 把第一组联机日志文件的内容复制到归档日志文件中, 然后才切换到第一组联机日志文件。
4 结束语
在深入学习Oracle数据库之前, 必须对Oracle数据库的体系结构有一个初步的了解。Oracle数据库的体系结构分为存储结构、内存结构和进程结构。存储结构分为物理存储结构和逻辑存储结构, 物理存储结构主要是由控制文件、数据文件和联机日志文件构成;逻辑存储结构是由表空间、数据块、区、段构成。启动了的数据库称为数据库实例, 一个数据库实例需要一定的内存空间和后台进程支持, 这块内存空间是由系统全局区SGA和程序全局区PGA构成。系统全局区SGA主要又是由数据库高速缓冲区、重做日志缓冲区、共享池、Java池、大池和流池构成;程序全局区PGA是启动一个服务器进程所需的内存区域。数据库的运行和维护是由一些进程完成的, 这些进程包括用户进程和Oracle进程, Oracle进程又分为服务器进程和后台进程。
参考文献
[1]赵振平.ORACLE数据库精讲与疑难解析[M].北京:电子工业出版社, 2008.
[2]朱辉生.大型数据库系统概论[M].北京:高等教育出版社, 2006.
Oracle环境
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


