none
数据库还原问题! RRS feed

  • 问题

  • 在sql2000下使用下面语句没有任何问题
    backup database test to disk='C:\ba.brk'
    restore database test from disk='C:\ba.brk'

    但是在2008下使用
    restore database test from disk='C:\ba.brk'

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

    这是为什么呢?


    付出不一定有回报,不付出那就一定没有回报!
    2010年8月23日 7:12

答案

  • Those backup/restore statements work fine on my sql2k/2k5/2k8 servers, you can try following again:

    backup database test to disk='C:\ba.brk' with init

    restore database test from disk='C:\ba.brk'

    2010年8月24日 13:03

全部回复

  • 再着,怎么用sql语句实现数据定时备份?
    付出不一定有回报,不付出那就一定没有回报!
    2010年8月23日 7:15
  • 进行数据备份后(backup database),数据库仍然处于试用状态, 在还原之前这段期间可能会有数据的变更.

    这样直接还原就可能造成数据的丢失, 我想sqlserver为了防止这种风险禁止了直接还原.(没有用过2000,不清楚,但我想原理是一样的)

     

    备份尾日志后数据库就处于无法使用的状态了,数据也都保存在数据备份和日志备份中了.这样没有数据丢失的风险.

     

    将恢复模式设置为full, sqlserver的日志就起到了试试备份的功能. 日志中包含了对数据库的全部变更


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年8月23日 8:50
    版主
  • 在sql2000下使用下面语句没有任何问题
    backup database test to disk='C:\ba.brk'
    restore database test from disk='C:\ba.brk'

    但是在2008下使用
    restore database test from disk='C:\ba.brk'

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

    这是为什么呢?


    付出不一定有回报,不付出那就一定没有回报!
    How did you backup db on sql2k8? Tried "restore database test from disk='C:\ba.brk' with replace"? By the way, you can't use t-sql to backup db at specific time. Need create sql job or maintenance plan to backup db in schedule.
    2010年8月23日 14:25
  • 在sql2000下使用下面语句没有任何问题
    backup database test to disk='C:\ba.brk'
    restore database test from disk='C:\ba.brk'

    但是在2008下使用
    restore database test from disk='C:\ba.brk'

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

    这是为什么呢?


    付出不一定有回报,不付出那就一定没有回报!
    How did you backup db on sql2k8? Tried "restore database test from disk='C:\ba.brk' with replace"? By the way, you can't use t-sql to backup db at specific time. Need create sql job or maintenance plan to backup db in schedule.


    我是做企业管理软件的~针对客户

    客户不一定懂这个


    付出不一定有回报,不付出那就一定没有回报!
    2010年8月23日 22:16
  • 进行数据备份后(backup database),数据库仍然处于试用状态, 在还原之前这段期间可能会有数据的变更.

    这样直接还原就可能造成数据的丢失, 我想sqlserver为了防止这种风险禁止了直接还原.(没有用过2000,不清楚,但我想原理是一样的)

     

    备份尾日志后数据库就处于无法使用的状态了,数据也都保存在数据备份和日志备份中了.这样没有数据丢失的风险.

     

    将恢复模式设置为full, sqlserver的日志就起到了试试备份的功能. 日志中包含了对数据库的全部变更


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    怎么用T-SQL实现呢?

    付出不一定有回报,不付出那就一定没有回报!
    2010年8月23日 22:18
  • 在sql2000下使用下面语句没有任何问题
    backup database test to disk='C:\ba.brk'
    restore database test from disk='C:\ba.brk'

    但是在2008下使用
    restore database test from disk='C:\ba.brk'

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

    这是为什么呢?


    付出不一定有回报,不付出那就一定没有回报!
    How did you backup db on sql2k8? Tried "restore database test from disk='C:\ba.brk' with replace"? By the way, you can't use t-sql to backup db at specific time. Need create sql job or maintenance plan to backup db in schedule.


    我是做企业管理软件的~针对客户

    客户不一定懂这个


    付出不一定有回报,不付出那就一定没有回报!
    If customers don't have dba, app vendor can training them.
    2010年8月24日 1:05
  • 进行数据备份后(backup database),数据库仍然处于试用状态, 在还原之前这段期间可能会有数据的变更.

    这样直接还原就可能造成数据的丢失, 我想sqlserver为了防止这种风险禁止了直接还原.(没有用过2000,不清楚,但我想原理是一样的)

     

    备份尾日志后数据库就处于无法使用的状态了,数据也都保存在数据备份和日志备份中了.这样没有数据丢失的风险.

     

    将恢复模式设置为full, sqlserver的日志就起到了试试备份的功能. 日志中包含了对数据库的全部变更


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    怎么用T-SQL实现呢?

    付出不一定有回报,不付出那就一定没有回报!
    Tried restore with replace option?
    2010年8月24日 1:06
  • 根据错误提示, 可能的原因:

    1. 可能之前有做备份到 c:\ba.brk , 当你再次备份的时候, 是把本次备份追加到备份文件,  而还原的时候, 默认是还原最早的备份, 你最早的备份有可能不是完全备份, 所以还原的时候会有问题.

    试试先删除 c:\ba.brk, 重新备份一次

    backup database test to disk='C:\ba.brk'

    2. 还原的 server 上已经存在 test 库, 而备份的信息与当前已经存在的库有些东西不匹配, 所以出错.

    如果确实已经存在, 请把库先删除再还原

    restore database test from disk='C:\ba.brk'

    2010年8月24日 4:52
  • 根据错误提示, 可能的原因:

    1. 可能之前有做备份到 c:\ba.brk , 当你再次备份的时候, 是把本次备份追加到备份文件,  而还原的时候, 默认是还原最早的备份, 你最早的备份有可能不是完全备份, 所以还原的时候会有问题.

    试试先删除 c:\ba.brk, 重新备份一次

    backup database test to disk='C:\ba.brk'

    2. 还原的 server 上已经存在 test 库, 而备份的信息与当前已经存在的库有些东西不匹配, 所以出错.

    如果确实已经存在, 请把库先删除再还原

    restore database test from disk='C:\ba.brk'

    均不是以上情况!

     

    在2000完全没问题,2008就报错!不知道2005是个什么情况
    Create database test

    backup database test to disk='C:\ba.brk' 

    restore database test from disk='C:\ba.brk'


    付出不一定有回报,不付出那就一定没有回报!
    2010年8月24日 6:10
  • Those backup/restore statements work fine on my sql2k/2k5/2k8 servers, you can try following again:

    backup database test to disk='C:\ba.brk' with init

    restore database test from disk='C:\ba.brk'

    2010年8月24日 13:03