删除sqlserver数据库日志和没有日志的数据库恢复办法

1. 删除sqlserver数据库日志

在sqlserver中,每个数据库都有一个事务日志,用于记录数据库中所有修改的操作,以便在出现故障或回滚时进行恢复。然而,事务日志也会占用大量的磁盘空间,对服务器性能有影响。如果您有一些不太关键的数据库,而且不需要恢复到某个特定的时间点,那么可以考虑删除事务日志,以节省磁盘空间。

1.1 查看数据库日志使用情况

在删除数据库日志之前,需要先查看数据库日志的使用情况,可以使用以下查询语句:

USE <数据库名>;

GO

DBCC SQLPERF(LOGSPACE);

GO

其中,<数据库名>需要替换为你要查看的数据库名。执行上述语句后,会返回一个结果集,其中包含了该数据库日志文件的大小(单位为KB),以及已使用的百分比。例如:

Database Name   Log Size (MB)

Log Space Used (%)

Status

<数据库名> 4648.586

99.79858

     0

从上面的结果中可以看出,<数据库名>数据库的日志文件大小为4648.586MB,已使用99.79858%。如果该数据库日志文件的大小占用了过多的磁盘空间,可以考虑删除一部分日志文件。

1.2 停止数据库日志的增长

为了删除数据库日志,需要先停止数据库的日志增长。可以通过修改数据库的恢复模式来达到这个目的。

在sqlserver中,有三种恢复模式可供选择:

完全恢复模式(Full Recovery Model)

大容量日志恢复模式(Bulk-Logged Recovery Model)

简单恢复模式(Simple Recovery Model)

其中,完全恢复模式和大容量日志恢复模式的日志将不会被自动删除,如果不手动进行删除,会占用大量的磁盘空间。而简单恢复模式的日志文件会每次checkpoint后被自动删除。如果你的数据库不需要进行定点还原,可以将数据库的恢复模式改为简单恢复模式,使数据库日志的增长得到控制。可以使用以下语句进行修改:

USE master;

GO

ALTER DATABASE <数据库名> SET RECOVERY SIMPLE;

GO

其中,<数据库名>需要替换为你要修改的数据库名。

1.3 缩小数据库日志文件

在停止了数据库日志的增长后,可以使用以下语句缩小数据库日志文件的大小:

USE <数据库名>;

GO

DBCC SHRINKFILE (<日志文件名>, <缩小后的大小>);

GO

其中,<数据库名>需要替换为你要操作的数据库名;<日志文件名>需要替换为该数据库的事务日志文件名(可以通过查询系统表sys.database_files获取);<缩小后的大小>为你希望该文件缩小到的大小,单位为MB。

需要注意的是,如果要缩小日志文件到一个比较小的值,需要多次执行以上缩小命令,以便每次只缩小一点点。

2. 没有日志的数据库恢复办法

有些时候,当我们使用sqlserver时,可能因为一些原因造成了某些数据库的日志文件被删除或者损坏,导致该数据库无法正常启动。下面介绍一下针对无日志的数据库的恢复方法:

2.1 启动sqlserver服务并新建一个数据库

由于我们需要恢复的数据库没有日志,无法正常启动,那么首先需要确保sqlserver服务已经启动。然后,新建一个数据库用于恢复数据。可以使用以下语句:

USE master;

GO

CREATE DATABASE <新数据库名>;

GO

其中,<新数据库名>需要替换为你自己想要的数据库名。

2.2 将原数据库的数据文件复制到新数据库文件夹

找到原数据库的数据文件,将其复制到新数据库所在的文件夹中。可以使用以下语句来查找原数据库的数据文件:

USE <原数据库名>;

GO

SELECT * FROM sys.database_files;

GO

其中,<原数据库名>需要替换为你要查找的数据库名。查询结果中会返回该数据库的数据文件名和文件路径。将数据文件复制到新数据库文件夹中,可以使用以下语句来移动数据文件:

USE master;

GO

ALTER DATABASE <新数据库名> MODIFY FILE ( NAME = <文件名>, FILENAME = 'D:\...<文件路径>\<文件名>' );

GO

其中,<新数据库名>为新建的数据库名;<文件名>为查询结果中的数据文件名;<文件路径>为数据文件所在的路径。

2.3 使用DBCC CHECKDB恢复数据

在将原数据库的数据文件复制到新数据库文件夹后,可以使用DBCC CHECKDB命令来恢复数据。该命令将在检查数据库时自动修复其中的问题。可以使用以下语句:

USE <新数据库名>;

GO

DBCC CHECKDB;

GO

查询成功后,即可恢复原数据库中的数据了。

总结

以上就是删除sqlserver数据库日志和没有日志的数据库恢复办法的详细介绍。在进行修改或删除数据库日志文件时,需要特别注意,不要误删文件或者误操作数据库。在数据库出现故障时,要及时采取措施进行恢复,以免造成不必要的损失。

数据库标签