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

一、删除数据库日志文件的方法

你曾经有在执行SQL的时候,数据库报事务日志已满,然后执行报错。然后纠结于怎么删除数据库日志,捣鼓半天吗,现在就提供两种删除日志文件的方法,希望能够帮到你!

方法一:手工操作
1.数据库->右键->属性->选项-恢复模式->由完成切换成简单
2.数据库->右键->任务->收缩-文件->由完成切换成简单->文件类型->日志->将文件收缩到

方法二:存储过程代替手工操作

代码如下:

--日志文件收缩至多少M
    DECLARE @DBLogSise AS INT
    SET @DBLogSise=0
    --查询出数据库对应的日志文件名称
    DECLARE @strDBName AS NVARCHAR(500)    DECLARE @strLogName AS NVARCHAR(500)    DECLARE @strSQL AS VARCHAR(1000)   
    SELECT
        @strLogName=B.name,        @strDBName=A.name    FROM master.sys.databases AS A    INNER JOIN sys.master_files AS B    ON A.database_id = B.database_id    WHERE A.database_id=DB_ID()

SET @strSQL='
    --设置数据库恢复模式为简单
    ALTER DATABASE ['+@strDBName+'] SET RECOVERY SIMPLE;
    --收缩日志文件
    DBCC SHRINKFILE ('''+@strLogName+''' , '+CONVERT(VARCHAR(20),@DBLogSise)+');
    --恢复数据库还原模式为完整
    ALTER DATABASE ['+@strDBName+'] SET RECOVERY FULL '
    exec(@strSQL)

1.在数据库中执行上面的存储过程
2.然后再执行 EXEC dbo.usp_p_delDBLog @DBLogSise = 0 (收缩至多少M)

二、没有日志文件的数据库恢复方法

今天客户那边执行SQL报错,经查看是客户服务器数据库磁盘已被全部用完,日志文件达到500GB的程度,后来由于我的错误操作导致日志文件(.ldf)被删除,后来附加.mdf文件老是说没有日志文件附加不成功,后来经过一番折腾终于解决了,下面分享一下!

操作步骤

1.新建同名的数据库文件
2.暂停SQLSetver服务
3.将原先的mdf文件,覆盖新建的数据库,删除新数据库的ldf文件
4.重新启动SQLSetver服务 ,这时看到的数据库是这个样子的,打不开

5.执行以下SQL语句


代码如下:

--1.设置为紧急状态
alter database 数据库名称 set emergency
--2.设置为单用户模式
alter database 数据库名称 set single_user
--3.检查并重建日志文件
dbcc checkdb('数据库名称',REPAIR_ALLOW_DATA_LOSS)
--4.第3步操作如果有错误提示,运行第4步,没有错误则跳过
dbcc checkdb('数据库名称',REPAIR_REBUILD)
--5.恢复成多用户模式
alter database 数据库名称 set multi_user

6.至此会重新生成改库的日志文件,整个过程完成

或者也可以采用手动附加(本方法参考@码道程工)

(0)

相关推荐

  • mssql无数据库日志文件恢复数据库的方法第1/2页

    方法一 1.新建一个同名的数据库 2.再停掉sqlserver(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sqlserver 5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名) 6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用 数据库的脚本创建一个新的数据库,并将数据导进去就行了. USEMASTER GO SP_CONFIGURE'ALLOWUPDATES',1RECONFIGURE

  • sqlserver 数据库日志备份和恢复步骤

    --创建测试数据库 CREATE DATABASE Db GO --对数据库进行备份 BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT GO --创建测试表 CREATE TABLE Db.dbo.TB_test(ID int) --延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败) WAITFOR DELAY '00:00:01' GO --假设我们现在误操作删

  • sqlserver 日志恢复方法(搞定drop和truncate)

    --1 use master backup database logTest to disk='D:\\Program Files\\Microsoft SQL Server\\MSSQL10.MSSQLSERVER\\MSSQL\\Backup\\logTest.bak' with format --2 use logTest create table table_1(Id int, test varchar(max)) insert table_1(Id,test) values (1,'3

  • 拯救你的数据 通过日志恢复MSSQL数据

    这段时间看了关于在SQL server 中通过日志和时间点来恢复数据.也看了一些网上的例子,看如何通过日志来恢复数据. 前提条件: 数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项     如果是简单模式:类似下面的语句操作数据就不会记录到日志中:  select * into t from [表名] 这时为保证数据的完整要将数据库的恢复模式改成"完整" 测试环境: 1.建立数据库和测试表         create database zp create table [

  • SQLServer2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数据库的方法

    复制代码 代码如下: exec sp_attach_db exun,'d:\exun2.mdf' 一句话就可以了. 网上看了那些比较繁琐的,都是sql server 2000版本的. (可能执行一次不能成功,测试了下,有时候需要执行2次以上命令才行) 执行了之后,记得刷新数据库,不然是不会显示的

  • MSSQL 2005/2008 日志压缩清理方法小结

    适用于SQL Server 2005的方法 --------------------------------------------- 复制代码 代码如下: USE DNName GO 1,清理日志 复制代码 代码如下: Backup Log DNName WITH no_log GO 2,截断事务日志 复制代码 代码如下: DUMP TRANSACTION DNName WITH no_log GO 3,收缩 两种方式: 1):压缩数据库 DBCC SHRINKDATABASE(库名) GO

  • MSSQL 监控数据/日志文件增长实现方法

    前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划是一方面,但是,是不是要分析一下是什么原因造成磁盘空间不足的呢?会不会是因为突然暴增的日志文件,抑或是系统业务猛增导致数据量暴增,还是历史数据累计原因....分析总得有数据来支撑吧,但是现在只有那些数据文件的当前大小信息,没有数据文件的历史增长变化信息,所以,今天就想实现这么一个功能,每天(频率可以调整)去收集一下数据文件的信息,放到一个表里面,这样方便我们

  • 收缩数据库日志文件的方法(仅适用于mssql2005)

    执行以下语句,在执行前将dbname修改为需要瘦身的数据库名称,执行后数据库日志文件将变为1M大小. 复制代码 代码如下: backup log dbName with NO_LOG; backup log dbName with TRUNCATE_ONLY; DBCC SHRINKDATABASE(dbName);

  • mssql自动备份及自动清除日志文件服务器设置

    1.每日自动备份 强烈建议有条件的用户进行此操作! 1.打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server--SQL Server组--双击打开你的服务器 2.然后点上面菜单中的工具--选择数据库维护计划器 3.下一步选择要进行自动备份的数据--下一步更新数据优化信息,这里一般不用做选择--下一步检查数据完整性,也一般不选择 4.下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定 5.下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新

  • 清空MSSQL日志 与set recovery simple

    由于服务器上的数据库使用很长时间了日志文件已经是好几个了 数据库服务器的一直采用的备份我想应该可以放弃以前的日志文件了所以清理以前的日志文件 我现在想的问题是在利用备份文件恢复的时候 要不要使用到日志文件呢 一会再查资料找下,如果不会的话,就使用简单的数据模式了,节约日志文件占的空间 1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名称  WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式

随机推荐