📋 概述#
本文档整理了 Oracle 和 MySQL 数据库日常运维中的常见操作和问题解决方案,包括:
- 数据库对比工具使用
- 游标超限问题处理
- 密码过期处理
- 数据库空间查询
- 业务进度跟踪
🔧 数据库对比工具#
工具位置#
对比工具部署在 117 服务器上。
ORA-01000 错误:超出打开游标的最大数#
错误信息#
Caused by: java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
原因分析#
- 数据库对比操作需要打开大量游标
- 当前游标数设置过小,无法满足对比需求
- 游标未及时释放导致累积超限
解决步骤#
步骤 1:查询当前游标配置
-- 查看当前游标最大数
SELECT name, value
FROM V$PARAMETER
WHERE name = 'open_cursors';
步骤 2:临时增加游标数
-- 建议设置为 1000 或更大(根据实际需求调整)
ALTER SYSTEM SET open_cursors = 1000 SCOPE=BOTH;
参数说明:
SCOPE=BOTH:立即生效且写入配置文件SCOPE=MEMORY:仅当前实例生效,重启后失效SCOPE=SPFILE:仅写入配置文件,需重启生效
步骤 3:执行数据库对比
重新运行对比工具进行数据同步。
步骤 4:恢复原始配置
-- 对比完成后,恢复为原始值(如 300)
ALTER SYSTEM SET open_cursors = 300 SCOPE=BOTH;
⚠️ 注意事项#
- 必须按顺序执行操作
- 记录原始游标数值
- 对比完成后及时恢复配置
- 避免长期设置过大的游标数
🔐 数据库密码管理#
密码过期问题#
问题描述#
Oracle 数据库默认密码策略会导致密码定期过期,影响应用连接。
解决方案#
方法 1:重置密码
-- 修改指定用户密码
ALTER USER 用户名 IDENTIFIED BY 新密码;
-- 示例
ALTER USER QYSL IDENTIFIED BY NewPassword123;
方法 2:解锁被锁定的账户
-- 解锁账户
ALTER USER 用户名 ACCOUNT UNLOCK;
-- 示例
ALTER USER SXGL_INIT ACCOUNT UNLOCK;
方法 3:同时修改密码并解锁
-- 一次性完成密码重置和解锁
ALTER USER 用户名 IDENTIFIED BY 新密码 ACCOUNT UNLOCK;
密码策略管理#
查看密码策略
-- 查看用户的 Profile
SELECT username, profile
FROM dba_users
WHERE username = '用户名';
-- 查看 Profile 的密码策略
SELECT *
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_type = 'PASSWORD';
修改密码永不过期
-- 修改 Profile 使密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
📊 数据库空间查询#
Oracle 数据库空间占用#
查询指定用户的空间使用情况#
SELECT
'QYSL' AS 数据库名,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS "总大小(MB)",
ROUND(SUM(CASE WHEN segment_type = 'TABLE' THEN bytes ELSE 0 END) / 1024 / 1024, 2) AS "数据大小(MB)",
ROUND(SUM(CASE WHEN segment_type = 'INDEX' THEN bytes ELSE 0 END) / 1024 / 1024, 2) AS "索引大小(MB)"
FROM
dba_segments
WHERE
owner = 'QYSL'
AND segment_type IN ('TABLE', 'INDEX');
查询所有用户的空间占用#
SELECT
owner AS 用户名,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS "总大小(MB)"
FROM
dba_segments
WHERE
owner NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'XDB')
GROUP BY
owner
ORDER BY
SUM(bytes) DESC;
查询表空间使用情况#
SELECT
tablespace_name AS 表空间名,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS "已使用(MB)",
ROUND(MAX(bytes) / 1024 / 1024, 2) AS "最大块(MB)"
FROM
dba_free_space
GROUP BY
tablespace_name;
MySQL 数据库空间占用#
查询指定数据库的空间使用情况#
SELECT
TABLE_SCHEMA AS '数据库名',
ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)',
ROUND(SUM(DATA_LENGTH) / 1024 / 1024, 2) AS '数据大小(MB)',
ROUND(SUM(INDEX_LENGTH) / 1024 / 1024, 2) AS '索引大小(MB)'
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = '数据库名'
GROUP BY
TABLE_SCHEMA;
查询所有数据库的空间占用#
SELECT
TABLE_SCHEMA AS '数据库名',
ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)',
COUNT(TABLE_NAME) AS '表数量'
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
GROUP BY
TABLE_SCHEMA
ORDER BY
SUM(DATA_LENGTH + INDEX_LENGTH) DESC;
查询指定数据库中各表的大小#
SELECT
TABLE_NAME AS '表名',
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)',
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS '数据大小(MB)',
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS '索引大小(MB)',
TABLE_ROWS AS '行数'
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = '数据库名'
ORDER BY
(DATA_LENGTH + INDEX_LENGTH) DESC;
字段说明#
| 字段 | 说明 |
|---|---|
总大小(MB) | 表和索引占用的总空间 |
数据大小(MB) | 表数据占用的空间 |
索引大小(MB) | 索引占用的空间 |
ROUND(..., 2) | 结果保留两位小数 |
使用场景#
- ✅ 监控数据库空间使用情况
- ✅ 评估数据增长趋势
- ✅ 优化存储空间分配
- ✅ 识别需要归档的大表
- ✅ 容量规划和预警
📈 业务进度跟踪#
链条数据库进度查询#
查询表:ENTERPRISE_BIZ_ITEMNODE
此表用于跟踪链条数据库中的业务流程进度状态。
常用查询示例#
-- 查询指定业务的进度
SELECT
item_id AS 业务ID,
node_name AS 节点名称,
status AS 状态,
create_time AS 创建时间,
update_time AS 更新时间
FROM
ENTERPRISE_BIZ_ITEMNODE
WHERE
item_id = '业务ID'
ORDER BY
create_time;
🗺️ 区域办件量统计#
各区域按年度办件量汇总#
适用场景:统计指定业务在各区县/旗的每年办理总量,并按行政区划固定顺序排列,便于横向对比分析。
涉及表:ENTERPRISE_BUSINESS_INDEX
完整查询语句#
-- 各区域办件量统计
SELECT
REGION_NAME AS 区划名称,
TO_CHAR(ACCEPT_TIME, 'YYYY') AS 办理年度,
COUNT(*) AS 办件总量
FROM
ENTERPRISE_BUSINESS_INDEX
WHERE
APPLY_SUBJECT LIKE '%业务名称%'
-- 日期区间筛选
AND ACCEPT_TIME >= DATE '2019-01-01'
AND ACCEPT_TIME < DATE '2027-01-01'
-- 排除无效空数据
AND ACCEPT_TIME IS NOT NULL
AND REGION_NAME IS NOT NULL
AND APPLY_SUBJECT IS NOT NULL
GROUP BY
REGION_NAME,
TO_CHAR(ACCEPT_TIME, 'YYYY')
-- 按照指定区县顺序固定排序,同区划按年度升序
ORDER BY
CASE REGION_NAME
WHEN '集宁区' THEN 1
WHEN '丰镇市' THEN 2
WHEN '察右前旗' THEN 3
WHEN '察右中旗' THEN 4
WHEN '察哈尔右翼后旗' THEN 5
WHEN '四子王旗' THEN 6
WHEN '卓资县' THEN 7
WHEN '凉城县' THEN 8
WHEN '兴和县' THEN 9
WHEN '商都县' THEN 10
WHEN '化德县' THEN 11
WHEN '乌兰察布市' THEN 12
ELSE 99
END ASC,
办理年度 ASC;
字段说明#
| 字段 | 说明 |
|---|---|
REGION_NAME | 区划名称,对应各旗县市区 |
ACCEPT_TIME | 业务受理时间,用于年度分组和日期筛选 |
APPLY_SUBJECT | 业务名称,使用 LIKE 模糊匹配目标业务 |
COUNT(*) | 该区划该年度的办件总数 |
使用说明#
1. 替换业务名称
将 '%业务名称%' 中的 业务名称 替换为实际要统计的业务,例如:
APPLY_SUBJECT LIKE '%食品经营许可%'
2. 调整日期区间
根据实际统计需求修改起止日期:
-- 仅统计 2023-2025 年
AND ACCEPT_TIME >= DATE '2023-01-01'
AND ACCEPT_TIME < DATE '2026-01-01'
3. 修改排序区划
CASE REGION_NAME 中的区划顺序可按需调整,未在列表中的区划统一排在末尾(ELSE 99)。
4. 扩展统计维度
如需同时统计多个业务,可去掉 APPLY_SUBJECT 过滤条件,并将其加入 GROUP BY:
SELECT
REGION_NAME AS 区划名称,
APPLY_SUBJECT AS 业务名称,
TO_CHAR(ACCEPT_TIME, 'YYYY') AS 办理年度,
COUNT(*) AS 办件总量
FROM
ENTERPRISE_BUSINESS_INDEX
WHERE
ACCEPT_TIME >= DATE '2019-01-01'
AND ACCEPT_TIME < DATE '2027-01-01'
AND ACCEPT_TIME IS NOT NULL
AND REGION_NAME IS NOT NULL
AND APPLY_SUBJECT IS NOT NULL
GROUP BY
REGION_NAME,
APPLY_SUBJECT,
TO_CHAR(ACCEPT_TIME, 'YYYY')
ORDER BY
CASE REGION_NAME
WHEN '集宁区' THEN 1
WHEN '丰镇市' THEN 2
WHEN '察右前旗' THEN 3
WHEN '察右中旗' THEN 4
WHEN '察哈尔右翼后旗' THEN 5
WHEN '四子王旗' THEN 6
WHEN '卓资县' THEN 7
WHEN '凉城县' THEN 8
WHEN '兴和县' THEN 9
WHEN '商都县' THEN 10
WHEN '化德县' THEN 11
WHEN '乌兰察布市' THEN 12
ELSE 99
END ASC,
业务名称 ASC,
办理年度 ASC;
使用场景#
- ✅ 统计各旗县某项业务每年的办理量
- ✅ 生成区域年度对比报表
- ✅ 排查各区域业务受理差异
- ✅ 为政务服务考核提供数据支撑
📊 一件事业务统计#
统计多分类一件事业务总量#
适用场景:按业务类型分类统计各类"一件事"业务的总办件量,便于了解不同一件事业务的办理情况。
涉及表:ENTERPRISE_BUSINESS_INDEX
完整查询语句#
-- 统计多分类一件事业务总量
SELECT
CASE
WHEN FORM_NAME LIKE '%健康%' THEN '健康证一件事'
WHEN FORM_NAME LIKE '%道路%' THEN '出租车换证一件事'
WHEN FORM_NAME LIKE '%水电%' THEN '房产交易与水电暖气过户一件事'
WHEN FORM_NAME LIKE '%公租%' THEN '公租房承租资格确认一件事'
WHEN FORM_NAME LIKE '%公共%' THEN '公共场所卫生许可一件事'
WHEN FORM_NAME LIKE '%创业%' THEN '创业担保贷款一件事'
END AS 业务分类,
COUNT(*) AS 总数量
FROM
ENTERPRISE_BUSINESS_INDEX
WHERE
(FORM_NAME LIKE '%健康%'
OR FORM_NAME LIKE '%道路%'
OR FORM_NAME LIKE '%水电%'
OR FORM_NAME LIKE '%公租%'
OR FORM_NAME LIKE '%公共%'
OR FORM_NAME LIKE '%创业%')
AND ACCEPT_TIME >= DATE '2019-01-01'
AND ACCEPT_TIME < DATE '2027-01-01'
AND ACCEPT_TIME IS NOT NULL
AND REGION_NAME IS NOT NULL
AND FORM_NAME IS NOT NULL
GROUP BY
CASE
WHEN FORM_NAME LIKE '%健康%' THEN '健康证一件事'
WHEN FORM_NAME LIKE '%道路%' THEN '出租车换证一件事'
WHEN FORM_NAME LIKE '%水电%' THEN '房产交易与水电暖气过户一件事'
WHEN FORM_NAME LIKE '%公租%' THEN '公租房承租资格确认一件事'
WHEN FORM_NAME LIKE '%公共%' THEN '公共场所卫生许可一件事'
WHEN FORM_NAME LIKE '%创业%' THEN '创业担保贷款一件事'
END
ORDER BY 业务分类;
字段说明#
| 字段 | 说明 |
|---|---|
FORM_NAME | 表单名称,用于匹配不同类型的一件事业务 |
业务分类 | 通过 CASE WHEN 将表单名称映射为具体的一件事类型 |
总数量 | 该类型一件事业务的总办件量 |
ACCEPT_TIME | 业务受理时间,用于日期筛选 |
业务分类说明#
| 匹配关键字 | 业务分类名称 |
|---|---|
%健康% | 健康证一件事 |
%道路% | 出租车换证一件事 |
%水电% | 房产交易与水电暖气过户一件事 |
%公租% | 公租房承租资格确认一件事 |
%公共% | 公共场所卫生许可一件事 |
%创业% | 创业担保贷款一件事 |
使用说明#
1. 调整日期区间
根据实际统计需求修改起止日期:
-- 仅统计 2023-2025 年
AND ACCEPT_TIME >= DATE '2023-01-01'
AND ACCEPT_TIME < DATE '2026-01-01'
2. 新增业务类型
如需统计更多一件事类型,在 CASE WHEN 和 WHERE 条件中添加:
-- 在 CASE WHEN 中添加
WHEN FORM_NAME LIKE '%餐饮%' THEN '餐饮开店一件事'
-- 在 WHERE 条件中添加
OR FORM_NAME LIKE '%餐饮%'
3. 添加年度维度
如需按年度统计各一件事业务量:
SELECT
CASE
WHEN FORM_NAME LIKE '%健康%' THEN '健康证一件事'
WHEN FORM_NAME LIKE '%道路%' THEN '出租车换证一件事'
WHEN FORM_NAME LIKE '%水电%' THEN '房产交易与水电暖气过户一件事'
WHEN FORM_NAME LIKE '%公租%' THEN '公租房承租资格确认一件事'
WHEN FORM_NAME LIKE '%公共%' THEN '公共场所卫生许可一件事'
WHEN FORM_NAME LIKE '%创业%' THEN '创业担保贷款一件事'
END AS 业务分类,
TO_CHAR(ACCEPT_TIME, 'YYYY') AS 办理年度,
COUNT(*) AS 总数量
FROM
ENTERPRISE_BUSINESS_INDEX
WHERE
(FORM_NAME LIKE '%健康%'
OR FORM_NAME LIKE '%道路%'
OR FORM_NAME LIKE '%水电%'
OR FORM_NAME LIKE '%公租%'
OR FORM_NAME LIKE '%公共%'
OR FORM_NAME LIKE '%创业%')
AND ACCEPT_TIME >= DATE '2019-01-01'
AND ACCEPT_TIME < DATE '2027-01-01'
AND ACCEPT_TIME IS NOT NULL
AND REGION_NAME IS NOT NULL
AND FORM_NAME IS NOT NULL
GROUP BY
CASE
WHEN FORM_NAME LIKE '%健康%' THEN '健康证一件事'
WHEN FORM_NAME LIKE '%道路%' THEN '出租车换证一件事'
WHEN FORM_NAME LIKE '%水电%' THEN '房产交易与水电暖气过户一件事'
WHEN FORM_NAME LIKE '%公租%' THEN '公租房承租资格确认一件事'
WHEN FORM_NAME LIKE '%公共%' THEN '公共场所卫生许可一件事'
WHEN FORM_NAME LIKE '%创业%' THEN '创业担保贷款一件事'
END,
TO_CHAR(ACCEPT_TIME, 'YYYY')
ORDER BY
业务分类 ASC,
办理年度 ASC;
使用场景#
- ✅ 统计各类一件事业务的总办件量
- ✅ 对比不同一件事业务的受欢迎程度
- ✅ 分析一件事改革实施效果
- ✅ 为政务服务优化提供数据支撑
- ✅ 生成一件事业务统计报表
📚 相关资源#
🔄 更新日志#
- 2026-04-01:新增一件事业务统计 SQL
- 2026-02-27:新增 MySQL 空间查询、优化文档结构
- 2024-06-01:初始版本,包含基础操作

