我是一名 SQL Server DBA,最近被赋予负责 Oracle 环境的职责。(11g)
现在,我会定时备份 SQL Server 上的事务日志,然后将其迁移到其他服务器。我也想对 Oracle 执行此操作。
Oracle 的重做日志似乎是基于切换之前的大小并允许服务器对其进行存档。
有人可以提供一些关于如何实现这一目标的提示/最佳实践吗?
我还希望得到有关重做日志大小以及如何处理白天使用模式变化的任何建议。
我忘了说这是在 Redhat 5 Enterprise 服务器上
答案1
第一个建议是,除非你真的知道自己在做什么,否则不要手动摆弄它们。
您需要做的是阅读rman
有关执行备份(包括重做日志备份)的 Oracle 工具的信息。我强烈建议您对此进行彻底的研究,以确保在采取任何行动之前完全了解 Oracle 备份的各个方面是如何工作的。
现在,通常 Oracle 重做/存档日志应保留在写入的位置,直到您执行备份为止。备份通常会设置为包括数据库备份所需的存档日志。
至于重做日志的大小,它将直接基于数据库更改事务的量。更改越多,日志量就越大。这将高度个性化,具体取决于您的应用程序和使用情况,因此我建议您开始记录其统计信息(事务量、事务日志大小、数据库大小等,全部带有时间戳)。一旦您获得了几周的数据,您就可以开始将活动与日志关联起来,并将其提炼为一些有效的估计值。
编辑:我想我部分误解了原始问题。我认为您是在寻求一种基本上在运行备份时将重做日志检查点设置为现在的方法,这样直到您发出备份启动命令时,您的备份才完全一致。
而且,rman 实际上会为您处理所有这些脏活。摘自一些 rman 文档:
在备份包含最新日志的存档重做日志时(即,运行不带 UNTIL 或 SEQUENCE 选项的 BACKUP ... ARCHIVELOG 命令),如果数据库处于打开状态,则在开始备份之前,RMAN 将切换出当前联机重做日志组以及尚未存档的所有联机重做日志,直至发出命令时当前的重做日志组。这可确保备份包含命令启动前生成的所有重做。
另外提供更多细节:
您可以使用 BACKUP ... PLUS ARCHIVELOG 子句将存档重做日志添加到其他文件的备份中。添加 BACKUP ... PLUS ARCHIVELOG 会导致 RMAN 执行以下操作:
- 运行 ALTER SYSTEM ARCHIVE LOG CURRENT 命令。
- 运行 BACKUP ARCHIVELOG ALL。请注意,如果启用了备份优化,则 RMAN 将跳过已备份到指定设备的日志。
- 备份 BACKUP 命令中指定的其余文件。
- 运行 ALTER SYSTEM ARCHIVE LOG CURRENT 命令。
- 备份在备份期间生成的所有剩余存档日志。
这可确保命令执行期间进行的数据文件备份可以恢复到一致状态。
rman 文档应该能够为您提供更多详细信息。我会提供我从中获取的 URL(在线 Oracle rman 文档),但该 URL 已从我将其加入书签时起发生变化,因此我不相信它会保留下来。不过,使用 Google 搜索 rman 文档应该能够找到它。
编辑:还有一件事我想补充一下……你提到了一些关于大小的问题。Oracle 11g 确实支持压缩重做日志。我自己没有用过,但我知道它支持它们。此外,Oracle 10g 和 11g 支持压缩备份。如果你还没有进行压缩备份,你应该。尺寸减少非常显著,最重要的是,当我们启用压缩备份时,备份运行的性能也得到了显著提升。
答案2
Oracle 的重做日志似乎是基于切换之前的大小并允许服务器对其进行存档。
查看 Oracle 9i 及以上版本的参数 archive_lag_target。
答案3
这是一种权衡。我听说大日志文件效率更高,但我们不使用它们,因为 A) 文件丢失越多,数据丢失越多,B) 我们的带宽太差
这导致我们花几个小时来缓冲文件,然后在各个备用机器上传输和运行更新。我们实际上仍在使用 Oracle8i,而且由于该数据库是很久以前由非 DBA 设计的,所以我仍然必须手动创建新的数据文件和控制文件。/叹息
答案4
我问这个问题已经有一段时间了,但最近我找到了答案。从 Oracle 10G R2 开始,有一个参数可以确保日志切换不会超过指定的时间。
如果你去改变系统设置archive_lag_target = 900;
这将确保每 15 分钟发生一次切换,无论使用的日志量有多少。