Oracle

2024-06-18

Oracle(精选12篇)

Oracle 篇1

Oracle的内存总体说来, 可以分为两大部分:共享部分和进程独享部分。而这两部分根据功能不同, 还分为不同的内存池和内存区。Oracle的内存组成详细阐述如下:

1. 系统全局区

系统全局区 (SGA, System Global Area) 。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。其中具有两个很重要的特性:

(1) 系统全局区是共享的。多个用户可以同时登录这个实例, 并且能够同时访问系统全局区中的信息; (2) 一个系统全局区只为一个实例服务。即当一台机器上有多个实例运行时, 每个实例都有一个自己的系统全局区, 尽管系统全局区来自于操作系统的共享内存区, 但实例之间不能相互访问对方系统全局区区的信息。 (3) Oracle进程和一个系统全局区就构成了一个Oracle实例。当实例启动时, Oracle会自动从系统中分配内存给系统全局区, 而实例关闭时, 操作系统会回收这些内存。 (4) 系统全局区区是可读写的。所有登录到实例的用户都能读取系统全局区中的信息, 同时服务进程也会将oracle执行操作后修改的信息写入系统全局区区。

系统全局区主要包括以下的数据结构:数据缓存、重做日志缓存、共享池、Java池、大池、流池、数据字典缓存。

1.1 数据缓存

数据缓存专门用于存放从数据文件中读取的的数据块拷贝的区域。如果需要访问的数据块已经在数据缓存中, 就直接读写内存中的相应区域, 而无需读取数据文件, 从而大大提高性能。数据缓存对于所有oracle进程都是共享的, 即能被所有oracle进程访问。数据缓存被分为多个集合, 这样能够大大降低多CPU系统中的争用问题。

1.2 重做日志缓存

重做日志缓存是系统全局区中一段保存数据库修改信息的缓存。这些信息被存储在重做条目中。重做条目中包含了由于INSERT、UPDATE、DELETE、CREATE、ALTER或DROP所做的修改操作而需要对数据库重新组织或重做的必须信息。在必要时, 重做条目还可以用于数据库恢复。参数LOG_BUFFER决定了重做日志缓存的大小。它的默认值是512K, 最大可以到4G。当系统中存在很多的大事务或者事务数量非常多时, 可能会导致日志文件IO增加, 性能降低。这时可以考虑增加LOG_BUFFER值。

1.3 共享池

系统全局区中的共享池由库缓存、字典缓存、用于并行执行消息的缓冲以及控制结构组成。其大小由参数共享池大小决定。在32位系统中, 这个参数的默认值是8M, 而64位系统中的默认值位64M。最大为4G。对于共享池的内存管理, 是通过修正过的LRU算法表来实现的。

共享池包括下面几个组成部分:

(1) 库缓存

库缓存中包括共享SQL区、PL/SQL存储过程和包以及控制结构。任何用户都可以访问共享SQL区。因此库缓存存在于系统全局去的共享池中。

(2) 字典缓存

数据字典是有关于数据库的参考信息、数据库的结构信息和数据库中的用户信息的一组表和视图的集合。在SQL语句解析的过程中, Oracle可以非常迅速的访问这些数据字典。因为Oracle对数据字典访问比较频繁, 此内存中有两处地方被专门用于存放数据字典。数据字典缓存也被称为行缓存, 因为它是以记录行为单元存储数据的, 而不像数据缓存是以数据块为单元存储数据。内存中另外一个存储数据字典的地方是库缓存。所有Oracle的用户都可以访问这两个地方以获取数据字典信息。

(3) 保留共享池

为了拥有足够空间缓存大程序块, Oracle专门从共享池内置出一块区域来来分配内存保持这些大块。这个保留共享池的默认大小是共享池的5%。它的大小也可以通过参数SHARED_POOL_RESERVED_SIZE来调整。保留区是从共享池中分配, 不是直接从系统全局去中分配的, 它是共享池的保留部分, 用于存储大块段。

共享池中内存大于5000字节的大段就会被存放在共享池的保留部分。而这个大小限制是通过隐含参数_SHARED_POOL_RESERV ED_MIN_ALLOC来设定的。除了在实例启动过程中, 所有小于这个数的内存段永远都不会放到保留部分中, 而大于这个值的大内存段也永远不会存放到非保留区中, 即使共享池的空间不够用的情况下也是如此。

1.4 Java池

J ava池是系统全局区中的一块可选内存区, 属于系统全局区中的可变区。Java池的内存是用于存储所有会话中特定Java代码和JVM中数据。Java池的使用方式依赖于Oracle服务的运行模式。Java池的大小由参数JAVA_POOL_SIZE设置, 最大可到1G。在Oracle10g以后, 提供了一个新的Java池建议器, 来辅助数据库管理员调整Java池大小。

1.5 大池

大池是系统全局区中的一块可选内存池, 根据需要时配置。通过从大池中分配会话内存给共享服务或并行查询, oracle可以使用共享池主要来缓存共享SQL, 以防止由于共享SQL缓存收缩导致的性能消耗。此外, 为Oracle备份和恢复操作、IO服务进程和并行查询分配的内存一般都是几百K, 这么大的内存段从大池比从共享池更容易分配得到。

参数LARGE_POOL_SIZE设置大池的大小。大池是属于系统全局区的可变区的, 它不属于共享池。对于大池的访问, 是受到large memory latch保护的。它没有可重建内存段, 因此也不用LRU链表来管理。大池最大大小为4G。为了防止大池中产生碎片, 隐含参数_LARGE_POOL_MIN_ALLOC设置了大池中内存段的最小大小, 默认值是16K。

1.6 流池

流池是Oracle 10g中新增加的。是为了增加对流的支持。流池也是可选内存区, 属于系统全局区中的可变区。它的大小可以通过参数STREAMS_POOL_SIZE来指定。如果没有被指定, oracle会在第一次使用流时自动创建。如果设置了SGA_TARGET参数, Oracle会从系统全局区中分配内存给流池;如果没有指定SGA_TARGET, 则从数据缓存中转换一部分内存过来给流池。转换的大小是共享池大小的10%。Oracle同样为流池提供了一个流池建议器。

2. 程序全局区

程序全局区 (PGA, Program Global Area) , 是一块包含一个服务进程的数据和控制信息的内存区域。它是Oracle在一个服务进程启动时创建的, 是非共享的。一个Oracle进程拥有一个程序全局区内存区。一个程序全局区也只能被拥有它的那个服务进程所访问, 只有这个进程中的Oracle代码才能读写它。

程序全局区由两组区域组成:固定程序全局区和可变程序全局区。固定程序全局区的大小是固定的, 包含了大量原子变量、小的数据结构和指向可变程序全局区的指针。可变程序全局区是一个内存堆。程序全局区堆包含用于存放X$表的的内存。总的来说, 程序全局区的可变区中主要分为以下三部分内容:

1) 私有SQL区

2) 游标和SQL区

3) 会话内存

(1) 私有SQL区

私有SQL区包含了绑定变量值和运行时期内存结构信息等数据。每一个运行SQL语句的会话都有一个块私有SQL区。所有提交了相同SQL语句的用户都有各自的私有SQL区, 并且他们共享一个共享SQL区。因此, 一个共享SQL区可能和多个私有共享区相关联。

(2) 游标和SQL区

一个Oracle预编译程序或OCI程序的应用开发人员能够很明确的打开一个游标, 或者控制一块特定的私有SQL区, 将他们作为程序运行的命名资源。另外, oracle隐含的为一些SQL语句产生的递归调用也使用共享SQL区。私有SQL区是由用户进程管理的。如何分配和释放私有SQL区极大的依赖与你所使用的应用工具。而用户进程可以分配的私有SQL区的数量是由参数OPEN_CURSORS控制的, 它的默认值是50。

(3) 会话内存

会话内存是一段用于保存会话变量和其他预会话相关信息的内存。对于共享服务器模式下, 会话内存是共享的。对于复杂的查询, 运行区的很大一部分被那些内存需求很大的操作分配给SQL工作区。工作区的大小是可以调整的。一般来说, 大的工作区能让一些特定的操作性能更佳, 但也会消耗更多的内存。工作区的大小足够适应输入的数据和相关的SQL操作所需的辅助的内存就是最优的。如果不满足, 因为需要将一部分数据放到临时表空间磁盘上处理, 操作的响应时间会增长。

3. 用户全局区

程序全局区是一段包含一个Oracle服务或后台进程的数据和控制信息的内存。程序全局区的大小依赖与系统的配置。在专用服务模式下, 一个服务进程与一个用户进程相关, 程序全局区就包括了堆空间和用户全局区 (UGA, The User Global Area) 。而用户全局区由用户会话数据、游标状态和索引区组成。在共享服务模式下, 一个共享服务进程被多个用户进程共享, 此时用户全局区是共享池或大池的一部分。

程序全局区和用户全局区之间的区别可以理解为进程和会话之间的区别。在专用服务模式下, 进程和会话是一对一的;而在共享服务模式下, 进程和会话是一对多的关系。程序全局区是服务于进程的, 它包含的是进程的信息;而用户全局区是服务于会话的, 它包含的是会话的信息。因此, 在共享服务模式下, 程序全局区和用户全局区之间的关系也是一对多的。

4. 调用全局区

与其他的全局区不同, 调用全局区 (CGA, The Call Globa Area) 的存在是瞬间的。它只存在于一个调用过程中。对于实例的一些低层次的调用需要调用全局区, 包括:解析一条SQL语句;执行一条SQL语句;取一条SELECT语句的输出值。

如果语句产生了递归调用, 则需要为每个递归调用分配一个调用全局区。如上所述, 递归调用是在语句解析、优化器产生语句查询计划、DML操作时需要查询或修改数据字典信息的调用。因为无论那种模式, 会话在做调用时总需要一个进行进行处理。特别是在共享服务模式下时, 如果发现一次调用很久没有响应, 则可能需要增加程序全局区的大小。

5. 软件代码区

软件代码区 (SCA, Software Code Area) 是一部分用于存放那些正在运行和可以被运行的代码的内存区。Oracle代码一般存储在一个不同于用户程序存储区的软件代码区, 而用户程序存储区是排他的、受保护的区域。软件区的大小一般是固定的, 只有Oracle软件升级或重装后才会改变。在不同操作系统下, 这部分区域所要求的大小也不同。软件区是只读的, 可以被安装成共享的或非共享的。

结束语:内存的配置是影响Oracle性能的重要问题, 值得引起大家的重视与关注, 而且还需要在实践中不断地探索与实践, 使之达到最优。

Oracle 篇2

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联姻的背后 篇3

微软将向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

Oracle 篇4

1、系统平台的选择

为充分发挥服务器的性能, 保证升级的良好效果, 我们选择了64位Windows Server 2003 Enterprise X64Edition, 数据库为Oracle Database 10g Enterprise X64。

2、升级前的准备

2.1 硬件准备

由于较早购买的服务器一般不支持EMT64, 因而不能运行Windows Server 2003 X64版本。特别是为了应对升级过程中的意外事件, 保证升级的可逆性, 购置一台新的服务器是很有必要的。

2.2 系统测试

首先为了升级的安全性, 系统的压力测试和拷机必不可少。然后就是HIS在新平台上各软件子系统的功能是否正常。这需要有专门的测试人员运行不同的软件模块, 根据我院的运行结果, HIS的软件模块在Oracle 10g上运行没问题, 但不排除别的医院系统会有不同, 如果还有PB4开发的软件必须升级到PB5以上版本再重新编译调试。

2.3 客户端升级

服务器数据库升级到Oracle 10g后, 可支持Oracle8和Oracle8以上版本的客户端, 但不支持Oracle8以下版本的客户端。因此若是Oracle8以下版本的客户端都需要升级。我院早期已将所有客户端数据库升级至Oracle8, 所以这部分工作可以省略。

2.4 升级模拟演练

由于医院HIS系统在医院的重要意义, 为了保证升级成功, 尽量缩短系统停机时间, 必须多次进行升级演练。针对每次演练中出现的问题, 不断修正升级方案, 直至演练完全达到预期效果。

3、升级切换步骤

在升级前的准备工作都完成后, 可选择适当的时间点进行系统。在系统切换前, 为了减少当天的工作量, 应把新服务器的Windows server 2003操作系统及Oracle 10g数据库都安装好, 并将老服务器的Oracle8数据库做好冷备份。同时为了减少系统停机时间, 原数据库主服务器应做一次数据转储。以下为系统切换操作步骤:

3.1 建立表空间

建立HIS系统的TSP_COMM等35个表空间。建立表空间之前, 先从老数据库中提取自动生成建立非系统的表空间的SQL语句, 然后将此语句在新数据库中执行, 建立新表空间。从老数据库中提取表空间的语句样式如下:

3.2 建立系统用户和普通用户

在目标数据库中创建各个系统用户和普通用户 (我院为1032个) , 并赋以迁移时所需的权限。我们继续从系统中提取自动生成建表的SQL语句。语句样式如下:

3.3 建立用户角色

用户创建好了, 必须给予每个用户相应的角色。提取建立角色的SQL语句样式如下:

3.4 建立用户权限

3.5 建立系统权限

3.6 将角色/权限授予所有用户

3.7 数据迁移

为了加快数据迁移速度, 同时为了保证系统切换的可控性, 我们将之前冷备份的数据库和配置文件拷贝至新服务器上。该方法有效、快速并有极大保障。

3.8 建立各类数据库对象

为在写入数据时避免数据之间的相互关联导致写入速度降低, 选择在数据写入完成后再建立VIEWS、SYNONYM、SEQUENCE、PROCEDURE、PACKAGE、FUNCTION、PACKAGE BODY、TRIGGER、TYPE、TYPE BODY等各类数据库对象。类似语句样式如下:

3.9 调整服务器参数

以上工作完成后, 数据库迁移工作已经基本完成, 然后需要将参数修改回运行环境所需的配置, 保证系统运行的效率。最后将数据库更改回归档模式, 将目标服务器IP地址改为原数据库主服务器IP地址后, 数据库关闭再重新打开, 重新启动TNS LISTENER服务。测试数据库连接成功后, 通知各业务部门可以正常使用系统, 至此数据库迁移顺利完成。

4、讨论

4.1 数据导入可有不同的途径

从理论上EXP/IMP完全可以实现系统数据包括各种对象的导入, 但其主要问题是用户基本上无法参与和干预其导入过程。传统上我院HIS数据库的升级都采用EXP/IMP工具进行导入, 而且该方法在Oracle7到Oracle8的升级中, 很多医院都有成功的案例, 但O-racle8到Oracle10g的升级, 而且是32位系统到64位系统的升级, 很少有采用EXP/IMP的报道。在本案例中采用直接将冷备的数据拷贝覆盖进行迁移的方法, 是建立在多次模拟的基础上, 此方法有效可靠。

4.2 系统切换的应急措施准备

由于医院业务系统具有7*24h无法中断的特点, 数据库系统升级切换的风险就非常高, 所以做好各种情况发生时的应急预案十分必要。信息科提出建议应急方案, 由院机关组织各部门参与, 做好各种情况发生时的应对准备措施。在时间点的选择上建议周五半夜开始切换, 这样周六凌晨急诊和各护士站就可展开使用, 有问题可以马上解决。周六上午一般各业务部门子系统都会展开使用, 但门诊患者不会太多, 在有问题发生时处理起来也不至于过于慌乱, 周日又可以再对系统进行完善加固。

4.3 系统切换后的安全备份策略

在Oracle8系统中的安全备份策略到Oracle10g中不一定能用, 而且Oracle10g还有很多新的功能。系统升级完成后, 我院采用了利用RMAN的安全备份策略功能, 实现每天凌晨0点定时在线全备。

ORACLE学习心得 篇5

1.概念

RAC,全称real application clusters,译为“实时应用集群”,是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。

在Oracle9i之前,RAC的名称是OPS(Oracle parallel Server)。RAC 与 OPS 之间的一个较大区别是,RAC采用了Cache Fusion(高速缓存合并)技术。在 OPS 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用Cache fusion时,RAC的各个节点的数据缓冲区通过高速、低延迟的内部网络进行数据块的传输。

2.优缺点

优点:

Oracle RAC主要支持Oracle9i、10g、11g版本,可以支持24 x 7 有效的数据库应用系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。在Oracle RAC环境下,Oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。

(1)多节点负载均衡;

(2)提供高可用:故障容错和无缝切换功能,将硬件和软件错误造成的影响最小化;

(3)通过并行执行技术提高事务响应时间----通常用于数据分析系统;

(4)通过横向扩展提高每秒交易数和连接数----通常对于联机事务系统;

(5)节约硬件成本,可以用多个廉价PC服务器代替昂贵的小型机或大型机,同时节约相应维护成本;(6)可扩展性好,可以方便添加删除节点,扩展硬件资源。缺点:(1)相对单机,管理更复杂,要求更高;

(2)在系统规划设计较差时性能甚至不如单节点;(3)可能会增加软件成本(如果使用高配置的pc服务器,Oracle一般按照CPU个数收费)。

3.Rac 特点

每一个节点的linstance都有自己的SGA

每一个节点的linstance都有自己的background process 每一个节点的linstance都有自己的redo logs 每一个节点的linstance都有自己的undo表空间

所有节点都共享一份datafiles和controlfiles 4.Rac 组件

逻辑结构上看,每一个参加集群的节点有一个独立的instance,这些instance访问同一个数据库。节点之间通过集群软件的通讯层(communication layer)来进行通讯。同时为了减少IO的消耗,存在了一个全局缓存服务,因此每一个数据库的instance,都保留了一份相同的数据库cachel

5.UNDO和REDO读书笔记

1)redo是什么?oracle的redo是如何工作的

redo是重做日志文件,是oracle数据库的日志文件.oracle的重做日志有两种:在线重做日志以及归档重做日志。

在线重做日志:主要用于由于数据库主机掉电等原因导致实例失败,此时oracle采用在线重做日志在数据库启动时将数据库恢复到断电之前的时间点上。

归档重做日志:主要用于介质失败,比如:磁盘受损。此时需要使用对磁盘上的数据备份的归挡重做日志文件将该磁盘上的数据恢复到该归档文件数据所在的时间点上,然后再使用在线重做日志文件将适合的时间点上。

归档重做日志文件实质是被添满的旧的在线重做日志的副本。归档重做日志文件是数据库的历史数据。

在线重做日志在每个数据库中至少有两个重做日志组,每个日志组中至少有一个重做日志文件,这些在线重做日志组是循环使用的,当日志组1被写到最后时,然后自动切换到日志组2;当日志组2也被写满时,再切换到日志组1。

2)undo是什么?oracle的undo是如何工作的

undo与redo相反,redo是恢复数据,用于在事务失败时重放事务,undo是撤消一条语句或者一组语句的作用。undo是存储在数据库内部的段或者表空间中(undo如果是手动管理,则使用undo段来管理;如果undo使用AUM管理UNDO,则undo使用表空间来自动管理)。

注意:在undo并不是物理的恢复到执行语句之前或者事务之前的样子,只是逻辑的恢复到原来的样子,所有修改只是逻辑的取消,但是数据结构和数据块在回滚之后也大不相同。原因是在多用户系统中,有很多事务是并发进行的,当一个事务修改一个数据并且被回滚,但是该数据在该用户对该数据做过修改之后也有被其他用户修改,这个时候如果是对该事务修改的数据块回滚到原来数据的物理样子,就有可能将后来的事务所做的修改给覆盖掉。所以回滚不是一个简单的物理的恢复,而是逻辑恢复。

3)undo和redo是如何协作工作的

4)

创建Oracle数据库的原则 篇6

关键词:Oracle;数据库;原则

中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2010) 14-0000-03

The Principle of Creating Oracle Database

Liu Yin

(China Airlines Clearing Co.,Ltd.,Beijing100028,China)

Abstract:In the China Aviation Clearing Corporation six years of work has been engaged in the Oracle applications database development and maintenance.Application process in the establishment of a database and found that many applications do not meet the Oracle database creation application of the principle database settings. This problem is prevalent in many systems,we consider the availability of more,while ignoring the performance of the database problems.I would like to work according to their own practical experience,according to Oracle applications to talk about the process of database creation and consideration should be noted that some basic principles and requirements.

Keywords:Oracle;Database;Principle

首先我想要申明的是,这个过程是根据NT上Oracle应用数据库建立过程来说明的,但是所说的原则同样适用于其他的操作系统平台(如UNIX)。虽然对于Oracle方面的高手来说,有一点班门弄斧的嫌疑,但是对于一个需要全面了解Oracle建立过程的初、中级用户,仍然还是大有益处的(这个例子中将要建立的实例名和数据库名设为VETO)。

一、初始化文件(initSID.ora)的建立

大家都知道要建立一个初始化文件(例如initAOMN.ora),这个文件可以用写字板进行编辑和修改。这个文件决定了实例的基本配置和性能,中间参数的大小需要根据具体的应用要求决定。用户还可以根据情况的变化,以后进行调整修改。

许多关键的参数Oracle公司都给了大、中、小三个标准,用户可以根据需要确定。除了要修改DB_NAME,将它改为将要建立的数据库名外,还有以下的几个参数要注意:

(一)CONTROL_FILES是指定控制文件的名称和位置。控制文件必须小于8个。但是为了防止控制文件毁坏而导致数据库的崩溃,建议将控制文件指定在不同硬盘上互做备份。文件名最好让人望名知意。

(二)SHARE_POOL_SIZE指的是共享池的大小,如果想加快SQL语句的处理速度,而且操作系统的内存足够的话,可以开大些加快速度

(三)DB_BLOCK_SIZE这个参数设置Oracle块的大小。对于OLTP(在线事务处理系统),应该设置得小点,而对于DDS(数据仓库)而言,应该设置得大点。一旦设定并且数据库建立以后时没有办法修改的。这个问题值得注意。

二、建立实例(Instance)

数据库的实例指的是为处理数据库而分配的内存结构和后台处理过程,它的配置和性能由上面的初始化文件决定的。为了在操作系统中建立这个实例,必须使用Oracle提供的Oradim工具。我们可以在NT Windows菜单的运行中输入:

ORADIM73 -NEW -SID VETO -USRPWD VETO -STARTTYPE SVRC,INST -STARTMODE AUTO -PFILE=D:ORANTDATABASEVETOINITVETO.ORA

这个命令的结果是在操作系统中建立了一个实例,并且实例的启动方式是自动。internal用户的密码是VETO,在系统的服务中建立了OracleStartVeto和OracleServiceVeto两个服务。在开始的时候OracleServiceVeto已经启动,但是OracleStartVeto可能没有启动。所以可用Net Start OralceStartVeto直接将OralceStartVeto和OralceServiceVeto启动,确保这个实例所需的服务都正常启动。即:C:NET START OracleServiceVeto

三、建立数据库(database)

实例的建立只是为数据库的建立做了一个准备,我们可以将实例付给任何一个数据库使用,只要数据库的参数MaxInstances没有被超过。建数据库需要用CREATE DATABASE命令,最好事先将参数写入一个SQL文件中,以被使用和今后的维护。我们需要了解建立数据库时,一些参数的意义,有利于我们对数据库性能的把握。

例如:这里用到的CREATE_DB_VETO.SQL

CREATE DATABASE VETO

CONTROLFILE REUSE

MAXLOGFILES 32MAXLOGMEMBERS 5MAXDATAFILES 50 MAXINSTANCES 2

LOGFILE GROUP 1 ('D:ORANTDATABASEVETOLOGVETO11.RDO',

'D:ORANTDATABASEVETOLOGVETO12.RDO')SIZE 1M,

GROUP 2 ('D:ORANTDATABASEVETOLOGVETO21.RDO',

'D:ORANTDATABASEVETOLOGVETO22.RDO')SIZE 1M

DATAFILE 'D:ORANTDATABASEVETOSYSTEMVETO.DBF' SIZE 100M

CHARACTER SET ZHS16cgb231280;

在这里我们需要注意以下几点要求:

(一)如果initVeto.ora文件中指定的controlfile已经存在才可以在建立数据库时使用CONTROLFILE REUSE,否则不能使用.

(二)MAXLOGFILES指最大的redo log file的group数。MAXLOGMEMBERS指最大的redolog file的group中的member数。MAXDATAFILES指数据库中最大的datafile数。MAXINSTANCES指数据库可被多少个instance使用数。这五个参数将会影响controlfile的大小

(三)LOGFILE指的是redo log file的设置,每个GROUP中的MEMBER文件的大小必须是大小相同的。由于redo log file是循环使用的,所以最少必须有两个GROUP,否则数据库无法建立。虽然每个GROUP的MEMBER文件可以只有一个,但是为了防止某个MEMBER文件的毁坏而导致数据库的不可用,必须在每个GROUP中有多个MEMBER,最好是每个GROUP有相同数目的MEMBER文件。建立数据库的SQL语句写好后,以internal用户进入,重新启动实例并进入数据库的nomount状态,建立数据库并打开数据库。

结果:INSTANCE启动,数据库是OPEN状态,数据库可以被使用。在建立数据库的过程中,数据库中所用到的基表都在这个过程由系统运行sql.bsq自动建立了。

四、建立动态性能视图(data dictionary view)

当数据库建立后,用户仍然不能用system用户的身份进入系统。这是由于数据库的基表虽然已经建立,但是动态性能视图没有建立,所以system的身份无法被系统确认。必须以sys或者internal用户的身份重新进入系统,运行catalog.sql和catproc.sql(这两个文件存在于目录%Oracle_homerdbms73admin中)。catalog.sql的目的是建立动态性能视图。catproc.sql的目的是建立运行SQL,PL/SQL所需的一些函数包和其他帮助工具包。虽然这个时候system用户可以登录数据库,但是可能系统要求运行pupbld.SQL,目的是防止系统设置的确省的profile不能被访问。

五、建立监听器(LISTENER.ORA)

数据库的基本结构已经建立,但是用户仍然无法远程访问数据库,因为操作系统,需要为新建的实例建立一个监听器,监听用户发出的连接请求。首先,我们必须手动的修改D:ORANTNTWORKADMINLISTENER.ORA的最后部分,然后,我们进入操作系统的服务中重启OracleTNSListener服务使修改生效,新的监听器建立。但是我们还是不能远程访问数据库,必须建立数据库别名。

六、建立数据库别名

监听器中的SID_NAME指的VETO是监听器监听的连接串的值。这个值必须等于数据库别名,所以我们必须在SQL NET EASY CONFIG中建立数据库别名,使数据库的能被远程访问数据库。例如:VETOTCP/IP10.1.3.57VETO。上面句中的前一个VETO指的是数据库别名,而后一个VETO指的是实例名。由于为了方便使用和理解,推荐使数据库别名等于实例名。

七、表空间(tablespace)

上面的六步将数据库建立了起来,但是对于一个Oracle应用数据库来说仅仅是将基本的结构建立了起来,为了使数据库能够被应用程序所使用,必须为不同的应用建立不同属性的表空间。首先,建立一个存放应用程序的数据的表空间,在建立这类表空间的时候存在很多问题。我们先来建立一个数据表空间,再讨论一下建立的原则,这些原则是避免问题的关键:

create tablespace DATA

datafile 'd:orantdatabasevetodatveto.ora' size 600M

storage(initial 1600K next 1600K pctincrease 100 minextents 1 maxextents unlimited)autoextend on next 100M maxsize 1000M;

(一)由于许多系统在建表生成的SQL语句中并没有指定表的存储参数, 建表时会使用表空间的存储参数,所以并且在建立表空间时最好指定存储参数。这需要根据具体系统的特点来设置,对于一个数据表空间,由于不同的表的定义和存放的数据量一般有很大的差异,所以建议采取中等的值。

(二)为了防止在分配extent时在表空间的数据文件中产生碎片,initial和next的值必须是db_block_size的整数倍。而且是db_file_multiblock_read_count*db_block_size的整数倍,目的是在全表搜索时速度快。

(三)数据表空间中的数据表比较多,而大量的表的数据比较小,所以initial和next不能太小,也不能太大,minextents设置为1。而且个别表中的数据多,所以maxextents设置为unlimited,pctincrease=100保证数据可以全部导入表中。pctincrease的设置必须满足上面的第二条,也就是接下来建立的extent不会在数据文件中建立碎片,在这里设为100,设所有的分配的EXTENT满足条件。

接下来建立一个存放应用程序代码的表空间,这类表空间中的数据变化不大,并且数据量不大,所以initial和next也不必太大,pctincease设置为0.其他的原则与建立数据表空间的原则一致.

八、建会滚表空间和回滚段(rollback segment)

回滚段是用来记录是数据被DML(数据处理语言)处理前的值,如果事务被回滚,可以将数据恢复到修改前。它还为其他的用户提供读一致性(read consistency),就是数据被一个用户进行DML处理但还没有提交时,其他用户读取数据时看到的值。数据库建立时,会在system表空间中建立一个系统回滚段,这个回滚段是为system/sys/internal用户操作动态性能视图及其基表而使用,其他用户不能使用这个回滚段。所以我们必须为其他用户操作数据库数据而建立回滚段。为了减少因使用回滚段产生的碎片,最好建立一个专门的回滚段表空间。然后就可以建立回滚段了,但有几点必须注意:

(一)在创建时回滚段可以指定为PUBLIC或PRIVATE(默认),在创建后不能更改。一般建立的回滚段为PUBLIC。不能为回滚段指定PCTINCREASE参数,总是设置为0。这一点很多时候都被忽略了。对于回滚段而言,总是使用INITIAL=NEXT,以保证所有的扩展有相同的大小。

(二)OPTIMAL参数,如果设置了,必须至少和回滚读段的初始值相等,而且最好设置,可以保证回滚段在没有事务处理时可以自动的回到OPTIMAL指定的值,释放空间。

(三)按照事务所需的平均空间设置OPTIMAL参数。如果没有适当的数值,把它设置为初始值,以后再调整。不要把MAXEXTENTS设置为UNLIMITED。这可能会导致不必要的回滚段扩展,可能会由于程序错误造成数据文件的扩展。

(四)总是把回滚段放在分离的、独占的表空间中,以便把竞争和碎片降到最低。所以必须专门的建立一个回滚段表空间。回滚段的数量没有详细的规定,但是对于OLTP系统,一般四个事务对应使用一个回滚段。回滚段必须ONLINE后才可以被使用。

九、建临时表空间

很多时候我们忽略了临时表空间的建立,因为它的影响仅仅限于排序查询时,对速度的影响。临时段是在排序结果大于PGA中SORT_AREA_SIZE指定的排序区,在指定的临时表空间存放排序的中间结果时产生的,在实例关闭时才释放。由于临时段产生的碎片比任何段都多,所以必须建立一个专门的临时表空间,虽然在临时表空间中只有一个临时段。

十、建立用户并授权

对于一个应用程序,必须建立不同于SYSTEM用户的其他用户来管理应用程序的数据和代码。所以我们将上面建立的数据表空间和代码表空间分别给用户DATA和CODE,如下:

CREATE USER UNIFACE IDENTIFIED BY ACCA DEFAULT TABLESPACE DATA TEMPORARY TABLESPACE TMP PROFILE DEFAULT;

GRANT RESOURCE TO UNIFACE;

CREATE USER CODE IDENTIFIED BY ACCA DEFAULT TABLESPACE CODE TEMPORARY TABLESPACE TMP PROFILE DEFAULT;

GRANT RESOURCE TO CODE;

要求和原则:

(一)建用户时必须指定用户的确省表空间和临时表空间,确省表空间保存用户所有对象。临时表空间是在排序时作为当排序所需的空间大于SORT_AREA_SIZE时存放临时过程使用的。

(二)用户建立时,系统自动将角色CONNECT付给用户,但是用户如果想拥有建立对象的权利,就必须将角色RESOURCE付给用户。

虽然第二步到第四步在NT上都可以在INSTANCE MANAGER中完成,但是由于不能给大家更加清晰和灵活的配置,建议不要用。而且根据以上十步关于建立Oracle应用数据库的过程,可以将这个过程写成批处理过程,这样不仅有助于保留建立应用数据库的参数,加快数据库的建立过程,而且还有助于日后的对数据库进行性能调整。所以我推荐根据具体的应用系统要求,建立一套标准的建立过程,是很有必要。

ORACLE中游标的使用 篇7

根据Oracle游标的声明方法不同, 可以将Oracle的游标分为隐式游标和显式游标。对于数据操纵语句和单行查询语句来说, Oracle会为它们分配隐式游标。为了处理查询语句返回的多行数据, 必须使用显式游标。当查询返回结果超过一行时, 就需要一个显示游标, 此时用户不能使用SELECT INTO语句。显式游标在PL/SQL块的声明部分声明, 在执行部分或异常处理部分打开、提取数据和关闭。

1 显式游标

1.1 声明游标

在程序中使用游标, 首先必须声明游标。声明游标时, 要用关键字CURSOR, 语法如下。

CURSOR cursor_name IS select statement。

说明:cursor_name用于指定游标的名称;select statement用于指定游标所对应的查询语句。

如CURSOR c_emp IS select empno, ename, salary from emp where salary>2000。

1.2 打开游标

在操作数据之前, 首先要打开游标。打开游标时, Oracle会执行游标所对应的查询语句, 并将查询语句的结果暂存在结果集中。打开游标的语法如下。

OPEN cursor_name。

说明:cursor_name是在声明部分定义的游标名。

OPEN一个游标时, 游标的指针自动的指向活动集的第一条记录。

但是如果打开一个已经打开的游标, 会报错。

ORA-06511:PL/SQL:cursor already open。

1.3 提取数据

在打开游标之后, 从游标得到一行数据使用FETCH命令, 每次提取数据后, 游标都指向结果集的下一行。语法如下。

FETCH cursor_name INTO variable[, variable, ...]。

对于SELECT定义的游标的每一列, FET CH变量列表都应该有一个变量与之相对应, 变量的类型也要相同。

1.4 关闭游标

在提取并处理了结果集的所有数据后, 就可以关闭游标并释放结果集。语法如下。

CLOSE cursor_name。

下面通过一个例子来说明游标的使用。

【例1】游标的使用。

2 循环游标

FOR循环游标是我们常用的一种方法, 它可以简化显式游标的处理代码。在使用FOR循环游标时。ORACLE会隐含地打开游标、提取游标数据并关闭游标。语法如下:

说明:cursor_name是已定义的游标名;record_name是PL/SQL声明的记录变量。此变量的属性声明为%R O W T Y P E类型, 作用域在FOR循环之内。例2为用FOR循环重写的例1的程序。

【例2】循环游标的使用。

3 REF游标

以上所说的隐式游标和显式游标都是静态的, 当用户使用它们的时候查询语句已经确定。如果用户需要在运行的时候动态决定执行何种查询, 则可以使用REF游标和游标变量。

创建REF游标变量需要两个步骤:声明REF游标类型和声明REF游标类型的游标变量。声明REF游标的语法如下。

TYPE ref_cursor_name IS REF CUR-SOR[RETURN return_type]

说明:RETURN语句为可选子句, 用于指定游标提取结果集的返回类型。

【例3】REF游标的使用。

使用游标可以极大方便PL/SQL程序的编写, 就本质而言, 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来, 使两个数据处理方式能够进行沟通。游标还有很多方面的用法, 还需要我们不断地去学习和研究。

摘要:Oracle游标是PL/SQL的重要组成部分, 在PL/SQL中, 当查询返回结果超过一行时, 就需要用到游标。本文通过例子详细介绍了显示游标的声明、打开、提取数据和关闭, 并且介绍了循环游标和REF游标的使用。

oracle数据库迁移 篇8

伴随着IT行业的迅速发展,IT系统中数据的安全性,已经是对企业运营产生了重大影响。而数据库的安全迁移也为IT系统的可持续运行和数据安全提供一道保护屏障。而且近年来频繁出现的自然灾害或者突发事件也让越来越多的人们意识到,原有的数据存储方式已经无法满足企业的需要。本文正是从数据库迁移的实际操作中总结整理而成。

1 oracle数据库文件构成

数据库是一种物理的存储结构,它是由多种物理文件组成的,在Oracle数据库系统中分为,核心文件和非核心文件两大类[1]。其中核心文件由数据文件,控制文件,日志文件,参数文件组成,非核心文件由密码文件,告警日志文件,各种跟踪文件组成。

控制文件:控制文件是一个二进制的文件,它描述了数据库当前的物理状态,记录了RMAN备份的元数据。控制文件包含有数据库的名称、数据库的创建信息、表空间的信息、数据文件的状态、日志文件的信息、备份的信息、检查点的信息等。

数据文件:,一个数据库中一定至少有一个数据文件(system01.dbf),如果一个数据库存在多个数据文件,应该分别把它们存放在不同的磁盘上,这样做不仅可以提高数据的存取速度,有利于提高数据库的性能,而且还能防止数据文件同时被损坏,实现高度容灾。

日志文件:数据库日志文件包括归档日志和非归档日志,记录了数据库的所有修改信息,归档日志会在数据库切换日志时,备份历史日志,日志记录的是数据库改变的信息、因此当数据库损坏时可以通过日志文件实现数据库的完全恢复、不完全恢复,而非归档日志不会备份历史日志,只能恢复到数据库最后一次备份时的状态[2]。

临时文件:创建数据库对象的时候指定的是使用表空间,一个表空间至少包含一个数据文件,临时文件是临时表空间对应的数据文件,并不是已用完就被删除的,而是指这个文件存储的对象是临时存在的对象。临时文件主要用于大量的排序的时候,如果不能在数据库的内存中做排序,就会把临时文件作为中转。

参数文件:参数文件是记录数据库系统配置的文件,每次数据库一启动,Oracle就会自动地从参数文件中读取系统参数的设置来配置并启动数据库。如内存的大小分配,此次启动可以打开的进程数和会话数等。

2 Oracle数据库迁移的迁移方案

oracle数据库状态分类:

nomount:此状态可以读取初始化参数文件,启动实例,可以进行数据库的创建。

mount:数据库维护状态,读取控制文件。

open:打开数据文件,日志文件,是数据库可以对全体用户提供服务了。

数据库物理迁移过程大体可分为以下四个步骤:

第一步:加载初始化文件

oracle启动后,数据库默认会读取一个二进制的初始化文件spfile<SID>.ora,可在系统启动时指定初始化文件的路径,如startup pfile="pfilesid.ora"nomount或者startup spfile="spfilesid.ora"nomount。初始化过程可根据系统错误提示内容,用pfile进行编辑处理,然后重新startup就可以了。

第二步:加载控制文件,保证在初始化文件中,控制文件的路径正确

在初始化文件中定义控制文件的位置,在确保控制文件路径正确的情况下,才能对控制文件进行加载,其命令是alter database mount。

第三步:加载数据库,包括重做日志文件

加载控制文件之后,执行命令alter database open对数据库进行开启,整个数据库启动过程完成了。

第四步:启动数据库成功之后,就说明迁移成功,可以观察数据是否丢失,然后启动监听和配置文件等。

3 Oracle数据库迁移具体实践

下面以把数据库从文件系统迁移到ASM磁盘组为例进行演示步骤:

首先,ASM是把多个磁盘组织为一个磁盘组,作为Oracle的逻辑卷管理器,利用ASM技术可以把数据均匀分布在这些磁盘上来解决从文件区到物理磁盘块的映射问题。这种设计除了定位文件区非常快速之外,还在增加或删除磁盘时有所帮助,因为文件区的位置不需要调整[3]。

把数据库从文件系统迁移到ASM磁盘组主要是把数据库的控制文件,数据文件和日志文件分别放在不同的磁盘组上,实现对这些文件的一个冗余放置,还简化了对数据文件的管理。

3.1 迁移数据库

①迁移数据库前先在RMAN下备份数据库,设置系统冗余度,并打开优化器和控制文件的自动备份功能

②创建迁移的控制文件存放的目录

③修改参数文件把控制文件的默认位置修改到ASM磁盘组上,然后用Pfile来生成spfile文件

SQL>create pfile from spfile;

④利用RMAN工具恢复控制文件,将数据库启动到mount状态;加载控制文件,如果出现错误,就说明控制文件所在的路径和参数文件路径不一致,要修改初始化参数,文件中控制文件的参数,然后重新加载。

SQL>shutdown immediate;

数据库已经关闭。

SQL>startup nomount;

ORACLE例程已经启动。

RMAN>restore controlfile from'/backup/ctl';

RMAN>alter database mount;

数据库已装载

⑤利用RMAN工具恢复数据库,执行下面的命令

⑥执行下面的命令重置日志组打开数据库

RMAN>alter database open resetlogs;

数据库已打开

3.2 输入下面的查询命令查看数据文件和控制文件是否已成功迁移到ASM磁盘组上

3.3 迁移临时表空间

①输入下面的命令重置临时表空间,先在ASM磁盘组上建立新的临时表空间,结果显示表空间已更改

表空间已更改。

②输入下面的查询命令查看表空间是否已创建

③输入下面的命令删除文件系统中就得临时表空间

表空间已更改。

④输入下面的命令查看表空间是否已成功删除

3.4 迁移redo日志

①输入下面的查询命令查看日志的状态,由查询结果可知第一组是当前日志

②输入下面的命令先往三组日志中各添加一个asm磁盘组上的成员,结果显示数据库已更改

数据库已更改。

数据库已更改。

数据库已更改

③删除非ASM磁盘组上的日志成员,执行完命令后结果显示数据库已更改,删除成功

SQL>alter database drop logfile group 2;

数据库已更改。

SQL>alter database drop logfile group 3;

数据库已更改。

④由查询结果可知第一组是当前日志所以需要切换一下当前日志才能继续删除,执行完命令后显示系统已更改

SQL>alter system switch logfile;

系统已更改。

⑤输入下面的查询命令查看当前日志是否已切换

⑥输入下面的命令删除非ASM磁盘组上的第一组日志组成员,结果显示系统已更改

数据库已更改。

⑦输入下面的命令查看日志组成员状态

⑧输入下面的查询命令查看日志组的物理位置,查看日志组是否已成功迁移到ASM磁盘组上

4 总结与展望

数据库管理技术是现今社会中信息科学与技术的重要组成部分,数据库迁移技术的研究保证了数据安全以及高效的存储[4][5]。在实际操作过程中,Oracle数据库基于Linux系统的迁移过程中会出现各种各样的情况,如果想要安全完整的迁移数据库,一定要先做好备份,然后反复的实验验证,最终才能保证数据库完整安全的迁移。

摘要:本文介绍了Oracle数据库基于Linux系统迁移的研究问题。在数据库领域一直处于领先地位的Oracle数据库以其良好的可移植性、可靠性和高效性,倍受各级用户的推崇和喜爱。随着Oracle数据库的不断更新和发展,其使用用户的群体也在不断的增加,因此对Oracle数据库的存储迁移技术的研究在国内外如雨后春笋般不断发展。

关键词:oracle,数据迁移,跨平台

参考文献

[1]张敏.数据库安全研究现状与展望[J].中国科学院院刊,2011.03.

[2]赵钦,周丹.政府办公自动化信息系统数据迁移解决方案[J].广西科学院学报,2008.24.

[3]段卫国,李俊春.Oracle数据库数据迁移技术研究[J].信息技术,2015.8.

[4]Kathy Rich.Oracle Data Pump,10g Release 2(10.2)[M].Oracle Database Utilities,2005.

浅述Oracle备份策略的应用 篇9

一、备份的重要性

随着信息系统在各个领域的应用不断增加, 保证系统数据的可用性也越来越重要。而现代信息系统的数据大都存储在数据库中, 因而为了保证数据库中数据的可用性, 就必须采取措施防止因各种软、硬件故障或人为失误造成不可挽回的损失!

防止数据损失的最常用的方法就是对数据做备份, 适当的备份可以使我们在数据丢失时用最短的时间将损失降低到最低程度。因此, 对数据库做备份就成了数据库管理员 (Database Administrator, DBA) 日常最重要的一项工作。但是备份的频率、备份的数据量以及备份的时间等等都要根据恢复的要求而定, 所以在制定备份策略之前首先要考虑业务规则对恢复的要求。

二、数据库恢复需要考虑的因素

一般来说恢复需要考虑的因素主要包括以下几个方面:

(1) 企业能不能承受数据丢失, 即企业数据的重要性如何。如金融行业的数据就必须做到万无一失, 否则就会有经济损失;而某些网站的数据在少量丢失的情况下并不会影响运行, 也不会造成经济损失。这个因素决定了数据库在恢复时是否必须要使用事务日志。

(2) 数据库如果出现故障, 要求在多长时间內完成恢复操作, 即MTBF (Mean-Time-To-Recover) 。这个因素反映了业务规则对数据库发生故障时如何能把损失降低到最小的要求。如电信行业的数据库在发生故障后要求恢复的时间越短越好, 最好是在一小时之内能将故障恢复, 这样才能将损失降到最低;而一些非服务性的政府机关及事业单位的数据库如果出现故障, 可能只要求在数天甚至数个星期内恢复就可以了, 并不会造成损失。这个因素决定了数据库的备份频率和备份方式。

(3) 业务规则对两次故障发生的平均间隔时间要求是多少, 即MTTR (Mean-Time-Between-Failures) 。这个因素反映了企业对数据库可靠性的要求, 时间越长越好。

(4) 数据库运行的持续性。如7×24小时运行或7×12小时运行。

(5) 数据库的变更率。即单位时间内事务量的多少。

(6) 所拥有的资源。软件、硬件、人力、时间等等。

(7) 数据库的配置。企业在购置数据库产品时, 购买了哪些组件, 能够完成什么样的工作;还有每个组件的配置参数等等。

(8) 容灾的考虑。预防灾害的发生对数据造成毁灭性的打击。

在了解了以上因素之后我们再来看一看Oracle提供了哪些备份方式以满足企业对恢复的要求。

三、Oracle提供的备份方法及特点

Oracle作为一个大型以及超大型商用数据库产品, 它的备份方式细分起来会有很多种, 这里从四个角度来对Oracle数据库提供的备份方式作一总结:

(1) 从工具的角度来说, Oracle的备份可以用手动的方式也可以用工具

手动备份的优点就是简单、资源占用少, 但缺点是不易管理。而使用工具做备份恢复虽然会占用一些资源, 但会使得备份数据及信息易于管理。因此在有条件的情况下推荐使用工具来进行备份。

(2) 从备份数据量的角度来说, 可以分为数据库完全备份和部分备份

完全备份顾名思义就是对数据库中的所有用户数据和状态数据做备份。这种备份比较适用于数据规模较小的数据库。而部分备份则有很多种形式, 如增量备份、表空间备份、数据文件备份等, 主要适用于数据规模较大, 做完全备份时间较长的数据库。

(3) 从数据库的运行状态来说, 可以分为冷备份和热备份

冷备份即关闭数据库做备份。其优点是备份操作简单、速度快, 但是备份时数据库不能对外提供服务。热备份就是在数据库对外提供服务的同时进行备份操作。适用于7×24小时对外服务的数据库。

(4) 其他备份方式

数据导出, 即利用Oracle数据库的exp工具将数据库的表、表空间甚至全库导出到一个文件中。目前在实践中利用此方法的人最多, 因为其简单易行, 无需太多知识即可掌握, 但其并不能替代以上备份方式。

Oracle提供的这些备份方法在实践中并不是孤立没有联系的, 他们往往需要视不同的情况而综合运用才能达到理想的效果。

四、常见的Oracle数据库类型及对应的备份策略

下面我就对在生产生活中常见的数据库进行分类, 并简单阐述各自的备份策略:

(1) 少量数据, 但数据很敏感, 时段性运行, 如政府机关的应用数据库。这种数据库比较适合做定期的数据库完全冷备份。因为其数据量少 (一般几百兆字节) , 而且是时段性运行的 (5×8小时) , 完全可以在关闭数据库的时候做完全备份, 速度也很快。

(2) 海量数据, 事务非常频繁, 7×24小时运行, 如电信企业的数据库。这种数据库的备份操作最为复杂, 因为数据量大, 因此只能做部分备份;又因为是不间断运行, 所以只能做热备份, 而且由于事务非常频繁, 所以只能在事务相对较少的时间段做备份, 如凌晨2点-3点。因此该种数据库比较适合做部分热备份。

(3) 大量数据, 事务频繁, 时段性运行, 如零售业、金融业的数据库。这类数据库的备份操作并不复杂, 但由于数据量大, 因此时间较长, 适合做部分备份;而操作简单的原因就是该类数据库是时段性运行的, 可以关闭数据库做冷备份。该类数据库一般每天做数据库部分冷备份。

(4) 大量数据, 事务不多, 如OLAP数据库等。该类数据库一般是用来做分析查询用的, 很少有数据库数据变更, 如图书馆图书信息数据库、企业的地理信息数据库等。因为其很少有数据变更, 因此可以在每次重大变更之后做数据库的完全备份, 如地理信息数据库中的地理信息在几年一次的变更之后可以马上做一次数据库完全备份, 虽然数据量较大, 备份时间较长, 但由于备份之后数据不变更或很少变更, 因此不需要做定期备份, 极少量的数据变更由日志记录即可。

五、总结

试论Oracle逻辑备份的应用 篇10

Export (导出) /Import (导入) 是Oracle提供的一种逻辑备份机制。逻辑备份创建数据库对象的逻辑拷贝并存入一个二进制文件。Export应用程序将Oracle数据库中的数据输出到操作系统文件中, Import则把这些文件中的数据读到Oracle数据库中。逻辑备份提供了灵活方便的备份方法, 利用导出应用程序, 可以使用4种不同方式进行数据的导出:表方式、用户方式、表空间方式和全库方式。导出和导入应用程序的工作原理示意图如下:

2. 逻辑备份与恢复的优势

对比物理备份方式来说, 逻辑备份有如下的优势:

与任何一种物理备份和恢复方法相比, 它都十分简单。

它可以防止用户错误, 如用户意外地删除或截断了某个表。这种情况下, 如果没有逻辑备份想恢复此表就必须进行不完全恢复。

在某个表上进行了很多错误的DML操作并已经提交, 如果在错误操作之前进行了逻辑备份, 则只需要将它导入数据库即可。

在某个表逻辑崩溃的情况下, 如果没有逻辑备份而又想恢复此表, 则也要进行不完全恢复。

作为一个数据库管理人员, 应该每天都对数据库进行逻辑备份。当然, 逻辑备份永远不能作为备份和恢复策略的基石, 它们必须要有物理备份以保证全恢复, 而逻辑备份只能作为辅助的手段。

3. 逻辑备份的用法

首先打开【开始】菜单, 选择【运行】命令, 弹出如图1所示的“运行”对话框, 在“打开”文本框中输入cmd, 单击【确定】按钮。

此时会弹出一个DOS窗口, 在此窗口下, 可以使用EXP/IMP命令进行数据库的逻辑备份和恢复, 有三种操作方式:

交互式是在直接输入命令后, 根据系统的提示一步一步进行, 好像在和系统对话一样。在此不再举例说明。

命令行模式是在命令的后面接一些参数和参数值。举例说明:

如果用户对IMP和EXP命令参数比较熟悉, 命令行模式是比较方便的一种操作方式。在做逻辑备份时文件名最好使用绝对路径。如果只给出文件名, 则备份文件将被保存在当前目录, 这样会加大控制和管理的难度。

参数模式是在命令的后面接一个参数文件的名称, 这个参数文件中存放了执行过程需要调用的部分参数。参数模式其实就是将命令后面所带的参数写在一个参数文件中, 然后再使用命令, 使后面带一个调用该文件的参数, 这个参数为PARFILE=。我们可以通过普通的文本文件编辑器和创建这个文件, 为了明显起见, 将该参数文件命名为.PARFILE的后缀。以下就是一个参数文件的内容:

USERID=SCOTT/TIGER@ARJDB

FULL=N

BUFFER=10000

FILE=DEPT.DMP

TABLES=DEPT

执行过程如下:

上述提到的几种模式和方法同样适用于IMP命令。

4. 应用实例

下面结合实例具体说明导入和导出使用方法。为了避免由于操作失误造成数据丢失, 首先以SCOTT用户登陆系统, 创建两个用作逻辑备份的表, 分别为emp_dump表和dept_dump表。

确认表创建成功后, 启动DOS命令行窗口, 利用导出命令导出刚才创建好的逻辑备份表, 如图所示。在做逻辑备份时文件名最好使用绝对路径, 这样可以减少控制和管理的难度。

为了验证之后的导入工作是否正确, 我们用DML语句把公司中所有员工都升职为CEO, 具体操作如下:

可以用select语句验证所做的修改是否成功。如图所示。

由显示结果可以看出, 公司中的所有员工都已经升职为了CEO, 数据更新成功。确认成功后删除掉创建的两个表。

利用select语句确认两个表已经不存在后, 在DOS窗口中输入导入命令, 如图所示。

返回SCOTT用户, 利用select语句验证所做的逻辑恢复是否已经成功。

由上图的显示结果表明逻辑恢复已经成功, 并且恢复到了导出时的数据, 因为所有员工的职位仍然是提职之前的。

参考文献

[1]April Wells.Oracle DBA日常管理.孙杨译.北京:清华大学出版社, 2007

[2]何明编著.Oracle DBA培训教程-从实践中学习Oracle数据库管理和维护.北京:清华大学出版社, 2010

Oracle 篇11

Sun终于尘埃落定,归于Oracle,结束之前持续了几个月的“待嫁”焦虑。“这是Sun的最好归宿,是一个双赢的收购行为!”不少评论者和Sun追随者如此感慨。

然而,细细分析,这样的预测似乎有简单之嫌。一桩大的行业收购案背后,往往交织着错综复杂的矛盾和利益纷争,有赢家必有输家,有崛起注定也有衰落。而对于两位当事人——Sun和Oracle而言,这样的结局又意味着什么呢?

卖给IBM,卖给Oracle,抑或是其他“IT大款”,对于这个昔日的太阳来说,都是落寞而悲壮的一件事:美人迟暮,英雄末路,充斥凄凉与无奈。但是,即便是卖,在心理层面,如果有更多选择,也是要挑选最优的。尽管遭IBM抛弃,Oracle还是开了个不错的价钱——74亿美元,比IBM整整多出9亿美元。此时不嫁,更待何时?虽然,收购行为预计要到今年6月份才完成,最终拍板还得董事会股东投票通过,但有了雅虎的前车之鉴,这个结果应该没什么意外。

现在大家关心的问题是,Sun旗下的众多硬件和软件技术在新东家Oracle打理下,将是什么命运?

Java:最有价值却没带来价值

先说Java。Java是甲骨文收购Sun时最看重的资产,甚至可以说,是其收购行为的根本原因。

在过去的13年中,Sun的Java语言已经成了计算机行业最著名的品牌——未得到正确评价的资产。在4月20日的分析师电话会议上,Oracle cE0拉里·埃里森(Larry Ellison)曾强调:“Java是我们收购的最重要的软件资产。”事实上,这样的高度评价并非妄言。

截止2008年底,Java编程语言已经在全球8亿台Pc和21亿部手机上运行,包括诺基亚在内的PC厂商和手机厂商都要支付该软件的版权税,可想而知,这样庞大的用户群将会带来怎样的效益。OracleN计,在未来一年,Java业务价值可达到10亿美元。然而,令人惊奇的是,在sun发布的2008年年报中,其139亿美元的总营收中,Java产生的营收只有2.2亿美元。难怪不少人说,Java是最有价值却没有带来价值的软件品牌。据分析师分析,Java的没落该怪罪于其不成功的商业模式和无能的销售团队,而这恰恰是Oracle的强项,Java被Oracle接手后,很可能重新焕发生机。

此外,对于Oracle来说,还有比直接利润更重要的东西。掌控了Java就等于掌控了将来的产品维护趋势,将增加Oracle用户的忠诚度。而如果哪家厂商对Java的依赖程度很高,Oracle接手Sun后,他使用Java开发软件的难度将增加。这无疑将使Oracle在与同行竞争中掌握极大话语权。这样看来,将其视若手心之宝的Orade,自然会好好善待Java,其美好命运似乎确实不用担忧。但虽如此,当开源的Java遇到商业的Oracle,这两种相互矛盾的商业模式的碰撞,又为其命运增添了几分玄机。Solaris操作系统命运不详

除Java外,这是Sun带给Oracle的第二块最重要的宝藏。但与Java相比,Solaris的命运相对叵测。

Solaris操作系统和SPARc服务器曾经是Oracle数据库的主要平台。这一紧密的关系,对于Orace极具诱惑力,特别是在新一代硬件出现后,以此为基础的硬件将会为Oracle数据库进行优化。拉里森谈到Sun的Solaris时,也说它是“迄今为止最好的Unix技术,”按照Oracle的意思,是想依托Solaris大有所为。但事实上,在全球三大操作系统市场,来自Umx的市场份额正在不断遭到Windows和Linux的蚕食。而且,Oracle在内部使用的是Linux,甚至有自己的RHEL(Red Hat企业版Lmux)和坚不可摧的Lmux计划。

现在拉里森对于Unix的支持,听上去似乎很仁慈,但作为一种企业行为,却没有太多意义。随着时间推移,再加上Oracle一贯的对成本控制的雷厉风行,可以想见,不久的未来其对Solaris还会如此重视吗?这无疑给其命运蒙上浓重阴影。

MysQL怎么办?

一年前,sun曾以10亿美元收购的开源数据库厂商MysQL。此次sun被Oracle收购,业界不少人第一反应就是:MySQL怎么办?

这确实是个棘手的问题。此前,MySQL在Sun的错误管理下,已经开始分化。MysQL的创始人迈克·维德纽斯(Michael Widenius)已经离开了sun。Oracle4月20日曾表示,在完成对sun的收购后,将把MySQL业务整合到其现有数据库业务当中去。但即使如此,从利润的角度考虑,Oracle也有可能通过撤销sun技术支持团队,从而使MySQL产品慢慢淡出用户视线,“Oracle这样做是为了保持其现有软件的利润。”消极者甚至认为,MysQL将会死去。

但事实也许没这么悲观,尽管在一些领域,MySQL产品与Oracle本身的数据库产品形成强劲竞争,但总体上,Oracle致力于大型数据库,更具成熟性和扩展性,而MySQL是开源社区充满活力的一部分,主要为中小企业采用。Oracle的数据库11g仍将是该公司的旗舰产品,但这并不意味着MySQL和其用户从此将被打人“冷宫”。整合之后,两者可能优势互补,而非水火不容。

硬件:Oracle没有经验

这是Orade未来发展受质疑的地方。

即便从另一个角度看,Oracle曾通过与惠普达成生产服务器交易于2008年进军硬件业务,其宗旨是提升Oracle数据库性能。Oracle高管在电话会议上表示,可以向包括电信、零售和银行业在内的行业捆绑销售sun的硬件与Oracle软件。但Oracle 46%的利润率籽遭遇Sun服务器业务拖累。

一些华尔街分析师和业界分析师建议Oracle出售Sun硬件业务,集中精力搞有长期发展前景的软件业务。这样,lava将成为埃里森的一张王牌。例如,Oracle可以在Java上投入大量、有效的销售力量,与诺基亚和其它手机厂商签约。

但sun的硬件业务仍然让Oracle颇为动心。在2009年3月的服务器市场排名中,Sun居全球第四的份额。其市场潜力和利润率不容小觑。即使自从十年前互联网泡沫破灭以来,Sun的硬件销售每况欲下,但sun的服务器仍然有着很大的用户基础。这里面有很多钱可以赚,也有许多忠实的用户。此次收购,要让Oracle对已收入囊中的一块大肥肉撒手放弃,这确实有点难。

但如果完全整合,打造一个从硬件层面到软件层面俱全的IT巨头,也需要Oracle付出很大努力。同时,更大的挑战则是,Oracle以前的合作伙伴将就此成为敌人。面对惠普、戴尔、EMC等等昔日毫无冲突的亲密合作伙伴如今变为直接竞争对手的局面,如何平衡与他们之间的关系,是横跨在Oracle面前的一道难题。

Oracle数据库优化策略 篇12

1 Oracle数据库优化的方法论

影响着Oracle数据库的因素很多, 但是还没有绝对的评价指标, 评判Oracle数据库的优化效果。调研发现, 它的参考因素很多, 例如系统优化前后数据库的各种性能指标, 其中一条重要的评价标准就是SQL语句的运行效率等。但是很多情况下, 很多用户而关注的问题的根本原因时出现在程序设计人员所编写的SQL语句上。这就使得往往简单的问题, 不能用简单的方法来解决, 把大部分精力放在了硬件性能的提高上, 本末倒置。

2 Oracle数据库具体优化方法

2.1 程序结构设计的优化

系统的体系结构是在一个系统开发中首先需要考虑的问题, 根据系统的需要选择合适的体系结构非常重要, C/S两层体系结构、B/S三层体系结构、B/S多层体系结构都是常用的系统体系结构。应该合理选择系统的体系结构, 例如, 传统的C/S模式适合的运行网络环境局限性比较大, 相对来说比较适合于小规模、用户少、数据库单一执行情况下运行, 常适合于局域网。另一种体系结构是B/S模式, 该系统结构正在不断的扩大, 系统性能的复杂程度也在随之提高, 应用的环境相对于前一种模式来说运行的网络环境可以复杂很多, 它可以用于多用户、多数据库。服务器有限的系统资源无法提供足够的数据请请求, 而导致系统紊乱, 甚至系统崩溃。这时应该考虑三层B/S系统结构, 可以很好的解决该问题。三层B/S模式也有很多的优点, 例如, 在B/S模式中, 客户端只负责显示, 不管其他复杂的操作, 从而很好的解决了客户的消费问题, 降低了客户的消费问题;三层B/S模式的应用使得系统易于维护、升级。工作人员只需要关注服务器即可, 不需要耗费更多的精力, 并且也降低了系统维护的工作量和所需的费用;适用于Internet应用, 因为WEB技术的加入, 使得该系统更适用于网络信息的传递。

2.2 库结构的优化

库结构优化, 在整个系统优化过程扮演着重要的角色, 并且它也是最基本的部分, 主要包括两个部分的优化, 逻辑结构优化和物理结构优化。

在逻辑设计过程中, 一致性和完整性对于数据库的设计应用非常重要, 为确保该系统的性能, 优化系统的结构, 应该尽可能的降低数据冗余, 设计人员往往会设计过多的表间关联。但是绝大多数情况下, 这样并不能解决问题, 没有达到人们预期的效果。采用分割表或存贮冗余数据来解决该问题, 并且很多实际操作已经验证了这一点, 取得了很好的成效。

提高检索效率最有效的方法之一为创建索引, 它是一种有效提高整体系统运行效率几十倍甚至更多。但是应该清楚一点, 并不是索引越多越好, 应该合理的设置索引的位置和数量以确保索引设置的最优。如果在常需要修改的数据列上建立大量的索引, 将会造成系统性能的下降和存储空间的大量浪费, 还可能引发更严重的后果。

2.3 SQL语句的优化

SQL语句的优化相对硬件改善操作方面更简单快捷的达到了优化的效果。将好的SQL语句与劣质的SQL语句相比较, 我们很容易就会对比发现, 较好的SQL语句可以减少I/0请求数目, 能缩小网络带宽的占用等。当处理的数据量急剧增加时, SQL语句的优劣程度影响的效果更加明显。如前面所诉, 很多情况下, 问题出现后还没查明真正的原因, 就采取各种方法进行优化系统, 不但浪费了时间和投入的精力, 最重要的就是不能够从根本上解决问题, SQL语句的优化应该被关注, 并且应该提早进行检查, 因为相对来说解决起来更容易一些。

优化SQL语句应该遵循着一定准则, 主要准则如下:尽可能避免大规模扫描, 避免不必要操作;SQL语句应规范书写, 统一格式, 方便阅读、修改;减少加锁操作, 减少使用操作符OR;避免使用!=或=这样的操作符, 减少检索错误;尽可能使用EXISTS、NOT EXISTS来代替IN、NOT IN的使用;在字符串查询中尽可能少用通配符, 应包含第一个字母, 并尽可能包含多个字母。

3 结语

计算机科学技术在如今社会发展中起着举足轻重的作用, 由此数据库的应用更是不可分离的一部分, Oracle数据库作为数据库中带头引导者, 起着引领潮流的重要作用。Oracle数据库的优化就变得很有价值和意义。不但能够改善数据的处理效率更能在安全性可靠性等很多方面加以完善和提高。

摘要:Oracle数据库应用很广泛、具有很大的影响力。其规模和复杂的操作程序, 决定了Oracle数据库在能够满足广大客户的需求以外, 也会存在很多的问题, 影响Oracle数据库应用系统的因素很多, 针对优化策略的研究对于计算机领域的整体进步, 变得格外有价值和实际意义。

关键词:Oracle数据库,性能分析,优化策略

参考文献

[1]周锦.基于Oracle数据库SQL语句优化规则的研究[D].北方工业大学, 2013.

上一篇:画面的设计下一篇:知情交融教学论文

本站热搜