在 dba.stackexchange.com 上潜水,我找到了一个很好的答案,教我如何.bacpac
使用文件资源管理器打开文件。
我试了一下数据库AdventureWorks2008R2
,我所做的只是:
- 将数据库保存为
.bacpac
文件 - 将文件扩展名重命名为
.zip
- 解压
到这里,您可以将数据库的表视为文件夹,并且在每个文件夹中您可以看到原始数据。
但是当我打开文件夹时,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
我发现Person.Address
表格有689
页面。
那么这 38 个.BCP
文件是什么?
使用批量复制 (BCP) 实用程序
BACPAC
从数据库中导出文件中的数据。从文档:BACPAC
文件包含使用 BCP 的“本机”文件格式(二进制类型文件)导出的数据。表的数据只是跨多个文件导出,而不是一个大文件。如果您查看.bcp
不同表中的文件,您会发现文件大小会有所不同,大小的偏差与具有不同数据宽度的不同行的变化有关。例如,当我创建bacpac
AdventureWorks 时,.bcp
文件的Purchasing.PurchaseOrderDetail
范围从 39kb 到 62kb。BCP(因此
BACPAC
生成)不会像标准备份那样通过复制数据页来备份数据,而是进行表级查询和导出。