如何合并数据库文件
2009-05-15 01:15
441 查看
在一个数据库EmployeeManagement中有一个主要数据库文件EmployeeManagement.mdf和两个次要数据库文件rt.ndf、YU.ndf,还有一个事务日志文件EmployeeManagement_log.ldf。
如图1:
![](http://images.cnblogs.com/cnblogs_com/wghao/RemoveDBFilesPhoto/epmgt1.jpg)
现在想把 rt.ndf、YU.ndf里面的数据合并到EmployeeManagement.mdf。
这里使用的是收缩数据库文件的方法达到合并数据库文件的目的。
收缩数据库文件命令:
这里提供一个参数EMPTYFILE 的说明:
EMPTYFILE
将指定文件中的所有数据迁移到同一文件组中的其他文件。SQL Server 2005 Database Engine 不允许将数据放在用于 EMPTYFILE 选项的文件上。该选项允许使用 ALTER DATABASE 删除文件。
意思是说先执行收缩命令:Dbcc Shrinkfile(文件名,Emptyfile)
再执行删除数据库文件命令:Alter Database 数据库名 Remove File 文件名
下面我们做一个测试:
Use EmployeeManagement
Go
Set Nocount On
Declare @DBFile1 nvarchar(512),
@DBFile2 nvarchar(512),
@Sql nvarchar(4000)
Set @DBFile1='RT'
Set @DBFile2='YU'
If Not Exists(Select 1 From sys.sysfiles Where name=@DBFile1)
Begin
Set @Sql=@DBFile1+ N' 数据库文件不存在或已删除!'
Raiserror 50001 @sql
Goto ExitFlag
End
If Not Exists(Select 1 From sys.sysfiles Where name=@DBFile2)
Begin
Set @Sql=@DBFile2+ N' 数据库文件不存在或已删除!'
Raiserror 50001 @sql
Goto ExitFlag
End
If object_id('tempdb..#') Is Not Null
Drop Table #
Create Table #(Rows int)
Set @sql=Null
Select @sql=Isnull(@sql+Char(13)+Char(10),'')+'Insert Into # Select Count(*) From '+Quotename(name)
From sys.objects
Where type='U'
If @sql>'' Exec(@sql)
Select Sum(Rows) As [合并数据库文件前的所有表记录数] From #
Dbcc Shrinkfile(@DBFile1,Emptyfile) With No_Infomsgs
Exec(N'Alter Database EmployeeManagement Remove File '+@DBFile1)
Dbcc Shrinkfile(@DBFile2,Emptyfile) With No_Infomsgs
Exec(N'Alter Database EmployeeManagement Remove File '+@DBFile2)
Truncate Table #
Set @sql=Null
Select @sql=Isnull(@sql+Char(13)+Char(10),'')+'Insert Into # Select Count(*) From '+Quotename(name)
From sys.objects
Where type='U'
If @sql>'' Exec(@sql)
Select Sum(Rows) As [合并数据库文件后的所有表记录数] From #
ExitFlag:
执行后如图:
![](http://images.cnblogs.com/cnblogs_com/wghao/RemoveDBFilesPhoto/epmgt2.jpg)
执行ok,通过统计数据库中的表总记录数是否一致,来达到检查在数据库文件变动前后表数据是否丢失。
统计表记录数,只是简单的检查方法;还可以通过备份还原与它相同的另一个数据库作比较,看数据是否一致。
测试好后,我们可以看到rt.ndf、YU.ndf文件已经给删除
如图1:
![](http://images.cnblogs.com/cnblogs_com/wghao/RemoveDBFilesPhoto/epmgt1.jpg)
现在想把 rt.ndf、YU.ndf里面的数据合并到EmployeeManagement.mdf。
这里使用的是收缩数据库文件的方法达到合并数据库文件的目的。
收缩数据库文件命令:
DBCC SHRINKFILE ( { 'file_name' | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ] } ) [ WITH NO_INFOMSGS ]
这里提供一个参数EMPTYFILE 的说明:
EMPTYFILE
将指定文件中的所有数据迁移到同一文件组中的其他文件。SQL Server 2005 Database Engine 不允许将数据放在用于 EMPTYFILE 选项的文件上。该选项允许使用 ALTER DATABASE 删除文件。
意思是说先执行收缩命令:Dbcc Shrinkfile(文件名,Emptyfile)
再执行删除数据库文件命令:Alter Database 数据库名 Remove File 文件名
下面我们做一个测试:
Use EmployeeManagement
Go
Set Nocount On
Declare @DBFile1 nvarchar(512),
@DBFile2 nvarchar(512),
@Sql nvarchar(4000)
Set @DBFile1='RT'
Set @DBFile2='YU'
If Not Exists(Select 1 From sys.sysfiles Where name=@DBFile1)
Begin
Set @Sql=@DBFile1+ N' 数据库文件不存在或已删除!'
Raiserror 50001 @sql
Goto ExitFlag
End
If Not Exists(Select 1 From sys.sysfiles Where name=@DBFile2)
Begin
Set @Sql=@DBFile2+ N' 数据库文件不存在或已删除!'
Raiserror 50001 @sql
Goto ExitFlag
End
If object_id('tempdb..#') Is Not Null
Drop Table #
Create Table #(Rows int)
Set @sql=Null
Select @sql=Isnull(@sql+Char(13)+Char(10),'')+'Insert Into # Select Count(*) From '+Quotename(name)
From sys.objects
Where type='U'
If @sql>'' Exec(@sql)
Select Sum(Rows) As [合并数据库文件前的所有表记录数] From #
Dbcc Shrinkfile(@DBFile1,Emptyfile) With No_Infomsgs
Exec(N'Alter Database EmployeeManagement Remove File '+@DBFile1)
Dbcc Shrinkfile(@DBFile2,Emptyfile) With No_Infomsgs
Exec(N'Alter Database EmployeeManagement Remove File '+@DBFile2)
Truncate Table #
Set @sql=Null
Select @sql=Isnull(@sql+Char(13)+Char(10),'')+'Insert Into # Select Count(*) From '+Quotename(name)
From sys.objects
Where type='U'
If @sql>'' Exec(@sql)
Select Sum(Rows) As [合并数据库文件后的所有表记录数] From #
ExitFlag:
执行后如图:
![](http://images.cnblogs.com/cnblogs_com/wghao/RemoveDBFilesPhoto/epmgt2.jpg)
执行ok,通过统计数据库中的表总记录数是否一致,来达到检查在数据库文件变动前后表数据是否丢失。
统计表记录数,只是简单的检查方法;还可以通过备份还原与它相同的另一个数据库作比较,看数据是否一致。
测试好后,我们可以看到rt.ndf、YU.ndf文件已经给删除
![](http://images.cnblogs.com/cnblogs_com/wghao/RemoveDBFilesPhoto/epmgt3.jpg)
相关文章推荐
- 如何合并数据库文件?----数据库文件收缩
- 如何合并数据库文件(合并多个ndf)
- Vim编辑器如何合并文件与合并文件本行
- 如何通过ASP文件来增加数据库表中的字段
- 如何在android应用程序中拷贝第三方资产目录下的数据库文件到应用私有目录下
- 如何从数据库中读出并下载文件
- 如何恢复没有日志文件的数据库的方法
- 如何用B+树设计数据库中的索引文件
- 一个小把戏:如何上传一个.sql文件到一个主机并执行这个文件来配置数据库
- 如何将关系数据库(sql sever2005)中的表结构转化为XML架构进而生成XML文件???
- 如何往数据库中存储mp3,image等文件
- linux如何将json文件导入到mongo数据库
- sql2000备份数据库文件如何还原到sql2008数据库中
- 各种数据库如何运行sql文件?
- visual studio 2017如何打开 *.sdf 数据库文件
- 如何备份数据库文件?
- 如何将数据库表中前几条记录合并显示
- MAC 下如何合并.cue 和 .bin 文件成为 .ISO
- Oracle 数据库如何修改控制文件的位置
- 用git合并分支时,如何保持某些文件不被合并