具体是这样,之前老系统的数据库,在过去几年间数据不断增长,数据库文件添加的比较混乱,大约数据文件和日志文件都有若干个的样子。目前系统升级,数据库内部设计一样,但是在新的服务器上规划好了不同的若干个数据文件组,和一个日志文件。记得的数据库还原好像只能按照备份数据库的文件组来
求助各位大虾,怎样才能将备份的bak文件,还原到一个新建好了不同FileGroup的数据库中?
(或者从原数据库如何备份有什么需要注意的,也请指教!)数据库还原SQL Server FILEGROUP

解决方案 »

  1.   

    在还原的时候通过move选项可以指定你要还原到的新的路径
      

  2.   

    比如这样:
    restore database test_other  --新的数据库名称   
    from disk = 'c:\test_1.bak'  
    with file = 2,  
         move 'test'     to 'c:\test_other.mdf',    --数据的逻辑名称->新的物理路径   
         move 'test_log' to 'c:\test_other_log.log' --日志的逻辑名称->新的物理路径   
      

  3.   

    多谢回答!
    具体情况是备份文件中是有1个mdf文件,5个ndf文件,3个日志文件。
    而新建好的数据库有1个mdf文件,10个ndf文件,1个ldf文件。Move的语法好像只能起到对原来的文件重名名以及改变路径的作用吧?
    目前是我的文件个数什么都变化了哦!
      

  4.   

    多谢回答!
    具体情况是备份文件中是有1个mdf文件,5个ndf文件,3个日志文件。
    而新建好的数据库有1个mdf文件,10个ndf文件,1个ldf文件。Move的语法好像只能起到对原来的文件重名名以及改变路径的作用吧?
    目前是我的文件个数什么都变化了哦!哦,除了文件个数增多外,
    原来的数据库有几个文件组呢,现在的数据库有几个文件组呢,
      

  5.   

    原来的文件组暂时不清楚了,具体数据可以得到,暂时可以假设只有3个文件组,mdf文件一个,几个ndf文件一个,几个ldf文件一个,
    目标新建好的数据库是mdf文件一个文件组,ldf文件一个文件组,然后每两个ndf文件一个文件组。怎样才能成功还原呢 - -``
      

  6.   

    再想想,你这种情况好像,也不能通过restore的时候指定move选项来,移动文件到新的路径。我建议你这样,你先在原来的数据库上,加上新的文件组,然后通过下面的语句,把原来的文件,调整到新的文件组下面,然后再备份:--增加文件组
    alter database 原来的数据库
    add filegroup 新增文件组名--增加文件到文件组
    alter database 原来的数据库 
    add file  
    (  
        name = 文件的逻辑名,  
        filename = '文件的物理路径.ndf',  
        size = 100MB  
    )  
    to filegroup 新增文件组名
      

  7.   

    对了,如果没办法去改原来的服务器的文件组,
    我觉得能不能这样,你先把原来的数据库还原到新的sql服务器上,可以使用move选项,来给你的原来的文件指定新的物理路径,然后,通过下面的命令,按照需要创建新的文件组,然后把文件加入到新的文件组:
    --增加文件组
    alter database 原来的数据库
    add filegroup 新增文件组名--增加文件到文件组
    alter database 原来的数据库 
    add file  
    (  
        name = 文件的逻辑名,  
        filename = '文件的物理路径.ndf',  
        size = 100MB  
    )  
    to filegroup 新增文件组名
      

  8.   

    十分感谢小当家的热心回复!
    不过和具体情况有一些冲突:
    1、新的数据库已经创建(含FileGroup、LogicName等),而该方案会破坏这种既定结构。
    2、假使我不先建好新的数据库,按照还原时通过Move指定位置并重命名的方法,会有下面的问题:
        比如旧的数据库mdf文件是50G,ndf是30G(假设有3个ndf文件),ldf若干,
        我新规划的数据库mdf文件是80G,ndf文件初始20G(定义了20个ndf文件,属于10个文件组),ldf不论。
        这种情况按照你的方案只能是mdf过来是50G,然后后面3个ndf文件,然后我再用ALTER DB add file把剩下的ndf文件添加上去~~~这样跟规划不符哇 ~~~
      

  9.   

    十分感谢小当家的热心回复!
    不过和具体情况有一些冲突:
    1、新的数据库已经创建(含FileGroup、LogicName等),而该方案会破坏这种既定结构。
    2、假使我不先建好新的数据库,按照还原时通过Move指定位置并重命名的方法,会有下面的问题:
        比如旧的数据库mdf文件是50G,ndf是30G(假设有3个ndf文件),ldf若干,
        我新规划的数据库mdf文件是80G,ndf文件初始20G(定义了20个ndf文件,属于10个文件组),ldf不论。
        这种情况按照你的方案只能是mdf过来是50G,然后后面3个ndf文件,然后我再用ALTER DB add file把剩下的ndf文件添加上去~~~这样跟规划不符哇 ~~~1.新的数据库已经创建,但是你现在想把老的数据库还原到新的数据库上,肯定是会覆盖掉新的数据库的。2.新的mdf是80G,原来的是50G,那么还原以后,可以通过下面的命令,增加mdf的文件到80G。--修改数据文件的大小,增长大小,最大大小   
    ALTER DATABASE 数据库
    MODIFY FILE  
    (  
        NAME = '逻辑文件名',  
        SIZE = 81920MB,      --必须大于之前的大小,否则报错   
        FILEGROWTH = 10%  
    )  
      

  10.   

    先恢复为别名数据库,将表INTO到整合的DB里就行,建聚集索引到新文件组上
      

  11.   


    不科学呀~那样会相当麻烦的~有的表数亿条数据,怎么导入呢?
    用INSERT的话还得分段拆分导入多次还容易出错(况且空间基本不足够多还原一个库...)...
    所以还是数据库直接还原最靠谱呀,不过这个各种文件组大小数量一改,很纠结的说...