一个用来自动管理大容量表的Sql脚本
它的功能是自动检查表的容量,超过一定的限制把数据导出到历史表中
使得用户都能最快速的访问这个大容量的表
脚本片段,下面有下载地址:
1
use BaiheCRMLogging
2
go
3![]()
4
--创建计算 @formalRange 的函数
5
CREATE FUNCTION GetFormalRange()
6
RETURNS nvarchar(10)
7
WITH EXECUTE AS CALLER
8
AS
9
BEGIN
10
declare @formalRange nvarchar(10)
11
declare @now datetime
12
set @now = getdate()
13
set @formalRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now)-1)+'-01')
14
RETURN(@formalRange)
15
END;
16
GO
17![]()
18
--创建计算 @nextRange 的函数
19
CREATE FUNCTION GetNextRange()
20
RETURNS nvarchar(10)
21
WITH EXECUTE AS CALLER
22
AS
23
BEGIN
24
declare @nextRange nvarchar(10)
25
declare @now datetime
26
set @now = getdate()
27
set @nextRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now)+1)+'-01')
28
RETURN(@nextRange)
29
END;
30
GO
31![]()
32
--创建计算@currentRange的函数
33
CREATE FUNCTION GetCurrentRange()
34
RETURNS nvarchar(10)
35
WITH EXECUTE AS CALLER
36
AS
37
BEGIN
38
declare @currentRange nvarchar(10)
39
declare @now datetime
40
set @now = getdate()
41
set @currentRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now))+'-01')
42
RETURN(@currentRange)
43
END;
44
GO
45![]()
46
--日志分区函数
47
create partition function LogHistoryPF1(datetime)
48
as range left for values(dbo.GetCurrentRange());
49
go
50![]()
51
--日志分区架构
52
CREATE PARTITION SCHEME [LogHistoryPS1]
53
AS PARTITION [LogHistoryPF1]
54
TO ([PRIMARY],[PRIMARY]);
55
go
56![]()
57
--日志分区表
58
create table LogHistory
59
(
60
LogId bigint not null Identity(1,1),
61
Operator nvarchar(36) not null,
62
OperateType tinyint not null,
63
OperateTime datetime not null,
64
EntityName nvarchar(30) null,
65
EntityGuid uniqueidentifier null,
66
OriginalData nvarchar(max) null,
67
ModifiedData nvarchar(max) null
68
) on LogHistoryPS1(OperateTime);
69![]()
70
go
71![]()
72
--归档分区函数
73
create partition function LogArchivePF1(datetime)
74
as range left for values(dbo.GetCurrentRange());
75
go
76![]()
77
--归档分区架构
78
CREATE PARTITION SCHEME [LogArchivePS1]
79
AS PARTITION [LogArchivePF1]
80
TO ([PRIMARY],[PRIMARY]);
81
GO
82![]()
83
--归档分区表
84
create table LogArchive
85
(
86
LogId bigint not null Identity(1,1),
87
Operator nvarchar(36) not null,
88
OperateType tinyint not null,
89
OperateTime datetime not null,
90
EntityName nvarchar(30) null,
91
EntityGuid uniqueidentifier null,
92
OriginalData nvarchar(max) null,
93
ModifiedData nvarchar(max) null
94
) on LogArchivePS1(OperateTime);
95![]()
96
go
97![]()
98
--增加主键约束
99![]()
100
ALTER TABLE [LogHistory] WITH CHECK ADD
101
CONSTRAINT [PK_LogHistory_LogID] PRIMARY KEY CLUSTERED
102
(
103
[OperateTime],
104
[LogID]
105
) ON [LogHistoryPS1] (OperateTime);
106
GO
107![]()
108
ALTER TABLE [LogArchive] WITH CHECK ADD
109
CONSTRAINT [PK_LogArchive_LogID] PRIMARY KEY CLUSTERED
110
(
111
[OperateTime],
112
[LogID]
113
) ON [LogArchivePS1] (OperateTime);
114
GO
115![]()
116
--创建索引
117
CREATE INDEX [IX_LogHistory_Operator] ON [LogHistory]([Operator]) ON [LogHistoryPS1] (OperateTime);
118
GO
119
CREATE INDEX [IX_LogArchive_Operator] ON [LogArchive]([Operator]) ON [LogArchivePS1] (OperateTime);
120
GO
121![]()
122
--添加日志
123
Create proc usp_LogHistory_Create
124
(
125
@Operator nvarchar(36),
126
@OperateType tinyint,
127
@OperateTime datetime,
128
@EntityName nvarchar(30),
129
@EntityGuid uniqueidentifier,
130
@OriginalDataString nvarchar(max),
131
@ModifiedDataString nvarchar(max)
132
)
133
as
134
insert into LogHistory(Operator,OperateType,OperateTime,EntityName,EntityGuid,OriginalData,ModifiedData)
135
values(@Operator,@OperateType,@OperateTime,@EntityName,@EntityGuid,@OriginalDataString,@ModifiedDataString)
136
go
137![]()
138
--select * from LogHistory
139![]()
140
--truncate table LogHistory
use BaiheCRMLogging2
go3

4
--创建计算 @formalRange 的函数5
CREATE FUNCTION GetFormalRange()6
RETURNS nvarchar(10)7
WITH EXECUTE AS CALLER8
AS9
BEGIN10
declare @formalRange nvarchar(10) 11
declare @now datetime12
set @now = getdate()13
set @formalRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now)-1)+'-01') 14
RETURN(@formalRange)15
END;16
GO17

18
--创建计算 @nextRange 的函数19
CREATE FUNCTION GetNextRange()20
RETURNS nvarchar(10)21
WITH EXECUTE AS CALLER22
AS23
BEGIN24
declare @nextRange nvarchar(10) 25
declare @now datetime26
set @now = getdate()27
set @nextRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now)+1)+'-01') 28
RETURN(@nextRange)29
END;30
GO31

32
--创建计算@currentRange的函数33
CREATE FUNCTION GetCurrentRange()34
RETURNS nvarchar(10)35
WITH EXECUTE AS CALLER36
AS37
BEGIN38
declare @currentRange nvarchar(10) 39
declare @now datetime40
set @now = getdate()41
set @currentRange = Convert(nvarchar(10),Convert(nvarchar(4),Year(@now))+'-'+Convert(nvarchar(2),Month(@now))+'-01')42
RETURN(@currentRange)43
END;44
GO45

46
--日志分区函数47
create partition function LogHistoryPF1(datetime)48
as range left for values(dbo.GetCurrentRange());49
go50

51
--日志分区架构52
CREATE PARTITION SCHEME [LogHistoryPS1]53
AS PARTITION [LogHistoryPF1]54
TO ([PRIMARY],[PRIMARY]);55
go56

57
--日志分区表58
create table LogHistory59
(60
LogId bigint not null Identity(1,1),61
Operator nvarchar(36) not null,62
OperateType tinyint not null,63
OperateTime datetime not null,64
EntityName nvarchar(30) null,65
EntityGuid uniqueidentifier null, 66
OriginalData nvarchar(max) null,67
ModifiedData nvarchar(max) null68
) on LogHistoryPS1(OperateTime);69

70
go71

72
--归档分区函数73
create partition function LogArchivePF1(datetime)74
as range left for values(dbo.GetCurrentRange());75
go76

77
--归档分区架构78
CREATE PARTITION SCHEME [LogArchivePS1]79
AS PARTITION [LogArchivePF1]80
TO ([PRIMARY],[PRIMARY]);81
GO82

83
--归档分区表84
create table LogArchive85
(86
LogId bigint not null Identity(1,1),87
Operator nvarchar(36) not null,88
OperateType tinyint not null,89
OperateTime datetime not null,90
EntityName nvarchar(30) null,91
EntityGuid uniqueidentifier null, 92
OriginalData nvarchar(max) null,93
ModifiedData nvarchar(max) null94
) on LogArchivePS1(OperateTime);95

96
go97

98
--增加主键约束99

100
ALTER TABLE [LogHistory] WITH CHECK ADD 101
CONSTRAINT [PK_LogHistory_LogID] PRIMARY KEY CLUSTERED 102
(103
[OperateTime], 104
[LogID]105
) ON [LogHistoryPS1] (OperateTime);106
GO107

108
ALTER TABLE [LogArchive] WITH CHECK ADD 109
CONSTRAINT [PK_LogArchive_LogID] PRIMARY KEY CLUSTERED 110
(111
[OperateTime], 112
[LogID]113
) ON [LogArchivePS1] (OperateTime);114
GO115

116
--创建索引117
CREATE INDEX [IX_LogHistory_Operator] ON [LogHistory]([Operator]) ON [LogHistoryPS1] (OperateTime);118
GO119
CREATE INDEX [IX_LogArchive_Operator] ON [LogArchive]([Operator]) ON [LogArchivePS1] (OperateTime);120
GO121

122
--添加日志123
Create proc usp_LogHistory_Create124
(125
@Operator nvarchar(36),126
@OperateType tinyint,127
@OperateTime datetime,128
@EntityName nvarchar(30),129
@EntityGuid uniqueidentifier,130
@OriginalDataString nvarchar(max),131
@ModifiedDataString nvarchar(max) 132
)133
as134
insert into LogHistory(Operator,OperateType,OperateTime,EntityName,EntityGuid,OriginalData,ModifiedData)135
values(@Operator,@OperateType,@OperateTime,@EntityName,@EntityGuid,@OriginalDataString,@ModifiedDataString)136
go137

138
--select * from LogHistory139

140
--truncate table LogHistory下载地址:https://files.cnblogs.com/goody9807/Sql.rar

浙公网安备 33010602011771号