Sql-Server

SQL Server 歸檔數據功能

  • June 26, 2018

我們公司正在尋找在 SQL Server 中歸檔數據的功能/或自動化方式。目前,我們使用身份代理創建存檔表,並開發儲存過程來導入數據。我們正在為 100 多個表執行此操作,數據為 2 年或更早。SQL Server 是否具有歸檔數據的功能或自動化方式(嚮導工具、UI),還是必須開發儲存過程?我正在考慮創建動態 sql 來為 100 多個表編寫腳本。

謝謝,

-- If no functionality exists, will create dynamic sql for tables using template below

create table dbo.CustomerTransaction
(
   CustomerTransactionId bigint primary key identity(1,1) not null ,
   CustomerName varchar(255) null ,
   ProductName varchar(255) null,
   Quantity int null ,
   CreateDatetimestamp datetime not null  
)


create table dbo.CustomerTransactionArchive
(
   CustomerTransactionArchiveId bigint primary key identity(1,1) not null ,
   CustomerTransactionId bigint null,
   CustomerName varchar(255) null ,
   ProductName varchar(255) null,
   Quantity int null ,
   CreateDatetimestamp datetime not null  
)


create procedure dbo.CustomerTransactionArchive
as

   declare rowmin bigint = (Select min(CustomerTransactionId) from dbo.CustomerTransaction where Createdatetimestamp < dateadd(year,-2,CreateDatetimestamp ))
   declare rowmax bigint = (Select max(CustomerTransactionId) from dbo.CustomerTransaction where Createdatetimestamp < dateadd(year,-2,CreateDatetimestamp ))
   declare rowcounter bigint = rowcountermin


     -- insert into 100,000 record block, do not want to lock too many pages in table
   while rowcounter <= rowmax 
   begin

       insert into dbo.CustomerTransactionArchive  (
       select * from dbo.CustomerTransactionArchive  
       where CustomerTransactionId between rowcounter and (rowcounter +100000) 
       and Createdatetimestamp < dateadd(year,-2,CreateDatetimestamp ))

       rowcounter = rowcounter + 100001
   end

存檔表將在不同的數據庫中

沒有內置功能。

儲存過程路由將起作用,但您可能還想查看 ETL 包(如 SSIS)來執行此操作,因為它可能更易於維護。

您還可以查看所有表的 CreateDate 分區,以便有效地刪除舊數據,但這仍然需要一些自定義程式碼來輪換分區。但是,如果 CreateDate 上的 DDL 對每個都相同,則它們可以使用通用的分區方案和函式。

如果您要升級,您還可以考慮使用SQL 2016 中的Temporal TablesStretch Database,儘管這些不一定是開箱即用的自動存檔功能。

引用自:https://dba.stackexchange.com/questions/209817