ORACLE数据库巡检SQL脚本--7、检查不起作用的约束

用于识别不起作用的主键约束

一、SQL脚本

sql 复制代码
--检查不起作用的约束(禁用状态的主键约束)
SELECT OWNER, -- 约束所属用户
       CONSTRAINT_NAME, -- 约束名称
       TABLE_NAME, -- 约束对应的表
       CONSTRAINT_TYPE, -- 约束类型('P'代表主键约束)
       STATUS -- 约束状态('DISABLE'代表禁用)
  FROM DBA_CONSTRAINTS
 WHERE STATUS = 'DISABLE' -- 筛选禁用状态的约束
       AND CONSTRAINT_TYPE = 'P'; -- 仅筛选主键约束

二、脚本说明

该脚本的目标是识别处于禁用状态的主键约束

  • CONSTRAINT_TYPE = 'P':限定仅查询主键约束(主键是保证表记录唯一性、非空的核心约束);
  • STATUS = 'DISABLE':筛选"不起作用"的约束(禁用状态下,约束不会对表的DML操作生效)。
字段 含义 核心作用
OWNER 约束所属的数据库用户 定位该主键约束对应的业务用户
CONSTRAINT_NAME 主键约束的名称 后续启用约束的核心标识
TABLE_NAME 约束对应的表 明确是哪个表的主键约束被禁用
CONSTRAINT_TYPE 约束类型 此处固定为P(主键约束)
STATUS 约束状态 DISABLE表示约束当前不起作用

三注意事项

DISABLE表示约束当前不起作用

四、补充说明

1、禁用主键约束的影响

主键约束被禁用后,会破坏数据完整性:

  1. 数据重复/空值风险:表中可插入重复记录、或主键字段为空值,导致数据混乱;
  2. 外键依赖失效:依赖该主键的外键约束会无法正常校验,引发跨表数据不一致;
  3. 查询逻辑异常:依赖主键唯一性的业务逻辑(如关联查询、唯一标识)会出现错误。

2、处理建议

需先确保表中无重复/空值数据,再启用约束:

  1. 检查表中主键字段的有效性(无重复、非空):

    sql 复制代码
    SELECT [主键字段], COUNT(*) 
    FROM [OWNER].[TABLE_NAME]
    GROUP BY [主键字段]
    HAVING COUNT(*) > 1;  -- 若有结果,说明存在重复数据
  2. 启用主键约束:

    sql 复制代码
    ALTER TABLE [OWNER].[TABLE_NAME] ENABLE CONSTRAINT [CONSTRAINT_NAME];
    -- 示例:启用SCOTT用户EMP表的主键约束PK_EMP
    ALTER TABLE SCOTT.EMP ENABLE CONSTRAINT PK_EMP;
相关推荐
m0_613856291 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7941 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1371 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库1 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下2 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610262 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
juniperhan2 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
Elastic 中国社区官方博客2 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官3 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者3 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库