数据紧急修复之启用错误日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 昨晚对测试环境进行了升级,同步了部分生产的数据。整个过程比较顺利,但是在最后一步启用foreign key constraint的时候报了错误。 ora-02298:cannot validate(xxxx.xxxx_fk) -parent keys not found 很明显是一部分数据没有同步到,有一部分数据丢失了。
昨晚对测试环境进行了升级,同步了部分生产的数据。整个过程比较顺利,但是在最后一步启用foreign key constraint的时候报了错误。
ora-02298:cannot validate(xxxx.xxxx_fk) -parent keys not found
很明显是一部分数据没有同步到,有一部分数据丢失了。和开发做了确认,从生产中根据条件导出了一个dump,关联的表有100多个,每个表里都是根据筛选条件过滤后的部分数据,可能有一部分数据和现有环境的数据有重复。开发说在主键对应的数据重复的情况下,如果发生主键冲突,reject的数据可以忽略。只要插入没有冲突的数据即可

这个需求也很特别,首先想到的就是直接用Imp来导入,如果发生主键重复,会抛出错误,然后查看下一条记录,直到没有冲突的数据都插入 。

为了保险起见创建了一个临时用户,把数据导入到了这个临时用户中。
. . importing table                    "TEST_DATA"    2810237 rows imported
. . importing table            "TEST_NAME_LINK"       8281 rows imported

然后尝试使用如下的方式查看是否有数据冲突,最后rollback,可以看到确实有冲突数据。
insert into              xxxx.TEST_DATA select *from               app_tmp. TEST_DATA ;
insert into                    xxxx.TEST_NAME_LINK select *from                     app_tmp. TEST_NAME_LINK ;

ORA-00001: unique constraint (XXXX. TEST_DATA_PK) violated 
ORA-00001: unique constraint (XXXX. TEST_NAME_LINK_PK) violated 

做了备份之后,然后尝试使用Imp来插入数据,果然有很多表多抛出很多的冲突数据错误。这是期望中的,但是在TEST_DATA这个表的时候,冲突数据实在太多。每一秒钟大概能够输出3条错误记录,错误如下:
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (xxxx.TEST_DATA_PK) violated
Column 1 10000101
Column 2 22-SEP-2012:02:49:52
Column 3
Column 4 105
Column 5 TEST0042
Column 6 TEST911
Column 7 0
....
每一秒钟大概3条记录的样子,结果执行了有快半个小时,还是那不停的输出日志,日志都400M左右了,大小堪比dump文件的大小了。
最后果断取消,因为在这种情况下有一部分数据已经插入了,一部分被reject了,得保证没有冲突的数据都插入。
最后使用错误日志。
EXEC DBMS_ERRLOG.create_error_log(dml_table_name => 'NAME_DATA',SKIP_UNSUPPORTED=>true,ERR_LOG_TABLE_NAME=>'NAME_DATA_ERROR');                 
然后使用如下的语句插入,大概等了有5分钟左右的时间,就提示插入了2万多条记录,是2百多万条记录中的1%的比例。
SQL> insert into name_data select *from app_tmp.name_data LOG ERRORS INTO NAME_DATA_ERROR('duplicate data') REJECT LIMIT UNLIMITED;
28388 rows created.
SQL> commit;

查看错误日志
select count(*)from name_data_error;里面就是被reject的数据。
做了基本确认后,再次尝试enable foregin key constraint就没有问题了。


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
4月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
134 0
|
1月前
|
数据采集 运维 监控
|
5月前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
480 117
|
3月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
370 4
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
333 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
715 14
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
11月前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
201 2
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
258 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据