本文档风哥主要介绍Oracle数据库静默(Database Quiesce)相关知识,包括数据库静默的概念、类型、优势、规划、操作、管理、监控、优化等内容,由风哥教程参考Oracle官方文档Performance内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 数据库静默的概念
Oracle数据库静默(Database Quiesce)是一种数据库状态,用于暂停数据库的活动,只允许具有DBA权限的用户访问数据库。在静默状态下,所有非DBA用户的活动会话会被挂起,新的非DBA用户连接会被拒绝,直到数据库被取消静默。更多视频教程www.fgedu.net.cn
- 暂停非DBA用户的活动
- 只允许DBA用户访问数据库
- 新的非DBA用户连接会被拒绝
- 已有的非DBA用户会话会被挂起
- 适合进行维护操作
1.2 数据库静默的类型
Oracle数据库静默主要有以下类型:
- 正常静默(Normal Quiesce):暂停所有非DBA用户的活动,允许DBA用户继续操作
- 立即静默(Immediate Quiesce):立即暂停所有非DBA用户的活动,不等待事务完成
- 事务级静默(Transaction-level Quiesce):等待非DBA用户的事务完成后再静默
1.3 数据库静默的优势
Oracle数据库静默的优势:
- 维护操作安全:在静默状态下进行维护操作,避免用户干扰
- 性能影响最小:只暂停非DBA用户的活动,DBA用户可以继续工作
- 快速恢复:取消静默后,数据库立即恢复正常状态
- 灵活性:可以根据需要选择不同的静默类型
- 易于管理:通过简单的命令实现静默和取消静默
Part02-生产环境规划与建议
2.1 数据库静默规划
Oracle数据库静默规划要点:
1. 确定维护操作类型和时间
2. 通知相关用户和应用
3. 选择合适的静默类型
4. 准备回滚方案
5. 实施静默操作
6. 执行维护操作
7. 取消静默
8. 验证数据库状态
# 维护操作类型
– 数据库补丁安装
– 数据库升级
– 数据库配置更改
– 表空间维护
– 索引重建
– 统计信息收集
– 数据库备份
# 静默时间选择
– 低峰期
– 维护窗口
– 非业务时间
– 提前通知用户
2.2 数据库静默设计
Oracle数据库静默设计建议:
– 基于维护操作类型设计
– 基于业务需求设计
– 基于时间窗口设计
– 最小化对业务的影响
– 确保操作的安全性
# 静默类型选择
– 正常静默:适合需要等待事务完成的维护操作
– 立即静默:适合紧急维护操作
– 事务级静默:适合对事务完整性要求较高的维护操作
# 静默操作流程
1. 通知用户和应用
2. 检查数据库状态
3. 执行静默操作
4. 验证静默状态
5. 执行维护操作
6. 取消静默
7. 验证数据库恢复正常
2.3 数据库静默最佳实践
Oracle数据库静默最佳实践:
- 提前通知:提前通知用户和应用维护时间
- 选择合适时间:在低峰期或维护窗口进行静默
- 选择合适类型:根据维护操作类型选择合适的静默类型
- 准备回滚方案:准备好回滚方案,以防出现问题
- 验证静默状态:静默后验证数据库状态
- 监控维护操作:监控维护操作的执行情况
- 及时取消静默:维护完成后及时取消静默
- 验证恢复:取消静默后验证数据库恢复正常
Part03-生产环境项目实施方案
3.1 数据库静默操作
3.1.1 执行数据库静默
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
System altered.
# 执行立即静默
SQL> ALTER SYSTEM QUIESCE RESTRICTED IMMEDIATE;
System altered.
# 验证静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCED
# 检查静默状态详情
SQL> SELECT
username,
sid,
serial#,
status
FROM v$session
WHERE username IS NOT NULL
ORDER BY status;
USERNAME SID SERIAL# STATUS
———- ———- ———- ——–
SYS 123 456 ACTIVE
SCOTT 789 101 SNIPED
3.1.2 取消数据库静默
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
# 验证取消静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
NORMAL
# 检查会话状态
SQL> SELECT
username,
sid,
serial#,
status
FROM v$session
WHERE username IS NOT NULL
ORDER BY status;
USERNAME SID SERIAL# STATUS
———- ———- ———- ——–
SYS 123 456 ACTIVE
SCOTT 789 101 ACTIVE
3.2 数据库静默管理
3.2.1 管理静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCED
# 检查被挂起的会话
SQL> SELECT
username,
sid,
serial#,
status,
event
FROM v$session
WHERE status = ‘SNIPED’;
USERNAME SID SERIAL# STATUS EVENT
———- ———- ———- ——– ——————————
SCOTT 789 101 SNIPED SQL*Net message from client
# 终止长时间挂起的会话(如果需要)
SQL> ALTER SYSTEM KILL SESSION ‘789,101’;
System altered.
3.2.2 处理静默过程中的问题
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
# 如果静默操作超时,可以尝试立即静默
SQL> ALTER SYSTEM QUIESCE RESTRICTED IMMEDIATE;
# 处理取消静默失败
SQL> ALTER SYSTEM UNQUIESCE;
# 如果取消静默失败,可以尝试重启数据库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
3.3 数据库静默监控
3.3.1 监控数据库静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCED
# 监控会话状态
SQL> SELECT
username,
sid,
serial#,
status,
event,
seconds_in_wait
FROM v$session
WHERE username IS NOT NULL
ORDER BY status, seconds_in_wait DESC;
USERNAME SID SERIAL# STATUS EVENT SECONDS_IN_WAIT
———- ———- ———- ——– —————————— —————
SYS 123 456 ACTIVE SQL*Net message from client 0
SCOTT 789 101 SNIPED SQL*Net message from client 120
# 监控数据库活动
SQL> SELECT
stat_name,
value
FROM v$sysstat
WHERE stat_name IN (‘logons current’, ‘user commits’, ‘user rollbacks’);
STAT_NAME VALUE
—————————————- ———-
logons current 10
user commits 1234
user rollbacks 123
# 监控维护操作进度
SQL> SELECT
sid,
serial#,
opname,
target,
sofar,
totalwork,
ROUND(sofar/totalwork*100, 2) AS progress
FROM v$session_longops
WHERE opname NOT LIKE ‘%aggregate%’
ORDER BY start_time DESC;
SID SERIAL# OPNAME TARGET SOFAR TOTALWORK PROGRESS
———- ———- ———————————– ——————– ———- ———- ———-
123 456 Table Scan SCOTT.EMP 100 100 100
Part04-生产案例与实战讲解
4.1 数据库静默实施案例
在某企业的生产环境中,需要进行数据库补丁安装,使用数据库静默确保安装过程的安全。
– 数据库版本:Oracle 19c
– 维护操作:安装PSU补丁
– 维护窗口:周末凌晨2:00-4:00
– 影响范围:所有非DBA用户
# 实施方案
1. 提前通知用户
– 发送邮件通知所有用户维护时间
– 在应用系统发布维护公告
– 确保业务部门了解维护计划
2. 准备工作
– 备份数据库
– 准备补丁文件
– 检查数据库状态
– 准备回滚方案
3. 执行数据库静默
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
System altered.
4. 验证静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCED
5. 执行补丁安装
$ opatch apply /path/to/patch
6. 验证补丁安装
$ opatch lsinventory
7. 取消数据库静默
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
8. 验证数据库状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
NORMAL
SQL> SELECT status FROM v$instance;
STATUS
————
OPEN
9. 验证应用连接
– 测试应用连接数据库
– 执行基本业务操作
– 检查数据库性能
# 实施效果
– 补丁安装顺利完成
– 数据库恢复正常
– 应用连接正常
– 业务无影响
4.2 数据库静默优化案例
在某金融机构的生产环境中,需要进行表空间维护,使用数据库静默优化维护过程。
– 数据库版本:Oracle 12c
– 维护操作:表空间扩展和碎片整理
– 维护窗口:工作日晚上10:00-12:00
– 影响范围:所有非DBA用户
# 优化方案
1. 提前准备
– 分析表空间使用情况
– 确定需要扩展的表空间
– 准备维护脚本
– 通知相关用户
2. 执行数据库静默(选择立即静默)
SQL> ALTER SYSTEM QUIESCE RESTRICTED IMMEDIATE;
System altered.
3. 执行表空间维护
# 扩展表空间
SQL> ALTER TABLESPACE users ADD DATAFILE ‘/oradata/fgedudb/users02.dbf’ SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;
# 整理表空间碎片
SQL> ALTER TABLESPACE users COALESCE;
# 重建索引
SQL> ALTER INDEX scott.emp_pk REBUILD;
4. 取消数据库静默
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
5. 验证维护效果
# 检查表空间使用情况
SQL> SELECT
tablespace_name,
bytes/1024/1024 AS size_mb,
free_bytes/1024/1024 AS free_mb,
(free_bytes/bytes)*100 AS free_percent
FROM (
SELECT
tablespace_name,
SUM(bytes) AS bytes,
SUM(CASE WHEN status = ‘AVAILABLE’ THEN bytes ELSE 0 END) AS free_bytes
FROM dba_data_files
GROUP BY tablespace_name
);
# 检查索引状态
SQL> SELECT
index_name,
status
FROM dba_indexes
WHERE owner = ‘SCOTT’;
# 优化效果
– 表空间扩展成功
– 碎片整理完成
– 索引重建成功
– 数据库恢复正常
– 应用连接正常
– 维护时间缩短30%
4.3 数据库静默问题处理
在某电商网站的生产环境中,数据库静默操作出现问题,导致维护操作无法正常进行。
– 执行数据库静默操作后,数据库状态未变为QUIESCED
– 维护操作无法正常进行
– 应用连接被挂起
# 分析步骤
1. 检查数据库静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCING
2. 检查会话状态
SQL> SELECT
username,
sid,
serial#,
status,
event,
seconds_in_wait
FROM v$session
WHERE username IS NOT NULL
ORDER BY status, seconds_in_wait DESC;
USERNAME SID SERIAL# STATUS EVENT SECONDS_IN_WAIT
———- ———- ———- ——– —————————— —————
SYS 123 456 ACTIVE SQL*Net message from client 0
SCOTT 789 101 ACTIVE DB file sequential read 300
3. 检查长时间运行的事务
SQL> SELECT
username,
sid,
serial#,
start_time,
status,
sql_id
FROM v$transaction t,
v$session s
WHERE t.ses_addr = s.saddr;
USERNAME SID SERIAL# START_TIME STATUS SQL_ID
———- ———- ———- ——————- ——– ————-
SCOTT 789 101 2026-03-31 22:00:00 ACTIVE abc123
# 问题原因
– 有长时间运行的事务(SCOTT用户)
– 数据库正在等待事务完成
– 静默操作无法完成
# 解决方案
1. 终止长时间运行的事务
SQL> ALTER SYSTEM KILL SESSION ‘789,101’;
System altered.
2. 验证静默状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
QUIESCED
3. 执行维护操作
# 执行维护脚本
SQL> @/path/to/maintenance.sql
4. 取消数据库静默
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
5. 验证数据库状态
SQL> SELECT active_state FROM v$instance;
ACTIVE_STATE
————
NORMAL
# 解决效果
– 静默操作成功完成
– 维护操作顺利执行
– 数据库恢复正常
– 应用连接正常
Part05-风哥经验总结与分享
5.1 数据库静默管理经验
Oracle数据库静默管理经验:
- 提前规划:基于维护操作类型和业务需求规划静默操作
- 选择合适时间:在低峰期或维护窗口进行静默
- 选择合适类型:根据维护操作类型选择合适的静默类型
- 提前通知:提前通知用户和应用维护时间
- 准备充分:备份数据库,准备回滚方案
- 监控执行:监控静默操作和维护操作的执行情况
- 及时取消:维护完成后及时取消静默
- 验证恢复:取消静默后验证数据库恢复正常
5.2 数据库静默检查清单
– [ ] 确定维护操作类型和时间
– [ ] 通知相关用户和应用
– [ ] 备份数据库
– [ ] 准备维护脚本和回滚方案
– [ ] 选择合适的静默类型
– [ ] 执行静默操作
– [ ] 验证静默状态
– [ ] 执行维护操作
– [ ] 监控维护操作进度
– [ ] 取消静默
– [ ] 验证数据库恢复正常
– [ ] 验证应用连接
# 数据库静默问题处理流程
1. 发现静默操作问题
2. 收集数据库状态信息
3. 分析问题原因
4. 制定解决方案
5. 实施解决方案
6. 验证问题解决
7. 继续维护操作
8. 总结经验,优化流程
5.3 数据库静默管理工具
Oracle数据库静默管理常用工具:
- ALTER SYSTEM QUIESCE/UNQUIESCE:执行静默和取消静默操作
- v$instance:查看数据库静默状态
- v$session:查看会话状态
- v$transaction:查看事务状态
- v$session_longops:监控长时间运行的操作
- v$sysstat:查看系统统计信息
- Oracle Enterprise Manager:图形化静默管理
- SQL*Plus:执行静默和取消静默命令
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
