Sql-Server
SQL Server 歸檔數據功能
我們公司正在尋找在 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 Tables或Stretch Database,儘管這些不一定是開箱即用的自動存檔功能。