如何删除分区及分区函数

NOVZMR 2013-10-22 03:29:16
因为新版本的SQLSERVER是精简版,要附加数据库时发现附加不了,因为之前的数据库有做过分区,所以想把分区函数删除掉。
使用命令drop PARTITION FUNCTION productfunction执行,
提示“消息 7706,级别 16,状态 1,第 2 行
一个或多个分区方案正在使用分区函数 'productfunction'。”
...全文
346 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-10-22
  • 打赏
  • 举报
回复
有分区函数会影响数据库附加? 用数据库备份-恢复呢? 或升级SQL Server为企业版.
LongRui888 2013-10-22
  • 打赏
  • 举报
回复
你用这个查询一下,你要删除的分区函数,是否还有其他的索引和表在用:




select t.name as '表名',
       i.type_desc as '索引类型',
       case when is_primary_key = 1 then '主键'
            else '非主键'
       end as '键',
       
       ds.name as '分区方案名称',
       ds.type_desc '对象类型',
       
       case when ds.is_default = 1 then '默认文件组'
            else '非默认文件组'
       end as '是否默认文件组',
       
       pf.name '分区函数',
       pf.type_desc '分区函数类型',
       pf.fanout '函数创建的分区数',
       case when pf.boundary_value_on_right =1
                 then '边界值包含在边界的right区域'
            when pf.boundary_value_on_right = 0
                 then '边界值包含在边界值的left区域'
       end as '边界说明', 
             
       prv.boundary_id as '边界id',
       tp.name AS '边界值的数据类型',
       prv.value '边界值'
       
from sys.tables t
inner join sys.indexes i
	    on i.object_id = t.object_id
	    
inner join sys.data_spaces ds
        on ds.data_space_id = i.data_space_id
        
inner join sys.partition_schemes ps
        on ds.data_space_id = ps.data_space_id

inner join sys.partition_functions pf
        on pf.function_id = ps.function_id

inner join sys.partition_range_values prv
        on prv.function_id = pf.function_id
        
inner join sys.partition_parameters pp
        on pp.function_id = prv.function_id
           and pp.parameter_id = prv.parameter_id

inner join sys.types tp
        on tp.system_type_id = pp.system_type_id
           and tp.user_type_id = pp.user_type_id
where 1=1
      --i.object_id = 213575799  and
      --i.index_id = 1
LongRui888 2013-10-22
  • 打赏
  • 举报
回复
之所以报错,应该是有其他的分区表,或者是索引,也用了这个productfunction分区函数。
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
假设你创建的步骤是这样的: 1、CREATE PARTITION FUNCTION PF1(INT) AS RANGE LEFT FOR VALUES (1, 2, 3, 4) 2、CREATE PARTITION SCHEME PS1 AS PARTITION PF1 ALL TO ([PRIMARY]) 3、CREATE CLUSTERED INDEX CIDX_X ON X(col1) ON PS1(col1) 删除的步骤应该是这样的: 1、DROP INDEX CIDX_X on X 2、CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY] 3、DROP PARTITION SCHEME PS1 4、DROP PARTITION FUNCTION PF1 5、DROP INDEX CIDX_X1 ON X
NOVZMR 2013-10-22
  • 打赏
  • 举报
回复
那分区函数还是删不了
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
那新建个分区方案然后把现有分区移过去再试试
NOVZMR 2013-10-22
  • 打赏
  • 举报
回复
已经合并过了,再用drop就是上面的提示
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
用ALTER PARTITION FUNCTION 先合并所有分区,然后再试试drop

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧