none
纯属折腾的问题 RRS feed

  • 问题

  • 周五晚上做了一个变更,一个数据库分离之后附加不上了,不过这个问题已经解决了。

    环境是Windows 2003+ sql server 2005

    我要说的是另外一个问题:

    1、服务器A上有几十个数据库,由于空间不够,我增加了一个新硬盘,需要将一部分数据库迁移到新的空间中.

    2、将数据库分离,然后复制到新分区中附加,其中一个叫HK的数据库在附加的时候报告9003错误;

    3、后来把mdf文件复制到B机器上,用单mdf文件附加成功了,然后将mdf和新生成的ldf复制到a机器附加成功。诡异的是,同样的操作,在A机器就不行,数据都是A机器上产生。

    这个问题就解决了,后来我在B机器上作了下面操作:

    1、将数据库服务停止,将数据库HK(前面附加的)的mdf和ldf文件用A机器上分离后的文件覆盖。

    2、启动数据库服务,这时数据库hk就是置疑状态了。我的目的就是想在这种情况将此数据库搞成正常状态,以下是做的尝试:

    a、将hk设置为emergency,成功;

    b、将hk设置为single_user,成功;

    c、dbcc checkDB成功;

    d、dbcc checkDB加上REPAIR_ALLOW_DATA_LOSS,执行失败。报告找不到ldf文件,使用sys.database_file看到physical_file的属性还是机器A上面的属性。但是右键看数据库属性,看到文件位置的又是“正常(mdf文件真实位置)”的。

    e、用alter databas modify文件位置,在置疑状态下报告成功,但重启后仍然与步骤d一样。在emergency模式下不能修改,因为此时mdf是只读的。

    emergency模式下除了可以让用户将数据export,还有什么可以做?

    为什么会出现步骤d这种情况?什么地方可以修改?

    2012年8月6日 8:27

答案

  • >emergency模式下除了可以让用户将数据export,还有什么可以做?

    通常的做法是rebuild log。

    另外,backup & restore是比较安全的做法。虽然麻烦,占用空间。但是生产数据库还是安全点儿好。


    想不想时已是想,不如不想都不想。

    2012年8月6日 14:35
    版主

全部回复

  • For this kind of work, you are better to change file path with 'alter database', take db offline, copy file to new path then bring db online. Or just simply do backup then restore with move options, much safer than detaching db. Whenever detach db, have to make sure you have good backup and the db is in good shape.
    2012年8月6日 13:21
  • 9003错误是日志文件缺失或者损坏,又或者数据库文件损坏

    这时候可以在紧急模式下重建日志文件,我觉得日志文件损坏的可能性比较大,又或者将数据库分离复制到新分区中没有复制日志文件

    这篇是解决“sql server 错误9003:LSN无效(日志扫描号无效)”的文章,按照这篇文章的做法应该就可以恢复数据库了,但是会丢失事务

    http://wenku.baidu.com/view/e9913032ee06eff9aef80759.html###



    给我写信: QQ我:点击这里给我发消息


    2012年8月6日 14:26
  • 9003错误是日志文件缺失或者损坏,又或者数据库文件损坏

    这时候可以在紧急模式下重建日志文件,我觉得日志文件损坏的可能性比较大,又或者将数据库分离复制到新分区中没有复制日志文件

    这篇是解决“sql server 错误9003”的文章,按照这篇文章的做法应该就可以恢复数据库了,但是会丢失事务

    http://wenku.baidu.com/view/e9913032ee06eff9aef80759.html###



    给我写信: QQ我:点击这里给我发消息


    看来你没搞过恢复数据库的事情。sql 2005按照这篇文章可搞不定。

    想不想时已是想,不如不想都不想。

    2012年8月6日 14:31
    版主
  • >emergency模式下除了可以让用户将数据export,还有什么可以做?

    通常的做法是rebuild log。

    另外,backup & restore是比较安全的做法。虽然麻烦,占用空间。但是生产数据库还是安全点儿好。


    想不想时已是想,不如不想都不想。

    2012年8月6日 14:35
    版主
  • 不好意思,刚才验证了,SQL2000才行,SQL2005不行


    给我写信: QQ我:点击这里给我发消息

    2012年8月6日 14:53