1 简介
随着信息业的发展,在企业级数据库应用中,经常会有一些几十GB,上百GB的数据表。这些大数据量表的设计,维护及其备份都是数据库管理中的重点及其难点。本文就从设计<!---->
<!---->
<!----> |
<!---->
|
 |
<!----><!---->
<script></script>
|
 |
|
|
|
、维护及其备份方面探讨一下大数据量表的管理。
2 设计
2.1 大表时效性
大数据量表的数据量一般来说是跟时间成正比的,时间越久,数据量越大。 在设计阶段首先要考虑这些大表的时效性。
通常情况,在一定的时间区间,数据的访问频度比较大,超过这个区间,数据的访问频度极小。这个时间区间根据不同的应用类型而不同,通常是几个月。超过这个时间区间的数据可以认为是历史数据,数据访问的可能性不打。在企业应用中,并不是所有的数据都需要保留在生产数据库中,对于这些历史数据,可以考虑离线存放,或者是存放在另外的数据库中,比如数据仓库等。
大表的时效性可以通过在表上加时间戳列来实现。
2.2 使用分区表
Oracle 8以后提供了分区表的功能,分区表可以把一个表的数据从物理和逻辑上分割成小的区域。 Oracle支持非常大的分区表,一个对象可以允许多达64000个分区。对于大表来说,使用分区表是首选方案。 分区表可以改善表的维护、备份、恢复及查询性能。
分区表有4种分区方式:
n Range Partitioning
n Hash Partitioning
n Composite Partitioning
n List Partitioning
对于有时效性的大表,可以采用按时间分区的 Range Partitioning表,例如按天分区的分区表。
CREATE TABLE Test(
DATATIME DATE NOT NULL,
P1 NUMBER NULL,
P2 NUMBER NULL,
P3 NUMBER NULL,
P4 NUMBER NULL,
P5 NUMBER NULL,
P6 NUMBER NULL,
P7 NUMBER NULL,
P8 NUMBER NULL,
CONSTRAINT PK_TEST PRIMARY KEY (datatime, p1,p2) USING INDEX LOCAL TABLESPACE USERINDEX
)
PARTITION BY RANGE (DATATIME)
(PARTITION Test_060101 VALUES LESS THAN (TO_DATE('2006-01-02','YYYY-MM-DD')),
(PARTITION Test_060102 VALUES LESS THAN (TO_DATE('2006-01-03','YYYY-MM-DD')),
……
);
对于按时间分区仍然不能满足性能需求的表, 还可以根据应用需求,使用子分区对表进一步细化。
应用设计中,要充分利用分区表的特性,对大表的访问要完全避免全表访问,缩小访问范围。在查询条件中,尽量使用分区的列。
3 维护
大表的维护工作比较繁琐,索引的维护,存储空间的维护,历史数据的清理等等,使用分区表可以简化大表的维护工作,但是如果表很多的话,手动的创建、删除分区也是一件很繁琐,而且容易出错的事情。
此章节以按天分区的分区表为例讨论大表的自动维护。
3.1 分区表的命名规则
分区表分区的命名应当按照一定的规则命名,以利于自动维护的实现。本例采用按天分区的分区表,分区的命名方式为TABLENAME_YYMMDD,例如:TEST表的2006年6月1日的分区命名为TEST _060601。
3.2 维护字典
在数据库中创建维护字典表,存放需要自动维护的分区表的信息,包括表名,schema,表的类型,数据在数据库中的保留时间等信息。
Table Name: H_RETENTION
Column Type Null? Description
tablename Varchar2(30) Not null 表名
schemaname Varchar2(30) Not null Schema
typeid Varchar2(20) Not null 表类型1. PARTITION2. NORMAL3. …。。
retention Number(3) Not null 该表的保存天数。
3.3 自动创建分区
对于按时间分区的分区表,若不能及时创建新的数据分区,会导致数据无法插入到分区表的严重后果,数据库会产生报错信息ORA-14400: inserted partition key does not map to any partition,插入失败。
创建分区可以手工创建,也可以根据维护字典,通过系统的任务调度来创建分区。通常是在月底创建下个月的分区。
自动创建分区实现如下:
/**************************************************************************
Program Name:Add_Partition
Description:
创建某个用户下个月的所有分区
***************************************************************************/
PROCEDURE add_partition (v_schema IN VARCHAR2)
IS
CURSOR c_td_table
IS
SELECT tablename
FROM h_retention
WHERE typeid = 'PARTITION'
AND schemaname = UPPER (v_schema)
ORDER BY tablename;
v_cur BINARY_INTEGER;
v_int BINARY_INTEGER;
v_partition VARCHAR2 (30);
v_date DATE;
v_days NUMBER;
sql_stmt VARCHAR2 (1000); -- String used to save sql statement
err_msg VARCHAR2 (300);
BEGIN
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;
FOR v_table IN c_td_table
LOOP
v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM');
v_partition := v_table.tablename;
FOR i IN 1 .. v_days
LOOP
BEGIN
sql_stmt :=
'ALTER TABLE '
|| v_schema
|| '.'
|| v_table.tablename
|| ' ADD PARTITION '
|| v_partition
|| '_'
|| TO_CHAR (v_date, 'YYMMDD')
|| ' '
|| 'VALUES LESS THAN (TO_DATE('''
|| 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);
EXCEPTION
WHEN OTHERS
THEN
err_msg :=
v_partition
|| ': Create '
|| TO_CHAR (v_date, 'YYMMDD')
|| ' partition unsuccessfully! Error Information:'
|| SQLERRM;
log_insert (err_msg); --You can define your own log_insert function
COMMIT;
END;
v_date := v_date + 1;
END LOOP;
END LOOP;
DBMS_SQL.close_cursor (v_cur);
END;
3.4 自动删除过期分区
为了释放存储空间并提高大表的性能,要从数据库中删除大表中过期的历史数据。删除操作可以手工执行,也可以通过系统的任务调度来自动删除。分区表数据删除只需要删除相应的数据分区,与delete相比,有如下好处:
u 速度快
u 占用回滚表空间少
u 产生日志量少
u 释放空间
如果有global的索引,删除分区后需要重建索引。
自动删除分区实现如下:
当前分区表的分区情况可以通过Oracle的数据字典dba_tab_partitions获得, 然后与维护字典中的数据保留天数进行比较,删除过期的数据分区。
分享到:
相关推荐
Rocky Linux 8.10内核包
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
__UNI__DB9970A__20250328141034.apk.1
rust for minio
国网台区终端最新规范
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。
pyqt离线包,pyqt-tools离线包
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值
GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml
T_CPCIF 0225-2022 多聚甲醛.docx
《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
蚕豆脱壳机设计.zip
台区终端电科院送检文档
Y6一39一No23.6D离心通风机 CAD().zip
django自建博客app
台区终端电科院送检文档
非开挖水平定向钻机动力头装置设计.zip