批量比对分区表数据量

2024年 3月 5日 58.7k 0

需求

  日常工作经常需要历史数据进行导出导入(expdp/impdp),因此有时就需要验证分区字段的数据量,根据数据库的系统视图来对比,数据不太准,用select count(*) from 表名 partition(分区),又比较麻麻烦不方便比对。因此写了个存储过程来解决这个问题。

收集表记录信息表

create table tab_partition_num
(
table_name varchar2(100), -- 表名
partition_name varchar2(100), -- 分区表
partition_date varchar2(10), -- 分区日期
num_rows number(8), -- 行数
stat_time date -- 入表时间
);

批量查询分区数据量:

CREATE OR REPLACE PROCEDURE Sp_TabPartRows( v_tabname in varchar2, v_data_type in varchar2 )
AS
v_partname varchar2(100); -- 分区名
v_high_value varchar2(100); -- 分区值
v_rows_num NUMBER; -- 记录数
v_sql varchar2(1000); -- sql 文本
n_value number(2) default 0;
BEGIN
IF v_data_type='T' THEN
n_value:=11;
ELSIF v_data_type='D' THEN
n_value:=12;
else
DBMS_OUTPUT.PUT_LINE('v_data_type:'||v_data_type ||'类型仅支持:[T:TIMESTAMP,D:DATA]');
END IF;
if n_value>0 then
FOR rec IN(
select a.partition_name, a.high_value
from all_tab_partitions a
where a.table_name =v_tabname
)LOOP
v_partname := rec.partition_name;
v_high_value := rec.high_value;
v_high_value := substr(v_high_value,n_value,8);
v_sql := 'select count(*) from ' ||v_tabname|| ' partition('||v_partname||')';
EXECUTE IMMEDIATE v_sql into v_rows_num;
insert into tab_partition_num
(table_name, partition_name, partition_date, num_rows,stat_time)
values
(v_tabname, v_partname, v_high_value, v_rows_num,sysdate);
commit;
END LOOP;
end if;

END Sp_TabPartRows;
/

执行存储过程

  • 参数说明:
  • v_tabname : 表名
  • v_data_type :T:分区键值类型为:TIMESTAMP / D:分区键值类型为:DATA

exec Sp_TabPartRows('T1','T');
exec Sp_TabPartRows('T2','D');

比对T1表与t2表分区表数据量

select t1.table_name t1_name,
t2.table_name t2_name,
t1.partition_name t1_par_name,
t2.partition_name t2_par_name,
-- to_char(to_date(t1.partition_date, 'yyyy-mm') - 1, 'yyyy_mm') partition_date,
t1.num_rows t1_rows_num,
t2.num_rows t2_rows_num
from tab_partition_num t1
left join tab_partition_num t2
on t1.partition_date = t2.partition_date
where t1.table_name = 'T1'
and t2.table_name = 'T2'
and t1.num_rows t2.num_rows
order by t1.partition_date;

文章推荐

  • 故障处理
    《Oracle HASH JOIN 引起的TEMP爆满分析总结》
    《expdp/impdp 任务终止不能靠Ctrl+C》
    《Oracle_索引重建—优化索引碎片》
    《Oracle 自动收集统计信息机制》
    《DBA_TAB_MODIFICATIONS表的刷新策略测试》
    《FY_Recover_Data.dbf》
    《Oracle RAC 集群迁移文件操作.pdf》
    《Oracle Date 字段索引使用测试.dbf》
    《Oracle 诊断案例 :因应用死循环导致的CPU过高》
    《记录一起索引rebuild与收集统计信息的事故》
    《RAC DG删除备库redo时报ORA-01623》
    《问答榜上引发的Oracle并行的探究(一)》
    《问答榜上引发的Oracle并行的探究(二)》
    《DG 同步延迟之奇怪的经典报错:ORA-16191》
  • 等待事件
    《log file sync》 等待事件问题分析汇总
    《ASH报告发现:os thread startup 等待事件分析》
  • 监控&脚本
    《DG standby time 监控脚本部署》
    《Oracle 慢SQL监控脚本》
    《Oracle 慢SQL监控测试及监控脚本.pdf》
    《oracle 监控表空间脚本 每月10号0点至06点不报警》
    《Oracle 脚本实现简单的审计功能》
  • 安装系列
    《ORACLE_19C_linux安装.pdf》
    《Oracle 19c-手工建库.pdf》
    《19c单库升级19.11补丁.pdf》
    《19c_rac补丁《19.11-p32841500》.pdf 》
    《oracle_图形-单实例11.2.0.4升级19.3.pdf》
    《oracle_11.2.0.3升级11.2.0.4–单实例升级.pdf》
    《oracle_静默-单实例 11.2.0.4升级19.3.pdf》
    《CentOS_6.7系统一步一步 RAC 11.2.0.4升级19.3.pdf》
    《整理后_RAC_11.2.0.4升级19c.pdf》

欢迎赞赏支持或留言指正

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论