You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:48:01