yashandb教程FG179-YashanDB日志切换优化
本文档风哥主要介绍YashanDB日志切换优化的相关知识,包括日志切换的概念、日志结构、日志参数、规划策略、配置方法、监控管理等内容,风哥教程参考YashanDB官方文档日志管理相关内容编写,适合DBA人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 日志切换概念
日志切换是指数据库从当前重做日志文件切换到下一个重做日志文件的过程。当日志文件被写满或手动触发切换时,数据库会执行日志切换操作,确保事务的持久性和数据的一致性。
- 确保事务的持久性:将事务的重做信息写入日志文件
- 提供数据恢复能力:在数据库崩溃时用于恢复数据
- 控制日志文件大小:避免日志文件过大导致管理困难
- 影响数据库性能:频繁的日志切换可能影响数据库性能
1.2 YashanDB日志结构
YashanDB的日志结构主要包括:
- 重做日志文件(Redo Log Files):记录所有数据修改操作,包括:
- 在线重做日志文件:用于实时记录事务
- 归档重做日志文件:在线日志文件被切换后,通过归档进程生成
- 重做日志组(Redo Log Groups):由多个重做日志文件组成,每个组至少包含一个重做日志文件
- 重做日志缓冲区(Redo Log Buffer):内存中的缓冲区,用于临时存储重做信息
1.3 YashanDB日志参数
YashanDB的主要日志参数包括:
– log_buffer:重做日志缓冲区大小
– log_checkpoint_interval:检查点间隔(以OS块为单位)
– log_checkpoint_timeout:检查点超时(以秒为单位)
– log_archive_dest_1:归档日志目标位置
– log_archive_format:归档日志文件名格式
– log_archive_max_processes:归档进程数量
– log_archive_min_succeed_dest:成功归档的最小目标数
# 日志切换参数
– log_switch_interval:日志切换间隔(以秒为单位)
– log_file_size:日志文件大小
– log_groups:日志组数量
– log_files_per_group:每个日志组的文件数量
# 归档模式参数
– log_archive_start:是否自动启动归档进程
– log_archive_mode:归档模式(ARCHIVELOG或NOARCHIVELOG)
Part02-生产环境规划与建议
2.1 YashanDB日志切换规划
YashanDB日志切换规划要点:
1. 评估业务需求:了解业务的事务量和数据修改频率
2. 确定日志文件大小:根据事务量和切换频率确定
3. 确定日志组数量:确保至少有3个日志组
4. 配置归档模式:根据恢复需求确定是否启用归档
5. 配置归档目标:确定归档日志的存储位置
6. 监控和调整:定期监控日志切换情况并调整
# 日志文件大小建议
– 小型数据库(<10GB):50-100MB
– 中型数据库(10GB-100GB):200-500MB
– 大型数据库(>100GB):500MB-2GB
# 日志组数量建议
– 最少3个日志组
– 每个日志组至少1个日志文件
– 建议配置3-5个日志组
# 注意事项
– 避免日志文件过小:导致频繁的日志切换
– 避免日志文件过大:导致恢复时间过长
– 确保日志文件分布在不同的磁盘上:提高I/O性能
– 配置足够的归档空间:避免归档空间不足
2.2 YashanDB日志切换策略
YashanDB日志切换策略建议:
– 基于大小的切换:当日志文件写满时自动切换
– 基于时间的切换:当达到指定时间间隔时自动切换
– 手动切换:通过命令手动触发切换
– 检查点触发:当达到检查点时触发切换
# 归档策略
– 本地归档:将归档日志存储在本地磁盘
– 远程归档:将归档日志存储在远程服务器
– 多路归档:将归档日志存储在多个位置
– 压缩归档:对归档日志进行压缩存储
# 监控策略
– 监控日志切换频率:确保切换频率合理
– 监控归档状态:确保归档正常进行
– 监控日志文件大小:确保日志文件大小适当
– 监控检查点完成情况:确保检查点正常完成
# 备份策略
– 定期备份归档日志:确保归档日志的安全
– 保留足够的归档日志:满足恢复需求
– 制定归档日志清理策略:避免归档空间不足
2.3 YashanDB日志切换考虑
YashanDB日志切换考虑:
- 事务量:根据业务的事务量调整日志文件大小和数量
- 系统性能:考虑日志切换对系统性能的影响
- 恢复需求:根据恢复时间目标调整日志配置
- 存储容量:确保有足够的存储空间用于日志文件和归档日志
- I/O性能:将日志文件分布在不同的磁盘上以提高I/O性能
- 备份策略:与备份策略配合,确保数据的安全性
- 监控需求:建立完善的日志监控机制
- 合规要求:根据合规要求调整日志配置
Part03-生产环境项目实施方案
3.1 YashanDB日志切换配置
3.1.1 YashanDB重做日志文件配置
SELECT group#, member, bytes/1024/1024 “Size (MB)” FROM v$logfile;
— 输出结果
GROUP# MEMBER Size (MB)
———- ————————————- ———-
1 /yashandb/fgdata/fgedudb/redo01.log 50
2 /yashandb/fgdata/fgedudb/redo02.log 50
3 /yashandb/fgdata/fgedudb/redo03.log 50
— 步骤2:增加重做日志组
ALTER DATABASE ADD LOGFILE GROUP 4 ‘/yashandb/fgdata/fgedudb/redo04.log’ SIZE 500M;
ALTER DATABASE ADD LOGFILE GROUP 5 ‘/yashandb/fgdata/fgedudb/redo05.log’ SIZE 500M;
— 步骤3:调整重做日志文件大小
— 注意:需要先删除旧的日志组,然后创建新的日志组
— 切换日志到其他组
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
— 删除旧的日志组
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
— 创建新的日志组
ALTER DATABASE ADD LOGFILE GROUP 1 ‘/yashandb/fgdata/fgedudb/redo01.log’ SIZE 500M;
ALTER DATABASE ADD LOGFILE GROUP 2 ‘/yashandb/fgdata/fgedudb/redo02.log’ SIZE 500M;
ALTER DATABASE ADD LOGFILE GROUP 3 ‘/yashandb/fgdata/fgedudb/redo03.log’ SIZE 500M;
— 步骤4:验证重做日志配置
SELECT group#, member, bytes/1024/1024 “Size (MB)” FROM v$logfile;
— 输出结果
GROUP# MEMBER Size (MB)
———- ————————————- ———-
1 /yashandb/fgdata/fgedudb/redo01.log 500
2 /yashandb/fgdata/fgedudb/redo02.log 500
3 /yashandb/fgdata/fgedudb/redo03.log 500
4 /yashandb/fgdata/fgedudb/redo04.log 500
5 /yashandb/fgdata/fgedudb/redo05.log 500
— 步骤5:配置日志切换间隔
ALTER SYSTEM SET log_switch_interval = 3600 SCOPE=SPFILE;
— 步骤6:重启数据库使配置生效
SHUTDOWN IMMEDIATE;
STARTUP;
— 步骤7:验证配置
SHOW PARAMETER log_switch_interval;
— 输出结果
NAME TYPE VALUE
———————————— ———– ——————————
log_switch_interval integer 3600
3.1.2 YashanDB归档模式配置
SELECT log_mode FROM v$database;
— 输出结果
LOG_MODE
————
NOARCHIVELOG
— 步骤2:启用归档模式
— 关闭数据库
SHUTDOWN IMMEDIATE;
— 启动数据库到挂载状态
STARTUP MOUNT;
— 启用归档模式
ALTER DATABASE ARCHIVELOG;
— 打开数据库
ALTER DATABASE OPEN;
— 步骤3:配置归档目标
ALTER SYSTEM SET log_archive_dest_1 = ‘LOCATION=/yashandb/archive’ SCOPE=SPFILE;
— 步骤4:配置归档日志格式
ALTER SYSTEM SET log_archive_format = ‘arch_%t_%s_%r.log’ SCOPE=SPFILE;
— 步骤5:配置归档进程数量
ALTER SYSTEM SET log_archive_max_processes = 4 SCOPE=SPFILE;
— 步骤6:重启数据库使配置生效
SHUTDOWN IMMEDIATE;
STARTUP;
— 步骤7:验证归档配置
SELECT log_mode FROM v$database;
SHOW PARAMETER log_archive_dest_1;
SHOW PARAMETER log_archive_format;
SHOW PARAMETER log_archive_max_processes;
— 输出结果
LOG_MODE
————
ARCHIVELOG
NAME TYPE VALUE
———————————— ———– ——————————
log_archive_dest_1 string LOCATION=/yashandb/archive
NAME TYPE VALUE
———————————— ———– ——————————
log_archive_format string arch_%t_%s_%r.log
NAME TYPE VALUE
———————————— ———– ——————————
log_archive_max_processes integer 4
3.2 YashanDB日志切换监控
3.2.1 YashanDB日志切换监控
SELECT sequence#, first_time, next_time, status FROM v$log;
— 输出结果
SEQUENCE# FIRST_TIME NEXT_TIME STATUS
———- ——————- ——————- ——–
1 2025-01-22 10:00:00 2025-01-22 10:30:00 INACTIVE
2 2025-01-22 10:30:00 2025-01-22 11:00:00 INACTIVE
3 2025-01-22 11:00:00 2025-01-22 11:30:00 INACTIVE
4 2025-01-22 11:30:00 2025-01-22 12:00:00 INACTIVE
5 2025-01-22 12:00:00 CURRENT
— 步骤2:查看日志切换频率
SELECT to_char(first_time, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Switch Count”
FROM v$log_history
GROUP BY to_char(first_time, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Switch Count
———— ————
2025-01-22 10 2
2025-01-22 11 2
2025-01-22 12 1
— 步骤3:查看归档状态
SELECT dest_name, status, error FROM v$archive_dest;
— 输出结果
DEST_NAME STATUS ERROR
———————— ——— ——————–
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 INACTIVE
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
— 步骤4:查看检查点完成情况
SELECT checkpoint_change#, checkpoint_time FROM v$database;
— 输出结果
CHECKPOINT_CHANGE# CHECKPOINT_TIME
—————— ——————-
12345678 2025-01-22 12:00:00
— 步骤5:创建日志切换监控视图
CREATE OR REPLACE VIEW fgedu.v_log_switch_monitor AS
SELECT
SYSTIMESTAMP AS check_time,
(SELECT count(*) FROM v$log WHERE status = ‘CURRENT’) AS current_log_count,
(SELECT sequence# FROM v$log WHERE status = ‘CURRENT’) AS current_sequence,
(SELECT bytes/1024/1024 FROM v$log WHERE status = ‘CURRENT’) AS current_log_size_mb,
(SELECT count(*) FROM v$log_history WHERE first_time > SYSDATE – 1) AS switch_count_24h,
(SELECT status FROM v$archive_dest WHERE dest_name = ‘LOG_ARCHIVE_DEST_1’) AS archive_status
FROM dual;
— 步骤6:查看日志切换监控结果
SELECT * FROM fgedu.v_log_switch_monitor;
— 输出结果
CHECK_TIME CURRENT_LOG_COUNT CURRENT_SEQUENCE CURRENT_LOG_SIZE_MB SWITCH_COUNT_24H ARCHIVE_STATUS
———————————– —————– —————- ——————- —————- —————
2025-01-22 12:00:00.000000000 +08:00 1 5 500 5 VALID
3.3 YashanDB日志切换调优
3.3.1 YashanDB日志切换调优脚本
# vi /yashandb/app/scripts/log_switch_tuning.sh
#!/bin/bash
# log_switch_tuning.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 配置信息
USERNAME=”sys”
PASSWORD=”sys123″
SID=”fgedudb”
# 收集日志切换信息
sqlplus -S ${USERNAME}/${PASSWORD}@${SID} as sysdba << EOF
SPOOL /yashandb/app/scripts/log_switch_report.txt
SET LINESIZE 150
SET PAGESIZE 100
-- 日志参数
SELECT name, value FROM vparameter WHERE name LIKE '%log%';
-- 重做日志配置
SELECT group#, member, bytes/1024/1024 "Size (MB)" FROM vlogfile;
-- 日志状态
SELECT sequence#, first_time, next_time, status FROM vlog;
-- 日志切换频率
SELECT to_char(first_time, 'YYYY-MM-DD HH24') "Hour", count(*) "Switch Count"
FROM vlog_history
GROUP BY to_char(first_time, 'YYYY-MM-DD HH24')
ORDER BY "Hour";
-- 归档状态
SELECT dest_name, status, error FROM varchive_dest;
-- 检查点情况
SELECT checkpoint_change#, checkpoint_time FROM vdatabase;
-- 日志相关等待事件
SELECT event, total_waits, time_waited FROM vsystem_event WHERE event LIKE '%log%';
SPOOL OFF
EXIT;
EOF
# 分析日志切换报告
echo "Log switch tuning report generated at /yashandb/app/scripts/log_switch_report.txt"
-- 步骤2:设置脚本执行权限
chmod +x /yashandb/app/scripts/log_switch_tuning.sh
-- 步骤3:执行日志切换调优脚本
/yashandb/app/scripts/log_switch_tuning.sh
-- 输出结果
Log switch tuning report generated at /yashandb/app/scripts/log_switch_report.txt
-- 步骤4:分析日志切换报告
cat /yashandb/app/scripts/log_switch_report.txt
-- 输出结果(示例)
NAME VALUE
------------------------------------ ------------------------------
log_buffer 16777216
log_checkpoint_interval 0
log_checkpoint_timeout 1800
log_switch_interval 3600
log_archive_dest_1 LOCATION=/yashandb/archive
log_archive_format arch_%t_%s_%r.log
log_archive_max_processes 4
log_archive_mode ARCHIVELOG
GROUP# MEMBER Size (MB)
---------- ------------------------------------- ----------
1 /yashandb/fgdata/fgedudb/redo01.log 500
2 /yashandb/fgdata/fgedudb/redo02.log 500
3 /yashandb/fgdata/fgedudb/redo03.log 500
4 /yashandb/fgdata/fgedudb/redo04.log 500
5 /yashandb/fgdata/fgedudb/redo05.log 500
SEQUENCE# FIRST_TIME NEXT_TIME STATUS
---------- ------------------- ------------------- --------
1 2025-01-22 10:00:00 2025-01-22 10:30:00 INACTIVE
2 2025-01-22 10:30:00 2025-01-22 11:00:00 INACTIVE
3 2025-01-22 11:00:00 2025-01-22 11:30:00 INACTIVE
4 2025-01-22 11:30:00 2025-01-22 12:00:00 INACTIVE
5 2025-01-22 12:00:00 CURRENT
Hour Switch Count
------------ ------------
2025-01-22 10 2
2025-01-22 11 2
2025-01-22 12 1
DEST_NAME STATUS ERROR
------------------------ --------- --------------------
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 INACTIVE
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
CHECKPOINT_CHANGE# CHECKPOINT_TIME
------------------ -------------------
12345678 2025-01-22 12:00:00
EVENT TOTAL_WAITS TIME_WAITED
------------------------------------ ----------- ------------
log file switch (archiving needed) 10 5
log file switch (checkpoint incomplete) 5 3
log file switch completion 50 25
Part04-生产案例与实战讲解
4.1 YashanDB日志文件大小优化实战
案例背景:某企业的YashanDB数据库日志文件过小,导致频繁的日志切换,影响数据库性能。
SELECT group#, member, bytes/1024/1024 “Size (MB)” FROM v$logfile;
— 输出结果
GROUP# MEMBER Size (MB)
———- ————————————- ———-
1 /yashandb/fgdata/fgedudb/redo01.log 50
2 /yashandb/fgdata/fgedudb/redo02.log 50
3 /yashandb/fgdata/fgedudb/redo03.log 50
— 步骤2:分析日志切换频率
SELECT to_char(first_time, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Switch Count”
FROM v$log_history
WHERE first_time > SYSDATE – 1
GROUP BY to_char(first_time, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Switch Count
———— ————
2025-01-22 10 12
2025-01-22 11 15
2025-01-22 12 10
— 步骤3:分析日志相关等待事件
SELECT event, total_waits, time_waited FROM v$system_event WHERE event LIKE ‘%log%’;
— 输出结果
EVENT TOTAL_WAITS TIME_WAITED
———————————— ———– ————
log file switch (archiving needed) 100 50
log file switch (checkpoint incomplete) 50 25
log file switch completion 200 100
— 步骤4:优化日志文件大小
— 切换日志到其他组
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
— 删除旧的日志组
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
— 创建新的日志组
ALTER DATABASE ADD LOGFILE GROUP 1 ‘/yashandb/fgdata/fgedudb/redo01.log’ SIZE 500M;
ALTER DATABASE ADD LOGFILE GROUP 2 ‘/yashandb/fgdata/fgedudb/redo02.log’ SIZE 500M;
ALTER DATABASE ADD LOGFILE GROUP 3 ‘/yashandb/fgdata/fgedudb/redo03.log’ SIZE 500M;
— 步骤5:验证优化结果
SELECT group#, member, bytes/1024/1024 “Size (MB)” FROM v$logfile;
— 输出结果
GROUP# MEMBER Size (MB)
———- ————————————- ———-
1 /yashandb/fgdata/fgedudb/redo01.log 500
2 /yashandb/fgdata/fgedudb/redo02.log 500
3 /yashandb/fgdata/fgedudb/redo03.log 500
— 步骤6:监控优化后的日志切换频率
SELECT to_char(first_time, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Switch Count”
FROM v$log_history
WHERE first_time > SYSDATE – 1
GROUP BY to_char(first_time, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Switch Count
———— ————
2025-01-23 10 1
2025-01-23 11 1
2025-01-23 12 1
— 步骤7:分析优化后的等待事件
SELECT event, total_waits, time_waited FROM v$system_event WHERE event LIKE ‘%log%’;
— 输出结果
EVENT TOTAL_WAITS TIME_WAITED
———————————— ———– ————
log file switch (archiving needed) 10 5
log file switch (checkpoint incomplete) 5 3
log file switch completion 30 15
4.2 YashanDB日志切换频率优化实战
案例背景:某企业的YashanDB数据库日志切换频率过高,导致系统性能下降。
SELECT to_char(first_time, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Switch Count”
FROM v$log_history
WHERE first_time > SYSDATE – 1
GROUP BY to_char(first_time, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Switch Count
———— ————
2025-01-22 10 20
2025-01-22 11 25
2025-01-22 12 18
— 步骤2:分析日志文件大小
SELECT group#, bytes/1024/1024 “Size (MB)” FROM v$log;
— 输出结果
GROUP# Size (MB)
———- ———-
1 100
2 100
3 100
— 步骤3:分析事务量
SELECT to_char(sysdate, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Transaction Count”
FROM v$transaction
WHERE start_time > SYSDATE – 1
GROUP BY to_char(sysdate, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Transaction Count
———— —————-
2025-01-22 10 10000
2025-01-22 11 12000
2025-01-22 12 9000
— 步骤4:优化日志切换频率
— 增加日志文件大小
— 切换日志到其他组
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
— 删除旧的日志组
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
— 创建新的日志组
ALTER DATABASE ADD LOGFILE GROUP 1 ‘/yashandb/fgdata/fgedudb/redo01.log’ SIZE 1000M;
ALTER DATABASE ADD LOGFILE GROUP 2 ‘/yashandb/fgdata/fgedudb/redo02.log’ SIZE 1000M;
ALTER DATABASE ADD LOGFILE GROUP 3 ‘/yashandb/fgdata/fgedudb/redo03.log’ SIZE 1000M;
— 步骤5:增加日志组数量
ALTER DATABASE ADD LOGFILE GROUP 4 ‘/yashandb/fgdata/fgedudb/redo04.log’ SIZE 1000M;
ALTER DATABASE ADD LOGFILE GROUP 5 ‘/yashandb/fgdata/fgedudb/redo05.log’ SIZE 1000M;
— 步骤6:验证优化结果
SELECT group#, bytes/1024/1024 “Size (MB)” FROM v$log;
— 输出结果
GROUP# Size (MB)
———- ———-
1 1000
2 1000
3 1000
4 1000
5 1000
— 步骤7:监控优化后的日志切换频率
SELECT to_char(first_time, ‘YYYY-MM-DD HH24’) “Hour”, count(*) “Switch Count”
FROM v$log_history
WHERE first_time > SYSDATE – 1
GROUP BY to_char(first_time, ‘YYYY-MM-DD HH24’)
ORDER BY “Hour”;
— 输出结果
Hour Switch Count
———— ————
2025-01-23 10 2
2025-01-23 11 2
2025-01-23 12 1
— 步骤8:分析优化后的系统性能
SELECT event, total_waits, time_waited FROM v$system_event WHERE event LIKE ‘%log%’;
— 输出结果
EVENT TOTAL_WAITS TIME_WAITED
———————————— ———– ————
log file switch (archiving needed) 5 2
log file switch (checkpoint incomplete) 2 1
log file switch completion 10 5
4.3 YashanDB日志归档优化实战
案例背景:某企业的YashanDB数据库归档空间不足,导致日志切换失败。
# 检查归档目录空间
df -h /yashandb/archive
— 输出结果
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 50G 48G 2.0G 96% /yashandb/archive
— 步骤2:检查归档日志数量
ls -la /yashandb/archive | wc -l
— 输出结果
1000
— 步骤3:检查归档状态
SELECT dest_name, status, error FROM v$archive_dest;
— 输出结果
DEST_NAME STATUS ERROR
———————— ——— ——————–
LOG_ARCHIVE_DEST_1 ERROR ORA-16038: log 1 sequence# 100 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 52428800 bytes disk space from 53687091200 limit
— 步骤4:优化归档配置
— 清理旧的归档日志
# 使用RMAN清理归档日志
RMAN> CONNECT TARGET /
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE ‘SYSDATE-7’;
— 输出结果
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=123 device type=DISK
List of Archived Log Copies for database with db_unique_name FGEDUDB
=====================================================================
Key Thrd Seq S Low Time
——- —- ——- – ———
1 1 1 A 2025-01-15 00:00:00
2 1 2 A 2025-01-16 00:00:00
…
900 1 900 A 2025-01-21 00:00:00
Do you really want to delete the above objects (enter YES or NO)? YES
deleted archived log
archived log file name=/yashandb/archive/arch_1_1.log RECID=1 STAMP=1234567890
deleted archived log
archived log file name=/yashandb/archive/arch_1_2.log RECID=2 STAMP=1234567891
…
deleted archived log
archived log file name=/yashandb/archive/arch_1_900.log RECID=900 STAMP=1234567892
Deleted 900 archived log files
— 步骤5:检查归档空间
df -h /yashandb/archive
— 输出结果
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 50G 8.0G 42G 17% /yashandb/archive
— 步骤6:配置归档日志清理策略
# 创建归档日志清理脚本
vi /yashandb/app/scripts/archive_cleanup.sh
#!/bin/bash
# archive_cleanup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 清理7天前的归档日志
rman target / << EOF
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
EXIT;
EOF
-- 步骤7:设置脚本执行权限
chmod +x /yashandb/app/scripts/archive_cleanup.sh
-- 步骤8:创建定时任务
crontab -e
# 每天凌晨2点执行归档日志清理
0 2 * * * /yashandb/app/scripts/archive_cleanup.sh >> /yashandb/app/scripts/archive_cleanup.log 2>&1
— 步骤9:验证归档状态
SELECT dest_name, status, error FROM v$archive_dest;
— 输出结果
DEST_NAME STATUS ERROR
———————— ——— ——————–
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 INACTIVE
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
— 步骤10:验证日志切换
ALTER SYSTEM SWITCH LOGFILE;
— 输出结果
System altered.
Part05-风哥经验总结与分享
5.1 YashanDB日志切换最佳实践
YashanDB日志切换最佳实践:
- 合理设置日志文件大小:根据事务量和切换频率确定合适的日志文件大小
- 配置足够的日志组:建议配置3-5个日志组,确保日志切换的连续性
- 启用归档模式:根据恢复需求启用归档模式
- 配置合理的归档目标:确保有足够的存储空间用于归档日志
- 定期清理归档日志:避免归档空间不足
- 监控日志切换频率:确保切换频率合理
- 监控归档状态:确保归档正常进行
- 优化检查点配置:确保检查点正常完成
5.2 YashanDB日志切换检查清单
– [ ] 日志文件大小是否合理
– [ ] 日志组数量是否足够
– [ ] 归档模式是否启用(如果需要)
– [ ] 归档目标是否配置正确
– [ ] 归档空间是否充足
– [ ] 日志切换频率是否合理
– [ ] 归档状态是否正常
– [ ] 检查点是否正常完成
– [ ] 日志相关等待事件是否过多
– [ ] 归档日志清理策略是否制定
# 日志切换配置步骤
1. 评估业务需求和事务量
2. 确定日志文件大小和数量
3. 配置日志组和日志文件
4. 启用归档模式(如果需要)
5. 配置归档目标和格式
6. 监控日志切换情况
7. 调整日志配置
8. 制定归档日志清理策略
9. 测试日志切换和归档
10. 文档记录配置和流程
# 日志切换参考值
– 日志文件大小:500MB-2GB
– 日志组数量:3-5个
– 归档空间:至少为数据库大小的2-3倍
– 日志切换频率:每小时1-2次
– 归档日志保留时间:根据恢复需求确定
5.3 YashanDB日志切换常见问题处理
YashanDB日志切换常见问题及处理方法:
– 现象:日志切换时出现错误
– 处理:检查归档空间、归档状态和日志文件权限
# 常见问题2:归档空间不足
– 现象:归档空间满,导致日志切换失败
– 处理:清理旧的归档日志,增加归档空间
# 常见问题3:日志切换频率过高
– 现象:日志切换过于频繁,影响系统性能
– 处理:增加日志文件大小,增加日志组数量
# 常见问题4:检查点未完成
– 现象:日志切换时提示检查点未完成
– 处理:调整检查点参数,优化系统性能
# 常见问题5:归档进程异常
– 现象:归档进程异常,导致归档失败
– 处理:检查归档进程状态,重启归档进程
# 常见问题6:日志文件损坏
– 现象:日志文件损坏,导致数据库无法启动
– 处理:使用备份恢复,或重建日志文件
# 常见问题7:日志文件丢失
– 现象:日志文件丢失,导致数据库无法启动
– 处理:使用备份恢复,或重建日志文件
# 常见问题8:归档日志丢失
– 现象:归档日志丢失,影响数据库恢复
– 处理:使用最近的备份进行恢复
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
