如何删除大量数据 sql server2005 数据量在8千万左右??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除大量数据 sql server2005 数据量在8千万左右??相关的知识,希望对你有一定的参考价值。

如何删除大量数据 sql server2005,数据量在8千万左右!
用什么脚本能快速查询同记录数?
请给予详细说明.
总记录数1亿3千万,不是整表删除,只是需要删除top前8千万,导出最新的1千5百万。

你要整表删除吗,那么你用truncate table 可以瞬间删除所有记录,但是这个不记录log,无法回滚。也不能加条件。
如果要加条件,就只好用delete了,或者就是用DTS把你所要的表导出到文本,然后清空表,再把文本导回表中。

你用sp_spaceused 'talbe_name'可以迅速查到你要的记录数,及表所占的空间。

truncate table table_name
delete table_name where .........
sp_spaceused 'table_name'

如果这样你可以用bcp先导出你要的5千万数据
先count(*)你的记录然后-8kw=@num
1、在cmd下,导出你要保留的记录到文本data_1中
E:\>bcp "select top @num * from db.dbo.table order by id desc" queryout data_1.txt -c -t "|" -r \n -U sa -P password
2、truncate table table_name ---trun掉你的表
3、将 data_1.txt 的数据导入到table中
E:\temp>bcp db.dbo.Table in data_1.txt -b 5000 -c -t ",|" -r \n -U sa -P password
4、ok搞定
速度绝对比delete快不知道多少倍。
而且日志也比较小。

然后你要高出1千五百万也可以用bcp来做。
效率很高。
参考技术A 写个一次删除5000的脚本,然后跟工作调度里30秒运行一次。。。。
新人看答案。呵呵
参考技术B 方法一:用delete ,
这么大量的数据删除,不希望你用其他程序去完成,会超时的。
你就新建一个查询,再写入查询句

你一定会有一个键的,比如identity就更好了,
delete tb
where id <80000000

删除之前先确认一下数据库文件的增长,设为不受限制,日志文件也一样。

完成删除之后,收缩一下数据库

方法二:
改表名,
用数据导入的方法,将要保留的数据用查询导出到原表名,再设置回键索引信息,
再删除旧表。
参考技术C 批量删除数据库中重复数据
删除公式:

delete from 表名
where 字段一 in
(select min(字段一)
from 表名
group by 字段一, 字段二, 字段三, 字段四, 字段五
having (count(*) > 重复值) and (字段一 > 0))

实际代码:以ASP默认VB为例

<!--#include virtual="/include/conn.asp" --> '引用数据库
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<%set rsdel=conn.execute("delete from poject_zl where title in(select min(title) from poject_zl group by title having (count(*) > 1))") '执行命令

%>

如何使用FORFILES命令来删除SQL Server备份

参考技术A 我用xp_cmdshell命令和FORFILES命令来处理类似于你所列出的过程。可以从Microsoft
TechNet中获得FORFILES的可靠信息,但是在这篇文章中,我将涉及FORFILES大量的结构和使用方法来达到你的目的。
  该FORFILES命令将选取文件的一个子集并且针对这个子集执行一个命令。这个命令需要下面的参数和接受下面的变量。
  参数  参数名描述  /p路径  /m检索屏蔽
(默认情况下是
*.*)
  /s如果包含这个参数,那么子目录将会被递归地检索。
  /c针对结果集中的每一个文件执行命令,命令必须包含在双引号中,默认情况是"cmd
c/
echo
@file"
  /d针对文件选择的日期范围,把最新的更改日期当作文件标准。当/d参数是MM/DD/YYYY格式时,满足指定的+/-日期标准的文件也包含在内。当文件格式是smallint
(-32,768
-
32,768)文件+/-文件并且带着一个更改日期+/-时,从当前日期到该日期的时间数目将会包含在这个文件结果集中。
  变量  变量名描述
  @FILE文件名
  @FNAME无扩展的文件名
  @EXT文件扩展名
  @PATH文件绝对路经
  @RELPATH文件的相对路径
  @ISDIR如果文件类型是一个目录,那么判断是否是TRUE
  @FSIZE文件大小(用字节衡量)
  @FDATE文件上的最新更改日期邮戳
  @FTIME文件上的最新更改时间邮戳
  利用这些参数可以构造下面的例子来解决你删除备份脚本文件的难题。你可以基于更改时间/日期或者备份类型来创建脚本。你甚至可以构造能够同时参照两种标准的脚本。
  我们将仔细看看这些可能的脚本。记住,你将从T-SQL代码内部执行这个过程,所以你需要在一个xp_cmdshell访问中以EXEC
xp_cmdshell
'FORFILES
COMMAND'的格式总结这些语句。请注意,在所有的例子中我都会使用/Q

/F标签来作为删除命令。这意味着这个命令将使用安静模式(/Q)甚至删除只能读的文件(/F)。
  例子  当文件更改日期晚于10/18/2008时,删除所有C:Backup目录和它子目录下的.sql文件。
  EXEC
xp_cmdshell
'FORFILES
/p
c:BACKUP
/s
/m
*.sql
/d
10/18/2008
/c
"CMD
/C
del
/Q
/F
@FILE"'
  当文件更改日期多于30天时,删除所有C:Backup目录和它的子目录下的.sql文件。
  EXEC
xp_cmdshell
'FORFILES
/p
c:BACKUP
/s
/m
*.sql
/d
-30
/c
"CMD
/C
del
/Q
/F
@FILE"'
参考技术B sql
server
2000和sql
server
agent是作为windows服务运行的。每个服务必须与一个windows帐户相关联,并从这个帐户中衍生出安全性上下文。sql
server允许sa登录的用户(有时也包括其他用户)来访问操作系统特性。这些操作系统调用是由拥有服务器进程的帐户的安全性上下文来创建的。如果服务器被攻破了,那么这些操作系统调用可能被利用来向其他资源进行攻击,只要所拥有的过程(sql
server服务帐户)可以对其进行访问。因此,为sql
server服务仅授予必要的权限是十分重要的。
我们推荐您采用下列设置:
1)
sql
server
engine/mssqlserver
如果拥有指定实例,那么它们应该被命名为mssql$instancename。作为具有一般用户权限的windows域用户帐户运行。不要作为本地系统、本地管理员或域管理员帐户来运行。
2)
sql
server
agent
service/sqlserveragent
如果您的环境中不需要,请禁用该服务;否则请作为具有一般用户权限的windows域用户帐户运行。不要作为本地系统、本地管理员或域管理员帐户来运行。
重点:
如果下列条件之一成立,那么sql
server
agent将需要本地windows管理员权限:
sql
server
agent使用标准的sql
server身份验证连接到sql
server(不推荐);
sql
server
agent使用多服务器管理主服务器(msx)帐户,而该帐户使用标准sql
server身份验证进行连接;
sql
server
agent运行非sysadmin固定服务器角色成员所拥有的microsoft
activex脚本或
cmdexec作业。
如果您需要更改与sql
server服务相关联的帐户,请使用
sql
server
enterprise
manager。enterprise
manager将为sql
server所使用的文件和注册表键设置合适的权限。不要使用microsoft管理控制台的“服务”(在控制面板中)来更改这些帐户,因为这样需要手动地调制大量的注册表键和ntfs文件系统权限以及micorsoft
windows用户权限。
帐户信息的更改将在下一次服务启动时生效。如果您需要更改与sql
server以及sql
server
agent相关联的帐户,那么您必须使用enterprise
manager分别对两个服务进行更改。

以上是关于如何删除大量数据 sql server2005 数据量在8千万左右??的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整

怎样在SQL Server2005中删除数据库用户

如何转换SQL Server 2008数据库到SQL Server 2005

如何查看 SQL Server 2005 事务日志文件

SQL SERVER 2005删除重复数据

如何在SQL Server2005数据库中检查一个表是不是存在,如存在就删除表记录,如不存在就建表.