[求助]SQL Sever如何还原数据库到一个新建了不同文件组的数据库(详情见内)

心里一愣 2013-10-27 10:55:54
具体是这样,之前老系统的数据库,在过去几年间数据不断增长,数据库文件添加的比较混乱,大约数据文件和日志文件都有若干个的样子。

目前系统升级,数据库内部设计一样,但是在新的服务器上规划好了不同的若干个数据文件组,和一个日志文件。

记得的数据库还原好像只能按照备份数据库的文件组来


求助各位大虾,怎样才能将备份的bak文件,还原到一个新建好了不同FileGroup的数据库中?
(或者从原数据库如何备份有什么需要注意的,也请指教!)
...全文
349 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2013-10-28
  • 打赏
  • 举报
回复
如果硬盘空间够,建议还是将多个合并到一个里吧。 只要是2005以上的,就可以合并。2000是不行的。
發糞塗牆 2013-10-28
  • 打赏
  • 举报
回复
还原的时候能修改路径的,但是没试过能不能在还原过程中创建文件组、文件然后指定还原
心里一愣 2013-10-28
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
好像不能这样弄,建议如果空间足够,在还原原有库时,先另起别名,然后创建一个空库,分配好文件存储之后,不数据导入新建的空库。
不科学呀~那样会相当麻烦的~有的表数亿条数据,怎么导入呢? 用INSERT的话还得分段拆分导入多次还容易出错(况且空间基本不足够多还原一个库...)... 所以还是数据库直接还原最靠谱呀,不过这个各种文件组大小数量一改,很纠结的说...
發糞塗牆 2013-10-28
  • 打赏
  • 举报
回复
好像不能这样弄,建议如果空间足够,在还原原有库时,先另起别名,然后创建一个空库,分配好文件存储之后,不数据导入新建的空库。
LongRui888 2013-10-27
  • 打赏
  • 举报
回复
比如这样:

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' --日志的逻辑名称->新的物理路径   
LongRui888 2013-10-27
  • 打赏
  • 举报
回复
在还原的时候通过move选项可以指定你要还原到的新的路径
Q315054403 2013-10-27
  • 打赏
  • 举报
回复
先恢复为别名数据库,将表INTO到整合的DB里就行,建聚集索引到新文件组上
LongRui888 2013-10-27
  • 打赏
  • 举报
回复
引用 8 楼 Flytousmile 的回复:
[quote=引用 7 楼 yupeigu 的回复:] 对了,如果没办法去改原来的服务器的文件组, 我觉得能不能这样,你先把原来的数据库还原到新的sql服务器上,可以使用move选项,来给你的原来的文件指定新的物理路径,然后,通过下面的命令,按照需要创建新的文件组,然后把文件加入到新的文件组:

--增加文件组
alter database 原来的数据库
add filegroup 新增文件组名

--增加文件到文件组
alter database 原来的数据库 
add file  
(  
    name = 文件的逻辑名,  
    filename = '文件的物理路径.ndf',  
    size = 100MB  
)  
to filegroup 新增文件组名
十分感谢小当家的热心回复! 不过和具体情况有一些冲突: 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文件添加上去~~~这样跟规划不符哇 ~~~[/quote] 1.新的数据库已经创建,但是你现在想把老的数据库还原到新的数据库上,肯定是会覆盖掉新的数据库的。 2.新的mdf是80G,原来的是50G,那么还原以后,可以通过下面的命令,增加mdf的文件到80G。

--修改数据文件的大小,增长大小,最大大小   
ALTER DATABASE 数据库
MODIFY FILE  
(  
    NAME = '逻辑文件名',  
    SIZE = 81920MB,      --必须大于之前的大小,否则报错   
    FILEGROWTH = 10%  
)  
心里一愣 2013-10-27
  • 打赏
  • 举报
回复
引用 7 楼 yupeigu 的回复:
对了,如果没办法去改原来的服务器的文件组, 我觉得能不能这样,你先把原来的数据库还原到新的sql服务器上,可以使用move选项,来给你的原来的文件指定新的物理路径,然后,通过下面的命令,按照需要创建新的文件组,然后把文件加入到新的文件组:

--增加文件组
alter database 原来的数据库
add filegroup 新增文件组名

--增加文件到文件组
alter database 原来的数据库 
add file  
(  
    name = 文件的逻辑名,  
    filename = '文件的物理路径.ndf',  
    size = 100MB  
)  
to filegroup 新增文件组名
十分感谢小当家的热心回复! 不过和具体情况有一些冲突: 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文件添加上去~~~这样跟规划不符哇 ~~~
LongRui888 2013-10-27
  • 打赏
  • 举报
回复
对了,如果没办法去改原来的服务器的文件组, 我觉得能不能这样,你先把原来的数据库还原到新的sql服务器上,可以使用move选项,来给你的原来的文件指定新的物理路径,然后,通过下面的命令,按照需要创建新的文件组,然后把文件加入到新的文件组:

--增加文件组
alter database 原来的数据库
add filegroup 新增文件组名

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

--增加文件组
alter database 原来的数据库
add filegroup 新增文件组名

--增加文件到文件组
alter database 原来的数据库 
add file  
(  
    name = 文件的逻辑名,  
    filename = '文件的物理路径.ndf',  
    size = 100MB  
)  
to filegroup 新增文件组名
心里一愣 2013-10-27
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
在还原的时候通过move选项可以指定你要还原到的新的路径
原来的文件组暂时不清楚了,具体数据可以得到,暂时可以假设只有3个文件组,mdf文件一个,几个ndf文件一个,几个ldf文件一个, 目标新建好的数据库是mdf文件一个文件组,ldf文件一个文件组,然后每两个ndf文件一个文件组。 怎样才能成功还原呢 - -``
LongRui888 2013-10-27
  • 打赏
  • 举报
回复
引用 3 楼 Flytousmile 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 比如这样:

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' --日志的逻辑名称->新的物理路径   
多谢回答! 具体情况是备份文件中是有1个mdf文件,5个ndf文件,3个日志文件。 而新建好的数据库有1个mdf文件,10个ndf文件,1个ldf文件。 Move的语法好像只能起到对原来的文件重名名以及改变路径的作用吧? 目前是我的文件个数什么都变化了哦![/quote] 哦,除了文件个数增多外, 原来的数据库有几个文件组呢,现在的数据库有几个文件组呢,
心里一愣 2013-10-27
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
比如这样:

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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧