EsgynDB schema不存在但get schemas仍然显示

本文介绍了解决数据库中残留Schema信息的问题,即使使用dropschema或cleanupschema命令后,元数据中可能仍保留相关信息,导致getschemas命令显示已删除的Schema。文章详细描述了如何检查元数据表确认残留信息,并提供了清除这些残留记录的方法。

现象

在某些特殊情况下,我们已经清除了schema,但get schemas仍然存在,使用drop schema或cleanup schema均提示schema已经不存在,如下述步骤所示,

SQL>get schemas;

Schemas in Catalog TRAFODION
============================
 
AFA_LT
AFA_SIT
SEABASE
_LIBMGR_
_MD_
_PRIVMGR_MD_
_REPOS_

=======================
 8 row(s) returned

--- SQL operation complete.

SQL>cleanup schema afa_lt;

*** WARNING[4255] Provided schema name does not exist in metadata. Cleanup will be performed on objects in this schema, if they exist. [2020-07-25 09:40:30]
--- SQL operation complete.

SQL>cleanup schema afa_sit;

*** WARNING[4255] Provided schema name does not exist in metadata. Cleanup will be performed on objects in this schema, if they exist. [2020-07-25 09:40:36]
--- SQL operation complete.

SQL>drop schema afa_lt;

*** ERROR[1003] Schema TRAFODION.AFA_LT does not exist. [2020-07-25 09:40:51]

SQL>drop schema afa_sit;

*** ERROR[1003] Schema TRAFODION.AFA_SIT does not exist. [2020-07-25 09:40:54]

解决

get schemas中仍然显示的数据来自于元数据表,这说明schema虽然清理了但元数据中仍然遗留有相关信息。

SQL>select count(*) from "_MD_".objects where schema_name in ('AFA_LT','AFA_SIT');

(EXPR)
--------------------
                  63

--- 1 row(s) selected.

通过以上SQL可以确认objects元数据表中仍然残留相关schema的信息。
我们删除残留记录后get schemas不再显示不存在的schema名称。

set parserflags 131072;
delete from "_MD_".objects where schema_name in ('AFA_LT','AFA_SIT');

SQL>get schemas;

Schemas in Catalog TRAFODION
============================

SEABASE
_LIBMGR_
_MD_
_PRIVMGR_MD_
_REPOS_

=======================
 6 row(s) returned

### 原因 - **版本兼容**:同的 MySQL 版本在系统表和性能模式表的支持上可能存在差异。如果使用的 MySQL 版本支持 `performance_schema.data_locks` 表,就会出现该表存在的情况。 - **性能模式未启用**:`performance_schema` 是 MySQL 的一个可选组件,默认情况下可能未启用。如果未启用,相关的表(如 `data_locks`)将可用。 - **表损坏或丢失**:数据库文件损坏、误删除操作等可能导致 `performance_schema.data_locks` 表损坏或丢失。例如,在进行数据库维护操作时,小心删除了该表。 - **权限问题**:用户可能没有足够的权限访问 `performance_schema.data_locks` 表。权限足会导致用户无法看到该表。 ### 解决办法 - **检查并升级版本**:确认使用的 MySQL 版本支持 `performance_schema.data_locks` 表。如果版本过低,可以考虑升级到支持该表的版本。例如,MySQL 5.5 及以上版本支持 `performance_schema`,但同版本的功能可能有所同,建议升级到较新的稳定版本。 - **启用性能模式**:如果 `performance_schema` 未启用,可以在 MySQL 配置文件(通常是 `my.cnf` 或 `my.ini`)中添加或修改以下配置: ```ini [mysqld] performance_schema = ON ``` 修改配置文件后,重启 MySQL 服务使配置生效。 - **修复或重建表**:如果表损坏,可以尝试使用 MySQL 提供的工具进行修复。例如,使用 `mysqlcheck` 工具检查和修复 `performance_schema` 数据库: ```bash mysqlcheck -u root -p --repair --all-databases ``` 如果表丢失,可以通过重新初始化 `performance_schema` 来重建相关表。在 MySQL 中执行以下命令: ```sql -- 停止 MySQL 服务 -- 备份数据 -- 删除 performance_schema 相关文件 -- 启动 MySQL 服务,MySQL 会自动重新初始化 performance_schema ``` - **检查并授予权限**:确保用户具有访问 `performance_schema.data_locks` 表的权限。可以使用以下命令授予用户相应的权限: ```sql GRANT SELECT ON performance_schema.data_locks TO 'your_user'@'your_host'; FLUSH PRIVILEGES; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值