实现通用归档过程的最佳方法/技术

时间:2009-09-24 22:34:56

标签: .net oracle plsql archiving

我们希望淘汰Oracle仓库中的旧数据。

为了给出一个非常简化的概述,建议使用PL SQL存储过程开发一个过程,给定源/ dest表等参数,使用Oracle ALL_TAB_COLUMNS视图构造一个镜像源的目标表表

如果dest表存在于上一次运行中,则建议的解决方案包括将源表的当前模式与目标(存档)表进行比较,如果找到差异,则使表同步。我确信所提出的功能存在局限性,但虽然该规范似乎在这个领域非常雄心勃勃,但我怀疑它们是否会在PL-SQL中重写Red Gate的SQL Compare实用程序。

我想我有两个问题。

1)PL / SQL真的是用于此类任务的正确语言。对我来说,存储过程用于快速进入和快速数据操作,复杂的逻辑属于我认为是更全功能的客户端语言,如C#或其他一些.NET语言。我期待一个10,000行,不良缩进的单一存储过程,我不得不审查它。我知道Oracle SP / Pkgs不一定是那种方式,但是,出于某种原因,我们的开发人员在使用PL \ SQL时比在.NET中编写时更少模块化。我欢迎您的建议和理由供您选择。

2)是否有可用于归档的Oracle实用程序(我认为我们在10g上)?有没有人有任何建议?

我会在提供评论的同时对任何不重复的价值进行投票。

THX。

5 个答案:

答案 0 :(得分:4)

PL / SQL不仅适用于“快速进入和快速”数据操作。有一个非常实用的应用程序。对于这种任务,PL / SQL没有任何内在错误。也就是说,如果您预计PL / SQL中编写的10K行程序写得不好,请不要使用它。让你的程序员做他们最擅长的事情。

答案 1 :(得分:3)

首先,这听起来像是PL-SQL的任务。可以强制执行非模块化代码问题,使用PL-SQL可以获得更好的结果并且更容易编写。

至于概念本身,如果架构将被更新,你所做的任何解决方案都会出现问题 - 同步将失败,或者更糟糕的是,它不会,数据也会被破坏。

如果要让复制服务器从主服务器添加“删除旧记录”,并且只在脱机服务器上执行插入/更新,那该怎么办? 这将允许您拥有所有数据并保持较小的数据。

答案 2 :(得分:3)

然而,你“做”,它需要手工完成。

在RDBMS中淘汰数据充满了危险。因为您通常不能只归档单个表。您还需要归档所有依赖表。

然后是架构更改问题。与您不断改进的架构保持档案同步,而是让您的工具与过时的架构保持同步。这并不是说您可以将当前应用程序指向“旧数据”并期望它必然有效。足以使您的应用程序与当前数据保持同步,更不用说使用旧数据合理地运行它了。

如果您正在选择数据的子集,那么手工制作选择和插入语句,确保完整性,检查值等,而不是依赖于一些人为的工具,只是更安全,实际上更容易。它可能看起来很艰巨,但它真的很乏味。

但是一旦完成,您就可以更好地控制数据导出和合并的内容和方式。

在PL / SQL中编写它很简单,因为这是一个数据库操作。为什么要将所有数据拖出服务器只是为了将其重新填充到服务器中。完成所有这些后,PL / SQL的内容可能会有更好的整体性能。

至于确保模块化,缩进等,这就是棒球棒发明的原因。

答案 3 :(得分:1)

你说这是一个数据仓库。你在使用分区吗?如果是,分区方案是否标识要归档的行?如果两个问题的答案都是“是”,则partition exchange可能是您要搜索的功能。

答案 4 :(得分:0)

也许我没有正确阅读要求,但不是一个简单的

create <dest_table> as select * from <source_table>;

足够?如果dest_table已经存在,首先在drop_table上有一个drop?