.bacpak 文件中的 .BCP 文件是什么?

Fra*_*ani 3 sql-server t-sql bacpac

在 dba.stackexchange.com 上潜水我找到了一个很好的答案,教我如何.bacpac使用文件资源管理器打开文件。

我用数据库试了一下,AdventureWorks2008R2我所做的就是:

  1. 将数据库保存为.bacpac文件
  2. 将文件扩展名重命名为 .zip
  3. 解压

好了,您可以将数据库的表作为文件夹查看,并且在每个文件夹中您可以查看原始数据。

在此处输入图片说明

但是当我打开文件夹时,Person.Address我看到里面有 38 个扩展名为.BCP.

在此处输入图片说明

一开始我教他们是数据被分割的页面。但那些不能是页面,因为它们的重量约为67KB. 页面应该权重8KB

所以我用这个查询检查了页数:

-- Total # of pages, used_pages, and data_pages for a given heap/clustered index
SELECT 
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) AS TotalPages, 
    SUM(a.used_pages) AS UsedPages, 
    (SUM(a.total_pages) - SUM(a.used_pages)) AS UnusedPages
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, p.Rows
ORDER BY 
    t.Name
Run Code Online (Sandbox Code Playgroud)

我发现Person.Address桌子上有689页面。

那么这 38 个.BCP文件是什么?

AMt*_*two 10

BACPAC文件中的数据是使用批量复制 (BCP) 实用程序从数据库导出的。从文档:

大容量复制程序实用程序 (bcp) 在 Microsoft SQL Server 实例和用户指定格式的数据文件之间大容量复制数据。bcp 实用程序可用于将大量新行导入 SQL Server 表或将表中的数据导出到数据文件中。

BACPAC文件包含使用 BCP 的“本机”文件格式导出的数据,这是一种二进制类型的文件。表的数据只是跨多个文件导出,而不是一个大文件。如果您查看.bcp不同表中的文件,您会发现文件大小会有所不同,大小的偏差与具有不同数据宽度的不同行的变化有关。例如,当我创建bacpacAdventureWorks 的.bcp文件时,文件Purchasing.PurchaseOrderDetail范围从 39kb 到 62kb。

BCP(以及BACPAC生成)不像标准备份那样通过复制数据页来备份数据,而是进行表级查询和导出。