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

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

你曾经有在执行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.至此会重新生成改库的日志文件,整个过程完成

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

时间: 2016-06-05

删除sqlserver数据库日志和没有日志的数据库恢复办法_MsSql的相关文章

没有日志,只有MDF文件如何恢复数据库

恢复|数据|数据库 由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了. 如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息 设备激活错误.物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误. 已创建名为 'C:\Program Files

sql server 错误9003:LSN无效(日志扫描号无效),对数据库的修复

sql server 错误9003:LSN无效(日志扫描号无效) 今天,从朋友那儿接到一个有问题的数据库文件与日志文件,在使用sql2000与sql2005进行数据库附加时, sql server报错,错误信息: "传递给数据库 'POS' 中的日志扫描操作的日志扫描号 (2806:120:1) 无效. 此错误可能指示数据损坏,或者日志文件(.ldf)与数据文件(.mdf)不匹配. 如果此错误是在复制期间出现的,请重新创建发布.否则,如果该问题导致启动期间出错,请从备份还原. 无法打开新数据库

2. SQL Server数据库状态监控 - 错误日志

原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因.Windows Event Log和 SQL Server Error Log就是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于 Oracle中的alert 文件. 一. 错误日志简介 1. Windows事件日志与SQL Server 错误日志

SQL删除数据如何保证不写日志,并释放空间

问题描述 SQL删除数据如何保证不写日志,并释放空间 因为我们的数据量非常大,数据不断增长,所以决定对前面的历史数据进行删除, 但是已经设置了简单模式,发现日志文件依旧不断的增加,而原来数据库的空间 依旧没有变小,只有unallocated space有减少的趋势,求各位大神怎么解决 解决方案 truncate table XXX 解决方案二: truncate table XXX

Exchange 2007队列数据库、队列事务日志文件超过临界值(阈值)导致无法接受

Exchange 2007队列数据库.队列事务日志文件超过临界值(阈值)导致无法接受邮件解决方案 前天,客户Exchange 2007邮件系统突然出问题了.具体表现如下: 只能发邮件,不能收邮件.OUTLOOK中点击"发送和接收"测试,只有正在发送,没有正在接收状态. 查看日志发现如下提示: The Microsoft Exchange Transport service is rejecting message submissions because the available di

MYSQL启用日志,查看日志,利用Mysqlbinlog工具恢复MySQL数据库

MYSQL启用日志 [root@jianshe99]# whereis my.ini [root@jianshe99]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the

sql server 数据库操作报错“日志不可用”

问题描述 sql server 数据库操作报错"日志不可用" 在操作数据库时查询信息操作没有问题,但增删改操作时就会报下面的错误请问是什么原因: 消息 9001,级别 21,状态 1,第 2 行 数据库 'hrtest1' 的日志不可用.有关相应错误消息,请查看事件日志.修复所有错误后重新启动数据库. 解决方案 SQL Server 数据库操作关于SQL Server数据库日志已满的解决方法SQL Server 数据库操作总结(sql语法的使用) 解决方案二: recovery下数据库

.NET Core的日志[2]:将日志输出到控制台

对于一个控制台应用,比如采用控制台应用作为宿主的ASP.NET Core应用,我们可以将记录的日志直接输出到控制台上.针对控制台的Logger是一个类型为ConsoleLogger的对象,ConsoleLogger对应的LoggerProvider类型为ConsoleLoggerProvider,这两个类型都定义在 NuGet包"Microsoft.Extensions.Logging.Console"之中. 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录

数据库服务器-c#连接SQLSERVER无法打开登陆所请求的数据库

问题描述 c#连接SQLSERVER无法打开登陆所请求的数据库 源代码是这样的 报错是 数据库服务器已经开了 新手求教~ 解决方案 确认你的用户名密码正确吗,赋予权限了吗 解决方案二: 下面提示很清楚啊!看看用户是否有访问权限, 解决方案三: 登录失败,你的账户对吗,可以访问数据库信息?

.NET Core的日志[3]:将日志写入Debug窗口

定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息.如果需要使用DebugLogger来写日志,我们需要将它的提供者DebugLoggerProvider注册到LoggerFactory上.由于定义在Debug类型中的所有方法都是针对Debug编译模式的,所以在只有针对Debug模式编译的应用中使用DebugLogger才有意义.这里将的"De