Oracle DB 19c测试备份工具时如何快速生成archivelog归档日志
可以通过人工构造负载快速生成Oracle 19c归档日志
完全可以,这是测试备份/归档策略时的常用操作,以下是具体实现步骤和注意事项:
前提验证
先确认数据库处于归档模式,执行以下SQL查询:select log_mode from v$database;
如果返回ARCHIVELOG即可继续操作,如果是非归档模式需要先切换到归档模式。
快速生成redo并转为归档的方法
方法1:临时表批量更新生成redo(最简便,不产生持久垃圾数据)
执行以下PL/SQL块即可快速产生大量redo,可调整循环次数控制生成日志总量:
DECLARE v_cnt NUMBER := 0; BEGIN -- 创建事务级临时表,提交后自动清空数据 EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_redo_gen (col1 VARCHAR2(4000), col2 VARCHAR2(4000)) ON COMMIT DELETE ROWS'; FOR i IN 1..100000 LOOP INSERT INTO tmp_redo_gen VALUES (RPAD('X', 4000, 'X'), RPAD('Y', 4000, 'Y')); UPDATE tmp_redo_gen SET col1 = RPAD('Z', 4000, 'Z') WHERE ROWNUM = 1; v_cnt := v_cnt + 1; -- 每1000次提交一次,避免undo表空间占用过高 IF MOD(v_cnt, 1000) = 0 THEN COMMIT; END IF; END LOOP; COMMIT; EXECUTE IMMEDIATE 'DROP TABLE tmp_redo_gen PURGE'; END; /
方法2:手动切换日志文件触发归档
如果只需要快速生成指定数量的归档文件、对单归档文件大小无要求,可以直接执行redo切换命令,将当前未写满的redo日志直接推送为归档:
- 单次切换命令:
alter system switch logfile; - 批量切换(以下示例生成20个归档文件,可自行调整循环次数):
BEGIN FOR i IN 1..20 LOOP EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE'; END LOOP; END; /
注意:该方式生成的归档文件大小和当前正在写入的redo日志已使用大小一致,适合需要快速凑归档数量的测试场景
生成指定大小归档的控制技巧
- 先查询当前redo log组的单组大小:
select group#, bytes/1024/1024 size_mb from v$log;,每组redo写满后就会自动触发归档,你可以根据单组大小计算需要生成多少组redo即可达到目标总大小 - 如果需要更大的单归档文件,可以先调整redo log组大小再生成负载,避免产生过多小归档文件
注意事项
- 操作前确认归档目的地空间充足,避免占满磁盘导致业务挂起(纯测试环境无业务可忽略)
- 生成过程中可以随时查询归档生成进度:
select count(*) archive_count, sum(blocks*block_size)/1024/1024 total_size_mb from v$archived_log where first_time >= sysdate - 1/24; - 测试完成后如果要清理测试产生的归档,用RMAN执行
delete archivelog all completed before 'sysdate - 1/24';即可
内容的提问来源于stack exchange,提问作者user3462083
相关产品推荐
相关产品推荐

