【问题标题】:What's the best way to perform data archiving on an Oracle database?在 Oracle 数据库上执行数据归档的最佳方式是什么?
【发布时间】:2009-11-11 20:44:09
【问题描述】:

我想找出归档不再需要的数据的最佳方法,以提高应用程序性能并节省磁盘空间。根据您的经验,实现这一点的最佳方法是什么,我可以使用什么样的工具?为此目的开发特定的内部应用程序会更好吗?

【问题讨论】:

  • 有很多方法可以从 Oracle 归档。你不需要开发任何工具。你有什么样的硬件/预算。安装 SANS。您是否需要让您的存档数据几乎可用,或者可以将其存放在异地橱柜中多年?
  • 您为什么认为归档会提高应用程序性能?如果要归档数据,则需要考虑以后如何访问它(如果需要)。请记住,未来的架构更改和数据库升级将影响“只是”重新加载它的能力。
  • 我认为我们真的需要更多地了解您的需求...数据量、架构的复杂程度以及您需要从多少个表中存档,您是否需要这些数据再次,如果是这样,访问它的 SLA 是什么...
  • @David- 问题是我不再需要这些数据了,我想把它作为备份,我说的是 60 Gb 什么的。
  • @Gary- 也许你是对的,应用程序性能没有太大差异,这个归档的主要目标是 1. 减少数据库维护活动所需的时间:重组、导出/导入,索引创建/重新创建,添加磁盘空间。 2. 减少发生灾难时恢复所需的时间。 3. 减少日常备份所需的时间(减少磁带备份基础设施的使用)。 4. 降低存储数据所需的硬件(磁盘和磁盘机箱)成本。

标签: oracle archiving


【解决方案1】:

管理归档的一种方法:

  1. 按日期范围对表格进行分区,例如每月分区
  2. 随着分区变得过时,例如36 个月后,这些分区现在可以移动到您的数据仓库,这可能是另一个仅包含文本文件的数据库,具体取决于您的访问需求。
  3. 移动后,可以从主数据库中删除过时的分区,因此始终只保留(例如)36 个月的当前数据。
  4. 所有这些都可以通过混合使用 SQL/Shell 脚本来实现自动化。

【讨论】:

    【解决方案2】:

    在 ORACLE 数据库中归档旧数据的最佳方法是:

    1. 根据日期或大小定义存档和保留策略。
    2. 根据定义的策略将可归档数据导出到外部表(表空间)。
    3. 压缩外部表并将其存储在更便宜的存储介质中。
    4. 使用 SQL DELETE 从活动数据库中删除存档数据。
    5. 然后清理空间执行以下命令: alter table T_XYZ 启用行移动; alter table T_XYZ 收缩空间;
    6. 如果您仍想将一些磁盘空间释放回操作系统(因为 Oracle 现在会保留它之前使用的总空间),那么您可能需要调整数据文件本身的大小: SQL> alter database datafile '/home/oracle/database/../XYZ.dbf' resize 1m;

    更多详情请参考: http://stage10.oaug.org/file/sroaug080229081203621527.pdf

    【讨论】:

    • 重新第 4 步。如果删除是性能问题,我可能会考虑将当前数据拉入新表,删除旧表,并将新表重命名为旧名称
    【解决方案3】:

    我会将数据导出到一个逗号分隔的文件中,这样它就可以导出到几乎任何数据库中。因此,如果您更改 Oracle 的版本或在几年后使用其他版本,您可以毫无顾虑地恢复它。

    使用 SQL*Plus 的假脱机文件功能来执行此操作:http://cisnet.baruch.cuny.edu/holowczak/oracle/sqlplus/#savingoutput

    【讨论】:

    • 这是一个合法的操作,记录在 Oracle SQL 中。链接中有证据。
    • 对于除少量数据之外的任何数据,这是一个糟糕的选择。它难以处理复杂的数据类型,甚至可能包含分隔符的简单 VARCHAR2 列。
    • clob 也存在潜在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2013-05-01
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多