如何合并数据库文件(合并多个ndf)

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

如图1:

如何合并数据库文件(合并多个ndf)_第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 文件名

 

下面我们做一个测试:

 

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:

 

 执行后如图:

如何合并数据库文件(合并多个ndf)_第2张图片

 

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

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

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

 

 

如何合并数据库文件(合并多个ndf)_第3张图片

你可能感兴趣的:(数据库)