我要删掉数据库的一个表的数据,但是数据量太大,上千万条。
用这样的sql:
WHILE(condition)
begin
set rowcount 10000
delete from t1 where condition
end
sql server报错:transation log for database 'db1' is full.
怎样能解决这个问题?
ALTER DATABASE 数据库名
SET RECOVERY SIMPLE
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (数据库日志文件名, 1)
GO
--日志文件名可以通过下面的语句查找
select * from sys.database_files
-- Reset the database recovery model.
ALTER DATABASE 数据库名
SET RECOVERY FULL
GO
SQL Server 2008 日志收缩
SQL code
ALTER DATABASE 数据库名
SET RECOVERY SIMPLE
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (数据库日志文件名, 1)
GO
--日志文件名可以通过下面的语句查找
select * from sys.database_files
-- Reset the database recovery model.
ALTER DATABASE 数据库名
SET RECOVERY FULL
GO
SQL Server 2005
SQL code
DUMP TRANSACTION 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 WITH NO_LOG
DBCC SHRINKDATABASE (数据库名)
收缩日志,回收之前向操作系统申请但未占用的空间。这样可以省出一部分空间。
另外收缩数据库,可以将数据库之前向操作系统申请但未占用的空间。也省一部分出来。但也要看你的数据库,之前是否有很多删除操作,如果没有,实际占用的数据空间,就在哪儿摆着,也省不出来。
省了这两部分,LZ应该有地方继续记log了。
最后,最好日志备份,实时的进行过期备份删除。