当前位置:Gxlcms > mysql > [转]合并数据库文件(文件组)

[转]合并数据库文件(文件组)

时间:2021-07-01 10:21:17 帮助过:47人阅读

一个数据库EmployeeManagement中有一个主要数据库文件EmployeeManagement.mdf和两个次要数据库文件rt.ndf、YU.ndf,还有一个事务日志文件EmployeeManagement_log.ldf。 如图1: 现在想把 rt.ndf、YU.ndf里面的数据合并到EmployeeManagement.mdf。 这里使用的

一个数据库EmployeeManagement中有一个主要数据库文件EmployeeManagement.mdf和两个次要数据库文件rt.ndf、YU.ndf,还有一个事务日志文件EmployeeManagement_log.ldf。

如图1:

现在想把 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 文件名

下面我们做一个测试:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->Use EmployeeManagement
Go
Set Nocount On
Declare @DBFile1nvarchar(512),
@DBFile2nvarchar(512),
@Sql nvarchar(4000)

Set@DBFile1='RT'
Set@DBFile2='YU'

IfNotExists(Select1From sys.sysfiles Where name=@DBFile1)
Begin
Set @Sql=@DBFile1+ N' 数据库文件不存在或已删除!'
Raiserror50001@sql
Goto ExitFlag
End
IfNotExists(Select1From sys.sysfiles Where name=@DBFile2)
Begin
Set @Sql=@DBFile2+ N' 数据库文件不存在或已删除!'
Raiserror50001@sql
Goto ExitFlag
End

Ifobject_id('tempdb..#') IsNotNull
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:

执行后如图:

执行ok,通过统计数据库中的表总记录数是否一致,来达到检查在数据库文件变动前后表数据是否丢失。

统计表记录数,只是简单的检查方法;还可以通过备份还原与它相同的另一个数据库作比较,看数据是否一致。

测试好后,我们可以看到rt.ndf、YU.ndf文件已经给删除

http://www.cnblogs.com/wghao/archive/2009/05/15/1457192.html

人气教程排行