但是,这里最好的方法是什么?此问题的最佳做法是什么?
答案 0 :(得分:0)
试图弄清楚这一点,但是我认为您要提供的是在加载新数据之前捕获较旧数据的方法。我同意您的DBA的观点,即每次重新加载都使用单独的表会非常混乱,并且如果您需要它的话也不会非常有用。
相反,创建一个表来复制您的加载表,但添加一个DateTime字段(例如history_date)。每次加载时,您只需将主表中的所有数据流到备份表即可。在数据流中使用派生列任务将history_date值添加到备份表中。
备份表完成后,请截断或删除当前表的内容。然后加载新数据。
答案 1 :(得分:0)
可以将包设置为作为单个事务执行,而不是创建其他表。这样,如果任何组件发生故障,所有已执行的任务将被回滚,后续的任务将不会运行。为此,请在包装上将TransactionOption
设置为Required
。这将允许包开始交易。之后,将要一起成功或失败的所有组件的所有此属性设置为Supported
。 Supported
级别将使这些任务加入父容器已经在进行中的事务(在这种情况下为包)。如果包中还有其他要独立于这些任务提交或回滚的组件,则可以将相关对象放在Sequence容器中,然后将Required
级别应用于Sequence。需要注意的重要一点是,如果任何事物执行TRUNCATE
,则访问截断对象的所有其他组件都需要将ValidateExternalMetadata
选项设置为false
,以避免已知的阻塞问题。是这个的结果。
答案 2 :(得分:0)
要备份表,您无需将数据从一个表(原始)加载到另一张表(备份),只需将原始表重命名为某种内容(备份表),然后像创建备份表一样再次创建原始表,上表,然后仅在成功加载数据后删除重命名的表。这样可以节省一些时间将数据从一个表传输到另一个表。您可能要根据数据/表结构等来测试哪种方法对您来说更快,但是我想提到的是,这也是实现此目的的方法之一。如果您在该表中有很多数据,下面的方法可能会更快。
sp_rename 'abcTbl', 'abcTbl_bkp';
CREATE TABLE abcTbl ;
在创建此表时,您可以保持与 abcTbl_bkp
相似的表结构将新数据加载到 abcTbl 表
DROP TABLE abcTbl_bkp;