zoukankan      html  css  js  c++  java
  • 如何合并数据库文件

    在一个数据库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 文件名

    下面我们做一个测试:

    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:

     执行后如图:

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

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

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


     

  • 相关阅读:
    leetcode刷题四<寻找两个有序数组的中位数>
    leetcode刷题第三天<无重复字符的最长子串>
    leetcode刷题第二天<两数相加>
    leetcode刷题第一日<两数和问题>
    sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
    flask微电影系统开发中上下文处理器
    gdb解决字符串打印果断措施
    邻接表
    Jarvis OJ 一些简单的re刷题记录和脚本
    windows控件理论学习
  • 原文地址:https://www.cnblogs.com/wghao/p/1457192.html
Copyright © 2011-2022 走看看