patternsqlModerate
What are the .BCP files inside a .bacpak file?
Viewed 0 times
thefilewhatarebacpakbcpfilesinside
Problem
Diving on dba.stackexchange.com I found a nice answer that teach me how to open a
I gave it a try with the database
And there you go, you can see the tables of the database as folders and inside each folder you can see the raw data.
But when I open the folder
At the beginning I taught they were the pages in which the data are split. But those cannot be pages because they weight about
So I checked the number of pages with this query:
And I found out that the
So what are those 38
.bacpac file with File Explorer.I gave it a try with the database
AdventureWorks2008R2 and all I did was:- Save the database as
.bacpacfile
- Rename the file extension to
.zip
- Unzip it
And there you go, you can see the tables of the database as folders and inside each folder you can see the raw data.
But when I open the folder
Person.Address I see there are 38 files into it with extension .BCP.At the beginning I taught they were the pages in which the data are split. But those cannot be pages because they weight about
67KB. Pages should weight 8KB.So I checked the number of pages with this query:
-- 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.NameAnd I found out that the
Person.Address table has 689 pages.So what are those 38
.BCP files?Solution
The data in a
The bulk copy program utility (bcp) bulk copies data between an instance of Microsoft SQL Server and a data file in a user-specified format. The bcp utility can be used to import large numbers of new rows into SQL Server tables or to export data out of tables into data files.
BCP (and thus
BACPAC file is exported from the database using the Bulk Copy (BCP) Utility. From the docs:The bulk copy program utility (bcp) bulk copies data between an instance of Microsoft SQL Server and a data file in a user-specified format. The bcp utility can be used to import large numbers of new rows into SQL Server tables or to export data out of tables into data files.
BACPAC files contain data that is exported using BCP's "native" file format, which is a binary type file. The data for the table is simply exported across multiple files, rather than one big file. If you look through the .bcp files across different tables, you'll find that the file size will vary, with skew in size related to variation in different rows having different data width. For example, when I create a bacpac of AdventureWorks, the .bcp files for Purchasing.PurchaseOrderDetail range from 39kb to 62kb.BCP (and thus
BACPAC generation) does not back up data by copying data pages like a standard backup, but rather is doing table-level querying & exporting.Context
StackExchange Database Administrators Q#298113, answer score: 11
Revisions (0)
No revisions yet.