SQL Server drop table 恢复

联系:手机/微信(+86 13429648788) QQ(107644445)QQ咨询惜分飞

标题:SQL Server drop table 恢复

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

sql server drop table本质上数据也还是在磁盘上,通过底层技术依旧像Oracle一样可以恢复,测试一张表的drop恢复操作
20191119140232


备份表数据,用于删除前后对比
20191119140425

删除表数据
20191119140447

我们对数据进行恢复(可以恢复表结构和表数据)
20191119140606
20191119140638

对比恢复前后数据
20191119141717

通过对比发现我们实现drop table数据完美恢复.
当你的SQL Server数据库因为误操作导致数据丢失,且无法自行解决,请联系我们,提供专业SQL Server数据库恢复技术支持Phone:13429648788    Q Q:107644445QQ咨询惜分飞    E-Mail:dba@xifenfei.com

SQL Server delete恢复

联系:手机/微信(+86 13429648788) QQ(107644445)QQ咨询惜分飞

标题:SQL Server delete恢复

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

对于sql server的delete操作,其实本质也是类似oracle的,我们可以通过两种途径进行恢复:1.直接解析sql的日志,2.直接读取mdf/ndf文件找出来被标记为删除的记录,在有日志的情况下,通过日志分析能够更加准确的定位记录(因为根据删除标记可能找到的记录不是这次删除操作的),这里来一个简单的恢复过程,一张sql server的表,记录数为83条
20191119113816


20191119114937

对其进行delete删除操作
20191119114955

进行恢复分析,直接生成insert语句,反插入库即可
20191119115219

20191119120132

同时我们还可以根据需要生成对应的redo/undo相关sql语句
20191119115920

20191119120031

至此我们已经分析,可以比较完美的恢复sql server delete误操作丢失的数据.
当你的SQL Server数据库因为误操作导致数据丢失,且无法自行解决,请联系我们,提供专业SQL Server数据库恢复技术支持Phone:13429648788    Q Q:107644445QQ咨询惜分飞    E-Mail:dba@xifenfei.com

SQL Server truncate table 恢复

联系:手机/微信(+86 13429648788) QQ(107644445)QQ咨询惜分飞

标题:SQL Server truncate table 恢复

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

从本质上来说,sql server的truncate操作也是和oracle类似的,实际数据依旧存在磁盘之上,通过对底层的分析没有覆盖的部分,依然可以恢复出来,这里列举出来大概的恢复截图,原表数据4605条记录
20191119104201


对其truncate操作
20191119110017

通过恢复出来,解析出来被truncate表的insert sql语句
20191119110424

插入数据之后,验证效果
20191119111441

至此我们可以实现sql server数据库被truncate表的恢复支持,只要没有覆盖的数据,理论上都可以恢复
当你的SQL Server数据库因为误操作导致数据丢失,且无法自行解决,请联系我们,提供专业SQL Server数据库恢复技术支持Phone:13429648788    Q Q:107644445QQ咨询惜分飞    E-Mail:dba@xifenfei.com

t-sql 更新大批量数据

需求:有两张很大的表,写了一个存储过程处理(加工数据然后插入到一张新表中),因为一次性处理数据量很大,会导致tempdb等资源被耗尽,为了解决这个问题,每次输入两个参数,每次根据两个id的范围处理程序
1、建一张日志表

CREATE TABLE [dbo].[data_log](
	[start_time] [datetime] NULL DEFAULT (getdate()),
	[min_id] [int] NULL,
	[max_id] [int] NULL,
	[end_time] [datetime] NULL DEFAULT (getdate()
) 

2、编写处理过程

CREATE PROCEDURE [dbo].[insert_more](@min_data int,@max_data int)
as
begin
--开始处理
insert into data_log values(getdate(),@min_data,@max_data,getdate())
--处理程序
INSERT INTO test_1 
 SELECT t1.name,
           t2.name,
           t1.id
    FROM   t_1 t1,
           t_2 t2
    WHERE  t1.id = t2.id
    AND t1.id<=@max_data
    AND t1.id>@min_data
--结束处理    
update data_log set end_time=getdate() where min_id=@min_data and max_id=@max_data
end

3、生成批量执行该存储过程语句

CREATE PROCEDURE [dbo].[get_list](@min_id int,@max_id int,@mode int)
AS
declare @i int
declare @max_m int
begin
set @i=0
while @i<=(@max_id-@min_id)/@mode
begin
set @max_m=@min_id+(@i+1)*@mode
if @max_m>@max_id  
  set	@max_m=@max_id
print 'EXEC [dbo].[insert_more] @min_data = '+CAST(@min_id+@i*@mode as VARCHAR(50))+',@max_data = '+CAST(@max_m as VARCHAR(50))+';'
set @i=@i+1
END
end

利用3的过程,输入最小id,最大id,取值间隔,生成需要执行2过程的sql语句,执行这些语句完成操作,通过日志监控操作情况

创建sql server分区表

1、创建数据库

USE Master 
GO
CREATE DATABASE Test_Partitioning
ON PRIMARY
(NAME='Partitioning_1',
FILENAME=
'E:\database\partitions\Partitioning_1.mdf',
SIZE=4,
MAXSIZE=100,
FILEGROWTH=1 ),
FILEGROUP FG2
(NAME = 'Partitioning_2',
FILENAME =
'E:\database\partitions\Partitioning_2.mdf',
SIZE = 4,
MAXSIZE=100,
FILEGROWTH=1 ),
FILEGROUP FG3
(NAME = 'Partitioning_3',
FILENAME =
'E:\database\partitions\Partitioning_3.mdf',
SIZE = 4,
MAXSIZE=100,
FILEGROWTH=1 )
GO

2、创建分区函数

Use test_Partitioning 
GO
CREATE PARTITION FUNCTION salesYearPartitions (datetime)
AS RANGE RIGHT FOR VALUES ( '2009-01-01', '2010-01-01')
GO

说明:
RIGHT:表示”=”在右边
LEFT:表示”=”在左边

3、创建分区方案

Use test_Partitioning 
GO
CREATE PARTITION SCHEME Test_PartitionScheme
AS PARTITION salesYearPartitions
TO ([PRIMARY], FG2, FG3 )
GO

4、使用分区创建表

Use test_Partitioning 
GO
CREATE TABLE SalesArchival
(SaleTime datetime PRIMARY KEY,
ItemName varchar(50))
ON Test_PartitionScheme (SaleTime);
GO

5、验证SQL语句
5.1)确定文件组的数量和数据库数据文件的数量

Use test_Partitioning 
GO
-- Confirm Filegroups
SELECT name as [File Group Name]
FROM sys.filegroups
WHERE type = 'FG'
GO 
-- Confirm Datafiles
SELECT name as [DB File Name],physical_name as [DB File Path]
FROM sys.database_files
where type_desc = 'ROWS'
GO

5.2)验证分区表上的数据分布

Use test_Partitioning 
GO
select partition_id, index_id, partition_number, Rows
FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='SalesArchival'
GO