在大型的企业应用或企业级的数据库应用中 要处理的数据量通常可以达到几十到几百GB 有的甚至可以到TB级 虽然存储介质和数据处理技术的发展也很快 但是仍然不能满足用户的需求 为了使用户的大量的数据在读写 *** 作和查询中速度更快 Oracle提供了对表和索引进行分区的技术 以改善大型应用系统的性能
使用分区的优点
·增强可用性 如果表的某个分区出现故障 表在其他分区的数据仍然可用
·维护方便 如果表的某个分区出现故障 需要修复数据 只修复该分区即可
·均衡I/O 可以把不同的分区映射到磁盘以平衡I/O 改善整个系统性能
·改善查询性能 对分区对象的查询可以仅搜索自己关心的分区 提高检索速度
Oracle数据库提供对表或索引的分区方法有三种
·范围分区
·Hash分区(散列分区)
·复合分区
下面将以实例的方式分别对这三种分区方法来说明分区表的使用 为了测试方便 我们先建三个表空间
以下为引用的内容
create tablespace dinya_space
datafile /test/demo/oracle/demodata/dinya dnf size M
create tablespace dinya_space
datafile /test/demo/oracle/demodata/dinya dnf size M
create tablespace dinya_space
datafile /test/demo/oracle/demodata/dinya dnf size M
分区表的创建
范围分区
范围分区就是对数据表中的某个值的范围进行分区 根据某个值的范围 决定将该数据存储在哪个分区上 如根据序号分区 根据业务记录的创建日期进行分区等
需求描述 有一个物料交易表 表名 material_transactions 该表将来可能有千万级的数据记录数 要求在建该表的时候使用分区表 这时候我们可以使用序号分区三个区 每个区中预计存储三千万的数据 也可以使用日期分区 如每五年的数据存储在一个分区上
根据交易记录的序号分区建表 以下为引用的内容
SQL> create table dinya_test
(
transaction_id number primary key
item_id number( ) not null
item_description varchar ( )
transaction_date date not null
)
partition by range (transaction_id)
(
partition part_ values less than( ) tablespace dinya_space
partition part_ values less than( ) tablespace dinya_space
partition part_ values less than(maxvalue) tablespace dinya_space
);
Table created
建表成功 根据交易的序号 交易ID在三千万以下的记录将存储在第一个表空间dinya_space 中 分区名为:par_ 在三千万到六千万之间的记录存储在第二个表空间
dinya_space 中 分区名为 par_ 而交易ID在六千万以上的记录存储在第三个表空间dinya_space 中 分区名为par_
根据交易日期分区建表
以下为引用的内容
SQL> create table dinya_test
(
transaction_id number primary key
item_id number( ) not null
item_description varchar ( )
transaction_date date not null
)
partition by range (transaction_date)
(
partition part_ values less than(to_date( yyyy mm dd ))
tablespace dinya_space
partition part_ values less than(to_date( yyyy mm dd ))
tablespace dinya_space
partition part_ values less than(maxvalue) tablespace dinya_space
);
Table created
这样我们就分别建了以交易序号和交易日期来分区的分区表 每次插入数据的时候 系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中
当然 我们还可以根据需求 使用两个字段的范围分布来分区 如partition
by range ( transaction_id transaction_date)
分区条件中的值也做相应的改变 请读者自行测试
Hash分区(散列分区)
散列分区为通过指定分区编号来均匀分布数据的一种分区类型 因为通过在I/O设备上进行散列分区 使得这些分区大小一致 如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中
以下为引用的内容
SQL> create table dinya_test
(
transaction_id number primary key
item_id number( ) not null
item_description varchar ( )
transaction_date date
)
partition by hash(transaction_id)
(
partition part_ tablespace dinya_space
partition part_ tablespace dinya_space
partition part_ tablespace dinya_space
);
Table created
建表成功 此时插入数据 系统将按transaction_id将记录散列地插入三个分区中 这里也就是三个不同的表空间中
复合分区
有时候我们需要根据范围分区后 每个分区内的数据再散列地分布在几个表空间中 这样我们就要使用复合分区 复合分区是先使用范围分区 然后在每个分区内再使用散列分区的一种分区方法 如将物料交易的记录按时间分区 然后每个分区中的数据分三个子分区 将数据散列地存储在三个指定的表空间中
以下为引用的内容
SQL> create table dinya_test
(
transaction_id number primary key
item_id number( ) not null
item_description varchar ( )
transaction_date date
)
partition by range(transaction_date)subpartition by hash(transaction_id)
subpartitions store in (dinya_space dinya_space dinya_space )
(
partition part_ values less than(to_date( yyyy mm dd ))
partition part_ values less than(to_date( yyyy mm dd ))
partition part_ values less than(maxvalue)
);
Table created
该例中 先是根据交易日期进行范围分区 然后根据交易的ID将记录散列地存储在三个表空间中
分区表 *** 作
以上了解了三种分区表的建表方法 下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的 *** 作
插入记录
以下为引用的内容
SQL> insert into dinya_test values( BOOKS sysdate);
row created
SQL> insert into dinya_test values( BOOKS sysdate+ );
row created
SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));
row created
SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));
row created
SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));
row created
SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));
row created
SQL> mit;
Commit plete
SQL>
按上面的建表结果 年前的数据将存储在第一个分区part_ 上 而 年到 年的交易数据将存储在第二个分区part_ 上 年以后的记录存储在第三个分区part_ 上
查询分区表记录 以下为引用的内容
SQL> select from dinya_test partition(part_ );
TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE
BOOKS : :
BOOKS : :
SQL>
SQL> select from dinya_test partition(part_ );
TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE
BOOKS
BOOKS
SQL>
SQL> select from dinya_test partition(part_ );
TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE
BOOKS
BOOKS
SQL>
从查询的结果可以看出 插入的数据已经根据交易时间范围存储在不同的分区中 这里是指定了分区的查询 当然也可以不指定分区 直接执行select from dinya_test查询全部记录
在也检索的数据量很大的时候 指定分区会大大提高检索速度
更新分区表的记录
以下为引用的内容
SQL> update dinya_test partition(part_ ) t set em_description= DESK where
t transaction_id= ;
row updated
SQL> mit;
Commit plete
SQL>
这里将第一个分区中的交易ID= 的记录中的item_description字段更新为 DESK 可以看到已经成功更新了一条记录 但是当更新的时候指定了分区 而根据查询的记录不在该分区中时 将不会更新数据 请看下面的例子 以下为引用的内容
SQL> update dinya_test partition(part_ ) t set em_description= DESK where
t transaction_id= ;
rows updated
SQL> mit;
Commit plete
SQL>
指定了在第一个分区中更新记录 但是条件中限制交易ID为 而查询全表 交易ID为 的记录在第三个分区中 这样该条语句将不会更新记录
删除分区表记录
以下为引用的内容
SQL> delete from dinya_test partition(part_ ) t where t transaction_id= ;
row deleted
SQL> mit;
Commit plete
SQL>
上面例子删除了第二个分区part_ 中的交易记录ID为 的一条记录 和更新数据相同 如果指定了分区 而条件中的数据又不在该分区中时 将不会删除任何数据
分区表索引的使用
分区表和一般表一样可以建立索引 分区表可以创建局部索引和全局索引 当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引
局部索引分区的建立
以下为引用的内容
SQL> create index dinya_idx_t on dinya_test(item_id)
local
(
partition idx_ tablespace dinya_space
partition idx_ tablespace dinya_space
partition idx_ tablespace dinya_space
);
Index created
SQL>
看查询的执行计划 从下面的执行计划可以看出 系统已经使用了索引
以下为引用的内容
SQL> select from dinya_test partition(part_ ) t where em_id= ;
Execution Plan
SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )
TABLE ACCESS (BY LOCAL INDEX ROWID) OF DINYA_TEST (Cost=
Card= Bytes= )
INDEX (RANGE SCAN) OF DINYA_IDX_T (NON UNIQUE) (Cost=
Card= )
Statistics
recursive calls
db block gets
consistent gets
physical reads
redo size
bytes sent via SQLNet to client
bytes received via SQLNet from client
SQLNet roundtrips to/from client
sorts (memory)
sorts (disk)
rows processed
SQL>
全局索引分区的建立
全局索引建立时global 子句允许指定索引的范围值 这个范围值为索引字段的范围值
以下为引用的内容
SQL> create index dinya_idx_t on dinya_test(item_id)
global partition by range(item_id)
(
partition idx_ values less than ( ) tablespace dinya_space
partition idx_ values less than ( ) tablespace dinya_space
partition idx_ values less than (maxvalue) tablespace dinya_space
);
Index created
SQL>
本例中对表的item_id字段建立索引分区 当然也可以不指定索引分区名直接对整个表建立索引 如
以下为引用的内容
SQL> create index dinya_idx_t on dinya_test(item_id);
Index created
SQL>
同样的 对全局索引根据执行计划可以看出索引已经可以使用
以下为引用的内容
SQL> select from dinya_test t where em_id= ;
Execution Plan
SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )
TABLE ACCESS (BY GLOBAL INDEX ROWID) OF DINYA_TEST (Cost
= Card= Bytes= )
INDEX (RANGE SCAN) OF DINYA_IDX_T (NON UNIQUE) (Cost=
Card= )
Statistics
recursive calls
db block gets
consistent gets
physical reads
redo size
bytes sent via SQLNet to client
bytes received via SQLNet from client
SQLNet roundtrips to/from client
sorts (memory)
sorts (disk)
rows processed
SQL>
分区表的维护
了解了分区表的建立 索引的建立 表和索引的使用后 在应用的还要经常对分区进行维护和管理 日常维护和管理的内容包括 增加一个分区 合并一个分区及删除分区等等 下面以范围分区为例说明增加 合并 删除分区的一般 *** 作
增加一个分区:
以下为引用的内容
SQL> alter table dinya_test
add partition part_ values less than(to_date( yyyy mm dd ))
tablespace dinya_spa
ce ;
Table altered
SQL>
增加一个分区的时候 增加的分区的条件必须大于现有分区的最大值 否则系统将提示ORA partition bound must collate higher than that of the last partition 错误
合并一个分区
以下为引用的内容
SQL> alter table dinya_test merge partitions part_ part_ into partition part_ ;
Table altered
SQL>
在本例中将原有的表的part_ 分区和part_ 分区进行了合并 合并后的分区为part_ 如果在合并的时候把合并后的分区定为part_ 的时候 系统将提示ORA cannot reuse lower bound partition as resulting partition 错误
删除分区
以下为引用的内容
SQL> alter table dinya_test drop partition part_ ;
Table altered
SQL>
删除分区表的一个分区后 查询该表的数据时显示 该分区中的数据已全部丢失 所以执行删除分区动作时要慎重 确保先备份数据后再执行 或将分区合并
总结
lishixinzhi/Article/program/Oracle/201311/17329
我也学了很久了,关于那么多的数据库的区别给你说一下
mssql定位与中型数据库市场!
oracle定位与大型数据库市场!
mssql的数据库脚本是t-sql
oracle的数据库脚本是pl/sql
mssql只能用于windows平台
oracle可以跨多个平台
mssql便宜、易于掌握、相对简单
oracle奇贵且按组件收费、概念多、麻烦
delphi开发当然注重pl/sql的掌握!
-------------------------------------
开放性:
SQL Server 只能在windows 上运行,没有丝毫的开放性, *** 作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时
Oracle 能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
DB2 能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%
可伸缩性,并行性
SQL server DB2 并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。
Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。 如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2 DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境 数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日 志。数据库分区有时被称为节点或数据库节点
安全性
SQL server 没有获得任何安全证书。
Oracle Server 获得最高认证级别的ISO标准认证。
DB2 获得最高认证级别的ISO标准认证。
性能
SQL Server 多用户时性能不佳
Oracle 性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。
DB2 适用于数据仓库和在线事物处理 性能较高。
客户端支持及应用模式
SQL Server C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB ,ODBC连接
Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接
DB2 跨平台,多层结构,支持ODBC,JDBC等客户
*** 作简便
SQL Server *** 作简单,但只有图形界面
Oracle 较复杂, 同时提供GUI和命令行,在windowsNT和unix下 *** 作相同
DB2 *** 作简单,同时提供GUI和命令行,在windowsNT和unix下 *** 作相同
使用风险
SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
DB2 在巨型企业得到广泛的应用,向下兼容性好。风险小。 仅供参考
---------------------------------------------------------------
九大数据仓库方案特点比较
中国电子设备系统工程研究所 王建新 刘东波
01-5-21 下午 04:33:38
--------------------------------------------------------------------------------
IBM、Oracle、Sybase、CA、NCR、Informix、Microsoft、和SAS等有实力的公司相继(通过收购或研发的途径)推出了自己的数据仓库解决方案,BO和Brio等专业软件公司也在前端在线分析处理工具市场上占有一席之地。下面针对这些数据仓库解决方案的性能和特点做分析和比较。
IBM IBM公司提供了一套基于可视数据仓库的商业智能(BI)解决方案,包括:Visual Warehouse(VW)、Essbase/DB2 OLAP Server 50、IBM DB2 UDB,以及来自第三方的前端数据展现工具(如BO)和数据挖掘工具(如SAS)。其中,VW是一个功能很强的集成环境,既可用于数据仓库建模和元数据管理,又可用于数据抽取、转换、装载和调度。Essbase/DB2 OLAP Server支持“维”的定义和数据装载。Essbase/DB2 OLAP Server不是ROLAP(Relational OLAP)服务器,而是一个(ROLAP和MOLAP)混合的HOLAP服务器,在Essbase完成数据装载后,数据存放在系统指定的DB2 UDB数据库中。
严格说来,IBM自己并没有提供完整的数据仓库解决方案,该公司采取的是合作伙伴战略。例如,它的前端数据展现工具可以是Business Objects的BO、Lotus的Approach、Cognos的Impromptu或IBM的Query Management Facility;多维分析工具支持Arbor Software的Essbase和IBM(与Arbor联合开发)的DB2 OLAP服务器;统计分析工具采用SAS系统。
Oracle Oracle数据仓库解决方案主要包括Oracle Express和Oracle Discoverer两个部分。Oracle Express由四个工具组成:Oracle Express Server是一个MOLAP (多维OLAP)服务器,它利用多维模型,存储和管理多维数据库或多维高速缓存,同时也能够访问多种关系数据库;Oracle Express Web Agent通过CGI或Web插件支持基于Web的动态多维数据展现;Oracle Express Objects前端数据分析工具(目前仅支持Windows平台)提供了图形化建模和假设分析功能,支持可视化开发和事件驱动编程技术,提供了兼容Visual Basic语法的语言,支持OCX和OLE;Oracle Express Analyzer是通用的、面向最终用户的报告和分析工具(目前仅支持Windows平台)。Oracle Discoverer即席查询工具是专门为最终用户设计的,分为最终用户版和管理员版。
在Oracle数据仓库解决方案实施过程中,通常把汇总数据存储在Express多维数据库中,而将详细数据存储在Oracle关系数据库中,当需要详细数据时,Express Server通过构造SQL语句访问关系数据库。但目前的Express还不够灵活,数据仓库设计的一个变化往往导致数据库的重构。另外,目前的Oracle 8i和Express 之间集成度还不够高,Oracle 8i和Express之间需要复制元数据,如果Oracle Discoverer(或BO)需要访问汇总数据,则需要将汇总数据同时存放在Oracle和Express中,系统维护比较困难。值得注意的是,刚刚问世的Oracle 9i把OLAP和数据挖掘作为重要特点。
Sybase Sybase提供的数据仓库解决方案称为Warehouse Studio,包括数据仓库的建模、数据抽取与转换、数据存储与管理、元数据管理以及可视化数据分析等工具。其中,Warehouse Architect是PowerDesigner中的一个设计模块,它支持星形模型、雪花模型和ER模型;数据抽取与转换工具包括PowerStage、Replication Server、Carleton PASSPORT,PowerStage是Sybase提供的可视化数据迁移工具。
Adaptive Server Enterprise是Sybase企业级关系数据库,Adaptive Server IQ是Sybase公司专为数据仓库设计的关系数据库,它为高性能决策支持系统和数据仓库的建立作了优化处理,Sybase IQ支持各种流行的前端展现工具(如Cognos Impromptu、Business Objects、Brio Query等);数据分析与展现工具包括PowerD
这个事情需要展开来看
很多大型企业单位为了满足业务系统的使用需要,使用很强劲的服务器主机,以大型机、小型机为主。这些机器都不使用windows系统,所以SQL Server之类的数据库没办法在这种机器上运行。Oracle、DB2、Sybase之类的是主流,这几个数据库有很强大的技术支持团队,也是受到大企业欢迎的原因。
计算机水平国外还是比较高的,所以外国软件公司开发的针对大企业的软件也都要求在这种数据库上运行。
约定俗成,微软的 *** 作系统和数据库由于不能运行在很强劲的主机上,所以只能给中小企业服务。微软系列的还有access数据库,基本上是为单机服务的。
至于MySQL基本上是为网站服务的,主要特点是免费,应用挺多,但是大企业信息化软件很少用,因为没有对应的业务支持人员,到时候出问题,找不到人,就出大事故了。
反过来再看数据库本身,都有参数说明,你仔细看看就知道了。很多小数据库本身底气就不足,并发数量、最大库文件等等参数标得很低,你说大企业动辄几T几P的数据,敢忘这种数据库上放吗?软件公司敢编写用这种数据库的软件吗?
再说说知名度,企业之间都会互相问,要是一个很小很便宜的数据库大家都用,都用得很好,市场占有率极高。自然口碑就好,大家就都用了。微软的sqlsever就是一个例子。从最开始的65基本上不能用到sql2000很成功,得到大量企业的认同,到现在出到2008版本,占有率很高了,就是口碑,可是它在大企业中使用不理想,所以还是占有中小企业。
分析这些数据库,应该多方面来看,不能只看参数,只看技术。你都分析好了,发现某个数据库不像大家说的,你能用,可是市场上找不到对应的软件,也没辙,除非你自己编写。
InterSystems IRIS和Oracle是两个不同的数据库管理系统。
InterSystems IRIS是一个基于内存的高性能数据库管理系统,它提供了高效的查询处理和数据持久性。它支持多种编程语言,如Java,C#,Python,JavaScript和ObjectScript,以及REST API。它具有开箱即用的数据集成服务,可以支持分布式数据处理,并提供可靠的安全和可伸缩性。
Oracle是一个关系型数据库管理系统,提供了完整的技术堆栈,以满足企业应用程序的需求。它提供了有力的数据管理和分析能力,支持多种编程语言,如SQL,PL/SQL,Java,C,C#,Python,Perl和Ruby。 Oracle还提供了可靠的事务处理,安全性和可伸缩性,以满足企业应用程序的需求。
总体而言,InterSystems IRIS是一个高性能的内存数据库管理系统,而Oracle是一个功能强大的关系型数据库管理系统。两者都提供了可靠的安全性,可伸缩性和数据管理能力,但InterSystems IRIS更加适合处理大量数据,而Oracle更加适合企业应用程序的需求。
一般企业级的服务器都是采用Linux或者Unix。
大企业要求服务器稳定,而这正是Linux或者Unix的优点。下面说一下选择这两个系统的优势:
1稳定性比较好;
2多用户 *** 作系统;
3bug可能不会有windows多;
4调控性高,可以根据实际应用做出相应的调整;
5排错性强。
还有就是,对于大企业来说,linux是免费的,而windows用盗版,有可能会接到microsoft的律师函,所以他们更喜欢雇佣成本稍高的人来维护免费的linux,而且对于大企业更希望程序执行的效率更高些,所以会买专门的unix服务器,开发人员的工资虽然高,但是更有可能兼顾程序的效率,所以大企业用linux,unix比较多。另外,对于那些国有企业来说,他们都是大手笔(估计有回扣的原因),服务器当然卖贵的,高端的服务器都是unix的,那当然他们要用unix了。
Oracle Data10g 提供了四个版本,每个版本适用于不同的开发和部署环境。Oracle 还提供了额外的几种可选数据库产品,这些产品针对特殊的应用需求增强了 Oracle Database 10g 的功能。下面是 Oracle Database 10g 的可用版本:
Oracle数据库10g标准版1(Oracle Database 10g Standard Edition One )为工作组、部门级和互联网/内联网应用程序提供了前所未有的易用性和性能价格比。从针对小型商务的单服务器环境到大型的分布式部门环境,Oracle Database 10g Standard Edition 包含了构建关键商务的应用程序所必需的全部工具。Standard Edition One 仅许可在最高容量为两个处理器的服务器上使用。
Oracle数据库10g标准版(Oracle Database 10g Standard Edition ) 提供了 Standard Edition One 的前所未有的易用性、能力和性能,并且利用真正应用集群提供了对更大型的计算机和服务集群的支持。它可以在最高容量为四个处理器的单台服务器上、或者在一个支持最多四个处理器的服务器的集群上使用。
Oracle数据库10g企业版(Oracle Database 10g Enterprise Edition )为关键任务的应用程序(如大业务量的在线事务处理 (OLTP) 环境、查询密集的数据仓库和要求苛刻的互联网应用程序)提供了高效、可靠、安全的数据管理。Oracle 数据库企业版为企业提供了满足当今关键任务应用程序的可用性和可伸缩性需求的工具和功能。它包含了 Oracle 数据库的所有组件,并且能够通过购买选项和程序包(本文稍后将加以说明)来进一步得到增强。
Oracle数据库10g个人版(Oracle Database 10g Personal Edition) 支持需要与Oracle数据库10g标准版1、Oracle 数据库标准版和 Oracle 数据库企业版完全兼容的单用户开发和部署。通过将 Oracle Database 10g 的获奖的功能引入到个人工作站中,Oracle 提供结合了世界上最流行的数据库功能的数据库,并且该数据库具有桌面产品通常具有的易用性和简单性。
以上就是关于Oracle数据库分区表 *** 作方法全部的内容,包括:Oracle数据库分区表 *** 作方法、为什么Oracle数据库适合大型企业 而SQL Server数据库适合中小企业、Oracle、DB2、MySQL、SQL Server、Sybase这几款数据的重点应用领域分别是哪些比如电信、互联网、银行等等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)