• sql数据库的备份还原操作出现的常见问题


    在备份还原数据库时遇到的问题 以Dept为例:

    backup database Dept to disk='d:\Deptbackup.bak'---数据备份没问题
    restore database Dept from disk='d:\Deptbackup.bak'----在还原数据的时候就会有如下提示

    因为数据库正在使用,所以无法获得对数据库的独占访问权!!
    解决方法:

    这时需要在还原数据库前先杀死正在使用数据库得线程.

    该解决方案用到了系统表中的sysprocesses ,若要访问 sysprocesses,您必须定位到master 数据库。
    use master
    declare @dbname varchar(20)
    set @dbname='Dept'
    declare @sql nvarchar(500)
    declare @spid int--SPID 值是当用户进行连接时指派给该连接的一个唯一的整数
    set @sql='declare getspid cursor for
    select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
    exec (@sql)
    open getspid
    fetch next from getspid into @spid
    while @@fetch_status<>-1--如果FETCH 语句没有执行失败或此行不在结果集中。
    begin
    exec('kill '+@spid)--终止正常连接
    fetch next from getspid into @spid
    end
    close getspid
    deallocate getspid

    但是如果这样做了在执行 restore database Dept from disk='d:\Deptbackup.bak'进行还原是就会提示一下错误:

    消息 3159,级别 16,状态 1,第 1 行
    尚未备份数据库 "Dept" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。
    消息 3013,级别 16,状态 1,第 1 行
    RESTORE DATABASE 正在异常终止。

    原因分析
    这是因为在线还原的数据库在最后备份后又产生了新的日志,所以按照默认设置的备份选项,系统将提示备份日志尾部以免造成事务中断。
    解决方法
    如果需要备份尾部日志则进行备份。如果不需要,则可以在还原数据库的的选项卡中选择【覆盖现有数据库】复选框。

    如果想使用命令进行操作则输入以下命令即可:

    RESTORE DATABASE [Dept] FROM DISK = 'd:/Deptbackup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
    GO

    如果输入以上命令,还提示类似如下的错误:

    消息 4038,级别 16,状态 1,第 1 行
    在设备 'd:/Deptbackup.bak' 上找不到文件 ID 1。
    消息 3013,级别 16,状态 1,第 1 行
    RESTORE DATABASE 正在异常终止。

    分析原因:

    FILE指定的ID值是错的。

    解决方法:

    在sql对象资源管理器-》管理-》SQL Server日志,可以查看错误日志,应该在日志中能查到相关的正确的FILE的ID,将ID改后再执行即可!

  • 相关阅读:
    哈希碰撞和哈希冲突
    ngix反向代理服务器
    spring管理实务有几种方式
    负载均衡rpc服务端
    struts2
    MySQL主从备份
    Spring 、SpringMVC 、Struts2之间的区别
    spring中的核心类有那些,各有什么作用?
    Servlet
    RPC与Http的区别
  • 原文地址:https://www.cnblogs.com/tianguook/p/2051127.html
Copyright © 2020-2023  润新知