热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GBase8sALTERFRAGMENT语句DETACH子句

DETACH子句使用ALTERFRAGMENTONTABLE语句的DETACH子句以将表分片从分布方案拆离,并将这些内容放入新的未分片表中。此子句在ALTERFRAGMENTONI

DETACH 子句

使用 ALTER FRAGMENT ON TABLE 语句的 DETACH 子句以将表分片从分布方案拆离,并将这些内容放入新的未分片表中。

此子句在 ALTER FRAGMENT ON INDEX 语句中无效。

有关分布方案的说明,请参阅 FRAGMENT BY 子句 。

DETACH 子句


元素

描述

限制

语法

fragment

包含要拆离的表分片的分片或 dbspace 的名称。

执行时必须存在。 对于列表或范围区间分片, PARTITION 关键字必须产生 fragment

标识符

new_table

执行 ALTER FRAGMENT 语句后产生的未分片表的名称。

执行前必须存在

标识符

用法

执行 DETACH 子句而生成的新表不会从最初的表继承任何索引或约束。只保留数据值。

类似地,新表不从最初的表继承任何特权。而是具有任何新表都有的缺省特权。关于缺省表级别特权的进一步信息,请参阅 表级权限 中的 GRANT 语句。

DETACH 子句无法应用到以下具有任一属性的表中:

l 定义了 ROWID 列

l 定义了一列或队列为参考约束的主键

l 表中定义了 Enterprise Replication 复制

l 具有拆离索引(即,存储分布方案的索引与表的分片策略不同)

如果省略 PARTITION 关键字,那么分片的名称就是存储分片的 dbspace 的名称。

在以下示例中,系统生成的范围区间分片 sys_pt1 从表 T1 拆离并放置到新的未分片表 detacht1 中:

ALTER FRAGMENT ON TABLE T1 DETACH PARTITION sys_pt1 detacht1;  

下一示例为从表 T2 拆离了列表分片 part2 并将其数据放置到新的未分片表 detacht2 中:

ALTER FRAGMENT ON TABLE T2 DETACH PARTITION part2 detacht2;

DETACH 操作后的分布统计信息

某些 ALTER FRAGMENT . . . DETACH 操作可能导致数据库服务器更新初始表的索引结构。当在这种情况下重建索引时,数据库服务器也将重新计算相关联列的分布方案,并且当其为拆离分片的表设置查询计划时这些统计信息可用于查询优化器:

l 对于在 ALTER FRAGMENT ... DETACH 自动重建 B-tree 索引的索引的列(或列的集合),重新计算的列分布统计信息相当于在 HIGH 模式下 UPDATE STATISTICS 语句创建的分布。

l 如果重建索引不是 B-tree 索引,对应自动重新计算的分布统计信息由 UPDATE STATISTIC 语句在 LOW 模式下创建。

如果启用更新列分布统计信息的自动模式,而且来自正在拆离分片的表具有分片级别分布统计信息,那么数据库服务器使用拆离的分片的统计信息作为新表的分布统计信息。数据库服务器也合并驻留分片数据分布统计信息以计算初始表的新表分布统计信息,并会将结果存储在 sysdistrib 系统目录表中。新表的分布统计信息的注册和旧表的表分布统计的重新计算都在后台运行。

有关在现有表中创建索引或约束时自动生成统计分布的语句的其他信息,请参阅自动计算分布统计信息中的 CREATE INDEX 语句的描述。

在 DETACH 操作中使用 ONLINE 关键字

ONLINE 关键字指示数据库服务器内部提交 ALTER FRAGMENT ... DETACH 工作,如果没有错误那么在要拆离分片的表上放置意向互斥锁而不是互斥锁。互斥锁可应用在从拆离分片创建的表上。

您只能对使用范围区间分片结构的表使用 ALTER FRAGMENT ONLINE ON TABLE 语句的 DETACH 选项。

使用范围区间存储分布方案的表具有两种类型的分片:

range 分片,由 CREATE TABLE 或 ALTER TABLE 语句的 FRAGMENT BY 或 PARTITION BY 子句的用户定义

interval 分片,如果具有超出过渡分片值上限(最后一个范围分片)的分片键值的行,那么数据库服务器在 INSERT 和 UPDATE 操作中自动生成该分片。

ONLINE DETACH 操作中只能拆离一个区间分片。

如果已拆离的区间分片不是最后一个分片,那么数据库服务器修改系统生成的遵循分片列表以匹配活表中它们的新的 sysfragments.evalpos 值的拆离分片的名称。在重命名此分片的操作中,当 sysfragments 系统目录正在用新的 partition 名称更新时,在分片上放置互斥锁(并且在 ALTER FRAGMENT DETACH 操作过程中,为在分片列表中变更初始位置的任何分片使用新 evalpos 值)。

活表上所有的索引必须与该表具有相同的分片结构。(即,任何索引必须可连接)由于这个原因,如果此表有主键约束或其它参考约束,那么建议您首先创建为该约束连接索引,然后使用 ALTER TABLE 语句添加该约束。(缺省情况下,主键约束的系统创建索引和其它已拆离的参考约束。)

如果有会话正在访问要拆离的同一分区,建议您声明 SET LOCK MODE TO WAIT 语句来获得保护非互斥存取错误足够的时间。

其它应用于 DETACH 选项的限制同样适用于 ONLINE DETACH 操作。有关这些限制,请参阅 对 ALTER FRAGMENT 语句的限制 和 DROP 子句。

ALTER FRAGMENT ONLINE ... DETACH 的示例

以下 SQL 语句定义了一个分片表 employee ,它使用范围区间存储分布方案,在列 emp_id(也是分片键)上有一个唯一索引 employee_id_idx 在列 dept_id 上有另一个索引。

CREATE TABLE employee (emp_id INTEGER, name CHAR(32), dept_id CHAR(2),

        mgr_id INTEGER, ssn CHAR(12))

        FRAGMENT BY RANGE (emp_id)

        INTERVAL (100) STORE IN (dbs1, dbs2, dbs3, dbs4)

        PARTITION p0 VALUES <200 IN dbs1,

        PARTITION p1 VALUES <400 IN dbs2;

CREATE UNIQUE INDEX employee_id_idx ON employee(emp_id);

CREATE INDEX employee_dept_idx ON employee(dept_id);

        

INSERT INTO employee VALUES (401, "Susan", "DV", 101, "123-45-6789");

INSERT INTO employee VALUES (601, "David", "QA", 104, "987-65-4321");

最后两条语句使用超出过渡分片上限的分片键值插入了行,这导致数据库服务器生成了两个新区间分片,以致于生成包含四个分片的分片列表:

Fragments in surviving table before ALTER FRAGMENT ONLINE:

p0     VALUES <200         - range fragment

p1     VALUES <400         - range fragment (transition fragment)

sys_p2 VALUES >= 400 AND VALUES <500 - interval fragment

sys_p4 VALUES >= 600 AND VALUES <700 - interval fragment

以下语句返回了错误,因为指定的要拆离的分片是范围分片(分片存储的行的分片键值低于过渡值 400)。只有区间分片才能联机拆离。

ALTER FRAGMENT ONLINE ON TABLE employee

DETACH PARTITION p0 employee3;

以下语句成功运行,并创建了新表 employee3 以存储已拆离的分片中的数据。

ALTER FRAGMENT ONLINE ON TABLE employee

DETACH PARTITION sys_p2 employee3;

      

如果有并行的会话访问 sys_p2 ,请将锁定模式设置为 WAIT (提交的 ONLINE DETACH 操作要满足的秒数)以保护非互斥访问错误:

SET LOCK MODE TO WAIT 300;

ALTER FRAGMENT ONLINE ON TABLE employee DETACH PARTITION sys_p2 employee3;

        

Fragments in surviving table after ALTER FRAGMENT ONLINE:

p0     VALUES <200                   - range fragment

p1     VALUES <400                   - range fragment

sys_p4 VALUES >= 600 AND VALUES <700 - interval fragment.

使用 BYTE 和 TEXT 列拆离

如果 DETACH 子句指定包含 BYTE 或 TEXT 数据类型的简单大对象的表的第一个分片,那么数据库服务器会锁定该表中每个分片的 blobspace 。要拆离该表的其它分片,那么请只锁定指定分片的 blobspaces ,而不是所有分片的 blobspaces ,如果此分片不是第一个那么需要较少的锁。

从受保护的表拆离

如果 DETACH 子句指定安全策略保护的表执行成功的话,数据库服务器会创建受相同安全策略保护的表,并具有相同行安全标签的 IDSSECURITYLABEL 列,和相同受保护的列集合作为初始表。IDSSECURITYLABEL 列有 NOT NULL 约束。只有持有 DBSECADM 角色的用户可以引用 ALTER FRAGMENT 语句中受保护的表。

生成未分片表的拆离

以下示例使用了已分片为两个 dbspace dbsp1 和 dbsp2 的表 cur_acct

ALTER FRAGMENT ON TABLE cur_acct DETACH dbsp2 accounts;

此示例将 dbsp2 从 cur_acct 的分布方案拆离,并将这些行放入一个新表 accounts 中。表 accounts 现在具有与 cur_acct 相同的结构(列名、列数、数据类型等),但表 accounts 不包含表 cur_acct 中的任何索引和约束。这两个表现在都未分片的。以下示例显示了一个包含三个分片的表:

ALTER FRAGMENT ON TABLE bus_acct DETACH dbsp3 cli_acct;

此语句将 dbsp3 从 bus_acct 的分布方案拆离,并将这些行放入一个新表 cli_acct 中。表 cli_acct 现在具有与 bus_acct 相同的结构(列名、列数、数据类型等),但表 cli_acct 不包含表 bus_acct 的任何索引和约束。表 cli_acct 是一个未分片表,但表 bus_acct 仍是一个分片表。

 


推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射)
    提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射) ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
author-avatar
林淑芬若纯嘉友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有