【问题标题】:How can i delete a partition fuction on sql如何在sql中删除分区函数
【发布时间】:2019-10-13 06:11:21
【问题描述】:

所以我得到了存储 3 年 '17 (corrupt)、'18(corrupt)、'19 的 ETL:

STG_tables:从 3 个不同的数据库导入数据并将其导出到

DWH_tables:这是存储所有历史信息的关系模式。这里只对表和字段进行规范化和参数化,使它们适应开发的逻辑模型,而没有应用业务规则。

DIM_tables:最后,在 Dimensional Fase 中,应用业务规则并针对查询优化表和索引,因为这是分析工具会攻击的地方。

我有两种类型的重装:

每日重新加载:此作业负责执行执行数据仓库每日增量加载所需的 SSIS 包。它只加载维度Fase中大表的最后一个分区(对应当前年份)。

完全重新加载:加载整整 3 年(这个不工作)

这不是我做的,我有 0 个技术文档,所以我只是想弄清楚它是如何工作的,我的想法是,一旦我开始完全重新加载,数据就会恢复。

我在 STG_fase 上遇到错误:

删除表 DWH_PROD.DWH_XX; DROP TABLE ... ':' 分区函数 'pfPetitions' 正在一个或多个分区方案中使用。'。错误的可能原因:查询有问题,属性“ResultSet”设置不正确,参数设置不正确或连接建立不正确。

我不知道如何删除这个分区,所以我可以重新创建它 并且找不到“ResultSet”属性,请帮忙

USE DB;
GO

DROP TABLE DWH_PROD.DWH_ALBARANES_TARIFA;
DROP TABLE DWH_PROD.DWH_PETICIONES;
DROP TABLE DWH_PROD.DWH_SOLICITUDES;
DROP TABLE DWH_PROD.DWH_RESULTADOS;
DROP TABLE DWH_PROD.DWH_INCIDENCIAS;

-------i delete code so the text is not so big------
Here there are all the creation of the drop tables above

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_ALBARANES_TARIFA')
    CREATE TABLE DWH_PROD.DWH_ALBARANES_TARIFA (
    );

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_INCIDENCIAS')
    CREATE TABLE DWH_PROD.DWH_INCIDENCIAS (
    );

IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'pfPeticiones')
    DROP PARTITION FUNCTION pfPeticiones;

CREATE PARTITION FUNCTION pfPeticiones (DATE)
AS RANGE RIGHT FOR VALUES 
('2017-01-01', '2018-01-01', '2019-01-01');

IF EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'psPeticiones')
    DROP PARTITION SCHEME psPeticiones;

CREATE PARTITION SCHEME psPeticiones
AS PARTITION pfPeticiones 
ALL TO ([Primary]);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_PETICIONES')
    CREATE TABLE DWH_PROD.DWH_PETICIONES (
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_SOLICITUDES')
    CREATE TABLE DWH_PROD.DWH_SOLICITUDES (
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_RESULTADOS')
    CREATE TABLE DWH_PROD.DWH_RESULTADOS (
    ) ON psPeticiones(FEC_PETICION);

【问题讨论】:

  • 主要错误是The partition function 'pfPetitions' is being used in one or more partition schemes.你必须删除所有与此功能相关的分区方案
  • 有几件事,您的错误引用函数 pfPetitions 但是您的脚本 sn-p 显示分区函数 psPeticiones。也许是拼写错误?否则,脚本会翻转函数和模式的删除。将 drop partition scheme 语句移到 drop partition function 语句之前。一般来说,您希望在模式之前创建函数,但在函数之前删除模式。
  • 另外,我建议(如果有空间)在运行脚本之前先重命名现有表。这样就可以创建一组新的表,您可以测试您的全部负载。然后,一旦您确定一切都解决了,您就可以删除原始表格。但是,如果由于某种原因出现问题并且您需要时间来弄清楚发生了什么,您可以将原始表格移回并让人们暂时使用它。 (有2019年的数据总比没有数据好)

标签: sql sql-server visual-studio ssis etl


【解决方案1】:

您需要执行一些操作才能删除分区功能:

  1. 删除或移动(即,如果您有堆,则在 PRIMARY 上创建聚集索引)所有使用分区架构的表。
  2. 删除分区架构。
  3. 删除分区函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多