首页 > 数据库 >GreatSQL数据库DROP表后无法重建

GreatSQL数据库DROP表后无法重建

时间:2024-05-17 09:42:47浏览次数:20  
标签:建表 app DROP GreatSQL 分区表 表后 test 数据库

一、数据库信息:

数据库版本:5.7.21-log

某银行测试数据库,APP业务库内有一个含有大量(几百个)分区表的大表test_app。DROP该分区表的大表后导致无法重建该分区表。

二、问题描述:

客户使用“drop table test_app;”时,显示表删除成功。当重新执行该表的建表语句时,报错“Table 'app.test_app /* Partition p0 */' already exists”

三、问题分析:

3.1> 原因是GreatSQL 5.7数据库DDL没有原子性,drop表的删除动作没有执行完成;

3.2> 进入数据库“show tables”查看test_app表已不存在;

3.3> 进入数据库所在的目录下,查看test_app表的相关文件。test_app.frm文件已不存在,但是有大量的"test_app#P***.ibd"分区表文件存在。关闭数据库,移除这些分区表文件到其他目录,启动数据库;数据库无法启动,报“无法找到这些分区表文件”的错误;

3.4> 重新创建test_app表时,报“table already exists”错。

3.5> 感觉进入了死胡同,最先想到的直截了当方法是备份APP业务库内除这张表的其他表,删除该数据库后,进行APP业务数据库的恢复,该方法没有测试,觉得太麻烦。

四、问题处理(方法一,测试步骤):

4.1> 新建一个临时库test,依据app库目录里的数据文件名称,修改建表语句后,执行test_app表的建表SQL语句,生成test_app.frm文件;

4.2> 关闭数据库,修改数据库配置文件my.cnf文件的参数为“innodb_file_per_table=OFF”;

4.3> 把临时库test目录下的test_app.frm文件拷贝到业务数据库app目录下,启动数据库;

4.4> 进入业务数据库APP,可以看到test_app表;

4.5> 执行“drop table test_app;”语句,成功删除了表。关闭数据库;

4.6> 进入业务数据库app对应的目录下,test_app.frm文件已不存在,但是有个test_app#P***.ibd分区表文件存在。手工删除该ibd文件。

4.7>修改数据库配置文件my.cnf文件的参数为“innodb_file_per_table=ON”;启动数据库。

4.8> 重新执行test_app表的建表SQL语句。即可成功创建表。

五、问题处理(方法二,客户执行步骤):

5.1> 设置innodb_file_per_table=OFF:set global innodb_file_per_table='OFF';

5.2> 执行test_app表的建表语句,建表成功。

5.3> 删除test_app表drop table test_app;

5.4> 重启数据库。

5.5> 再执行test_app表的建表语句,建表成功。


Enjoy GreatSQL

标签:建表,app,DROP,GreatSQL,分区表,表后,test,数据库
From: https://www.cnblogs.com/greatsql/p/18197227

相关文章

  • UEC++做拖拽时的UDragDropOperation 的PayLoad是什么
    在UnrealEngine中,使用C++进行拖拽操作时,UDragDropOperation类的Payload成员变量允许你传递与拖拽操作相关的任何类型的数据。它通常被用来存储一些关于被拖拽元素的信息,这些信息在拖拽开始时被设置,然后可以在拖拽结束时被检索和使用。Payload是一个UObject*类型的指针,这意......
  • GreatSQL的sp中添加新的sp_instr引入的bug解析
    GreatSQL的sp中添加新的sp_instr引入的bug解析一、问题发现在一次开发中用到的sp需要添加新的sp_instr以满足需求,但是添加了数个sp_instr以后发现执行新的sp会发生core。注:本次使用的GreatSQL8.0.32-251、sp_head.cc的init_sp_psi_keys()代码里面添加10个新的sp_instr:void......
  • openGauss VACUUM-FULL一张表后-表文件大小无变化
    VACUUMFULL一张表后,表文件大小无变化问题现象使用VACUUMFULL命令对一张表进行清理,清理完成后表大小和清理前一样大。原因分析假定该表的名称为table_name,对于该现象可能有以下两种原因:table_name表本身没有delete过数据,使用VACUUMFULLtable_name后无需清理delete的数据......
  • EyeDropper 拾色器
    EyeDropperEyeDropper:拾色器,从屏幕上选择颜色需要用户交互操作<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0&q......
  • 数据表删除DROP TRUNCATE DELETE区别
    总的来说,DROP用于删除整个数据库对象(表结构和数据全部删除),DELETE用于删除表中的数据,而TRUNCATE也是删除表中的数据,但比DELETE更快,且无法指定条件删除。根据需求,选择适当的命令来删除数据或对象。 DROP:1.DROP用于删除数据库对象,例如表(table)、索引(index)、视图(view)等。2......
  • 一文搞懂drag&drop浏览器拖放功能的实现
        拖放功能,即将一个元素从一个区域,通过拖拽,放置到另一个区域。常见的应用是将文件或图片从一个区域,拖放到另一个区域。中文常常把这表述成拖拽,实际上拖拽的描述并不准确,应该叫拖放,因为drag事件和drop事件是成对使用的,即拖拽和放置。    drag在拖拽动作发生时触发......
  • GreatSQL统计信息相关知识点
    相关知识点:INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定义单个表时,优化器统计信息将持久化到磁盘。默认情况下,innodb_stats_persistent是启用的。持久统计信息存储在mysql.innodb_table_stats和mysql.innodb_index_stats表中。默认情况下启用的innodb_stats_auto_recalc变量......
  • Datax助力轻松迁移SQLServer数据至GreatSQL
    1.环境说明1.1源端SQLSserver版本IP端口MicrosoftSQLServer2017192.168.140.16014331.2目标端GreatSQL版本IP端口GreatSQL-8.0.32192.168.139.8633082.安装环境2.1安装SQLServer环境环境说明:借助Docker使用镜像启动数据库2.1.1安装docke......
  • GreatSQL 死锁案例分析
    1.背景概述客户业务发生死锁的报错,根据业务程序日志及业务流程,发现造成死锁的原因是:事务1delete+insert,事务2delete+insert2个事务交替执行导致的死锁;由于GAP锁阻塞了插入意向锁,并且当delete的数据存在时死锁不会发生,当delete的数据不存在时,会发生死锁。2.问题复现本......
  • RC4Drop加密技术:原理、实践与安全性探究
    第一章:介绍1.1加密技术的重要性加密技术在当今信息社会中扮演着至关重要的角色。通过加密,我们可以保护敏感信息的机密性,防止信息被未经授权的用户访问、窃取或篡改。加密技术还可以确保数据在传输过程中的安全性,有效防止信息泄露和数据被篡改的风险。在网络通信、电子商务、金......