AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 279813
Accepted
jrdba123
jrdba123
Asked: 2020-11-18 01:54:34 +0800 CST2020-11-18 01:54:34 +0800 CST 2020-11-18 01:54:34 +0800 CST

Oracle 12cR2 - 映像副本备份方案

  • 772

备份类型:映像副本。

场景:我想要 1 个完整数据库 + 6 个增量备份,并在存储上保留最近 7 天的备份。

这是我的脚本:

RUN {

allocate channel c1 device type disk format '/path/%U';

allocate channel c2 device type disk format '/path/%U';

allocate channel c3 device type disk format '/path/%U';

allocate channel c4 device type disk format '/path/%U';

allocate channel c5 device type disk format '/path/%U';

allocate channel c6 device type disk format '/path/%U';

allocate channel c7 device type disk format '/path/%U';

allocate channel c8 device type disk format '/path/%U';

CROSSCHECK ARCHIVELOG ALL;

CROSSCHECK BACKUP;

CROSSCHECK BACKUPSET;

CROSSCHECK COPY;

DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

DELETE NOPROMPT EXPIRED BACKUP;

DELETE NOPROMPT EXPIRED BACKUPSET;

DELETE NOPROMPT EXPIRED COPY;

BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'my_tag_01' DATABASE;

RECOVER COPY OF DATABASE WITH TAG 'my_tag_01';

DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3';

BACKUP SPFILE FORMAT '/path/spfile_%T_%U';

BACKUP CURRENT CONTROLFILE FORMAT '/path/cfile_%T_%U';

}

exit

如何根据我的场景设计我的脚本?

太感谢了。

此致,

backup oracle-12c
  • 1 1 个回答
  • 57 Views

1 个回答

  • Voted
  1. Best Answer
    miracle173
    2020-11-18T07:25:12+08:002020-11-18T07:25:12+08:00

    我假设你想要这样的东西:

    跑
    {
      恢复数据库副本
        带有标签'incr_update'
        直到时间'SYSDATE - 7';
      备份
        递增级别 1
        使用标签“incr_update”恢复副本
        数据库;
    }
    

    第一次运行需要 0 级备份(即使备份语句具有level 1)所有以下备份都是level 1备份,仅包含与先前备份的差异。恢复语句恢复到SYSDATE-7,即直到一周前。删除所有不需要的备份后,磁盘上有以下备份:

    • 7 天前的 0 级备份
    • 过去 6 天的每日 1 级备份,包括今天的备份
    • 过去 7 天的存档日志备份

    我从未尝试过这种策略,但我认为 7 天的恢复窗口是合适的策略。

    对于控制文件,可以在数据库备份和恢复用户指南中找到以下内容

    使用 RMAN 备份控制文件

    您可以在安装或打开数据库时备份控制文件。

    ...

    如果 CONFIGURE CONTROLFILE AUTOBACKUP 命令设置为 ON(默认为 OFF),则 RMAN 会在每次备份后和数据库结构更改后自动备份控制文件和服务器参数文件。控制文件自动备份包含有关先前备份的元数据,这对于灾难恢复至关重要。

    如果未设置自动备份功能,则必须通过以下方式之一手动备份控制文件:

    • 运行备份电流控制文件。
    • 通过使用 BACKUP 命令的 INCLUDE CURRENT CONTROLFILE 选项在任何备份中包括控制文件的备份。
    • 备份数据文件 1,因为 RMAN 自动将控制文件和服务器参数文件包含在数据文件 1 的备份中。

    我们对包含数据文件 1 备份的整个数据库进行备份,因此它也将包含控制文件的备份。但我也建议启用控制文件的自动备份。

    配置控制文件自动备份;
    

    或者

    将设备类型磁盘的控制文件自动备份格式配置为“/path/autobackup/%U”;
    

    您希望能够恢复到过去 7 天的每个时间点,因此您应该配置

    将保留政策配置为 7 天的恢复窗口;
    

    此删除策略还包括存档日志的备份。

    您还可以配置归档日志删除策略:

    将归档日志删除策略配置为备份 1 次到设备类型磁盘;
    

    此删除策略与存档目标有关,与存档日志备份无关。通常归档到“recovery_file_dest”。

    归档日志删除策略适用于所有日志归档目的地,包括快速恢复区。该策略不适用于备份集中的归档重做日志文件。

    只有快速恢复区的归档重做日志文件才会被数据库自动删除。您可以执行 BACKUP ... DELETE INPUT、DELETE ARCHIVELOG 或 DELETE OBSOLETE 命令从日志归档目标(包括恢复区)手动删除日志。如果删除命令上没有指定 FORCE,则这些删除命令遵循归档日志删除策略。如果指定了 FORCE,则删除命令将忽略归档日志删除策略。

    所以最后你有以下脚本:

    您必须运行一次的配置脚本:

    将设备类型磁盘的控制文件自动备份格式配置为“/path/autobackup/%U”;
    将保留政策配置为 7 天的恢复窗口;
    将归档日志删除策略配置为备份 1 次到设备类型磁盘;
    

    每日备份的脚本:

    跑 {
    分配通道 c1 设备类型磁盘格式 '/path/%U';
    分配通道 c2 设备类型磁盘格式 '/path/%U';
    分配通道 c3 设备类型磁盘格式 '/path/%U';
    分配通道 c4 设备类型磁盘格式 '/path/%U';
    分配通道 c5 设备类型磁盘格式 '/path/%U';
    分配通道 c6 设备类型磁盘格式 '/path/%U';
    分配通道 c7 设备类型磁盘格式 '/path/%U';
    分配通道 c8 设备类型磁盘格式 '/path/%U';
    恢复数据库副本
      带有标签'incr_update'
      直到时间'SYSDATE - 7';
    备份
      递增级别 1
      使用标签“incr_update”恢复副本
    数据库;    
    备份存档所有删除输入;
    删除过时的;
    }
    

    以及用于频繁备份存档日志的以下脚本。也许您想为归档日志使用更少的通道。

    跑 {
    分配通道 c1 设备类型磁盘格式 '/path/%U';
    分配通道 c2 设备类型磁盘格式 '/path/%U';
    分配通道 c3 设备类型磁盘格式 '/path/%U';
    分配通道 c4 设备类型磁盘格式 '/path/%U';
    分配通道 c5 设备类型磁盘格式 '/path/%U';
    分配通道 c6 设备类型磁盘格式 '/path/%U';
    分配通道 c7 设备类型磁盘格式 '/path/%U';
    分配通道 c8 设备类型磁盘格式 '/path/%U';
    备份存档所有删除输入;
    }
    

    如果您不希望在每次备份后进行恢复,那么另一种方法是使用增量备份的以下策略

    每周运行一次以下脚本以获得 0 级备份

    备份
      增量级别 0
      数据库;
    

    每隔一天进行一次 1 级备份

    备份
      递增级别 1
      数据库;
    

    或者你可以做一个

    备份
      增量级别 0 累积
      数据库;
    

    同样,您应该指定 7 天的恢复窗口并经常进行归档日志备份。

    您避免在每次备份后恢复数据库副本,但现在您需要更多空间用于备份,因为现在您的备份空间上始终有两个完整备份。1 级备份的数量也超过 6 个。

    假设您的保留策略是 7 天,并且您总是在同一天同一时间进行 0 级备份(这是通常的做法),例如,您总是在周日 12:00 开始备份。现在我们有星期天 29日12:00。我们已经在磁盘上有两个 0 级备份,一个在 22日12:00开始,一个在 15日12:00 开始。如果您现在想将数据库恢复到 22 日 12:00 的时间点,这应该是可能的,因为您的保留策略是 7 天。但是对于此还原,您需要 15日的备份,因为备份在 22 日12:00还没有完成(甚至没有开始)。因此,如果您在 29日发出“DELETE OBSOLETE”命令, 12:00,这不会删除从 15日12:00 开始的 0 级备份。如果您现在开始 0 级备份,您将在磁盘上拥有三个 0 级备份。如果您想避免这种情况以节省空间,您可以考虑使用 6 天而不是 7 天的恢复窗口。DELETE OBSOLETE然后您可以在 29日12:00发出声明,然后再开始备份,15日进行的备份将被删除。

    所以最后你会得到这些脚本:

    您必须运行一次的配置脚本:

    将设备类型磁盘的控制文件自动备份格式配置为“/path/autobackup/%U”;
    将保留政策配置为 6 天的恢复窗口;
    将归档日志删除策略配置为备份 1 次到设备类型磁盘;
    

    每周 0 级备份的脚本

    跑 {
    分配通道 c1 设备类型磁盘格式 '/path/%U';
    分配通道 c2 设备类型磁盘格式 '/path/%U';
    分配通道 c3 设备类型磁盘格式 '/path/%U';
    分配通道 c4 设备类型磁盘格式 '/path/%U';
    分配通道 c5 设备类型磁盘格式 '/path/%U';
    分配通道 c6 设备类型磁盘格式 '/path/%U';
    分配通道 c7 设备类型磁盘格式 '/path/%U';
    分配通道 c8 设备类型磁盘格式 '/path/%U';
    删除过时的;
    备份
      增量级别 0
    DATABASE PLUS ARCHIVELOG 删除输入;    
    }
    

    级别 1 备份的每日脚本(级别 0 运行的那一天除外):

    跑 {
    分配通道 c1 设备类型磁盘格式 '/path/%U';
    分配通道 c2 设备类型磁盘格式 '/path/%U';
    分配通道 c3 设备类型磁盘格式 '/path/%U';
    分配通道 c4 设备类型磁盘格式 '/path/%U';
    分配通道 c5 设备类型磁盘格式 '/path/%U';
    分配通道 c6 设备类型磁盘格式 '/path/%U';
    分配通道 c7 设备类型磁盘格式 '/path/%U';
    分配通道 c8 设备类型磁盘格式 '/path/%U';
    删除过时的;
    备份
      递增级别 1
    DATABASE PLUS ARCHIVELOG 删除输入;    
    }
    

    和存档日志备份的脚本

    跑 {
    分配通道 c1 设备类型磁盘格式 '/path/%U';
    分配通道 c2 设备类型磁盘格式 '/path/%U';
    分配通道 c3 设备类型磁盘格式 '/path/%U';
    分配通道 c4 设备类型磁盘格式 '/path/%U';
    分配通道 c5 设备类型磁盘格式 '/path/%U';
    分配通道 c6 设备类型磁盘格式 '/path/%U';
    分配通道 c7 设备类型磁盘格式 '/path/%U';
    分配通道 c8 设备类型磁盘格式 '/path/%U';
    备份存档所有删除输入;
    }
    
    • 1

相关问题

  • SQL Server 备份策略的优缺点及其合适的使用场景

  • 更改了 max_allowed_pa​​cket 并仍然收到“数据包太大”错误

  • SQL Server Express 的任务计划程序

  • 我可以在使用数据库后激活 PITR 吗?

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve