在Oracle里使用RAID

RAID,即廉价磁盘冗余阵列,是一种将相同的数据放在多个硬盘上不同位置的方法。RAID有很多不同的类型(叫做RAID“级”),每种类型都有其相对的优势和劣势。  

对于Oracle9i的数据库而言,很多RAID方案都不具备Oracle数据库所要求的高性能。大多数Oracle的专家都会选择一种结合了镜像(mirroring)和数据块分段(block-level striping)的RAID方案。

要注意的是,使用RAID并不能防止磁盘灾难性的故障,这一点极其重要。Oracle专门推荐将所有的付诸使用的数据库都运行在ARCHIVELOG模式下,而不去考虑RAID的架构。Oracle还建议定期进行Oracle的备份。

要记住,I/O子系统由很多组件组成——包括控制器、通道、磁盘适配器,以及SCSI适配器——这些组件中的任何一者发生崩溃都会导致你数据库无法挽回的磁盘错误。现在让我们来看看Oracle数据库最常用的RAID架构吧。

RAID 0
RAID 0通常指的是数据块的分段技术,它是在磁盘设备上实现Oracle数据库负载平衡的卓越方法,但是由于它没有提供数据的备份,因而完全无法提供高可用性。和手动的数据文件分段(你要手动将Oracle的表格空间分割放进小的数据文件里)不一样,Oracle会利用RAID 0自动地将一个数据块进行分段并一次放进所有的磁盘设备里。在这种方式下,每个数据文件在每个磁盘上都存有其一部分内容,这样磁盘I/O的负载会变得非常平衡。

RAID 1
RAID 1也叫做磁盘镜像。由于磁盘都是被相互复制,所以RAID 1可以做成双重或者三重镜像。根据RAID 1架构的设计,如果一个磁盘发生错误,那么I/O子系统就会自动切换到各个复制磁盘中的一个上,而不需要中断服务。Oracle的专家会在要求高可用性的时候使用RAID 1。对于三重镜像而言,Oracle数据库的平均无故障时间(mean time to failure,MTTF)可以长达数十年。

RAID 0+1(RAID 10)
RAID 0+1是数据块分段和磁盘镜像的组合。RAID 0+1一出现就淘汰了Oracle这一层的分段技术,因为RAID 0+1的分段是在数据块这一层的,它分配表格块的方式是:每个磁盘上一个数据块,跨越每个磁盘设备。

RAID 0+1也是一个远比(单纯的)分段技术好得多的替代方案,因为它将负载平均地分配到所有的磁盘设备上,也就是说负载的上升和降低都被平均地分配到了所有的磁盘上。这就减轻了Oracle系统管理员在各个磁盘上手动地进行Oracle表格分段的负担。

RAID 5
有些更新的基于硬件的RAID 5存储方案极其适合于作为数据仓库。RAID 5是打造Oracle数据仓库的好方法,因为在这里负载的速度不是很重要,而且系统I/O的主要职责在于只读的活动。

时间: 2025-01-26 17:49:14

在Oracle里使用RAID的相关文章

在ORACLE里用存储过程定期分割表

Oracle数据库里存放着各种各样的数据,其中有一些数据表会随着时间的推移,越来越大.如交友聊天的日志. 短信收发的日志.生产系统的日志.动态网站发布系统的日志等等.这样的信息又和时间紧密相关,有没有办法 让这些日志表能到时间自动分割成历史年月(如log200308,log200309)的表呢? 请看看我用存储过程定期分割表的 方法吧. 一.问题的引出 1.初学数据库时只知道用delete来删除表里的数据.但在Oracle数据库里,大量delete记录后,并不能释放表 所占用的物理空间,这里面有

数据库-navicat for oracle里报表和计划这两个是按钮是什么功能?

问题描述 navicat for oracle里报表和计划这两个是按钮是什么功能? 开发"> 表 查看当前数据库的表 试图 相当于临时表 函数 在Oracle里写的程序 数据泵 导入导出数据 查询 写SQL语句 报表 ? 计划 ? 模型 创建数据库模型,可以形成SQL 解决方案 报表 对数据进行统计 计划 定时的任务

Oracle里去掉字符串空格

Oracle里去掉字符串空格 去除两侧空间 SQL> select trim(' 123 ') from dual; TRI --- 123 SQL> Oracle里去掉右侧字符串空格(RTRIM) select rtrim(' 123 ') from dual; SQL> select ltrim(' 123 ') from dual; LTRI ---- 123 SQL>

Oracle里批量更新列数据的问题

问题描述 各位大侠好,现在遇到一个问题求教Oracle里有两张表,一张人员信息表,里面包含了人员和各项基本信息,其中包括了银行代码和银行卡号两个字段.另一张表是记录的银行代码和所有人的银行卡号.现在人员表里只存了银行卡号,我想把银行代码先根据卡号从银行表里查出来,再写入到人员表里的银行代码字段.使用了游标,发现效率很低,约20W条数据,已经执行一个多小时了,各位高手有没有其他更好的办法问题补充首先感谢楼上的兄弟.我现在用的就是方法一,但是银行表里会有重复的银行卡号,要取重复的卡号中银行代码较大的

在Oracle里设置访问多个SQL Server

1.在安装了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows机器上(IP:192.168.0.2), 产品要选了透明网关(Oracle Transparent Gateway)里访问Microsoft SQL Server数据库 $ORACLE9I_HOME\tg4msql\admin下新写initpubs.ora和initnorthwind.ora配置文件. initpubs.ora内容如下: HS_FDS_CONNE

Oracle里的交叉SQL语句写法

oracle|语句 实例说明 资料表结构(红色为主键)==>主表:TEST_PART_COST_TAB(料号资料表)PART_NO  VARCHAR2(20)   PART_NAME  VARCHAR2(50)  从表:TEST_PART_COST_DT_TAB(料号成本资料表)PART_NO VARCHAR2(10) COST_ID VARCHAR2(5) COST NUMBER  数据==>主表资料: PART_NO  PART_NAME1 1000            name1000

记oracle里continue关键字的陷阱

这几天在写pl/sql,中间用到continue关键字,一不小心就掉进坑里. oracle版本是11g,贴sql: 造数据: 1 2 3 4 5 6 7 8 9 create table address( addr varchar2(10) ); insert into address values('a'); insert into address values('b'); insert into address values('c'); insert into address values(

Oracle里汉字长度问题!

oracle|汉字|问题 以前在做一个系统时,遇到了一个问题!今天无意之中找到了这个问题的解决方法,贴出来!!! 问题描述:                varchar2(4000) abc;                intert into table_name(abc) values('这里有1500个汉字--');                报错:插入字符过长!经过测试,发现一个汉字占3个字节,所以报错!!! 问题所在:                使用的字符集是UTF8,就有

oracle里的常用命令

oracle  第一章:日志管理 1.forcing log switches sql> alter system switch logfile; 2.forcing checkpoints sql> alter system checkpoint; 3.adding online redo log groups sql> alter database add logfile [group 4] sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo'