如果我从具有(大量记录)的表中删除现有的分区方案/函数会发生什么?

Gow*_*thy -4 sql-server partitioning sql-server-2016

我有几个关于分区的问题。我打算将现有的分区方案/函数放入table1,然后将新的分区方案/函数指向table1. 我知道如何继续这个过程,但在此之前,我想对以下问题提出一些建议/答案:

  1. 如果我删除旧的/现有的分区方案/功能以及表中的数据,旧partition.ndf文件中的数据会发生什么?它们会被删除或修改吗?

  2. 如果我删除旧的/现有的分区方案/功能,表中有数据,表中的数据会发生什么?会不会有记录丢失?

Eri*_*ing 29

您不能删除正在使用的分区方案或函数。

USE tempdb

CREATE PARTITION FUNCTION yourmom ( INT )
    AS RANGE LEFT FOR VALUES ( 10, 20, 30, 40, 50 );

CREATE PARTITION SCHEME yourdad
    AS PARTITION yourmom
    ALL TO  ([PRIMARY]);

CREATE TABLE dbo.yourauntdebbie
(
    id INT,
    whatever VARCHAR(50)
) ON yourdad (id);
Run Code Online (Sandbox Code Playgroud)

甚至没有添加任何数据。

DROP PARTITION FUNCTION yourmom;

DROP PARTITION SCHEME yourdad;
Run Code Online (Sandbox Code Playgroud)

第一个错误:

消息 7706,级别 16,状态 1,第 17 行 一个或多个分区方案正在使用分区函数“yourmom”。

第二个错误:

消息 7717,级别 16,状态 1,第 19 行 分区方案“yourdad”当前正用于对一个或多个表进行分区。

让我们创建一个索引并添加一些数据,这样您就不会认为我疯了。

CREATE CLUSTERED INDEX ix_whatever ON dbo.yourauntdebbie (id) ON yourdad (id)

INSERT dbo.yourauntdebbie WITH (TABLOCK) (id, whatever )
SELECT TOP 1000 n, REPLICATE('A', n % 50)
FROM (SELECT ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT) AS n
        FROM sys.messages AS m) AS x
Run Code Online (Sandbox Code Playgroud)

现在,让我们从分区方案中重建聚簇索引。

CREATE CLUSTERED INDEX ix_whatever ON dbo.yourauntdebbie (id)  WITH (DROP_EXISTING = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我们可以放弃这个计划;

DROP PARTITION SCHEME yourdad;
Run Code Online (Sandbox Code Playgroud)

删除函数:

DROP PARTITION FUNCTION yourmom;
Run Code Online (Sandbox Code Playgroud)

仍然选择 1000 行:

SELECT *
FROM dbo.yourauntdebbie AS y
Run Code Online (Sandbox Code Playgroud)

然后收拾桌子。

DROP TABLE dbo.yourauntdebbie
Run Code Online (Sandbox Code Playgroud)