您当前位置:主页 > 资讯攻略 >
来源:未知
2021-12-23 03:34:25 浏览: 分类:资讯攻略

浅谈Oracle中大数据量表的管理

1导言

随着信息产业的发展,在企业数据库的应用中,经常会出现一些几十GB、几百GB的数据表。这些大数据表的设计、维护和备份是数据库管理的重点和难点。本文从设计、维护、备份等方面探讨大数据规模的管理。

2设计

2.1大型表格的及时性

一般来说,大数据规模的数据量与时间成正比。时间越长,数据量越大。在设计阶段,首先要考虑这些大表的时效性。

通常在一定的时间区间内,数据访问的频率比较大,超过这个区间,数据访问的频率极小。这个时间间隔根据不同的应用类型而不同,通常是几个月。超过这个时间间隔的数据可以认为是历史数据,不打击数据访问的可能性。在企业应用程序中,并非所有数据都需要保存在生产数据库中。对于这些历史数据,可以考虑离线存储或者存储在另一个数据库中,比如数据仓库。

大型表的及时性可以通过在表中添加时间戳列来实现。

2.2使用分区表

oracle 8以后提供了分区表的功能,可以在物理上和逻辑上将一个表的数据划分成小区域。Oracle支持非常大的分区表,一个对象最多可以允许64,000个分区。对于大型表,分区表是首选。对表进行分区可以提高表的维护、备份、恢复和查询性能。

有四种方法对分区表进行分区:

范围划分

散列分区

复合分区

列表分割

对于有时效性的大表,可以使用按时间分区的范围分区表,比如按天分区的分区表。

创建表测试(

数据时间日期不为空,

P1号码为空,

P2号码为空,

P3号码为空,

P4号码为空,

P5号为空,

P6号码为空,

P7号为空,

P8号为空,

使用索引本地表空间USERINDEX的约束PK_TEST主键(datatime,p1,p2)

)

按范围分区(数据时间)

(PARTITION Test_060101值小于(TO_DATE('2006-01-02 ',' YYYY-MM-DD ')),

(PARTITION Test_060102值小于(TO_DATE('2006-01-03 ',' YYYY-MM-DD ')),

& hellip& hellip

);

对于按时间分区无法满足性能要求的表,可以根据应用需求进一步按子分区细化表。

在设计中要充分利用分区表的特性,在访问大表时完全避免全表访问,缩小访问范围。在查询条件中,尽量使用分区列。

3维护

大表的维护比较复杂,比如索引维护、存储空维护、历史数据清理等。使用分区表可以简化大型表的维护,但如果表很多,手动创建和删除分区也是一件复杂且容易出错的事情。

本章以按天分区的分区表为例,讨论大型表的自动维护。

3.1分区表的命名规则

分区表的命名要符合一定的规则,以便于实现自动维护。在本例中,分区表按天进行分区,分区名为TABLENAME_YYMMDD。例如,2006年6月1日测试表的分区被命名为TEST _060601。

3.2维护字典

在数据库中创建维护字典表,存储需要自动维护的分区表信息,包括表名、模式、表类型、数据在数据库中的保留时间等。

表名:H_RETENTION

列类型为空?描述

name tablevarchar2 (30)不是空表名

schemaname Varchar2(30)非空模式

Typeid Varchar2(20) Not null表类型1。分区2。正常3。& hellip。。

Retention Number(3) Not null表保留的天数。

3.3自动创建分区

对于按时间分区的分区表,如果不能及时创建新的数据分区,就不能将数据插入到分区表中,数据库会产生错误消息ORA-14400:插入的分区键没有映射到任何分区,插入失败。

分区可以手动创建,也可以根据维护字典通过系统任务调度来创建。通常,下个月的分区是在月末创建的。

自动分区创建按如下方式实现:

/**************************************************************************

程序名:添加分区

描述:

为下个月创建用户的所有分区。

***************************************************************************/

过程add _ partition(varchar 2中的v_schema)

游标c_td_table

选择表名

从h _保留

其中typeid = 'PARTITION '

schemaname = UPPER (v_schema)

按表名排序;

v _ cur BINARY _ INTEGER

v_int二进制_整数;

v _ partition varchar 2(30);

v_date日期;

v _天数;

SQL _ stmt varchar 2(1000);-用于保存sql语句的字符串

err _ msg varchar 2(300);

开始

v _ date:= TRUNC(ADD _ MONTHS(SYSDATE,1),' MM ');

v_days :=

TO _ NUMBER(TO _ CHAR(LAST _ DAY(ADD _ MONTHS(SYSDATE,1)),' DD ');

v _ cur:= DBMS _ SQL . open _ cursor;

对于c_td_table中的v_table

v _ date:= TRUNC(ADD _ MONTHS(SYSDATE,1),' MM ');

v _ partition:= v _ table . tablename;

因为我在1..v日

开始

sql_stmt :=

'更改表格'

|| v_schema

|| '.'

|| v_table.tablename

|| '添加分区'

| | v _分区

|| '_'

|| TO_CHAR (v_date,' YYMMDD ')

|| ' '

|| '值小于(到日期(' ')

|| TO_CHAR (v_date + 1,' YYYY-MM-DD ')

|| ' ',' ' ' YYYY-MM-DD ' ')';

DBMS_SQL.parse (v_cur,sql_stmt,DBMS _ SQL . native);

v_int := DBMS_SQL。EXECUTE(v _ cur);

例外

当别人

然后

err_msg :=

v _分区

|| ':创建'

|| TO_CHAR (v_date,' YYMMDD ')

|| '分区不成功!错误信息:'

| | SQLERRM

log_insert(错误消息);-您可以定义自己的log_insert函数

提交;

结束;

v _ date:= v _ date+1;

结束循环;

结束循环;

DBMS _ SQL . close _ cursor(v _ cur);

结束;

3.4自动删除过期分区

为了释放存储空和提高大表的性能,需要从数据库中删除大表中过期的历史数据。删除可以手动执行,也可以通过系统任务调度自动执行。分区表数据删除只需要删除相应的数据分区。与删除相比,它有以下优点:

u快。

u在回滚表空之间占用更少的空间

生成的关键字标签:Oracle

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227424.html

上一篇:oracle锁表与解表
攻略资讯
安卓软件